Rev 22716 | Rev 22868 | Go to most recent revision | View as "text/plain" | Blame | Compare with Previous | Last modification | View Log | RSS feed
package com.spice.profitmandi.dao.util;import java.io.File;import java.io.IOException;import java.lang.reflect.Type;import java.time.LocalDateTime;import java.util.HashMap;import java.util.HashSet;import java.util.List;import java.util.Map;import java.util.Set;import org.apache.commons.io.FileUtils;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Component;import com.google.gson.Gson;import com.google.gson.reflect.TypeToken;import com.spice.profitmandi.common.enumuration.ContentType;import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;import com.spice.profitmandi.common.model.ProfitMandiConstants;import com.spice.profitmandi.common.util.FileUtil;import com.spice.profitmandi.dao.entity.dtr.Document;import com.spice.profitmandi.dao.entity.dtr.Retailer;import com.spice.profitmandi.dao.entity.dtr.RetailerRegisteredAddress;import com.spice.profitmandi.dao.entity.dtr.User;import com.spice.profitmandi.dao.entity.dtr.UserAccounts;import com.spice.profitmandi.dao.entity.dtr.UserRole;import com.spice.profitmandi.dao.entity.user.Address;import com.spice.profitmandi.dao.entity.user.Cart;import com.spice.profitmandi.dao.entity.user.Counter;import com.spice.profitmandi.dao.entity.user.PrivateDealUser;import com.spice.profitmandi.dao.entity.user.PrivateDealUserAddressId;import com.spice.profitmandi.dao.entity.user.PrivateDealUserAddressMapping;import com.spice.profitmandi.dao.enumuration.dtr.AccountType;import com.spice.profitmandi.dao.enumuration.dtr.RetailerType;import com.spice.profitmandi.dao.enumuration.dtr.RoleType;import com.spice.profitmandi.dao.repository.dtr.DocumentRepository;import com.spice.profitmandi.dao.repository.dtr.Mongo;import com.spice.profitmandi.dao.repository.dtr.RetailerRegisteredAddressRepository;import com.spice.profitmandi.dao.repository.dtr.RetailerRepository;import com.spice.profitmandi.dao.repository.dtr.UserAccountRepository;import com.spice.profitmandi.dao.repository.dtr.UserRepository;import com.spice.profitmandi.dao.repository.dtr.UserRoleRepository;import com.spice.profitmandi.dao.repository.user.AddressRepository;import com.spice.profitmandi.dao.repository.user.CartRepository;import com.spice.profitmandi.dao.repository.user.CounterRepository;import com.spice.profitmandi.dao.repository.user.PrivateDealUserAddressMappingRepository;import com.spice.profitmandi.dao.repository.user.PrivateDealUserRepository;import in.shop2020.model.v1.user.CartStatus;@Componentpublic class MigrationUtil {@AutowiredDocumentRepository documentRepository;@AutowiredUserRepository userRepository;@Autowiredcom.spice.profitmandi.dao.repository.user.UserRepository userUserRepository;@AutowiredCartRepository cartRepository;@AutowiredUserAccountRepository userAccountRepository;@AutowiredRetailerRepository retailerRepository;@AutowiredUserRoleRepository userRoleRepository;@AutowiredAddressRepository addressRepository;@AutowiredRetailerRegisteredAddressRepository retailerRegisteredAddressRepository;@AutowiredPrivateDealUserRepository privateDealUserRepository;@AutowiredPrivateDealUserAddressMappingRepository privateDealUserAddressMappingRepository;@AutowiredCounterRepository counterRepository;@AutowiredMongo mongoClient;private static final Logger LOGGER = LoggerFactory.getLogger(MigrationUtil.class);private List<Map<String, String>> getMongoFofoDoc(){String fofoFormsJsonString = mongoClient.getFofoFormsJsonString();LOGGER.info("mongoFofoDoc {}", fofoFormsJsonString);Gson gson = new Gson();Type paths = new TypeToken<List<Map<String, String>>>(){}.getType();List<Map<String, String>> maps = gson.fromJson(fofoFormsJsonString, paths);return maps;}public void migrateMongoDocToDocumentId() throws ProfitMandiBusinessException{List<Map<String, String>> maps = this.getMongoFofoDoc();Map<Integer, Map<String, Integer>> fofoIdPathMap = new HashMap<>();for(Map<String, String> map : maps){int id = 0;Map<String, Integer> pathMap = new HashMap<>();for(Map.Entry<String, String> entry : map.entrySet()){if(entry.getKey().equals("_id")){id = (int)Double.parseDouble(entry.getValue());}if(entry.getValue().startsWith("/hsps-docs/")){Document document = new Document();try{File srcFile = new File(entry.getValue());String destFileName = entry.getValue().substring(entry.getValue().lastIndexOf('/') + 1);String destFilePath = "/uploads/";File destFile = new File(destFilePath + destFileName);FileUtils.copyFile(srcFile, destFile);ContentType contentType = FileUtil.detectFileType(srcFile);document.setContentType(contentType);document.setName(destFileName);document.setPath(destFilePath);document.setPersisted(true);document.setSize(srcFile.length());documentRepository.persist(document);pathMap.put(entry.getKey(), document.getId());}catch(IOException ioException) {LOGGER.info("IOException occurred");}}}if(!pathMap.isEmpty()){fofoIdPathMap.put(id, pathMap);}}LOGGER.info("fofoIdPathMap {}", fofoIdPathMap);for(Map.Entry<Integer, Map<String, Integer>> entry : fofoIdPathMap.entrySet()){mongoClient.updateColumnsById(entry.getValue(), entry.getKey());}}public void migrateUserToRetailer(){Set<Integer> retailersAdded = new HashSet<>();List<Integer> userIds = userRepository.selectIdAll();List<UserAccounts> saholicUserAccounts = userAccountRepository.selectAllSaholicByUserIds(new HashSet<>(userIds));for(UserAccounts saholicUserAccount : saholicUserAccounts){int retailerId = Integer.parseInt(saholicUserAccount.getAccount_key());if(retailerRepository.isExistById(retailerId)) {LOGGER.info("Already reatiler with retailerId {}", retailerId);continue;}if(!retailersAdded.add(retailerId)){LOGGER.info("Duplicate retailerId {}", retailerId);continue;}Retailer retailer = new Retailer();try {retailer.setId(retailerId);retailer.setMigrated(true);retailerRepository.persist(retailer);} catch (ProfitMandiBusinessException e) {LOGGER.info("Error occured while commiting retailer");e.printStackTrace();}if(!userRoleRepository.isExistByUserIdAndType(saholicUserAccount.getUser_id(), RoleType.RETAILER)){UserRole userRole1 = new UserRole();userRole1.setRoleType(RoleType.RETAILER);userRole1.setUserId(saholicUserAccount.getUser_id());try {userRoleRepository.persist(userRole1);} catch (ProfitMandiBusinessException e) {e.printStackTrace();}}if(!userRoleRepository.isExistByUserIdAndType(saholicUserAccount.getUser_id(), RoleType.USER)){UserRole userRole2 = new UserRole();userRole2.setRoleType(RoleType.USER);userRole2.setUserId(saholicUserAccount.getUser_id());try {userRoleRepository.persist(userRole2);} catch (ProfitMandiBusinessException e) {e.printStackTrace();}}LOGGER.info("Retailer migrated {}", retailerId);}}public void migrateMongoDocToRetailer() throws ProfitMandiBusinessException{List<Map<String, String>> maps = this.getMongoFofoDoc();//LOGGER.info("mongoFofoDocs {}", maps);for(Map<String, String> map : maps){if(map.containsKey("registeredEmail1")){User user = null;try{user = userRepository.selectByEmailId(map.get("registeredEmail1"));}catch(ProfitMandiBusinessException profitMandiBusinessException){user = new User();user.setFirstName("");user.setLastName("");user.setCity(map.containsKey("city") ? map.get("city") : "");user.setPinCode(Integer.valueOf(map.containsKey("pincode") ? map.get("pincode") : ""));user.setMobileNumber(map.containsKey("mobile") ? map.get("mobile") : "");user.setEmailId(map.get("registeredEmail1"));user.setUsername(map.get("registeredEmail1"));user.setPassword("");user.setMobile_verified(false);user.setReferral_url("");user.setGroup_id(1);user.setStatus(1);user.setActivated(false);user.setCreateTimestamp(LocalDateTime.now());user.setUpdateTimestamp(LocalDateTime.now());userRepository.persist(user);}//in.shop2020.model.v1.user.User saholicUser = Utils.createSaholicUser(map.get("registeredEmail1"));com.spice.profitmandi.dao.entity.user.User saholicUser = null;boolean foundRetailer = false;saholicUser = userUserRepository.selectByEmailId(user.getEmailId());if(saholicUser == null){Cart cart = new Cart();cart.setCartStatus(CartStatus.ACTIVE);cartRepository.persist(cart);saholicUser = new com.spice.profitmandi.dao.entity.user.User();saholicUser.setEmailId(user.getEmailId());saholicUser.setName(map.containsKey("registeredBusinessName") ? map.get("registeredBusinessName") : "");saholicUser.setActiveCartId(cart.getId());userUserRepository.persist(saholicUser);}else{foundRetailer = true;}Retailer retailer = null;try{retailer = retailerRepository.selectById(saholicUser.getId());}catch(ProfitMandiBusinessException profitMandiBusinessException){retailer = new Retailer();retailer.setActive(true);retailer.setId(saholicUser.getId());retailer.setMigrated(true);retailer.setName(map.containsKey("registeredBusinessName") ? map.get("registeredBusinessName") : "");retailer.setType(RetailerType.GSTIN);retailerRepository.persist(retailer);}Address retailerAddress = new Address();List<Address> retailerAddresses = addressRepository.selectAll(retailer.getId(), 1, 100);if(retailerAddresses.isEmpty()){retailerAddress.setCity(map.containsKey(ProfitMandiConstants.CITY) ? map.get(ProfitMandiConstants.CITY) : "");retailerAddress.setCountry("India");retailerAddress.setEnabled(true);retailerAddress.setLandmark("");retailerAddress.setLine1(map.containsKey(ProfitMandiConstants.LINE1) ? map.get(ProfitMandiConstants.LINE1) : "");retailerAddress.setLine2(map.containsKey(ProfitMandiConstants.LINE2) ? map.get(ProfitMandiConstants.LINE2) : "");retailerAddress.setName(map.containsKey("registeredBusinessName") ? map.get("registeredBusinessName") : "");retailerAddress.setPhoneNumber(map.containsKey("mobile") ? map.get("mobile") : "");retailerAddress.setPinCode(map.containsKey("pincode") ? map.get("pincode") : "");retailerAddress.setState(map.containsKey(ProfitMandiConstants.STATE) ? map.get(ProfitMandiConstants.STATE) : "");retailerAddress.setRetaierId(retailer.getId());addressRepository.persist(retailerAddress);}RetailerRegisteredAddress retailerRegisteredAddress = null;try{retailerRegisteredAddress = retailerRegisteredAddressRepository.selectByAddressIdAndRetailerId(retailerAddress.getId(), retailer.getId());}catch(ProfitMandiBusinessException profitMandiBusinessException){retailerRegisteredAddress = new RetailerRegisteredAddress();retailerRegisteredAddress.setAddressId(retailerAddress.getId());retailerRegisteredAddress.setRetailerId(retailer.getId());retailerRegisteredAddressRepository.persist(retailerRegisteredAddress);}UserAccounts saholicUserAccounts = null;try{saholicUserAccounts = userAccountRepository.selectByUserIdRetailerIdAccountType(user.getId(), retailer.getId(), AccountType.saholic);}catch(ProfitMandiBusinessException profitMandiBusinessException){saholicUserAccounts = new UserAccounts();saholicUserAccounts.setAccount_key(String.valueOf(saholicUser.getId()));saholicUserAccounts.setAccount_type(AccountType.saholic);saholicUserAccounts.setUser_id(user.getId());userAccountRepository.persist(saholicUserAccounts);UserAccounts cartUserAccounts = new UserAccounts();cartUserAccounts.setAccount_key(String.valueOf(saholicUser.getActiveCartId()));cartUserAccounts.setAccount_type(AccountType.cartId);cartUserAccounts.setUser_id(user.getId());userAccountRepository.persist(cartUserAccounts);}UserRole userRole = null;try{userRole = userRoleRepository.selectByUserIdAndRoleType(user.getId(), RoleType.USER);}catch(ProfitMandiBusinessException profitMandiBusinessException){userRole = new UserRole();userRole.setRoleType(RoleType.USER);userRole.setUserId(user.getId());userRoleRepository.persist(userRole);}UserRole retailerRole = null;try{retailerRole = userRoleRepository.selectByUserIdAndRoleType(user.getId(), RoleType.RETAILER);}catch(ProfitMandiBusinessException profitMandiBusinessException){retailerRole = new UserRole();retailerRole.setRoleType(RoleType.RETAILER);retailerRole.setUserId(user.getId());userRoleRepository.persist(retailerRole);}UserRole fofoRole = null;try{fofoRole = userRoleRepository.selectByUserIdAndRoleType(user.getId(), RoleType.FOFO);}catch(ProfitMandiBusinessException profitMandiBusinessException){fofoRole = new UserRole();fofoRole.setRoleType(RoleType.FOFO);fofoRole.setUserId(user.getId());userRoleRepository.persist(fofoRole);}if(foundRetailer){LOGGER.info("\n\n\n****retailer found\n\n\n");PrivateDealUser privateDealUser = null;try{privateDealUser = privateDealUserRepository.selectById(saholicUser.getId());}catch(ProfitMandiBusinessException profitMandiBusinessException){LOGGER.error("PrivateDealUser not found : ", profitMandiBusinessException);}//= privateDealUserRepository.selectById(saholicUser.getId());if(privateDealUser == null){Integer counterId = this.createCounter(user.getEmailId(), map.get("gst"), user.getMobileNumber(), retailer.getName(), retailerAddress.getId());this.createPrivateDealUser(saholicUser.getId(), counterId);}else{if(privateDealUser.getCounterId() == null){Integer counterId = this.createCounter(user.getEmailId(), map.get("gst"), user.getMobileNumber(), retailer.getName(), retailerAddress.getId());privateDealUser.setCounterId(counterId);privateDealUserRepository.persist(privateDealUser);}}}else{LOGGER.info("retailer not found");//gst number intergration with counterInteger counterId = this.createCounter(user.getEmailId(), map.get("gst"), user.getMobileNumber(), retailer.getName(), retailerAddress.getId());PrivateDealUser privateDealUser = null;try{privateDealUser = privateDealUserRepository.selectById(saholicUser.getId());}catch(ProfitMandiBusinessException profitMandiBusinessException){LOGGER.error("PrivateDealUser not found : ", profitMandiBusinessException);}/* //= privateDealUserRepository.selectById(saholicUser.getId());if(privateDealUser == null){int counterId = this.createCounter(user.getEmailId(), map.get("gst"), user.getMobileNumber(), retailer.getName(), retailerAddress.getId());this.createPrivateDealUser(saholicUser.getId(), counterId);}*/if(privateDealUser != null){//LOGGER.info("PrivateDealUser found with id [{}]", saholicUser.getId());privateDealUser.setCounterId(counterId);privateDealUserRepository.update(privateDealUser);}else{LOGGER.info("PrivateDealUser not found with id [{}]", saholicUser.getId());this.createPrivateDealUser(saholicUser.getId(), counterId);}PrivateDealUserAddressMapping privateDealUserAddressMapping = new PrivateDealUserAddressMapping();PrivateDealUserAddressId privateDealUserAddressId = new PrivateDealUserAddressId();privateDealUserAddressId.setUserId(retailer.getId());privateDealUserAddressId.setAddressId(retailerAddress.getId());privateDealUserAddressMapping.setId(privateDealUserAddressId);privateDealUserAddressMappingRepository.persist(privateDealUserAddressMapping);saholicUser.setAddressId(retailerAddress.getId());userUserRepository.persist(saholicUser);}}}}//Specifically set isFofo to true that has to be used by old systemprivate void createPrivateDealUser(int retailerId, int counterId){PrivateDealUser privateDealUser = new PrivateDealUser();privateDealUser.setActive(true);privateDealUser.setBulkShipmentAmountLimit(50000);privateDealUser.setId(retailerId);privateDealUser.setCounterId(counterId);//privateDealUser.setFofo(true);privateDealUserRepository.persist(privateDealUser);}private Integer createCounter(String emailId, String gstNumber, String mobileNumber, String name, int addressId){if(gstNumber != null && !gstNumber.isEmpty()){Counter counter = new Counter();counter.setEmailId(emailId);counter.setGstin(gstNumber);counter.setMobileNumber(mobileNumber);counter.setName(name);counter.setAddressId(addressId);counterRepository.persist(counter);return counter.getId();}else{return null;}}public void migratePrivateDealToRetailer(){}}