Rev 22416 | Rev 22476 | 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.ArrayList;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.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();}UserRole userRole1 = new UserRole();userRole1.setRoleType(RoleType.RETAILER);userRole1.setUserId(saholicUserAccount.getUser_id());try {userRoleRepository.persist(userRole1);} catch (ProfitMandiBusinessException e) {e.printStackTrace();}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);Set<String> emailIds = new HashSet<>();for(Map<String, String> map : maps){if(map.containsKey("registeredEmail1")){emailIds.add(map.get("registeredEmail1"));}}List<String> foundEmailIds = new ArrayList<>();if(!emailIds.isEmpty()){foundEmailIds = userRepository.selectEmailIdsByEmailIds(emailIds);}emailIds.removeAll(foundEmailIds);for(Map<String, String> map : maps){if(map.containsKey("registeredEmail1") && emailIds.contains(map.get("registeredEmail1"))){User 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(0);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 = new Retailer();retailer.setActive(true);retailer.setFofo(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();retailerAddress.setCity(map.containsKey("city") ? map.get("city") : "");retailerAddress.setCountry("India");retailerAddress.setEnabled(true);retailerAddress.setLandmark("");retailerAddress.setLine1(map.containsKey("line1") ? map.get("line1") : "");retailerAddress.setLine2(map.containsKey("line2") ? map.get("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("state") ? map.get("state") : "");retailerAddress.setRetaierId(retailer.getId());addressRepository.persist(retailerAddress);RetailerRegisteredAddress retailerRegisteredAddress = new RetailerRegisteredAddress();retailerRegisteredAddress.setAddressId(retailerAddress.getId());retailerRegisteredAddress.setRetailerId(retailer.getId());retailerRegisteredAddressRepository.persist(retailerRegisteredAddress);UserAccounts 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);if(foundRetailer){LOGGER.info("\n\n\n****retailer found\n\n\n");PrivateDealUser privateDealUser = privateDealUserRepository.selectById(saholicUser.getId());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 = privateDealUserRepository.selectById(saholicUser.getId());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());privateDealUser = new PrivateDealUser();privateDealUser.setActive(true);privateDealUser.setBulkShipmentAmountLimit(50000);privateDealUser.setId(saholicUser.getId());privateDealUser.setCounterId(counterId);privateDealUserRepository.persist(privateDealUser);}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);}}}}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(){}}