public String execute() throws Exception {
    IRecruitplanBo recruitplanBo = (IRecruitplanBo) getBean("recruitplanBO");
    if (getRecruitplan() == null) {
      String[] fetch = {
        "recpDepartmentNo", "recpCreateBy", "recpLastChangeBy", "recpType", "recpJobTitle"
      };
      this.recruitplan = recruitplanBo.loadRecruitplan(this.id, fetch);
    }

    String[] fetchDept = {"empDeptNo"};
    if (!getCurrentEmpNo().equals(this.recruitplan.getRecpCreateBy().getId())) {
      return "noauth";
    }
    IEmployeeBo empBo = (IEmployeeBo) getBean("empBo");
    IDepartmentBO deptbo = (IDepartmentBO) SpringBeanFactory.getBean("departmentBO");
    Employee tempEmp = empBo.loadEmp(getCurrentEmpNo(), fetchDept);
    this.departmentName = tempEmp.getEmpDeptNo().getDepartmentName();
    this.departmentId = tempEmp.getEmpDeptNo().getId();
    setAllDept(deptbo.FindEnabledDepartment());
    ILocationBO localbo = (ILocationBO) SpringBeanFactory.getBean("locationBO");
    setAllLocation(localbo.FindEnabledLocation());

    setAllStatus(recruitplanBo.getRecruitplanStatus());
    IEmpTypeBO emptypebo = (IEmpTypeBO) SpringBeanFactory.getBean("emptypeBO");
    setEmptype(emptypebo.FindEnabledEmpType());

    IJobTitleBo jobTitleBo = (IJobTitleBo) SpringBeanFactory.getBean("jobTitleBo");
    this.jobTitles = jobTitleBo.FindEnabledJobTitle();
    return "success";
  }
  public Map<String, Employee> getEmployeeMap() {
    Map employeeHashtable = new HashMap();
    IEmployeeBo esaBo = (IEmployeeBo) SpringBeanFactory.getBean("empBo");
    DetachedCriteria dc = DetachedCriteria.forClass(Employee.class);
    dc.createAlias(Employee.PROP_EMP_BENEFIT_TYPE, "empBenefitType", 1);
    dc.createAlias(Employee.PROP_EMP_BENEFIT, "benefit", 1);
    dc.createAlias(Employee.PROP_EMP_DEPT_NO, "empDeptNo", 1);
    dc.createAlias(Employee.PROP_CONFIG, "config", 1);

    dc.add(Restrictions.eq(Employee.PROP_EMP_STATUS, Integer.valueOf(1)));
    List<Employee> empList = esaBo.findByCriteria(dc);
    for (Employee emp : empList) {
      employeeHashtable.put(emp.getEmpDistinctNo(), emp);
    }
    return employeeHashtable;
  }
  public int[] insertTransmit(List insertList, CommonParameters commonParas) throws Exception {
    List<Empsalaryconfig> originalList = insertList;
    Employee currEmp = commonParas.getCurrEmp();
    int[] result = {0, 0};

    SysConfigManager dbConfigManager = DatabaseSysConfigManager.getInstance();
    String updateConf = dbConfigManager.getProperty("sys.salary.config.update");

    Map jobgradeMap = getJobgradeMap();
    Map empsalaryacctMap = getEsaNameVersionMap();
    Map itemsMap = createAcctItemsMap();
    Map empDbMap = getEmployeeMap();

    Map escDbMap = new HashMap();
    escDbMap = getEmpsalaryconfigMap();

    List<Empsalaryconfig> configList = new ArrayList();
    int rowNum = 1 - commonParas.getInmatchModel().getImmNoTitle().intValue();
    for (Empsalaryconfig newConfig : originalList) {
      ++rowNum;
      Employee employee = newConfig.getEmployee();
      if ((employee == null) || (employee.getEmpDistinctNo() == null)) {
        commonParas.addErrorMessage(
            this.msgNoNull,
            Integer.valueOf(rowNum),
            new String[] {Empsalaryconfig.PROP_EMPLOYEE + "." + Employee.PROP_EMP_DISTINCT_NO});
      } else if (!empDbMap.containsKey(newConfig.getEmployee().getEmpDistinctNo())) {
        commonParas.addErrorMessage(
            this.msgNotExist,
            Integer.valueOf(rowNum),
            new String[] {Empsalaryconfig.PROP_EMPLOYEE + "." + Employee.PROP_EMP_DISTINCT_NO});
      } else {
        Employee emp = (Employee) empDbMap.get(employee.getEmpDistinctNo());
        newConfig.setEmployee(emp);
        newConfig.setId(emp.getId());
      }

      Empsalaryconfig oldConfig = (Empsalaryconfig) escDbMap.get(newConfig.getId());
      if (oldConfig != null) {
        if ("0".equals(updateConf)) {
          commonParas.addMessage(
              this.msgDbRepeat, Integer.valueOf(1), Integer.valueOf(rowNum), new String[0]);
          result[1] += 1;
        }

        oldConfig.decryEmpSalaryConf(oldConfig);
        commonParas.copy1To2(newConfig, oldConfig);
        newConfig = oldConfig;
      }

      Jobgrade jobgrade = newConfig.getEscJobgrade();
      if ((jobgrade == null) || (jobgrade.getJobGradeName() == null))
        commonParas.addErrorMessage(
            this.msgNoNull,
            Integer.valueOf(rowNum),
            new String[] {Empsalaryconfig.PROP_ESC_JOBGRADE + "." + Jobgrade.PROP_JOB_GRADE_NAME});
      else if (!jobgradeMap.containsKey(jobgrade.getJobGradeName()))
        commonParas.addErrorMessage(
            this.msgNotExist,
            Integer.valueOf(rowNum),
            new String[] {Empsalaryconfig.PROP_ESC_JOBGRADE + "." + Jobgrade.PROP_JOB_GRADE_NAME});
      else {
        newConfig.setEscJobgrade((Jobgrade) jobgradeMap.get(jobgrade.getJobGradeName()));
      }

      Empsalaryacctversion esav = newConfig.getEscEsavId();
      if ((esav == null)
          || (esav.getEsavEsac() == null)
          || (esav.getEsavEsac().getEsacName() == null)) {
        commonParas.addErrorMessage(
            this.msgNoNull,
            Integer.valueOf(rowNum),
            new String[] {
              "escEsavId."
                  + Empsalaryacctversion.PROP_ESAV_ESAC
                  + "."
                  + Empsalaryacct.PROP_ESAC_NAME
            });
      } else if (!empsalaryacctMap.containsKey(esav.getEsavEsac().getEsacName())) {
        commonParas.addErrorMessage(
            this.msgNotExist,
            Integer.valueOf(rowNum),
            new String[] {
              "escEsavId."
                  + Empsalaryacctversion.PROP_ESAV_ESAC
                  + "."
                  + Empsalaryacct.PROP_ESAC_NAME
            });
      } else {
        newConfig.setEscEsavId(
            (Empsalaryacctversion) empsalaryacctMap.get(esav.getEsavEsac().getEsacName()));
        newConfig.setAcctItems((List) itemsMap.get(newConfig.getEscEsavId().getId()));
      }

      if (newConfig.getEscBankAccountNo() == null) {
        commonParas.addErrorMessage(
            this.msgNoNull,
            Integer.valueOf(rowNum),
            new String[] {Empsalaryconfig.PROP_ESC_BANK_ACCOUNT_NO});
      }

      List acctItems = newConfig.getAcctItems();
      for (int i = 0; i < acctItems.size(); ++i) {
        Integer isCalc = ((Empsalaryacctitems) acctItems.get(i)).getEsaiDataIsCalc();
        try {
          if ((isCalc.intValue() == 1) || (isCalc.intValue() == 2))
            PropertyUtils.setProperty(newConfig, "escColumn" + (i + 1), new BigDecimal("0.00"));
        } catch (Exception e) {
          e.printStackTrace();
        }
      }
      configList.add(newConfig);
    }

    if (commonParas.getIoMessages().hasErrorMsg()) {
      return result;
    }

    this.salaryconfBo.interpretConfig(
        (Empsalaryconfig[]) configList.toArray(new Empsalaryconfig[configList.size()]));
    result[0] = configList.size();

    for (Empsalaryconfig newConfig : configList) {
      this.salaryconfBo.saveOrUpdateEsc(newConfig, currEmp.getId(), newConfig.getEmployee());
    }

    return result;
  }