com.poscoict.license.service.ManagementService.java Source code

Java tutorial

Introduction

Here is the source code for com.poscoict.license.service.ManagementService.java

Source

package com.poscoict.license.service;

import java.io.File;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;

import javax.servlet.http.HttpSession;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DuplicateKeyException;
import org.springframework.stereotype.Service;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.DefaultTransactionDefinition;
import org.springframework.web.multipart.MultipartFile;

import com.poscoict.license.consts.Consts;
import com.poscoict.license.dao.ManagementDao;
import com.poscoict.license.exception.UserException;
import com.poscoict.license.security.CustomUserDetails;
import com.poscoict.license.util.LmsUtil;
import com.poscoict.license.vo.ContractPersonInfo;
import com.poscoict.license.vo.ContractProductInfo;
import com.poscoict.license.vo.FileList;
import com.poscoict.license.vo.UserInfo;
import com.poscoict.license.vo.UserPermission;

@Service
public class ManagementService extends LmsUtil {
    @Autowired
    private ManagementDao managementDao;

    @Autowired
    private PlatformTransactionManager transactionManager;

    private Logger logger = LoggerFactory.getLogger(getClass());

    public ArrayList<UserInfo> getClientList(String search, String select, HttpSession session) {
        logger.info("getClientList: search= " + search + " select= " + select);
        CustomUserDetails userDetails = (CustomUserDetails) session.getAttribute("userDetails");
        boolean mode = false;
        String companyCode = "";

        if (userDetails.getAuthorities().toString().contains(Consts.rolePrefix + Consts.USERLV_ORDER_COMPANY)) {
            mode = true;
            companyCode = managementDao.getSubcontract((String) session.getAttribute("USER_NO"));
            System.out.println("USER_TYPE-ORDER_COMPANY " + companyCode);
        }

        ArrayList<UserInfo> list = null;
        if (search != null && select != null) {
            list = (ArrayList<UserInfo>) managementDao.getClientSearch(search, select, mode, companyCode);
        } else {
            list = (ArrayList<UserInfo>) managementDao.getClientInfo(mode, companyCode);
        }

        return list;
    }

    public ArrayList<Map<String, Object>> getProgressList(String subCategory, String search, String select,
            HttpSession session) {
        logger.info("getClientList: search= " + search + " select= " + select);
        CustomUserDetails userDetails = (CustomUserDetails) session.getAttribute("userDetails");
        boolean mode = false;
        String companyCode = "";

        if (userDetails.getAuthorities().toString().contains(Consts.rolePrefix + Consts.USERLV_ORDER_COMPANY)) {
            mode = true;
            companyCode = managementDao.getSubcontract((String) session.getAttribute("USER_NO"));
            System.out.println("USER_TYPE-ORDER_COMPANY " + companyCode);
        }

        ArrayList<Map<String, Object>> list = null;
        if (search != null && select != null) {
            list = (ArrayList<Map<String, Object>>) managementDao.getProgressSearch(search, select, mode,
                    companyCode);
        } else {
            list = (ArrayList<Map<String, Object>>) managementDao.getProgressInfo(subCategory, mode, companyCode);
        }

        return list;
    }

    public ArrayList<Map<String, Object>> getProgressCategoryCounting(HttpSession session) {
        logger.info("getProgressCategoryCounting");

        CustomUserDetails userDetails = (CustomUserDetails) session.getAttribute("userDetails");
        boolean mode = false;
        String companyCode = "";

        if (userDetails.getAuthorities().toString().contains(Consts.rolePrefix + Consts.USERLV_ADMIN)) {
            companyCode = Consts.POSCO_ICT_CODE;
        } else {
            companyCode = managementDao.getCompanyCode((String) session.getAttribute("USER_NO"));
            mode = true;
        }

        ArrayList<Map<String, Object>> list = (ArrayList<Map<String, Object>>) managementDao
                .getProgressCategoryCounting(mode, companyCode);
        return list;
    }

    public Map<String, Object> getFileList() {
        logger.info("getFileList");
        Map<String, Object> productList = new HashMap<String, Object>();

        //  
        List<Map<String, Object>> list = managementDao.getGuestPackageInfo();
        productList.put("product", list);

        // 
        if (list.size() > 0) {
            for (Map<String, Object> map : list) {
                if (!map.get("FILE_CATEGORY").equals("etc")) {
                    List<Map<String, Object>> patchList = managementDao.getPatchInfo((String) map.get("OBJECT_ID"));
                    productList.put((String) map.get("OBJECT_ID"), patchList);
                }
            }
        }
        // ?
        //        List<Map<String, Object>> etcList = managementDao.getGuestEtcFile();
        //        productList.put("etcList", etcList);
        return productList;
    }

    public Map<String, Object> getLicenseList(HttpSession session) {
        logger.info("getLicenseList");
        String USER_NO = (String) session.getAttribute("USER_NO");
        Map<String, Object> productList = new HashMap<String, Object>();

        //  
        List<Map<String, Object>> list = managementDao.getLicenseInfo(USER_NO);
        productList.put("product", list);

        // 
        if (list.size() > 0) {
            for (Map<String, Object> map : list) {
                String fileId = (String) map.get("PRODUCT_FILE_ID");

                List<Map<String, Object>> patchList = managementDao.getPatchInfo(fileId);
                productList.put(fileId, patchList);
            }
        }
        // ?
        List<Map<String, Object>> etcList = managementDao.getUserEtcFile(USER_NO);
        productList.put("etcList", etcList);

        System.out.println("getLicenseList success");
        return productList;
    }

    public Map<String, Object> getUserInfo(String userNo) {
        logger.info("getUserInfo: userNo= " + userNo);
        UserInfo user = managementDao.getClientInfoMore(userNo);
        ArrayList<Map<String, Object>> company = (ArrayList<Map<String, Object>>) managementDao.getCompanyList();
        ArrayList<Map<String, Object>> product = (ArrayList<Map<String, Object>>) managementDao
                .getProductInfo(userNo);
        ArrayList<Map<String, Object>> file = (ArrayList<Map<String, Object>>) managementDao.getFileAllList();
        ArrayList<Map<String, Object>> etcUserFile = (ArrayList<Map<String, Object>>) managementDao
                .getUserEtcFile3(userNo);

        Map<String, Object> map = new HashMap<String, Object>();
        map.put("user", user);
        map.put("company", company);
        map.put("product", product);
        map.put("file", file);
        map.put("etcUserFile", etcUserFile);
        return map;
    }

    public Map<String, Object> getProgressUserInfo(String objectId) {
        logger.info("getProgressUserInfo: objectId= " + objectId);

        Map<String, Object> user = managementDao.getProgressInfoMore(objectId);
        user.put("ORDER_STATUS_TEXT",
                Consts.ProgressStatus.valueOf((String) user.get("ORDER_STATUS")).getProgressStatusToString());
        ArrayList<Map<String, Object>> file = (ArrayList<Map<String, Object>>) managementDao.getFileAllList();
        ArrayList<Map<String, Object>> comment = (ArrayList<Map<String, Object>>) managementDao
                .getCommentList(objectId);
        ArrayList<Map<String, Object>> log = (ArrayList<Map<String, Object>>) managementDao
                .getProgressContractLog(objectId);

        if (log.size() > 0) {
            for (int i = 0; i < log.size(); i++) {
                log.get(i).put("ORDER_STATUS_TEXT", Consts.ProgressStatus
                        .valueOf((String) log.get(i).get("ORDER_STATUS")).getProgressStatusToString());
            }
        }

        Map<String, Object> map = new HashMap<String, Object>();
        map.put("user", user);
        map.put("file", file);
        map.put("comment", comment);
        map.put("log", log);
        return map;
    }

    public Map<String, Object> fileUploadForm(String userNo, String mode) {
        logger.info("fileUploadForm");
        // ? 
        ArrayList<FileList> list = (ArrayList<FileList>) managementDao.getFileList();
        // ?  
        //        ArrayList<Map<String, Object>> folders = (ArrayList<Map<String, Object>>) managementDao.getFolderCategory(userNo);
        // 0: uCUBE, 1: GlueMaster, 2: GlueFramework, 3: PosBee, 4: etc
        String folder = "";
        if (mode.equals("0"))
            folder = "uCUBE";
        else if (mode.equals("1"))
            folder = "GlueMaster";
        else if (mode.equals("2"))
            folder = "GlueFramework";
        else if (mode.equals("3"))
            folder = "PosBee";
        else if (mode.equals("4"))
            folder = "etc";
        else if (mode.equals("5"))
            folder = "GlueMobile";

        Map<String, Object> map = new HashMap<String, Object>();
        map.put("list", list);
        map.put("folder", folder);

        return map;
    }

    public Map<String, Object> newContractForm() {
        logger.info("newContractForm");
        // ?   getOrderCompanyList
        ArrayList<Map<String, Object>> file = (ArrayList<Map<String, Object>>) managementDao.getFileAllList();
        ArrayList<Map<String, Object>> company = (ArrayList<Map<String, Object>>) managementDao
                .getOrderCompanyList();

        Map<String, Object> map = new HashMap<String, Object>();
        map.put("file", file);
        map.put("company", company);

        return map;
    }

    public ArrayList<Map<String, Object>> progressContractForm() {
        logger.info("newContractForm");
        //  
        return (ArrayList<Map<String, Object>>) managementDao.getFileAllList();
    }

    public void addProgressContract(String userName, String projectName, String userAddress, String managerName,
            String officePhon, String celPhon, String email, String startDate, String product, String comment,
            HttpSession session) {
        CustomUserDetails userDetails = (CustomUserDetails) session.getAttribute("userDetails");
        String companyCode = "";

        if (userDetails.getAuthorities().toString().contains(Consts.rolePrefix + Consts.USERLV_ADMIN))
            companyCode = Consts.POSCO_ICT_CODE;
        else
            companyCode = managementDao.getCompanyCode((String) session.getAttribute("USER_NO"));

        String objectId = "pc_" + attachFileDateFormat();
        objectId += UUID.randomUUID().toString().replaceAll("-", "").substring(0, 12);

        TransactionStatus status = this.transactionManager.getTransaction(new DefaultTransactionDefinition());

        try {
            //
            managementDao.addProgressContract(objectId, userName, projectName, managerName, officePhon, celPhon,
                    email, startDate.isEmpty() ? null : startDate, userAddress, product, companyCode,
                    Consts.ProgressStatus.valueOf("P").getProgressStatus(),
                    (String) session.getAttribute("USER_NO"));
            // 
            managementDao.insertProgressUserLog(objectId, null,
                    Consts.ProgressStatus.valueOf("P").getProgressStatus(),
                    (String) session.getAttribute("USER_NO"));
            if (!comment.isEmpty()) {
                managementDao.insertProgressComment(objectId, 1, comment.trim().replaceAll("\n", "<br>"),
                        (String) session.getAttribute("USER_NO"));
            }

            this.transactionManager.commit(status);
        } catch (DuplicateKeyException e) {
            this.transactionManager.rollback(status);
            logger.error("addProgressContract: ", e);
            throw new DuplicateKeyException(
                    " ?. ?? ? .");
        } catch (RuntimeException e) {
            this.transactionManager.rollback(status);
            logger.error("addProgressContract: ", e);
        }
    }

    public void modifyProgressInfo(String objectId, String userName, String projectName, String userAddress,
            String managerName, String officePhon, String celPhon, String email, String startDate, String product,
            String userNo) {
        TransactionStatus status = this.transactionManager.getTransaction(new DefaultTransactionDefinition());
        try {
            managementDao.modifyProgressInfo(objectId, userName, projectName, managerName, officePhon, celPhon,
                    email, startDate.isEmpty() ? null : startDate, userAddress, product, userNo);
            managementDao.insertProgressUserLog(objectId, null,
                    Consts.ProgressStatus.valueOf("M").getProgressStatus(), userNo);
            this.transactionManager.commit(status);
        } catch (DuplicateKeyException e) {
            this.transactionManager.rollback(status);
            logger.error("addProgressContract: ", e);
            throw new DuplicateKeyException(
                    " ?. ?? ? .");
        } catch (RuntimeException e) {
            this.transactionManager.rollback(status);
            logger.error("addProgressContract: ", e);
        }
    }

    public void insertComment(String objectId, String comment, String userNo) {
        int no = managementDao.getCommentCount(objectId);
        managementDao.insertProgressComment(objectId, no + 1, comment.trim().replaceAll("\n", "<br>"), userNo);
    }

    public void deleteComment(String objectId, String commentNo, String userNo) {
        managementDao.deleteComment(objectId, Integer.parseInt(commentNo), userNo);
    }

    // 
    public void modifyComment(String objectId, String commentNo, String comment, String userNo) {
        managementDao.modifyComment(objectId, Integer.parseInt(commentNo), comment.trim().replaceAll("\n", "<br>"),
                userNo);
    }

    public void changeUserStatus(String objectId, String uStatus, String userNo) {
        TransactionStatus status = this.transactionManager.getTransaction(new DefaultTransactionDefinition());
        try {
            managementDao.changeUserStatus(objectId, Consts.ProgressStatus.valueOf(uStatus).getProgressStatus(),
                    userNo);
            managementDao.insertProgressUserLog(objectId, null,
                    Consts.ProgressStatus.valueOf(uStatus).getProgressStatus(), userNo);
            this.transactionManager.commit(status);
        } catch (Exception e) {
            this.transactionManager.rollback(status);
            logger.error("changeUserStatus: ", e);
        }
    }

    @SuppressWarnings("unchecked")
    public void newContract(ContractPersonInfo per, ContractProductInfo pro, String[] etcFile, HttpSession session)
            throws UserException {
        logger.info("newContract");
        TransactionStatus status = this.transactionManager.getTransaction(new DefaultTransactionDefinition());
        try {
            System.out.println("company: " + per.getORDER_COMPANY_CODE());
            String licenseUpPath = Consts.LICENSE_FILE_HOME;

            String userNo = per.getUSER_NO();

            if (pro != null) {
                ArrayList<MultipartFile> upFileList = (ArrayList<MultipartFile>) pro.getFile();
                ArrayList<String> productList = (ArrayList<String>) pro.getPRODUCT_FILE_ID();
                ArrayList<String> licenseKeyList = (ArrayList<String>) pro.getLICENSE_KEY();
                ArrayList<String> quantityList = (ArrayList<String>) pro.getLICENSE_QUANTITY();
                ArrayList<String> fileCheckList = (ArrayList<String>) pro.getCHECKBOX();

                for (int i = 0; i < productList.size(); i++) {
                    String licensePath = "";

                    String licenseName = "";
                    String objectId = productList.get(i);
                    String licenseKey = licenseKeyList.get(i);
                    String quantity = quantityList.get(i);
                    String fileCheck = fileCheckList.get(i);
                    if (fileCheck.equals("false")) {
                        MultipartFile upFile = upFileList.get(i);
                        licenseName = upFile.getOriginalFilename(); // ???
                        logger.info("newContract: fileName= " + licenseName);
                        try {
                            File upfile = new File(licenseUpPath + userNo + File.separator + licenseName);

                            if (upfile.isFile())
                                throw new UserException(
                                        "???? . ??  .");

                            if (!upfile.exists())
                                upfile.mkdirs();

                            upFile.transferTo(upfile);
                            licensePath = upfile.getAbsolutePath();
                            logger.info("newContract: licensePath= " + licensePath);
                        } catch (IOException e) {
                            logger.error("newContract(File Upload Error): ", e);
                        }
                        // ?? 
                    }
                    managementDao.addLicenseInfo(userNo, licenseKey, objectId,
                            (String) session.getAttribute("USER_NO"), licensePath, licenseName, quantity);
                }
            }
            if (etcFile != null) {
                for (int i = 0; i < etcFile.length; i++) {
                    String etcId = etcFile[i];
                    managementDao.addUserEtcFileInfo(userNo, etcId, (String) session.getAttribute("USER_NO"));
                }
            }

            //  
            managementDao.addUser(per, (String) session.getAttribute("USER_NO"), passwordEncoder(userNo),
                    Consts.USERLV_PUBLIC);
            //   
            Map<String, Object> map = getClientPermission();
            String codes = (String) map.get("codes");
            String codeTypes = (String) map.get("codeTypes");
            int size = (Integer) map.get("size");

            logger.info("codes : " + codes);
            logger.info("codeTypes : " + codeTypes);
            logger.info("size : " + size);
            logger.info("userNo : " + userNo);

            managementDao.insert_user_permission(codes, codeTypes, userNo, size);

            // ??  ??
            if (!per.getPRODUCT_SETUP_DATE().isEmpty()) {
                managementDao.updateProductSetupDate(userNo, per.getPRODUCT_SETUP_DATE());
            }
            this.transactionManager.commit(status);
        } catch (DuplicateKeyException e) {
            this.transactionManager.rollback(status);
            logger.error("plusProduct: ", e);
            throw new DuplicateKeyException(
                    " ?. ?? ? .");
        } catch (RuntimeException e) {
            this.transactionManager.rollback(status);
            logger.error("plusProduct: ", e);
        }

        //        return "redirect:/management";
    }

    public Map<String, Object> getLicenseCertification(String userNo, String licenseFileName) {
        logger.info("getLicenseCertification: userNo= " + userNo + " licenseFileName= " + licenseFileName);
        return (Map<String, Object>) managementDao.getLicenseCertification(userNo, licenseFileName);
    }

    public Map<String, Object> getTechSupportCertificationInfo(String userNo, String productFileName)
            throws UserException {
        logger.info("getTechSupportCertificationInfo: " + productFileName);
        Map<String, Object> map = managementDao.getTechSupportCertificationInfo(userNo, productFileName);
        if (map.get("TECH_SUPPORT_DATE").equals("0")) {
            throw new UserException(
                    "? ? .  ?? ?.");
        }
        return map;
    }

    public Map<String, Object> getproductModifyForm(String userNo, String licenseKey) {
        logger.info("getproductModifyForm: userNo= " + userNo + " licenseKey= " + licenseKey);
        Map<String, Object> product = managementDao.getProductInfo2(userNo, licenseKey);
        ArrayList<Map<String, Object>> file = (ArrayList<Map<String, Object>>) managementDao.getFileAllList();
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("product", product);
        map.put("file", file);
        return map;
    }

    public void modifyProduct(String userNo, String licenseKey, String productFileId, String newLicenseKey,
            String licenseQuantity, String selectFile, String checkBox, MultipartFile file, HttpSession session)
            throws UserException {
        logger.info("modifyProduct: userNo= " + userNo + " PRODUCT_FILE_ID= " + productFileId);
        TransactionStatus status = this.transactionManager.getTransaction(new DefaultTransactionDefinition());
        String licenseUpPath = Consts.LICENSE_FILE_HOME;

        try {
            String oldLiscensePath = managementDao.getLicensePath2(licenseKey, userNo);
            managementDao.updateInstallFilName((String) session.getAttribute("USER_NO"), userNo, licenseKey);
            managementDao.updateProductInfo(userNo, newLicenseKey, productFileId, licenseQuantity,
                    (String) session.getAttribute("USER_NO"), licenseKey);
            if (selectFile.equals("change")) {
                String path = "";
                String licenseName = "";

                if (checkBox == null) {
                    MultipartFile upFile = file;
                    licenseName = upFile.getOriginalFilename(); // ???
                    try {

                        File upfile = new File(licenseUpPath + userNo + File.separator + licenseName);
                        if (upfile.isFile())
                            throw new UserException(
                                    "???? . ??  .");

                        if (!upfile.exists())
                            upfile.mkdirs();

                        upFile.transferTo(upfile);
                        path = upfile.getAbsolutePath();
                        logger.info("modifyProduct: upFileName= " + licenseName + " path= " + path);
                    } catch (IOException e) {
                        logger.error("modifyProduct(File Upload Error): ", e);
                    }
                }
                managementDao.updateLicenseInfo(userNo, licenseKey, licenseName, path,
                        (String) session.getAttribute("USER_NO"));

                // ?? ? 
                File oldLicenseFile = new File(oldLiscensePath);
                if (oldLicenseFile.exists())
                    oldLicenseFile.delete();
            }
            this.transactionManager.commit(status);
        } catch (DuplicateKeyException e) {
            this.transactionManager.rollback(status);
            logger.error("plusProduct: ", e);
            throw new DuplicateKeyException(
                    " ?. ?? ? .");
        } catch (RuntimeException e) {
            this.transactionManager.rollback(status);
            logger.error("plusProduct: ", e);
        }
    }

    public String deletePackage(String category, String objectId, HttpSession session) {
        logger.info("deletePakage: category= " + category + " objectId=" + objectId);
        String result = "";

        // , ?? ,    ? ? ? 
        if (category.equals("package")) {
            Map<String, Object> fileInfo = managementDao.getUseProduct(objectId);
            if (Integer.parseInt(fileInfo.get("CNT").toString()) > 0) {
                result = "N"; // ? ? ?  
            } else {
                CustomUserDetails userDetails = (CustomUserDetails) session.getAttribute("userDetails");
                if (!userDetails.getAuthorities().toString().contains(Consts.rolePrefix + Consts.USERLV_ADMIN)
                        && !userDetails.getUserNo().equals(fileInfo.get("R_CREATION_USER"))
                        && fileInfo.get("FILE_CATEGORY").equals("etc")) {
                    //   ?  ?  ?? ?  ?
                    result = "P";
                } else {
                    result = "Y";

                    ArrayList<String> filePath = new ArrayList<String>();
                    //  
                    filePath.add(managementDao.getFilePath(objectId));
                    //  
                    ArrayList<Map<String, Object>> patchPathList = (ArrayList<Map<String, Object>>) managementDao
                            .getDeletePatchPath(objectId);
                    if (patchPathList.size() > 0) {
                        for (Map<String, Object> map : patchPathList) {
                            filePath.add((String) map.get("PACKAGE_FILE_PATH"));
                        }
                    }

                    //   
                    managementDao.deleteProduct(objectId);
                    //   
                    managementDao.deletePatchFile2(objectId);

                    if (filePath.size() > 0) {
                        for (String path : filePath) {
                            logger.info("delete file path: " + path);
                            File file = new File(path);
                            if (file.exists() == true)
                                file.delete();
                        }
                    }
                }

            }
        } else { //  
            result = "Y";

            //  
            String patchPath = managementDao.getDeletePatchPath2(objectId);

            managementDao.deletePatchFile(objectId);
            if (patchPath != null) {
                logger.info("delete file path: " + patchPath);
                System.out.println("delete file path " + patchPath);
                File file = new File(patchPath);
                if (file.exists() == true)
                    file.delete();
            }
        }

        return result;
    }

    public void openPackage(String objectId, String flag, HttpSession session) throws UserException {
        Map<String, Object> fileInfo = managementDao.getUseProduct(objectId);
        CustomUserDetails userDetails = (CustomUserDetails) session.getAttribute("userDetails");
        if (!userDetails.getAuthorities().toString().contains(Consts.rolePrefix + Consts.USERLV_ADMIN)
                && !userDetails.getUserNo().equals(fileInfo.get("R_CREATION_USER"))
                && fileInfo.get("FILE_CATEGORY").equals("etc")) {
            throw new UserException(" ? .");
        }

        managementDao.updateOpenPackage(objectId, flag.equals("Y") ? "N" : "Y");
        logger.info("openPackage- objectId: " + objectId + " flag: " + (flag.equals("Y") ? "N" : "Y"));
    }

    public String modifyProfile(ContractPersonInfo info, String oldUserNo, String[] etcFile, HttpSession session) {
        logger.info("modifyProfile: oldUserNo= " + oldUserNo);
        logger.info("modifyProfile: etcFile= " + etcFile);
        TransactionStatus status = this.transactionManager.getTransaction(new DefaultTransactionDefinition());
        try {
            managementDao.updateProductSetupDate(oldUserNo,
                    info.getPRODUCT_SETUP_DATE().isEmpty() ? null : info.getPRODUCT_SETUP_DATE());
            managementDao.updateProfileInfo(info, oldUserNo, (String) session.getAttribute("USER_NO"));

            if (!info.getUSER_NO().equals(oldUserNo)) {
                System.out.println("update USER_NO");
                managementDao.updateLicenseUserNo(info.getUSER_NO(), oldUserNo,
                        (String) session.getAttribute("USER_NO"));
            }

            managementDao.deleteUserEtcFileInfo(oldUserNo);
            if (etcFile != null) {
                for (int i = 0; i < etcFile.length; i++) {
                    String objectId = etcFile[i];
                    managementDao.addUserEtcFileInfo(info.getUSER_NO(), objectId,
                            (String) session.getAttribute("USER_NO"));
                }
            }

            this.transactionManager.commit(status);
        } catch (DuplicateKeyException e) {
            this.transactionManager.rollback(status);
            logger.error("plusProduct: ", e);
            throw new DuplicateKeyException(
                    " ?. ?? ? .");
        } catch (RuntimeException e) {
            this.transactionManager.rollback(status);
            logger.error("plusProduct: ", e);
        }
        return info.getUSER_NO();
    }

    @SuppressWarnings("unchecked")
    public String plusProduct(ContractProductInfo info, String userNo, HttpSession session) throws UserException {
        logger.info("plusProduct: userNo= " + userNo);
        TransactionStatus status = this.transactionManager.getTransaction(new DefaultTransactionDefinition());
        try {
            String licenseUpPath = Consts.LICENSE_FILE_HOME;
            if (info != null) {
                ArrayList<MultipartFile> upFileList = (ArrayList<MultipartFile>) info.getFile();
                ArrayList<String> proIdList = (ArrayList<String>) info.getPRODUCT_FILE_ID();
                ArrayList<String> licenseKeyList = (ArrayList<String>) info.getLICENSE_KEY();
                ArrayList<String> quantityList = (ArrayList<String>) info.getLICENSE_QUANTITY();
                ArrayList<String> fileCheckList = (ArrayList<String>) info.getCHECKBOX();
                for (int i = 0; i < proIdList.size(); i++) {
                    String path = "";
                    String licenseName = ""; // ???

                    String objectId = proIdList.get(i);
                    String licenseKey = licenseKeyList.get(i);
                    String quantity = quantityList.get(i);
                    String fileCheck = fileCheckList.get(i);

                    if (fileCheck.equals("false")) {
                        try {
                            MultipartFile upFile = upFileList.get(i);
                            licenseName = upFile.getOriginalFilename(); // ???

                            File upfile = new File(licenseUpPath + userNo + File.separator + licenseName);
                            if (upfile.isFile())
                                throw new UserException(
                                        "???? . ??  .");

                            if (!upfile.exists())
                                upfile.mkdirs();

                            upFile.transferTo(upfile);
                            path = upfile.getAbsolutePath();
                            logger.info("plusProduct: upFileName= " + licenseName + " path= " + path);
                        } catch (IOException e) {
                            logger.error("plusProduct(File Upload Error): ", e);
                        }
                    }

                    // ?? 
                    managementDao.addLicenseInfo(userNo, licenseKey, objectId,
                            (String) session.getAttribute("USER_NO"), path, licenseName, quantity);
                }
            }
            this.transactionManager.commit(status);
        } catch (DuplicateKeyException e) {
            this.transactionManager.rollback(status);
            logger.error("plusProduct: ", e);
            throw new DuplicateKeyException(
                    " ?. ?? ? .");
        } catch (RuntimeException e) {
            this.transactionManager.rollback(status);
            logger.error("plusProduct: ", e);
        }

        return userNo;
    }

    public void destroyProduct(String userNo, String licenseKey) {
        logger.info("destroyProduct userNo: " + userNo + " licenseKey: " + licenseKey);
        String licensePath = managementDao.getLicensePath2(licenseKey, userNo);
        managementDao.destroyProduct(userNo, licenseKey);
        if (licensePath != null) {
            File file = new File(licensePath);
            if (file.exists())
                file.delete();
        }
    }

    public Map<String, Object> getPackageList(String menu) {
        // 0: uCUBE, 1: GlueMaster, 2: GlueFramework, 3: PosBee, 4: etc 
        Map<String, Object> map = new HashMap<String, Object>();
        switch (Integer.parseInt(menu)) {
        case 0:
            map.put("packageList", managementDao.getPackageList("uCUBE"));
            map.put("patchList", managementDao.getPatchList("uCUBE"));
            break;
        case 1:
            map.put("packageList", managementDao.getPackageList("GlueMaster"));
            map.put("patchList", managementDao.getPatchList("GlueMaster"));
            break;
        case 2:
            map.put("packageList", managementDao.getPackageList("GlueFramework"));
            map.put("patchList", managementDao.getPatchList("GlueFramework"));
            break;
        case 3:
            map.put("packageList", managementDao.getPackageList("PosBee"));
            map.put("patchList", managementDao.getPatchList("PosBee"));
            break;
        case 4:
            map.put("packageList", managementDao.getPackageList("etc"));
            break;
        case 5:
            map.put("packageList", managementDao.getPackageList("GlueMobile"));
            map.put("patchList", managementDao.getPatchList("GlueMobile"));
            break;
        }

        return map;
    }

    public List<Map<String, Object>> getOrderCompanyList() {
        return managementDao.getOrderCompanyList();
    }

    public String getVersionList(String packageName) {
        logger.debug("getVersionList- packageName: " + packageName);
        List<Map<String, Object>> temp = managementDao.getVersionList(packageName);
        String temp2 = "";
        if (temp.size() > 0) {
            for (int i = 0; i < temp.size(); i++) {
                if (i < temp.size() - 1)
                    temp2 += (String) temp.get(i).get("PACKAGE_VERSION") + ":";
                else
                    temp2 += (String) temp.get(i).get("PACKAGE_VERSION");
            }
        }

        return temp2;
    }

    public String addOrderCompany(ContractPersonInfo info, String admin) throws Exception {
        logger.debug("getVersionList- addCompany: " + info.getUSER_NO());
        TransactionStatus status = this.transactionManager.getTransaction(new DefaultTransactionDefinition());
        info.setPROJECT_NAME("");

        try {
            int cnt = managementDao.orderCompanyCount();
            String sortString = sortOrder(cnt + 1);
            managementDao.addOrderCompany(sortString, info.getUSER_NAME(), info.getUSER_NO(), admin);
            managementDao.addOrderCompanyInfo(info, passwordEncoder(info.getUSER_NO()), Consts.USERLV_ORDER_COMPANY,
                    admin);

            Map<String, Object> map = getOrderCompanyPermission();
            String codes = (String) map.get("codes");
            String codeTypes = (String) map.get("codeTypes");
            int size = (Integer) map.get("size");
            managementDao.insert_user_permission(codes, codeTypes, info.getUSER_NO(), size);

            this.transactionManager.commit(status);
        } catch (NullPointerException e) {
            this.transactionManager.rollback(status);
            logger.error("addCompany: ", e);
            throw new NullPointerException("?  - NullPointerException");
        } catch (DuplicateKeyException e) {
            this.transactionManager.rollback(status);
            logger.error("plusProduct: ", e);
            throw new DuplicateKeyException(
                    " ?. ?? ? .");
        } catch (Exception e) {
            this.transactionManager.rollback(status);
            logger.error("addCompany: ", e);
            throw new UserException("? ");
        }

        String msg = "(" + info.getUSER_NAME() + ") ?";
        return msg;
    }

    public Map<String, Object> getOrderCompanyInfo(String companyId) throws UnsupportedEncodingException {
        logger.debug("getOrderCompanyInfo: " + companyId);
        return managementDao.getOrderCompanyInfo(companyId);
    }

    public void modifyCompanyInfo(String userNo, String userName, String managerName, String userAddress,
            String managerOfficePhon, String managerCelPhon, String managerEmail, String oriUserNo)
            throws UserException {
        logger.debug("modifyCompanyInfo: " + oriUserNo);
        TransactionStatus status = this.transactionManager.getTransaction(new DefaultTransactionDefinition());
        try {
            managementDao.updateUserInfo(userNo, userName, managerName, userAddress, managerOfficePhon,
                    managerCelPhon, managerEmail, oriUserNo);
            managementDao.updateOrderCompanyInfo(userNo, userName, oriUserNo);
            this.transactionManager.commit(status);
        } catch (Exception e) {
            this.transactionManager.rollback(status);
            logger.error("modifyCompanyInfo", e);
            throw new UserException("   ");
        }
    }

    public void expireOrderCompany(HttpSession session, String companyId) {
        logger.debug("expire OrderCompany or user: " + companyId);
        managementDao.expireOrderCompany((String) session.getAttribute("USER_NO"), companyId);
    }

    public void progressUserExpire(String userNo, String objectId) {
        logger.debug("expire progressUser: " + objectId);
        managementDao.progressUserExpire(userNo, objectId);
        managementDao.insertProgressUserLog(objectId, null, Consts.ProgressStatus.valueOf("G").getProgressStatus(),
                userNo);
    }

    public void convertUser(ContractPersonInfo per, String[] etcFile, ContractProductInfo pro, String objectId,
            HttpSession session) throws UserException {
        newContract(per, pro, etcFile, session);
        changeUserStatus(objectId, Consts.ProgressStatus.F.getProgressStatus(),
                (String) session.getAttribute("USER_NO"));

        String newUserNo = per.getUSER_NO();
        managementDao.updateProgressUserNo(newUserNo, (String) session.getAttribute("USER_NO"), objectId);
    }

    public void upload(String folder, String packageVersion, MultipartFile file, String comment, String mode,
            HttpSession session) throws Exception {
        TransactionStatus status = transactionManager.getTransaction(new DefaultTransactionDefinition());
        try {
            String folderPath = getFolderPath(folder);
            String objectId = "";
            if (mode.equals("package")) {
                if (packageVersion != null && packageVersion != "") {
                    folderPath += packageVersion + File.separator;
                    objectId = "pk_" + attachFileDateFormat()
                            + UUID.randomUUID().toString().replaceAll("-", "").substring(0, 12);
                }
            } else {
                folderPath += packageVersion + File.separator + "patch" + File.separator;
                objectId = "pt_" + attachFileDateFormat()
                        + UUID.randomUUID().toString().replaceAll("-", "").substring(0, 12);
                ;
            }

            MultipartFile upFile = file;
            String fileName = null;
            if (upFile != null) {
                fileName = upFile.getOriginalFilename();
                System.out.println("up: fileName: " + fileName + " " + folderPath);
                if (mode.equals("package")) {
                    managementDao.addFileInfo(objectId, folder, folder.equals("etc") ? fileName : packageVersion,
                            fileName, comment.replaceAll("\n", "<br>"), folderPath + fileName,
                            (String) session.getAttribute("USER_NO"));
                } else {
                    String pObjectId = managementDao.getProductKey(folder, packageVersion);
                    managementDao.addPatchFileInfo(objectId, pObjectId, folder, packageVersion, fileName,
                            comment.replaceAll("\n", "<br>"), folderPath + fileName,
                            (String) session.getAttribute("USER_NO"));
                }
                try {
                    File ufile = new File(folderPath + fileName);

                    if (ufile.isFile()) {
                        logger.error("upload- Duplicate FileName: " + folderPath + fileName);
                        throw new UserException(
                                "???? . ??  .");
                    }

                    if (!ufile.exists()) {
                        ufile.mkdirs();
                    }
                    upFile.transferTo(ufile);
                } catch (IOException e) {
                    e.printStackTrace();
                    logger.error("packageUpload/patchUpload(File Upload Error): ", e);
                    throw new IOException();
                }
            }
            this.transactionManager.commit(status);
        } catch (DuplicateKeyException e) {
            this.transactionManager.rollback(status);
            logger.error("packageUpload/patchUpload(File Upload Error): ", e);
            throw new DuplicateKeyException(
                    " ?. ?? ? .");
        } catch (Exception e) {
            this.transactionManager.rollback(status);
            logger.error("packageUpload/patchUpload(File Upload Error): ", e);
            throw new Exception(e);
        }
    }

    public void initializationPassword(String userNo, HttpSession session) {
        logger.debug("initializationPassword user: " + userNo);
        managementDao.initializationPassword(passwordEncoder(userNo), (String) session.getAttribute("USER_NO"),
                userNo);
    }

    //   public void encodePassword(HttpSession session){
    //      logger.debug("initializationPassword Start");
    //      StandardPasswordEncoder encoder = new StandardPasswordEncoder();
    //      
    //      List<Map<String, Object>> userList = managementDao.getUserList();
    //      for(Map<String, Object> user: userList){
    //         managementDao.initializationPassword( encoder.encode((String)user.get("USER_PASSWORD")), (String)session.getAttribute("USER_NO"), (String)user.get("USER_NO"));
    //      }
    //   }

    public List<Map<String, Object>> getCustomUserList() {
        List<Map<String, Object>> userList = managementDao.getCustomUserList();
        return userList;
    }

    public void addCustomUser(HttpSession session, ContractPersonInfo userInfo, UserPermission userPermission)
            throws UserException {
        TransactionStatus status = transactionManager.getTransaction(new DefaultTransactionDefinition());
        try {
            userInfo.setPROJECT_NAME("CUSTOM USER");
            managementDao.addOrderCompanyInfo(userInfo, passwordEncoder(userInfo.getUSER_NO()),
                    Consts.USERLV_CUSTOM_USER, (String) session.getAttribute("USER_NO"));

            Map<String, Object> map = setPermissionCode(userPermission);
            String codes = (String) map.get("codes");
            String codeTypes = (String) map.get("codeTypes");
            int size = (Integer) map.get("size");
            managementDao.insert_user_permission(codes, codeTypes, userInfo.getUSER_NO(), size);

            this.transactionManager.commit(status);
        } catch (NullPointerException e) {
            this.transactionManager.rollback(status);
            logger.error("addCustomUser: ", e);
            throw new UserException("  ? ");
        } catch (Exception e) {
            this.transactionManager.rollback(status);
            logger.error("addCustomUser: ", e);
            throw new UserException("  ? ");
        }
    }

    public Map<String, Object> customUserInfo(String userNo) {
        UserInfo userInfo = managementDao.getClientInfoMore(userNo);
        UserPermission userPermission = getUserPermission(managementDao.getUserPermission(userNo));

        Map<String, Object> map = new HashMap<String, Object>();
        map.put("userInfo", userInfo);
        map.put("userPermission", userPermission);

        return map;
    }

    public String modifyCustomUser(String adminUser, String customUserNo, String mode, UserInfo userInfo,
            UserPermission userPermission) throws UserException {
        String userNo = "";
        if (mode.equals("info")) {
            userNo = userInfo.getUSER_NO().trim();

            // 16.11.08 17:37 
            logger.info("@@ userInfo : " + userInfo);
            logger.info("@@ adminUser : " + adminUser);
            logger.info("@@ customUserNo : " + customUserNo);

            managementDao.updateCustomUserInfo(userInfo, adminUser, customUserNo);
            logger.info("@@ passed");

        } else if (mode.equals("permission")) {
            userNo = customUserNo;
            TransactionStatus status = transactionManager.getTransaction(new DefaultTransactionDefinition());
            try {
                managementDao.deleteCustomUserPermission(customUserNo);

                Map<String, Object> map = setPermissionCode(userPermission);
                String codes = (String) map.get("codes");
                String codeTypes = (String) map.get("codeTypes");
                int size = (Integer) map.get("size");
                managementDao.insert_user_permission(codes, codeTypes, customUserNo, size);

                this.transactionManager.commit(status);
            } catch (Exception e) {
                this.transactionManager.rollback(status);
                logger.error("CustomUser Modify Permission FAIL: " + customUserNo, e);
                throw new UserException("   ");
            }
        }

        return userNo;
    }

    public UserPermission getUserPermission(List<Map<String, Object>> permissionList) {
        UserPermission userPermission = new UserPermission();

        for (Map<String, Object> map : permissionList) {
            if (map.get("CODE").equals(Consts.MENU_NOTICE))
                userPermission.setMENU_NOTICE(true);
            if (map.get("CODE").equals(Consts.FUNCTION_NOTICE_WRITE))
                userPermission.setFUNCTION_NOTICE_WRITE(true);

            if (map.get("CODE").equals(Consts.MENU_GLUE))
                userPermission.setMENU_GLUE(true);
            if (map.get("CODE").equals(Consts.FUNCTION_GLUE_ADMIN))
                userPermission.setFUNCTION_GLUE_ADMIN(true);
            if (map.get("CODE").equals(Consts.FUNCTION_GLUE_WRITE))
                userPermission.setFUNCTION_GLUE_WRITE(true);
            if (map.get("CODE").equals(Consts.FUNCTION_GLUE_WRITE_NOTICE))
                userPermission.setFUNCTION_GLUE_WRITE_NOTICE(true);
            if (map.get("CODE").equals(Consts.FUNCTION_GLUE_WRITE_QNA))
                userPermission.setFUNCTION_GLUE_WRITE_QNA(true);
            if (map.get("CODE").equals(Consts.FUNCTION_GLUE_REPLY_BOARD_QNA))
                userPermission.setFUNCTION_GLUE_REPLY_BOARD_QNA(true);
            if (map.get("CODE").equals(Consts.FUNCTION_GLUE_WRITE_FAQ))
                userPermission.setFUNCTION_GLUE_WRITE_FAQ(true);
            if (map.get("CODE").equals(Consts.FUNCTION_GLUE_WRITE_TECH))
                userPermission.setFUNCTION_GLUE_WRITE_TECH(true);
            if (map.get("CODE").equals(Consts.FUNCTION_GLUE_WRITE_OLDTECH))
                userPermission.setFUNCTION_GLUE_WRITE_OLDTECH(true);
            if (map.get("CODE").equals(Consts.FUNCTION_GLUE_REPLY))
                userPermission.setFUNCTION_GLUE_REPLY(true);

            if (map.get("CODE").equals(Consts.MENU_GLUEMASTER))
                userPermission.setMENU_GLUEMASTER(true);
            if (map.get("CODE").equals(Consts.FUNCTION_GLUEMASTER_ADMIN))
                userPermission.setFUNCTION_GLUEMASTER_ADMIN(true);
            if (map.get("CODE").equals(Consts.FUNCTION_GLUEMASTER_WRITE))
                userPermission.setFUNCTION_GLUEMASTER_WRITE(true);
            if (map.get("CODE").equals(Consts.FUNCTION_GLUEMASTER_WRITE_NOTICE))
                userPermission.setFUNCTION_GLUEMASTER_WRITE_NOTICE(true);
            if (map.get("CODE").equals(Consts.FUNCTION_GLUEMASTER_WRITE_QNA))
                userPermission.setFUNCTION_GLUEMASTER_WRITE_QNA(true);
            if (map.get("CODE").equals(Consts.FUNCTION_GLUEMASTER_REPLY_BOARD_QNA))
                userPermission.setFUNCTION_GLUEMASTER_REPLY_BOARD_QNA(true);
            if (map.get("CODE").equals(Consts.FUNCTION_GLUEMASTER_WRITE_FAQ))
                userPermission.setFUNCTION_GLUEMASTER_WRITE_FAQ(true);
            if (map.get("CODE").equals(Consts.FUNCTION_GLUEMASTER_WRITE_TECH))
                userPermission.setFUNCTION_GLUEMASTER_WRITE_TECH(true);
            if (map.get("CODE").equals(Consts.FUNCTION_GLUEMASTER_REPLY))
                userPermission.setFUNCTION_GLUEMASTER_REPLY(true);

            if (map.get("CODE").equals(Consts.MENU_GLUEMOBILE))
                userPermission.setMENU_GLUEMOBILE(true);
            if (map.get("CODE").equals(Consts.FUNCTION_GLUEMOBILE_ADMIN))
                userPermission.setFUNCTION_GLUEMOBILE_ADMIN(true);
            if (map.get("CODE").equals(Consts.FUNCTION_GLUEMOBILE_WRITE))
                userPermission.setFUNCTION_GLUEMOBILE_WRITE(true);
            if (map.get("CODE").equals(Consts.FUNCTION_GLUEMOBILE_WRITE_NOTICE))
                userPermission.setFUNCTION_GLUEMOBILE_WRITE_NOTICE(true);
            if (map.get("CODE").equals(Consts.FUNCTION_GLUEMOBILE_WRITE_QNA))
                userPermission.setFUNCTION_GLUEMOBILE_WRITE_QNA(true);
            if (map.get("CODE").equals(Consts.FUNCTION_GLUEMOBILE_REPLY_BOARD_QNA))
                userPermission.setFUNCTION_GLUEMOBILE_REPLY_BOARD_QNA(true);
            if (map.get("CODE").equals(Consts.FUNCTION_GLUEMOBILE_WRITE_FAQ))
                userPermission.setFUNCTION_GLUEMOBILE_WRITE_FAQ(true);
            if (map.get("CODE").equals(Consts.FUNCTION_GLUEMOBILE_WRITE_TECH))
                userPermission.setFUNCTION_GLUEMOBILE_WRITE_TECH(true);
            if (map.get("CODE").equals(Consts.FUNCTION_GLUEMOBILE_REPLY))
                userPermission.setFUNCTION_GLUEMOBILE_REPLY(true);

            if (map.get("CODE").equals(Consts.MENU_UCUBE))
                userPermission.setMENU_UCUBE(true);
            if (map.get("CODE").equals(Consts.FUNCTION_UCUBE_ADMIN))
                userPermission.setFUNCTION_UCUBE_ADMIN(true);
            if (map.get("CODE").equals(Consts.FUNCTION_UCUBE_WRITE))
                userPermission.setFUNCTION_UCUBE_WRITE(true);
            if (map.get("CODE").equals(Consts.FUNCTION_UCUBE_WRITE_NOTICE))
                userPermission.setFUNCTION_UCUBE_WRITE_NOTICE(true);
            if (map.get("CODE").equals(Consts.FUNCTION_UCUBE_WRITE_QNA))
                userPermission.setFUNCTION_UCUBE_WRITE_QNA(true);
            if (map.get("CODE").equals(Consts.FUNCTION_UCUBE_REPLY_BOARD_QNA))
                userPermission.setFUNCTION_UCUBE_REPLY_BOARD_QNA(true);
            if (map.get("CODE").equals(Consts.FUNCTION_UCUBE_WRITE_FAQ))
                userPermission.setFUNCTION_UCUBE_WRITE_FAQ(true);
            if (map.get("CODE").equals(Consts.FUNCTION_UCUBE_WRITE_TECH))
                userPermission.setFUNCTION_UCUBE_WRITE_TECH(true);
            if (map.get("CODE").equals(Consts.FUNCTION_UCUBE_REPLY))
                userPermission.setFUNCTION_UCUBE_REPLY(true);

            if (map.get("CODE").equals(Consts.MENU_POSBEE))
                userPermission.setMENU_POSBEE(true);
            if (map.get("CODE").equals(Consts.FUNCTION_POSBEE_ADMIN))
                userPermission.setFUNCTION_POSBEE_ADMIN(true);
            if (map.get("CODE").equals(Consts.FUNCTION_POSBEE_WRITE))
                userPermission.setFUNCTION_POSBEE_WRITE(true);
            if (map.get("CODE").equals(Consts.FUNCTION_POSBEE_WRITE_NOTICE))
                userPermission.setFUNCTION_POSBEE_WRITE_NOTICE(true);
            if (map.get("CODE").equals(Consts.FUNCTION_POSBEE_WRITE_QNA))
                userPermission.setFUNCTION_POSBEE_WRITE_QNA(true);
            if (map.get("CODE").equals(Consts.FUNCTION_POSBEE_REPLY_BOARD_QNA))
                userPermission.setFUNCTION_POSBEE_REPLY_BOARD_QNA(true);
            if (map.get("CODE").equals(Consts.FUNCTION_POSBEE_WRITE_FAQ))
                userPermission.setFUNCTION_POSBEE_WRITE_FAQ(true);
            if (map.get("CODE").equals(Consts.FUNCTION_POSBEE_WRITE_TECH))
                userPermission.setFUNCTION_POSBEE_WRITE_TECH(true);
            if (map.get("CODE").equals(Consts.FUNCTION_POSBEE_REPLY))
                userPermission.setFUNCTION_POSBEE_REPLY(true);

            if (map.get("CODE").equals(Consts.MENU_SOLUTION_UPLOAD))
                userPermission.setMENU_SOLUTION_UPLOAD(true);
            if (map.get("CODE").equals(Consts.FUNCTION_SOLUTION_UPLOAD_GLUE))
                userPermission.setFUNCTION_SOLUTION_UPLOAD_GLUE(true);
            if (map.get("CODE").equals(Consts.FUNCTION_SOLUTION_UPLOAD_GLUEMASTER))
                userPermission.setFUNCTION_SOLUTION_UPLOAD_GLUEMASTER(true);
            if (map.get("CODE").equals(Consts.FUNCTION_SOLUTION_UPLOAD_UCUBE))
                userPermission.setFUNCTION_SOLUTION_UPLOAD_UCUBE(true);
            if (map.get("CODE").equals(Consts.FUNCTION_SOLUTION_UPLOAD_POSBEE))
                userPermission.setFUNCTION_SOLUTION_UPLOAD_POSBEE(true);
            if (map.get("CODE").equals(Consts.FUNCTION_SOLUTION_UPLOAD_ETC))
                userPermission.setFUNCTION_SOLUTION_UPLOAD_ETC(true);
            if (map.get("CODE").equals(Consts.FUNCTION_SOLUTION_UPLOAD_ORDER_COMPANY))
                userPermission.setFUNCTION_SOLUTION_UPLOAD_ORDER_COMPANY(true);
            if (map.get("CODE").equals(Consts.FUNCTION_SOLUTION_UPLOAD_CUSTOM_USER))
                userPermission.setFUNCTION_SOLUTION_UPLOAD_CUSTOM_USER(true);
            if (map.get("CODE").equals(Consts.FUNCTION_SOLUTION_UPLOAD_GLUEMOBILE))
                userPermission.setFUNCTION_SOLUTION_UPLOAD_GLUEMOBILE(true);

            if (map.get("CODE").equals(Consts.MENU_PRESENTATION))
                userPermission.setMENU_PRESENTATION(true);
            if (map.get("CODE").equals(Consts.MENU_GUEST_PACKAGE_DOWNLOAD))
                userPermission.setMENU_GUEST_PACKAGE_DOWNLOAD(true);
            if (map.get("CODE").equals(Consts.MENU_USER_PACKAGE_DOWNLOAD))
                userPermission.setMENU_USER_PACKAGE_DOWNLOAD(true);

            if (map.get("CODE").equals(Consts.MENU_MANAGEMENT))
                userPermission.setMENU_MANAGEMENT(true);
            if (map.get("CODE").equals(Consts.SUB_MENU_MANAGEMENT_COMPLETE))
                userPermission.setSUB_MENU_MANAGEMENT_COMPLETE(true);
            if (map.get("CODE").equals(Consts.FUNCTION_MANAGEMENT_INPUT_USER))
                userPermission.setFUNCTION_MANAGEMENT_INPUT_USER(true);
            if (map.get("CODE").equals(Consts.SUB_MENU_MANAGEMENT_PROGRESS))
                userPermission.setSUB_MENU_MANAGEMENT_PROGRESS(true);
            if (map.get("CODE").equals(Consts.FUNCTION_PROGRESS_INPUT_USER))
                userPermission.setFUNCTION_PROGRESS_INPUT_USER(true);
            if (map.get("CODE").equals(Consts.FUNCTION_PROGRESS_COMMENT))
                userPermission.setFUNCTION_PROGRESS_COMMENT(true);

            if (map.get("CODE").equals(Consts.MENU_CUSTOMBOARD))
                userPermission.setMENU_CUSTOMBOARD(true);

        }

        return userPermission;
    }

    public Map<String, Object> setPermissionCode(UserPermission userPermission) {
        ArrayList<String> codes = new ArrayList<String>();
        ArrayList<String> codeTypes = new ArrayList<String>();

        if (userPermission.isMENU_NOTICE()) {
            codes.add(Consts.MENU_NOTICE);
            codeTypes.add("menu");
        }
        if (userPermission.isFUNCTION_NOTICE_WRITE()) {
            codes.add(Consts.FUNCTION_NOTICE_WRITE);
            codeTypes.add("function");
        }

        if (userPermission.isMENU_GLUE()) {
            codes.add(Consts.MENU_GLUE);
            codeTypes.add("menu");
        }
        if (userPermission.isFUNCTION_GLUE_ADMIN()) {
            codes.add(Consts.FUNCTION_GLUE_ADMIN);
            codeTypes.add("function");
        }
        if (userPermission.isFUNCTION_GLUE_WRITE()) {
            codes.add(Consts.FUNCTION_GLUE_WRITE);
            codeTypes.add("function");
        }
        if (userPermission.isFUNCTION_GLUE_WRITE_NOTICE()) {
            codes.add(Consts.FUNCTION_GLUE_WRITE_NOTICE);
            codeTypes.add("function");
        }
        if (userPermission.isFUNCTION_GLUE_WRITE_QNA()) {
            codes.add(Consts.FUNCTION_GLUE_WRITE_QNA);
            codeTypes.add("function");
        }
        if (userPermission.isFUNCTION_GLUE_REPLY_BOARD_QNA()) {
            codes.add(Consts.FUNCTION_GLUE_REPLY_BOARD_QNA);
            codeTypes.add("function");
        }
        if (userPermission.isFUNCTION_GLUE_WRITE_FAQ()) {
            codes.add(Consts.FUNCTION_GLUE_WRITE_FAQ);
            codeTypes.add("function");
        }
        if (userPermission.isFUNCTION_GLUE_WRITE_TECH()) {
            codes.add(Consts.FUNCTION_GLUE_WRITE_TECH);
            codeTypes.add("function");
        }
        if (userPermission.isFUNCTION_GLUE_WRITE_OLDTECH()) {
            codes.add(Consts.FUNCTION_GLUE_WRITE_OLDTECH);
            codeTypes.add("function");
        }
        if (userPermission.isFUNCTION_GLUE_REPLY()) {
            codes.add(Consts.FUNCTION_GLUE_REPLY);
            codeTypes.add("function");
        }

        if (userPermission.isMENU_GLUEMASTER()) {
            codes.add(Consts.MENU_GLUEMASTER);
            codeTypes.add("menu");
        }
        if (userPermission.isFUNCTION_GLUEMASTER_ADMIN()) {
            codes.add(Consts.FUNCTION_GLUEMASTER_ADMIN);
            codeTypes.add("function");
        }
        if (userPermission.isFUNCTION_GLUEMASTER_WRITE()) {
            codes.add(Consts.FUNCTION_GLUEMASTER_WRITE);
            codeTypes.add("function");
        }
        if (userPermission.isFUNCTION_GLUEMASTER_WRITE_NOTICE()) {
            codes.add(Consts.FUNCTION_GLUEMASTER_WRITE_NOTICE);
            codeTypes.add("function");
        }
        if (userPermission.isFUNCTION_GLUEMASTER_WRITE_QNA()) {
            codes.add(Consts.FUNCTION_GLUEMASTER_WRITE_QNA);
            codeTypes.add("function");
        }
        if (userPermission.isFUNCTION_GLUEMASTER_REPLY_BOARD_QNA()) {
            codes.add(Consts.FUNCTION_GLUEMASTER_REPLY_BOARD_QNA);
            codeTypes.add("function");
        }
        if (userPermission.isFUNCTION_GLUEMASTER_WRITE_FAQ()) {
            codes.add(Consts.FUNCTION_GLUEMASTER_WRITE_FAQ);
            codeTypes.add("function");
        }
        if (userPermission.isFUNCTION_GLUEMASTER_WRITE_TECH()) {
            codes.add(Consts.FUNCTION_GLUEMASTER_WRITE_TECH);
            codeTypes.add("function");
        }
        if (userPermission.isFUNCTION_GLUEMASTER_REPLY()) {
            codes.add(Consts.FUNCTION_GLUEMASTER_REPLY);
            codeTypes.add("function");
        }

        if (userPermission.isMENU_GLUEMOBILE()) {
            codes.add(Consts.MENU_GLUEMOBILE);
            codeTypes.add("menu");
        }
        if (userPermission.isFUNCTION_GLUEMOBILE_ADMIN()) {
            codes.add(Consts.FUNCTION_GLUEMOBILE_ADMIN);
            codeTypes.add("function");
        }
        if (userPermission.isFUNCTION_GLUEMOBILE_WRITE()) {
            codes.add(Consts.FUNCTION_GLUEMOBILE_WRITE);
            codeTypes.add("function");
        }
        if (userPermission.isFUNCTION_GLUEMOBILE_WRITE_NOTICE()) {
            codes.add(Consts.FUNCTION_GLUEMOBILE_WRITE_NOTICE);
            codeTypes.add("function");
        }
        if (userPermission.isFUNCTION_GLUEMOBILE_WRITE_QNA()) {
            codes.add(Consts.FUNCTION_GLUEMOBILE_WRITE_QNA);
            codeTypes.add("function");
        }
        if (userPermission.isFUNCTION_GLUEMOBILE_REPLY_BOARD_QNA()) {
            codes.add(Consts.FUNCTION_GLUEMOBILE_REPLY_BOARD_QNA);
            codeTypes.add("function");
        }
        if (userPermission.isFUNCTION_GLUEMOBILE_WRITE_FAQ()) {
            codes.add(Consts.FUNCTION_GLUEMOBILE_WRITE_FAQ);
            codeTypes.add("function");
        }
        if (userPermission.isFUNCTION_GLUEMOBILE_WRITE_TECH()) {
            codes.add(Consts.FUNCTION_GLUEMOBILE_WRITE_TECH);
            codeTypes.add("function");
        }
        if (userPermission.isFUNCTION_GLUEMOBILE_REPLY()) {
            codes.add(Consts.FUNCTION_GLUEMOBILE_REPLY);
            codeTypes.add("function");
        }

        if (userPermission.isMENU_UCUBE()) {
            codes.add(Consts.MENU_UCUBE);
            codeTypes.add("menu");
        }
        if (userPermission.isFUNCTION_UCUBE_ADMIN()) {
            codes.add(Consts.FUNCTION_UCUBE_ADMIN);
            codeTypes.add("function");
        }
        if (userPermission.isFUNCTION_UCUBE_WRITE()) {
            codes.add(Consts.FUNCTION_UCUBE_WRITE);
            codeTypes.add("function");
        }
        if (userPermission.isFUNCTION_UCUBE_WRITE_NOTICE()) {
            codes.add(Consts.FUNCTION_UCUBE_WRITE_NOTICE);
            codeTypes.add("function");
        }
        if (userPermission.isFUNCTION_UCUBE_WRITE_QNA()) {
            codes.add(Consts.FUNCTION_UCUBE_WRITE_QNA);
            codeTypes.add("function");
        }
        if (userPermission.isFUNCTION_UCUBE_REPLY_BOARD_QNA()) {
            codes.add(Consts.FUNCTION_UCUBE_REPLY_BOARD_QNA);
            codeTypes.add("function");
        }
        if (userPermission.isFUNCTION_UCUBE_WRITE_FAQ()) {
            codes.add(Consts.FUNCTION_UCUBE_WRITE_FAQ);
            codeTypes.add("function");
        }
        if (userPermission.isFUNCTION_UCUBE_WRITE_TECH()) {
            codes.add(Consts.FUNCTION_UCUBE_WRITE_TECH);
            codeTypes.add("function");
        }
        if (userPermission.isFUNCTION_UCUBE_REPLY()) {
            codes.add(Consts.FUNCTION_UCUBE_REPLY);
            codeTypes.add("function");
        }

        if (userPermission.isMENU_POSBEE()) {
            codes.add(Consts.MENU_POSBEE);
            codeTypes.add("menu");
        }
        if (userPermission.isFUNCTION_POSBEE_ADMIN()) {
            codes.add(Consts.FUNCTION_POSBEE_ADMIN);
            codeTypes.add("function");
        }
        if (userPermission.isFUNCTION_POSBEE_WRITE()) {
            codes.add(Consts.FUNCTION_POSBEE_WRITE);
            codeTypes.add("function");
        }
        if (userPermission.isFUNCTION_POSBEE_WRITE_NOTICE()) {
            codes.add(Consts.FUNCTION_POSBEE_WRITE_NOTICE);
            codeTypes.add("function");
        }
        if (userPermission.isFUNCTION_POSBEE_WRITE_QNA()) {
            codes.add(Consts.FUNCTION_POSBEE_WRITE_QNA);
            codeTypes.add("function");
        }
        if (userPermission.isFUNCTION_POSBEE_REPLY_BOARD_QNA()) {
            codes.add(Consts.FUNCTION_POSBEE_REPLY_BOARD_QNA);
            codeTypes.add("function");
        }
        if (userPermission.isFUNCTION_POSBEE_WRITE_FAQ()) {
            codes.add(Consts.FUNCTION_POSBEE_WRITE_FAQ);
            codeTypes.add("function");
        }
        if (userPermission.isFUNCTION_POSBEE_WRITE_TECH()) {
            codes.add(Consts.FUNCTION_POSBEE_WRITE_TECH);
            codeTypes.add("function");
        }
        if (userPermission.isFUNCTION_POSBEE_REPLY()) {
            codes.add(Consts.FUNCTION_POSBEE_REPLY);
            codeTypes.add("function");
        }

        if (userPermission.isMENU_SOLUTION_UPLOAD()) {
            codes.add(Consts.MENU_SOLUTION_UPLOAD);
            codeTypes.add("menu");
        }
        if (userPermission.isFUNCTION_SOLUTION_UPLOAD_GLUE()) {
            codes.add(Consts.FUNCTION_SOLUTION_UPLOAD_GLUE);
            codeTypes.add("function");
        }
        if (userPermission.isFUNCTION_SOLUTION_UPLOAD_GLUEMASTER()) {
            codes.add(Consts.FUNCTION_SOLUTION_UPLOAD_GLUEMASTER);
            codeTypes.add("function");
        }
        if (userPermission.isFUNCTION_SOLUTION_UPLOAD_UCUBE()) {
            codes.add(Consts.FUNCTION_SOLUTION_UPLOAD_UCUBE);
            codeTypes.add("function");
        }
        if (userPermission.isFUNCTION_SOLUTION_UPLOAD_POSBEE()) {
            codes.add(Consts.FUNCTION_SOLUTION_UPLOAD_POSBEE);
            codeTypes.add("function");
        }
        if (userPermission.isFUNCTION_SOLUTION_UPLOAD_ETC()) {
            codes.add(Consts.FUNCTION_SOLUTION_UPLOAD_ETC);
            codeTypes.add("function");
        }
        if (userPermission.isFUNCTION_SOLUTION_UPLOAD_ORDER_COMPANY()) {
            codes.add(Consts.FUNCTION_SOLUTION_UPLOAD_ORDER_COMPANY);
            codeTypes.add("function");
        }
        if (userPermission.isFUNCTION_SOLUTION_UPLOAD_CUSTOM_USER()) {
            codes.add(Consts.FUNCTION_SOLUTION_UPLOAD_CUSTOM_USER);
            codeTypes.add("function");
        }
        if (userPermission.isFUNCTION_SOLUTION_UPLOAD_GLUEMOBILE()) {
            codes.add(Consts.FUNCTION_SOLUTION_UPLOAD_GLUEMOBILE);
            codeTypes.add("function");
        }

        if (userPermission.isMENU_PRESENTATION()) {
            codes.add(Consts.MENU_PRESENTATION);
            codeTypes.add("menu");
        }
        if (userPermission.isMENU_GUEST_PACKAGE_DOWNLOAD()) {
            codes.add(Consts.MENU_GUEST_PACKAGE_DOWNLOAD);
            codeTypes.add("menu");
        }
        if (userPermission.isMENU_USER_PACKAGE_DOWNLOAD()) {
            codes.add(Consts.MENU_USER_PACKAGE_DOWNLOAD);
            codeTypes.add("menu");
        }

        if (userPermission.isMENU_MANAGEMENT()) {
            codes.add(Consts.MENU_MANAGEMENT);
            codeTypes.add("menu");
        }
        if (userPermission.isSUB_MENU_MANAGEMENT_COMPLETE()) {
            codes.add(Consts.SUB_MENU_MANAGEMENT_COMPLETE);
            codeTypes.add("function");
        }
        if (userPermission.isFUNCTION_MANAGEMENT_INPUT_USER()) {
            codes.add(Consts.FUNCTION_MANAGEMENT_INPUT_USER);
            codeTypes.add("function");
        }
        if (userPermission.isSUB_MENU_MANAGEMENT_PROGRESS()) {
            codes.add(Consts.SUB_MENU_MANAGEMENT_PROGRESS);
            codeTypes.add("function");
        }
        if (userPermission.isFUNCTION_PROGRESS_INPUT_USER()) {
            codes.add(Consts.FUNCTION_PROGRESS_INPUT_USER);
            codeTypes.add("function");
        }
        if (userPermission.isFUNCTION_PROGRESS_COMMENT()) {
            codes.add(Consts.FUNCTION_PROGRESS_COMMENT);
            codeTypes.add("function");
        }

        if (userPermission.isMENU_CUSTOMBOARD()) {
            codes.add(Consts.MENU_CUSTOMBOARD);
            codeTypes.add("menu");
        }

        StringBuffer codesToString = new StringBuffer();
        StringBuffer typesToString = new StringBuffer();
        int size = codes.size();

        if (size > 0) {
            for (int i = 0; i < size; i++) {
                codesToString.append("<code>" + codes.get(i) + "</code>");
                typesToString.append("<type>" + codeTypes.get(i) + "</type>");
            }
        } else {
            throw new NullPointerException();
        }
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("codes", codesToString.toString());
        map.put("codeTypes", typesToString.toString());
        map.put("size", size);

        return map;
    }

    public Map<String, Object> getOrderCompanyPermission() {
        UserPermission per = new UserPermission();
        per.setMENU_NOTICE(true);

        per.setMENU_GLUE(true);
        per.setFUNCTION_GLUE_WRITE(true);
        per.setFUNCTION_GLUE_WRITE_QNA(true);
        per.setFUNCTION_GLUE_REPLY_BOARD_QNA(true);
        per.setFUNCTION_GLUE_REPLY(true);

        per.setMENU_GLUEMASTER(true);
        per.setFUNCTION_GLUEMASTER_WRITE(true);
        per.setFUNCTION_GLUEMASTER_WRITE_QNA(true);
        per.setFUNCTION_GLUEMASTER_REPLY_BOARD_QNA(true);
        per.setFUNCTION_GLUEMASTER_REPLY(true);

        per.setMENU_GLUEMOBILE(true);
        per.setFUNCTION_GLUEMOBILE_WRITE(true);
        per.setFUNCTION_GLUEMOBILE_WRITE_QNA(true);
        per.setFUNCTION_GLUEMOBILE_REPLY_BOARD_QNA(true);
        per.setFUNCTION_GLUEMOBILE_REPLY(true);

        per.setMENU_UCUBE(true);
        per.setFUNCTION_UCUBE_WRITE(true);
        per.setFUNCTION_UCUBE_WRITE_QNA(true);
        per.setFUNCTION_UCUBE_REPLY_BOARD_QNA(true);
        per.setFUNCTION_UCUBE_REPLY(true);

        per.setMENU_POSBEE(true);
        per.setFUNCTION_POSBEE_WRITE(true);
        per.setFUNCTION_POSBEE_WRITE_QNA(true);
        per.setFUNCTION_POSBEE_REPLY_BOARD_QNA(true);
        per.setFUNCTION_POSBEE_REPLY(true);

        per.setMENU_PRESENTATION(true);
        per.setMENU_GUEST_PACKAGE_DOWNLOAD(true);

        per.setMENU_MANAGEMENT(true);
        per.setSUB_MENU_MANAGEMENT_COMPLETE(true);
        per.setFUNCTION_MANAGEMENT_INPUT_USER(true);
        per.setSUB_MENU_MANAGEMENT_PROGRESS(true);
        per.setFUNCTION_PROGRESS_INPUT_USER(true);
        per.setFUNCTION_PROGRESS_COMMENT(true);

        return setPermissionCode(per);
    }

    public Map<String, Object> getClientPermission() {
        UserPermission per = new UserPermission();
        per.setMENU_NOTICE(true);

        per.setMENU_GLUE(true);
        per.setFUNCTION_GLUE_WRITE(true);
        per.setFUNCTION_GLUE_WRITE_QNA(true);
        per.setFUNCTION_GLUE_REPLY_BOARD_QNA(true);
        per.setFUNCTION_GLUE_REPLY(true);

        per.setMENU_GLUEMASTER(true);
        per.setFUNCTION_GLUEMASTER_WRITE(true);
        per.setFUNCTION_GLUEMASTER_WRITE_QNA(true);
        per.setFUNCTION_GLUEMASTER_REPLY_BOARD_QNA(true);
        per.setFUNCTION_GLUEMASTER_REPLY(true);

        per.setMENU_GLUEMOBILE(true);
        per.setFUNCTION_GLUEMOBILE_WRITE(true);
        per.setFUNCTION_GLUEMOBILE_WRITE_QNA(true);
        per.setFUNCTION_GLUEMOBILE_REPLY_BOARD_QNA(true);
        per.setFUNCTION_GLUEMOBILE_REPLY(true);

        per.setMENU_UCUBE(true);
        per.setFUNCTION_UCUBE_WRITE(true);
        per.setFUNCTION_UCUBE_WRITE_QNA(true);
        per.setFUNCTION_UCUBE_REPLY_BOARD_QNA(true);
        per.setFUNCTION_UCUBE_REPLY(true);

        per.setMENU_POSBEE(true);
        per.setFUNCTION_POSBEE_WRITE(true);
        per.setFUNCTION_POSBEE_WRITE_QNA(true);
        per.setFUNCTION_POSBEE_REPLY_BOARD_QNA(true);
        per.setFUNCTION_POSBEE_REPLY(true);

        per.setMENU_PRESENTATION(true);
        per.setMENU_USER_PACKAGE_DOWNLOAD(true);

        return setPermissionCode(per);
    }
}