package com.interplug.qcast.biz.user; import com.interplug.qcast.biz.user.dto.*; import com.interplug.qcast.util.InterfaceQsp; import io.micrometer.common.util.StringUtils; import java.util.List; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.HttpMethod; import org.springframework.stereotype.Service; @Slf4j @Service @RequiredArgsConstructor public class UserService { private final UserMapper userMapper; private final InterfaceQsp interfaceQsp; @Value("${qsp.master-store-batch-url}") private String qspMasterStoreBatchUrl; /** * 판매점 정보 저장 * * @param storeReq * @return * @throws Exception */ public int setStoreSave(StoreRequest storeReq) throws Exception { String prevSaleStoreLevel = userMapper.getStoreLevel(storeReq); // 등록된 판매점 레벨 String saleStoreLevel = StringUtils.isEmpty(storeReq.getSaleStoreLevel()) ? "" : storeReq.getSaleStoreLevel(); int resultCnt = userMapper.setStoreSave(storeReq); userMapper.setStoreInfoSave(storeReq); userMapper.setStoreSapCdSave(storeReq); userMapper.setStoreNorthModuleSave(storeReq); log.info("setStoreSave ==================> ", prevSaleStoreLevel + ", " + saleStoreLevel); // 신규 판매점 이거나 1차판매점에서 하위판매점으로 변경된 경우 가격 등록 if (prevSaleStoreLevel == null || (!prevSaleStoreLevel.equals(saleStoreLevel) && "1".equals(prevSaleStoreLevel))) { // 판매점에 등록된 가격 삭제 후 가격 패턴의 아이템 등록 log.info("setStoreSave prevSaleStoreLevel =================> 시작"); int deleteCnt = userMapper.deleteStoreUnitPrice(storeReq); int priceCnt = userMapper.setStoreUnitPrice(storeReq); log.info( "setStoreSave prevSaleStoreLevel ==================> 종료" + deleteCnt + ", " + priceCnt); } return resultCnt; } /** * 사용자 정보저장 * * @param userReqList * @return * @throws Exception */ public int setUserSave(List userReqList) throws Exception { int resultCnt = 0; if (!userReqList.isEmpty()) { for (UserRequest userReq : userReqList) { resultCnt += userMapper.setUserSave(userReq); } } return resultCnt; } /** * 판매점 sap 정보 저장 * * @param storeReq * @return * @throws Exception */ public int setStoreSapCdSave(StoreRequest storeReq) throws Exception { return userMapper.setStoreSapCdSave(storeReq); } /** * @param storeList * @throws Exception */ public void setStoreBatch(List storeList) throws Exception { // 판매점 동기화 for (StoreRequest storeRequest : storeList) { try { String prevSaleStoreLevel = userMapper.getStoreLevel(storeRequest); // 등록된 판매점 레벨 String saleStoreLevel = StringUtils.isEmpty(storeRequest.getSaleStoreLevel()) ? "" : storeRequest.getSaleStoreLevel(); // 판매점의 우편번호 등록시 하이픈이 없다면 셋제짜리 이후에 하이픈 조합으로 등록처리(2026.04.30 이병곤 과장 추가 요청) String zipNo = storeRequest.getZipNo(); if (!StringUtils.isEmpty(zipNo) && !zipNo.contains("-") && zipNo.length() >= 4) { storeRequest.setZipNo(zipNo.substring(0, 3) + "-" + zipNo.substring(3)); } userMapper.setStoreSave(storeRequest); userMapper.setStoreInfoSave(storeRequest); userMapper.setStoreSapCdSave(storeRequest); userMapper.setStoreNorthModuleSave(storeRequest); log.info("setStoreSave ==================> ", prevSaleStoreLevel + ", " + saleStoreLevel); // 신규 판매점 이거나 1차판매점에서 하위판매점으로 변경된 경우 가격 등록 if (prevSaleStoreLevel == null || (!prevSaleStoreLevel.equals(saleStoreLevel) && "1".equals(prevSaleStoreLevel))) { // 판매점에 등록된 가격 삭제 후 가격 패턴의 아이템 등록 log.info("setStoreSave prevSaleStoreLevel =================> 시작"); int deleteCnt = userMapper.deleteStoreUnitPrice(storeRequest); int priceCnt = userMapper.setStoreUnitPrice(storeRequest); log.info( "setStoreSave prevSaleStoreLevel ==================> 종료" + deleteCnt + ", " + priceCnt); } } catch (Exception e) { log.error(e.getMessage()); } } } public void setUserBatch(List userList) throws Exception { // 사용자 동기화 for (UserRequest userRequest : userList) { try { userMapper.setUserSave(userRequest); } catch (Exception e) { log.error(e.getMessage()); } } } /** * 영업사원 정보 동기화 * * @param businessChargerSyncList 영업사원 목록 * @return * @throws Exception */ public int setBusinessChargerSyncSave(List businessChargerSyncList) throws Exception { int cnt = 0; userMapper.deleteBusinessChargerSync(); for (BusinessChargerSyncResponse businessChargerSyncData : businessChargerSyncList) { cnt += userMapper.setBusinessChargerSyncSave(businessChargerSyncData); cnt += userMapper.setBusinessChargerInfoSyncSave(businessChargerSyncData); } return cnt; } /** * 관리자 유저 정보 동기화 * * @param adminUserSyncList 관리자 유저 목록 * @return * @throws Exception */ public int setAdminUserSyncSave(List adminUserSyncList) throws Exception { int cnt = 0; for (AdminUserSyncResponse adminUserSyncData : adminUserSyncList) { if ("1".equals(adminUserSyncData.getDelFlg())) { cnt += userMapper.deleteAdminUserSync(adminUserSyncData); } else { cnt += userMapper.setAdminUserSyncSave(adminUserSyncData); } } return cnt; } /** * 전체 판매점,사용자 정보 동기화 * * @return * @throws Exception */ public void setAllStoreAdditional(StoreSyncResquest storeSyncResquest) throws Exception { StoreSyncResponse storeSyncResponse = interfaceQsp.callApiData( HttpMethod.GET, qspMasterStoreBatchUrl, storeSyncResquest, StoreSyncResponse.class); List storeList = storeSyncResponse.getStoreList(); for (StoreRequest storeRequest : storeList) { String prevSaleStoreLevel = userMapper.getStoreLevel(storeRequest); // 등록된 판매점 레벨 String saleStoreLevel = StringUtils.isEmpty(storeRequest.getSaleStoreLevel()) ? "" : storeRequest.getSaleStoreLevel(); userMapper.setStoreSave(storeRequest); userMapper.setStoreInfoSave(storeRequest); userMapper.setStoreSapCdSave(storeRequest); userMapper.setStoreNorthModuleSave(storeRequest); log.info("setStoreSave ==================> ", prevSaleStoreLevel + ", " + saleStoreLevel); // 신규 판매점 이거나 1차판매점에서 하위판매점으로 변경된 경우 가격 등록 if (prevSaleStoreLevel == null || (!prevSaleStoreLevel.equals(saleStoreLevel) && "1".equals(prevSaleStoreLevel))) { // 판매점에 등록된 가격 삭제 후 가격 패턴의 아이템 등록 log.info("setStoreSave prevSaleStoreLevel =================> 시작"); int deleteCnt = userMapper.deleteStoreUnitPrice(storeRequest); int priceCnt = userMapper.setStoreUnitPrice(storeRequest); log.info( "setStoreSave prevSaleStoreLevel ==================> 종료" + deleteCnt + ", " + priceCnt); } } List userList = storeSyncResponse.getUserList(); for (UserRequest userRequest : userList) { userMapper.setUserSave(userRequest); } } }