com.eastcom.hrmis.modules.emp.web.controller.api.EmployeeController.java Source code

Java tutorial

Introduction

Here is the source code for com.eastcom.hrmis.modules.emp.web.controller.api.EmployeeController.java

Source

package com.eastcom.hrmis.modules.emp.web.controller.api;

import com.alibaba.druid.support.json.JSONParser;
import com.eastcom.baseframe.common.config.Global;
import com.eastcom.baseframe.common.persistence.PageHelper;
import com.eastcom.baseframe.common.utils.DateUtils;
import com.eastcom.baseframe.common.utils.StringUtils;
import com.eastcom.baseframe.common.utils.excel.CustomizeToExcel;
import com.eastcom.baseframe.common.utils.excel.ExcelColumn;
import com.eastcom.baseframe.web.common.BaseController;
import com.eastcom.baseframe.web.common.model.AjaxJson;
import com.eastcom.baseframe.web.common.model.easyui.DataGridJson;
import com.eastcom.baseframe.web.common.utils.DownloadUtil;
import com.eastcom.baseframe.web.modules.sys.aop.annotation.OperationLog;
import com.eastcom.baseframe.web.modules.sys.aop.annotation.OperationType;
import com.eastcom.baseframe.web.modules.sys.cache.DynamicgridItemCache;
import com.eastcom.baseframe.web.modules.sys.entity.DynamicgridItem;
import com.eastcom.baseframe.web.modules.sys.security.cache.SecurityCache;
import com.eastcom.hrmis.modules.emp.entity.*;
import com.eastcom.hrmis.modules.emp.service.*;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.common.collect.Maps;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.math.NumberUtils;
import org.apache.shiro.authz.annotation.Logical;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.*;
import java.util.*;

/**
 * 
 * ?Controller
 * @author wutingguang <br>
 */
@Controller
@RequestMapping(value = "/api/emp/info")
public class EmployeeController extends BaseController {

    @Autowired
    private EmployeeService employeeService;

    @Autowired
    private EmployeeDeptService employeeDeptService;

    @Autowired
    private EmployeePostService employeePostService;

    @Autowired
    private EmployeeAnnexService annexService;

    @Autowired
    private EmployeeContractHomeAnnexService homeAnnexService;

    @Autowired
    private EmployeeContractFinalAnnexService finalAnnexService;

    @Autowired
    private WagePlanService wagePlanService;

    @Autowired
    private PerformanceWageService performanceWageService;

    @Autowired
    private EmployeeCheckWorkStatMonthService employeeCheckWorkStatMonthService;

    @Autowired
    private EmployeeOrderService employeeOrderService;

    /**
     * 
     * 
     * @param session
     * @param request
     * @param params
     * @return
     */
    @RequiresPermissions("emp:baseinfomgr:view")
    @ResponseBody
    @RequestMapping(value = "/list", method = RequestMethod.POST)
    public DataGridJson list(HttpSession session, HttpServletRequest request,
            @RequestParam Map<String, Object> params) {
        logger.info("--??--");
        DataGridJson gridJson = new DataGridJson();
        try {
            int pageNo = NumberUtils.toInt((String) params.get("page"), 1);
            int pageSize = NumberUtils.toInt((String) params.get("rows"), 1);
            Map<String, Object> reqParams = Maps.newHashMap(params);
            reqParams.remove("page");
            reqParams.remove("rows");
            PageHelper<Employee> pageHelper = employeeService.find(reqParams, pageNo, pageSize);
            gridJson.setRows(pageHelper.getList());
            gridJson.setTotal(pageHelper.getCount());
        } catch (Exception e) {
            e.printStackTrace();
        }
        return gridJson;
    }

    /**
     * 
     * @param session
     * @param request
     * @param params
     * @return
     */
    @RequiresPermissions(value = { "emp:baseinfomgr:add", "emp:baseinfomgr:edit" }, logical = Logical.OR)
    @OperationLog(content = "?", type = OperationType.CREATE)
    @ResponseBody
    @RequestMapping(value = "/addOrUpdate", method = RequestMethod.POST)
    public AjaxJson addOrUpdate(HttpSession session, HttpServletRequest request,
            @RequestParam Map<String, Object> params) {
        logger.info("--?--");
        AjaxJson json = new AjaxJson();
        try {
            String addOrUpdate = (String) params.get("addOrUpdate");
            if (StringUtils.isNotEmpty(addOrUpdate) && "add".equals(addOrUpdate)) {
                //??code
                Map<String, Object> reqParam = Maps.newHashMap();
                reqParam.put("code", (String) params.get("code"));
                List<Employee> temps = employeeService.find(reqParam);
                if (CollectionUtils.isNotEmpty(temps)) {
                    json.setSuccess(false);
                    json.setMessage("?,??");
                    return json;
                }
                //?????
                reqParam = Maps.newHashMap();
                reqParam.put("cardNo", (String) params.get("cardNo"));
                temps = employeeService.find(reqParam);
                if (CollectionUtils.isNotEmpty(temps)) {
                    json.setSuccess(false);
                    json.setMessage("?,????");
                    return json;
                }
            }

            String id = StringUtils.defaultIfBlank((String) params.get("id"), "0");
            Employee employee = employeeService.get(id);
            if (employee == null) {
                employee = new Employee();
                employee.setCreateDate(new Date());
            }
            employee.setCode((String) params.get("code"));
            employee.setName((String) params.get("name"));
            employee.setSex(NumberUtils.toInt((String) params.get("sex"), 1));
            employee.setAge(NumberUtils.toInt((String) params.get("age"), 0));
            employee.setEnrtyDate(DateUtils.parseDate((String) params.get("enrtyDate")));
            employee.setEnrtyDateType(NumberUtils.toInt((String) params.get("enrtyDateType"), 0));
            employee.setRegularDate(DateUtils.parseDate((String) params.get("regularDate")));
            employee.setRegularDateTwo(DateUtils.parseDate((String) params.get("regularDateTwo")));
            employee.setRetireDate(DateUtils.parseDate((String) params.get("retireDate")));
            employee.setNation((String) params.get("nation"));
            employee.setMarryType(NumberUtils.toInt((String) params.get("marryType"), 0));
            employee.setHeight((String) params.get("height"));
            employee.setCardNo((String) params.get("cardNo"));
            employee.setCardNoValidDate(DateUtils.parseDate((String) params.get("cardNoValidDate")));
            employee.setIsCardNoLongTerm(NumberUtils.toInt((String) params.get("isCardNoLongTerm"), 0));
            employee.setBirthDate(DateUtils.parseDate((String) params.get("birthDate")));
            employee.setEducation(NumberUtils.toInt((String) params.get("education"), 1));
            employee.setManageLevel(NumberUtils.toInt((String) params.get("manageLevel"), 1));
            employee.setJobTitle((String) params.get("jobTitle"));
            employee.setJobCapacity((String) params.get("jobCapacity"));
            employee.setPolity(NumberUtils.toInt((String) params.get("polity"), 1));
            employee.setDriveLicenseType(NumberUtils.toInt((String) params.get("driveLicenseType"), 0));
            employee.setDriveLicenseGetDate(DateUtils.parseDate((String) params.get("driveLicenseGetDate")));
            employee.setDriveLicenseValidDate(DateUtils.parseDate((String) params.get("driveLicenseValidDate")));
            employee.setMajor((String) params.get("major"));
            employee.setNativePlaceType(NumberUtils.toInt((String) params.get("nativePlaceType"), 1));
            employee.setNativePlaceAddr((String) params.get("nativePlaceAddr"));
            employee.setNativePlace((String) params.get("nativePlace"));
            employee.setContactAddr((String) params.get("contactAddr"));
            employee.setTelephone((String) params.get("telephone"));
            employee.setEmergentName((String) params.get("emergentName"));
            employee.setEmergentTelephone((String) params.get("emergentTelephone"));
            employee.setMealRoomType(NumberUtils.toInt((String) params.get("mealRoomType"), 1));
            employee.setPerformanceWageType(NumberUtils.toInt((String) params.get("performanceWageType"), 0));
            employee.setLaborType(NumberUtils.toInt((String) params.get("laborType"), 1));
            employee.setContractStartDate(DateUtils.parseDate((String) params.get("contractStartDate")));
            employee.setContractEndDate(DateUtils.parseDate((String) params.get("contractEndDate")));
            employee.setContractSignDateType(NumberUtils.toInt((String) params.get("contractSignDateType"), 1));
            employee.setContractSignDate(DateUtils.parseDate((String) params.get("contractSignDate")));
            employee.setContractTermCond(NumberUtils.toInt((String) params.get("contractTermCond"), 0));
            employee.setHasRiskAgreement(NumberUtils.toInt((String) params.get("hasRiskAgreement"), 0));
            employee.setHasPercentAgreement(NumberUtils.toInt((String) params.get("hasPercentAgreement"), 0));
            employee.setBankType(NumberUtils.toInt((String) params.get("bankType"), 0));
            employee.setBankCard((String) params.get("bankCard"));
            employee.setCharacterRemark((String) params.get("characterRemark"));
            employee.setHasLaborDispute(NumberUtils.toInt((String) params.get("hasLaborDispute"), 0));
            employee.setLaborDisputeResult((String) params.get("laborDisputeResult"));
            employee.setEnrtyIntorducerCompany((String) params.get("enrtyIntorducerCompany"));
            employee.setEnrtyIntorducer((String) params.get("enrtyIntorducer"));
            employee.setHasDiseaseHistory(NumberUtils.toInt((String) params.get("hasDiseaseHistory"), 0));
            employee.setDiseaseHistory((String) params.get("diseaseHistory"));
            employee.setHasFriendInCompany(NumberUtils.toInt((String) params.get("hasFriendInCompany"), 0));
            employee.setFriendDept((String) params.get("friendDept"));
            employee.setFriendName((String) params.get("friendName"));
            employee.setFriendJobTitle((String) params.get("friendJobTitle"));
            employee.setContractType(NumberUtils.toInt((String) params.get("contractType"), 0));
            employee.setHasSignForm(NumberUtils.toInt((String) params.get("hasSignForm"), 0));
            employee.setHasInsure(NumberUtils.toInt((String) params.get("hasInsure"), 0));
            employee.setInsureNo((String) params.get("insureNo"));
            employee.setInsureDate(DateUtils.parseDate((String) params.get("insureDate")));
            employee.setInsurePayBase(NumberUtils.toDouble((String) params.get("insurePayBase"), 0));
            employee.setHasPersionInsure(NumberUtils.toInt((String) params.get("hasPersionInsure"), 0));
            employee.setHasInjuryInsure(NumberUtils.toInt((String) params.get("hasInjuryInsure"), 0));
            employee.setHasBirthInsure(NumberUtils.toInt((String) params.get("hasBirthInsure"), 0));
            employee.setHasMedicalInsure(NumberUtils.toInt((String) params.get("hasMedicalInsure"), 0));
            employee.setHasSeriousInsure(NumberUtils.toInt((String) params.get("hasSeriousInsure"), 0));
            employee.setHasGsbInsure(NumberUtils.toInt((String) params.get("hasGsbInsure"), 0));
            employee.setHasNonPurchaseCommit(NumberUtils.toInt((String) params.get("hasNonPurchaseCommit"), 0));
            employee.setHasPublicFund(NumberUtils.toInt((String) params.get("hasPublicFund"), 0));
            employee.setPublicFundPayBase(NumberUtils.toDouble((String) params.get("publicFundPayBase"), 0));
            employee.setPublicFundDate(DateUtils.parseDate((String) params.get("publicFundDate")));
            employee.setHasQuitCompany(NumberUtils.toInt((String) params.get("hasQuitCompany"), 0));
            employee.setQuitCompanyType(NumberUtils.toInt((String) params.get("quitCompanyType"), 0));
            employee.setQuitCompanyDate(DateUtils.parseDate((String) params.get("quitCompanyDate")));
            employee.setQuitCompanyResult((String) params.get("quitCompanyResult"));

            employee.setPostChangeRemark((String) params.get("postChangeRemark"));
            employee.setDeptChangeRemark((String) params.get("deptChangeRemark"));
            employee.setOperaChangeRemark((String) params.get("operaChangeRemark"));
            employee.setWageChangeRemark((String) params.get("wageChangeRemark"));

            employee.setEmployeeDept(
                    employeeDeptService.get(StringUtils.defaultIfBlank((String) params.get("employeeDept"), "0")));
            employee.setEmployeePost(
                    employeePostService.get(StringUtils.defaultIfBlank((String) params.get("employeePost"), "0")));
            employee.setWagePlan(
                    wagePlanService.get(StringUtils.defaultIfBlank((String) params.get("wagePlan"), "0")));

            employee.setOverTimeRate(NumberUtils.toInt((String) params.get("overTimeRate"), 1));

            employee.setModifyer(SecurityCache.getLoginUser().getName());
            employee.setModifyDate(new Date());
            employee.setRecordStatus(1);

            //,??,???
            employee.setAuditStatus(NumberUtils.toInt((String) params.get("auditStatus"), 0));

            //?--???
            employeeCheckWorkStatMonthService.deleteByEmployeeId(employee.getId());

            // ?????
            Map<String, Object> orderParam = Maps.newHashMap();
            orderParam.put("employeeId", employee.getId());
            orderParam.put("type", 4);
            orderParam.put("status", 0);
            List<EmployeeOrder> orders = employeeOrderService.find(orderParam);
            if (CollectionUtils.isNotEmpty(orders)) {
                for (EmployeeOrder employeeOrder : orders) {
                    employeeOrder.setStatus(1);
                    employeeOrderService.saveOrUpdate(employeeOrder);
                }
            }

            //?  5???
            orderParam = Maps.newHashMap();
            orderParam.put("employeeId", employee.getId());
            orderParam.put("type", 5);
            orderParam.put("status", 0);
            orders = employeeOrderService.find(orderParam);
            //?????
            if (CollectionUtils.isEmpty(orders) && employee.getAuditStatus() == 1) {
                EmployeeOrder order = new EmployeeOrder();
                order.setEmployee(employee);
                order.setContent(employee.getName() + "???");
                order.setStatus(0);
                order.setType(5);
                employeeOrderService.save(order);
                logger.info(employee.getName() + " ?:" + order.getTypeDict() + "??");
            }
            //?????
            if (CollectionUtils.isNotEmpty(orders)
                    && (employee.getAuditStatus() == 2 || employee.getAuditStatus() == 3)) {
                for (EmployeeOrder employeeOrder : orders) {
                    employeeOrder.setStatus(1);
                    employeeOrderService.saveOrUpdate(employeeOrder);
                }
            }

            employeeService.saveOrUpdate(employee);
            json.setSuccess(true);
            json.setMessage("??");
        } catch (Exception e) {
            e.printStackTrace();
            json.setSuccess(false);
            json.setMessage("?");
        }
        return json;
    }

    /**
     * 
     * @param session
     * @param request
     * @param params
     * @return
     */
    @RequiresPermissions("emp:baseinfomgr:del")
    @SuppressWarnings("unchecked")
    @ResponseBody
    @RequestMapping(value = "/delete", method = RequestMethod.POST)
    public AjaxJson delete(HttpSession session, HttpServletRequest request,
            @RequestParam Map<String, Object> params) {
        logger.info("--?--");
        AjaxJson json = new AjaxJson();
        try {
            String deleteJson = (String) params.get("deleteJson");
            JSONParser jsonParser = new JSONParser(deleteJson);
            List<Object> deleteDatas = jsonParser.parseArray();
            if (CollectionUtils.isNotEmpty(deleteDatas)) {
                List<String> ids = new ArrayList<String>();
                for (Object item : deleteDatas) {
                    Map<String, Object> map = (Map<String, Object>) item;
                    String id = StringUtils.defaultString((String) map.get("id"), "0");
                    ids.add(id);
                }
                employeeService.deleteByIds(ids);
                logger.info("--?--");
            }
            json.setSuccess(true);
            json.setMessage("??");
        } catch (Exception e) {
            e.printStackTrace();
            json.setSuccess(false);
            json.setMessage("?");
        }
        return json;
    }

    /**
     * ,?
     * @param session
     * @param request
     * @param params
     * @return
     */
    @SuppressWarnings("unchecked")
    @RequiresPermissions("emp:baseinfomgr:audit")
    @OperationLog(content = ",?", type = OperationType.MODIFY)
    @ResponseBody
    @RequestMapping(value = "/audit", method = RequestMethod.POST)
    public AjaxJson audit(HttpSession session, HttpServletRequest request,
            @RequestParam Map<String, Object> params) {
        logger.info("--,?--");
        AjaxJson json = new AjaxJson();
        try {
            String employeesJson = (String) params.get("employees");
            JSONParser jsonParser = new JSONParser(employeesJson);
            List<Object> employeeDatas = jsonParser.parseArray();
            if (CollectionUtils.isNotEmpty(employeeDatas)) {
                for (Object item : employeeDatas) {
                    Map<String, Object> map = (Map<String, Object>) item;
                    String id = StringUtils.defaultString((String) map.get("id"), "0");
                    Employee employee = employeeService.get(id);
                    if (employee != null) {
                        String auditStatus = (String) params.get("auditStatus");
                        if (StringUtils.isBlank(auditStatus)) {
                            auditStatus = (String) params.get("ud_auditStatus");
                        }
                        employee.setAuditStatus(NumberUtils.toInt(auditStatus, 0));
                        employee.setAuditContent((String) params.get("ud_auditContent"));
                        employeeService.saveOrUpdate(employee);

                        //?  5???
                        Map<String, Object> orderParam = Maps.newHashMap();
                        orderParam.put("employeeId", employee.getId());
                        orderParam.put("type", 5);
                        orderParam.put("status", 0);
                        List<EmployeeOrder> orders = employeeOrderService.find(orderParam);

                        //?????
                        if (CollectionUtils.isEmpty(orders) && employee.getAuditStatus() == 1) {
                            EmployeeOrder order = new EmployeeOrder();
                            order.setEmployee(employee);
                            order.setContent(employee.getName() + "???");
                            order.setStatus(0);
                            order.setType(5);
                            employeeOrderService.save(order);
                            logger.info(employee.getName() + " ?:" + order.getTypeDict() + "??");
                        }
                        //?????
                        if (CollectionUtils.isNotEmpty(orders)
                                && (employee.getAuditStatus() == 2 || employee.getAuditStatus() == 3)) {
                            for (EmployeeOrder employeeOrder : orders) {
                                employeeOrder.setStatus(1);
                                employeeOrderService.saveOrUpdate(employeeOrder);
                            }
                        }
                    }
                }
                json.setSuccess(true);
            }
        } catch (Exception e) {
            e.printStackTrace();
            json.setSuccess(false);
            json.setMessage("?");
        }
        return json;
    }

    /**
     * 
     * @param session
     * @param request
     * @param params
     * @return
     */
    @RequiresPermissions("emp:baseinfomgr:regular")
    @OperationLog(content = "", type = OperationType.MODIFY)
    @ResponseBody
    @RequestMapping(value = "/regular", method = RequestMethod.POST)
    public AjaxJson regular(HttpSession session, HttpServletRequest request,
            @RequestParam Map<String, Object> params) {
        logger.info("----");
        AjaxJson json = new AjaxJson();
        try {
            String employeesJson = (String) params.get("employees");
            JSONParser jsonParser = new JSONParser(employeesJson);
            List<Object> employeeDatas = jsonParser.parseArray();
            if (CollectionUtils.isNotEmpty(employeeDatas)) {
                for (Object item : employeeDatas) {
                    Map<String, Object> map = (Map<String, Object>) item;
                    String id = StringUtils.defaultString((String) map.get("id"), "0");
                    Employee employee = employeeService.get(id);
                    if (employee != null) {
                        employee.setIsRegular(NumberUtils.toInt((String) params.get("ud_isRegular"), 1));
                        employee.setRegularDate(DateUtils.parseDate((String) params.get("ud_regularDate")));
                        employee.setRegularDateTwo(DateUtils.parseDate((String) params.get("ud_regularDateTwo")));

                        employee.setRegularHandleDate(new Date());
                        //??0
                        employee.setHasQuitCompany(0);
                        employeeService.saveOrUpdate(employee);

                        //?????
                        Map<String, Object> orderParam = Maps.newHashMap();
                        orderParam.put("employeeId", employee.getId());
                        orderParam.put("type", 3);
                        orderParam.put("status", 0);
                        List<EmployeeOrder> orders = employeeOrderService.find(orderParam);
                        if (CollectionUtils.isNotEmpty(orders)) {
                            for (EmployeeOrder employeeOrder : orders) {
                                employeeOrder.setStatus(1);
                                employeeOrderService.saveOrUpdate(employeeOrder);
                            }
                        }
                    }
                }
                json.setSuccess(true);
            }
        } catch (Exception e) {
            e.printStackTrace();
            json.setSuccess(false);
            json.setMessage("?");
        }
        return json;
    }

    /**
     * ?
     * @param session
     * @param request
     * @param params
     * @return
     */
    @RequiresPermissions("emp:baseinfomgr:quitcompany")
    @OperationLog(content = "?", type = OperationType.MODIFY)
    @ResponseBody
    @RequestMapping(value = "/quitCompany", method = RequestMethod.POST)
    public AjaxJson quitCompany(HttpSession session, HttpServletRequest request,
            @RequestParam Map<String, Object> params) {
        logger.info("--?--");
        AjaxJson json = new AjaxJson();
        try {
            String employeesJson = (String) params.get("employees");
            JSONParser jsonParser = new JSONParser(employeesJson);
            List<Object> employeeDatas = jsonParser.parseArray();
            if (CollectionUtils.isNotEmpty(employeeDatas)) {
                for (Object item : employeeDatas) {
                    Map<String, Object> map = (Map<String, Object>) item;
                    String id = StringUtils.defaultString((String) map.get("id"), "0");
                    Employee employee = employeeService.get(id);
                    if (employee != null) {
                        employee.setHasQuitCompany(NumberUtils.toInt((String) params.get("ud_hasQuitCompany"), 0));
                        employee.setQuitCompanyType(
                                NumberUtils.toInt((String) params.get("ud_quitCompanyType"), 0));
                        employee.setQuitCompanyDate(DateUtils.parseDate((String) params.get("ud_quitCompanyDate")));
                        employee.setQuitCompanyResult((String) params.get("ud_quitCompanyResult"));
                        //??0
                        employee.setIsRegular(0);
                        employeeService.saveOrUpdate(employee);
                    }
                }
                json.setSuccess(true);
            }
        } catch (Exception e) {
            e.printStackTrace();
            json.setSuccess(false);
            json.setMessage("?");
        }
        return json;
    }

    /**
     * ?ID
     * @param session
     * @param request
     * @param params
     * @return
     */
    @RequiresPermissions(value = { "emp:baseinfomgr:add", "emp:baseinfomgr:edit" }, logical = Logical.OR)
    @OperationLog(content = "?ID", type = OperationType.VIEW)
    @ResponseBody
    @RequestMapping(value = "/detail", method = RequestMethod.POST)
    public AjaxJson detail(HttpSession session, HttpServletRequest request,
            @RequestParam Map<String, Object> params) {
        logger.info("--?ID--");
        AjaxJson json = new AjaxJson();
        try {
            String id = StringUtils.defaultIfBlank((String) params.get("id"), "0");
            Employee employee = employeeService.get(id);
            json.setModel(employee);
            json.setSuccess(true);
        } catch (Exception e) {
            e.printStackTrace();
            json.setSuccess(false);
            json.setMessage("?");
        }
        return json;
    }

    /**
     * ?
     * @param session
     * @param request
     * @param params
     * @return
     */
    @OperationLog(content = "?", type = OperationType.VIEW)
    @ResponseBody
    @RequestMapping(value = "/headerUpload")
    public AjaxJson headerUpload(HttpSession session, HttpServletRequest request,
            @RequestParam Map<String, Object> params) {
        logger.info("--?--");
        AjaxJson json = new AjaxJson();
        MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
        MultipartFile file = multiRequest.getFile("file");
        try {
            String id = StringUtils.defaultIfBlank((String) params.get("id"), "0");
            Employee employee = employeeService.get(id);
            if (employee != null) {
                employee.setHeaderImg(file.getBytes());
                employee.setHeaderImgName(employee.getId() + "-" + Math.random() + "." + StringUtils.lowerCase(
                        file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf('.') + 1)));
                employeeService.saveOrUpdate(employee);

                //,
                String directoryUrl = Global.getConfig("tmp.user_header.url") + employee.getId();
                File oldDirectory = new File(getRealPath(session) + directoryUrl);
                if (oldDirectory.exists()) {
                    FileUtils.cleanDirectory(oldDirectory);
                }

                json.setMessage("?");
                json.setSuccess(true);
            }
        } catch (Exception e) {
            e.printStackTrace();
            json.setMessage("??!");
            json.setSuccess(false);
        }
        return json;
    }

    /**
     * ?URL
     * @param request
     * @param id
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/headerImg", method = RequestMethod.POST)
    public AjaxJson headerImg(HttpSession session, HttpServletRequest request, HttpServletResponse response,
            @RequestParam Map<String, Object> params) {
        logger.info("--?--");
        AjaxJson json = new AjaxJson();
        json.setModel(Global.getConfig("default.header.url"));
        try {
            String id = StringUtils.defaultIfBlank((String) params.get("id"), "0");
            Employee employee = employeeService.get(id);
            if (employee != null && employee.getHeaderImg() != null) {
                //
                String directoryUrl = Global.getConfig("tmp.user_header.url") + employee.getId();
                File directory = new File(getRealPath(session) + directoryUrl);
                if (!directory.exists()) {
                    directory.mkdir();
                }
                //
                String url = directoryUrl + "/" + employee.getHeaderImgName();
                File file = new File(getRealPath(session) + url);
                if (!file.exists()) {
                    file.createNewFile();
                    OutputStream output = new FileOutputStream(file);
                    BufferedOutputStream bufferedOutput = new BufferedOutputStream(output);
                    bufferedOutput.write(employee.getHeaderImg());
                    bufferedOutput.close();
                    output.close();
                }
                json.setModel(url);
            }
            json.setSuccess(true);
        } catch (Exception e) {
            e.printStackTrace();
            json.setSuccess(false);
        }
        return json;
    }

    /**
     * ?
     *
     * @param session
     * @param request
     * @param params
      * @return
      */
    @ResponseBody
    @RequestMapping(value = "/employeeAnnexList", method = RequestMethod.POST)
    public AjaxJson employeeAnnexList(HttpSession session, HttpServletRequest request,
            @RequestParam Map<String, Object> params) {
        logger.info("---?---");
        AjaxJson json = new AjaxJson();
        try {
            String id = StringUtils.defaultIfBlank((String) params.get("id"), "0");
            String annexType = (String) params.get("annexType");
            Employee employee = employeeService.get(id);
            if (employee != null && StringUtils.isNotBlank(annexType)) {
                if ("signForm".equals(annexType) && employee.getSignForm() != null) {
                    //
                    json.setModel(employee.getSignFormName());
                } else if ("nonPurchaseCommit".equals(annexType) && employee.getNonPurchaseCommit() != null) {
                    //?
                    json.setModel(employee.getNonPurchaseCommitName());
                } else if ("annex".equals(annexType)) {
                    //
                    Map<String, Object> reqParams = new HashMap<String, Object>();
                    reqParams.put("employeeId", (String) params.get("employeeId"));
                    List<EmployeeAnnex> annexs = annexService.find(reqParams);
                    json.setModel(annexs);
                } else if ("contractHome".equals(annexType)) {
                    //??
                    Map<String, Object> reqParams = new HashMap<String, Object>();
                    reqParams.put("employeeId", (String) params.get("employeeId"));
                    List<EmployeeContractHomeAnnex> homeAnnexs = homeAnnexService.find(reqParams);
                    json.setModel(homeAnnexs);
                } else if ("contractFinal".equals(annexType)) {
                    //??
                    Map<String, Object> reqParams = new HashMap<String, Object>();
                    reqParams.put("employeeId", id);
                    List<EmployeeContractFinalAnnex> finalAnnexs = finalAnnexService.find(reqParams);
                    json.setModel(finalAnnexs);
                } else if ("postChangeAnnex".equals(annexType) && employee.getPostChangeAnnex() != null) {
                    //???
                    json.setModel(employee.getPostChangeAnnexName());
                } else if ("deptChangeAnnex".equals(annexType) && employee.getDeptChangeAnnex() != null) {
                    //?
                    json.setModel(employee.getDeptChangeAnnexName());
                } else if ("operaChangeAnnex".equals(annexType) && employee.getOperaChangeAnnex() != null) {
                    //??
                    json.setModel(employee.getOperaChangeAnnexName());
                } else if ("wageChangeAnnex".equals(annexType) && employee.getWageChangeAnnex() != null) {
                    //?
                    json.setModel(employee.getWageChangeAnnexName());
                }
            }
            json.setMessage(annexType);
            json.setSuccess(true);
        } catch (Exception e) {
            e.printStackTrace();
            json.setSuccess(false);
        }
        return json;
    }

    /**
     * ?
     * @param request
     * @param response
     * @param plupload
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/employeeAnnexUpload")
    public AjaxJson employeeAnnexUpload(MultipartHttpServletRequest request, HttpServletResponse response) {
        logger.info("---?---");
        AjaxJson json = new AjaxJson();
        json.setMessage("?!");
        MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
        MultipartFile file = multiRequest.getFile("file");
        try {
            String content = request.getParameter("content");
            if (content.split("_").length == 2) {
                String id = StringUtils.defaultIfBlank(content.split("_")[0], "0");
                String annexType = content.split("_")[1];
                Employee employee = employeeService.get(id);
                if (employee != null && StringUtils.isNotBlank(annexType)) {
                    if ("signForm".equals(annexType)) {
                        //
                        employee.setSignFormName(file.getOriginalFilename());
                        employee.setSignForm(file.getBytes());
                        employee.setHasSignForm(1);
                        employeeService.saveOrUpdate(employee);
                    } else if ("nonPurchaseCommit".equals(annexType)) {
                        //?
                        employee.setNonPurchaseCommitName(file.getOriginalFilename());
                        employee.setNonPurchaseCommit(file.getBytes());
                        employee.setHasNonPurchaseCommit(1);
                        employeeService.saveOrUpdate(employee);
                    } else if ("annex".equals(annexType)) {
                        //
                        EmployeeAnnex annex = new EmployeeAnnex();
                        annex.setAnnexContent(file.getBytes());
                        annex.setAnnexName(file.getOriginalFilename());
                        annex.setEmployee(employee);
                        annexService.save(annex);
                    } else if ("contractHome".equals(annexType)) {
                        //??
                        EmployeeContractHomeAnnex homeAnnex = new EmployeeContractHomeAnnex();
                        homeAnnex.setAnnexContent(file.getBytes());
                        homeAnnex.setAnnexName(file.getOriginalFilename());
                        homeAnnex.setEmployee(employee);
                        homeAnnexService.save(homeAnnex);
                    } else if ("contractFinal".equals(annexType)) {
                        //??
                        EmployeeContractFinalAnnex finalAnnex = new EmployeeContractFinalAnnex();
                        finalAnnex.setAnnexContent(file.getBytes());
                        finalAnnex.setAnnexName(file.getOriginalFilename());
                        finalAnnex.setEmployee(employee);
                        finalAnnexService.save(finalAnnex);
                    } else if ("postChangeAnnex".equals(annexType)) {
                        //???
                        employee.setPostChangeAnnexName(file.getOriginalFilename());
                        employee.setPostChangeAnnex(file.getBytes());
                        employeeService.saveOrUpdate(employee);
                    } else if ("deptChangeAnnex".equals(annexType)) {
                        //?
                        employee.setDeptChangeAnnexName(file.getOriginalFilename());
                        employee.setDeptChangeAnnex(file.getBytes());
                        employeeService.saveOrUpdate(employee);
                    } else if ("operaChangeAnnex".equals(annexType)) {
                        //??
                        employee.setOperaChangeAnnexName(file.getOriginalFilename());
                        employee.setOperaChangeAnnex(file.getBytes());
                        employeeService.saveOrUpdate(employee);
                    } else if ("wageChangeAnnex".equals(annexType)) {
                        //?
                        employee.setWageChangeAnnexName(file.getOriginalFilename());
                        employee.setWageChangeAnnex(file.getBytes());
                        employeeService.saveOrUpdate(employee);
                    }
                }
                json.setMessage("?");
                json.setSuccess(true);
            }
        } catch (Exception e) {
            e.printStackTrace();
            json.setMessage("??!");
            json.setSuccess(false);
        }
        return json;
    }

    /**
     * ?
     * @param session
     * @param request
     * @param params
     * @return
     */
    @SuppressWarnings("restriction")
    @ResponseBody
    @RequestMapping(value = "/employeeAnnexDownload")
    public void employeeAnnexDownload(HttpServletRequest request, HttpServletResponse response,
            @RequestParam Map<String, Object> params) {
        logger.info("--?--");
        try {
            InputStream in = null; // 
            String fileName = null; // ??

            String id = StringUtils.defaultIfBlank((String) params.get("id"), "0");
            String annexId = StringUtils.defaultIfBlank((String) params.get("annexId"), "0");
            String annexType = request.getParameter("annexType");
            Employee employee = employeeService.get(id);
            if (employee != null && StringUtils.isNotBlank(annexType)) {
                if ("signForm".equals(annexType) && employee.getSignForm() != null) {
                    //
                    in = new ByteArrayInputStream(employee.getSignForm());
                    fileName = employee.getSignFormName();
                } else if ("nonPurchaseCommit".equals(annexType) && employee.getNonPurchaseCommit() != null) {
                    //?
                    in = new ByteArrayInputStream(employee.getNonPurchaseCommit());
                    fileName = employee.getNonPurchaseCommitName();
                } else if ("annex".equals(annexType)) {
                    //
                    EmployeeAnnex annex = annexService.get(annexId);
                    if (annex != null && annex.getAnnexContent() != null) {
                        in = new ByteArrayInputStream(annex.getAnnexContent());
                        fileName = annex.getAnnexName();
                    }
                } else if ("contractHome".equals(annexType)) {
                    //??
                    EmployeeContractHomeAnnex homeAnnex = homeAnnexService.get(annexId);
                    if (homeAnnex != null && homeAnnex.getAnnexContent() != null) {
                        in = new ByteArrayInputStream(homeAnnex.getAnnexContent());
                        fileName = homeAnnex.getAnnexName();
                    }
                } else if ("contractFinal".equals(annexType)) {
                    //??
                    EmployeeContractFinalAnnex finalAnnex = finalAnnexService.get(annexId);
                    if (finalAnnex != null && finalAnnex.getAnnexContent() != null) {
                        in = new ByteArrayInputStream(finalAnnex.getAnnexContent());
                        fileName = finalAnnex.getAnnexName();
                    }
                } else if ("postChangeAnnex".equals(annexType)) {
                    //???
                    in = new ByteArrayInputStream(employee.getPostChangeAnnex());
                    fileName = employee.getPostChangeAnnexName();
                } else if ("deptChangeAnnex".equals(annexType)) {
                    //?
                    in = new ByteArrayInputStream(employee.getDeptChangeAnnex());
                    fileName = employee.getDeptChangeAnnexName();
                } else if ("operaChangeAnnex".equals(annexType)) {
                    //??
                    in = new ByteArrayInputStream(employee.getOperaChangeAnnex());
                    fileName = employee.getOperaChangeAnnexName();
                } else if ("wageChangeAnnex".equals(annexType)) {
                    //?
                    in = new ByteArrayInputStream(employee.getWageChangeAnnex());
                    fileName = employee.getWageChangeAnnexName();
                }

                if (in != null && StringUtils.isNotBlank(fileName)) {
                    DownloadUtil.downloadFile(in, fileName, response);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * ?
     * @param session
     * @param request
     * @param params
     * @return
     */
    @OperationLog(content = "", type = OperationType.DELETE)
    @ResponseBody
    @RequestMapping(value = "/employeeAnnexDelete", method = RequestMethod.POST)
    public AjaxJson employeeAnnexDelete(HttpSession session, HttpServletRequest request,
            @RequestParam Map<String, Object> params) {
        logger.info("--?--");
        AjaxJson json = new AjaxJson();
        try {
            String id = StringUtils.defaultIfBlank((String) params.get("id"), "0");
            String annexId = StringUtils.defaultIfBlank((String) params.get("annexId"), "0");
            String annexType = request.getParameter("annexType");
            Employee employee = employeeService.get(id);
            if (employee != null && StringUtils.isNotBlank(annexType)) {
                if ("signForm".equals(annexType)) {
                    //
                    employee.setSignForm(null);
                    employee.setSignFormName(null);
                    employee.setHasSignForm(0);
                    employeeService.saveOrUpdate(employee);
                } else if ("nonPurchaseCommit".equals(annexType)) {
                    //?
                    employee.setNonPurchaseCommit(null);
                    employee.setNonPurchaseCommitName(null);
                    employee.setHasPublicFund(0);
                    employeeService.saveOrUpdate(employee);
                } else if ("annex".equals(annexType)) {
                    //
                    EmployeeAnnex annex = annexService.get(annexId);
                    if (annex != null) {
                        annexService.delete(annex);
                    }
                } else if ("contractHome".equals(annexType)) {
                    //??
                    EmployeeContractHomeAnnex homeAnnex = homeAnnexService.get(annexId);
                    if (homeAnnex != null) {
                        homeAnnexService.delete(homeAnnex);
                    }
                } else if ("contractFinal".equals(annexType)) {
                    //??
                    EmployeeContractFinalAnnex finalAnnex = finalAnnexService.get(annexId);
                    if (finalAnnex != null) {
                        finalAnnexService.delete(finalAnnex);
                    }
                } else if ("postChangeAnnex".equals(annexType)) {
                    //???
                    employee.setPostChangeAnnex(null);
                    employee.setPostChangeAnnexName(null);
                    employeeService.saveOrUpdate(employee);
                } else if ("deptChangeAnnex".equals(annexType)) {
                    //?
                    employee.setDeptChangeAnnex(null);
                    employee.setDeptChangeAnnexName(null);
                    employeeService.saveOrUpdate(employee);
                } else if ("operaChangeAnnex".equals(annexType)) {
                    //??
                    employee.setOperaChangeAnnex(null);
                    employee.setOperaChangeAnnexName(null);
                    employeeService.saveOrUpdate(employee);
                } else if ("wageChangeAnnex".equals(annexType)) {
                    //?
                    employee.setWageChangeAnnex(null);
                    employee.setWageChangeAnnexName(null);
                    employeeService.saveOrUpdate(employee);
                }
            }
            json.setModel(annexType);
            json.setSuccess(true);
            json.setMessage("??");
        } catch (Exception e) {
            e.printStackTrace();
            json.setSuccess(false);
            json.setMessage("?");
        }
        return json;
    }

    /**
     * ???
     * @param request
     * @param response
     * @param plupload
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/contractHomeAnnexList", method = RequestMethod.POST)
    public AjaxJson contractHomeAnnexList(HttpSession session, HttpServletRequest request,
            @RequestParam Map<String, Object> params) {
        logger.info("---???---");
        AjaxJson json = new AjaxJson();
        try {
            Map<String, Object> reqParams = new HashMap<String, Object>();
            reqParams.put("employeeId", (String) params.get("employeeId"));
            List<EmployeeContractHomeAnnex> homeAnnexs = homeAnnexService.find(reqParams);
            json.setModel(homeAnnexs);
            json.setSuccess(true);
        } catch (Exception e) {
            e.printStackTrace();
            json.setSuccess(false);
        }
        return json;
    }

    /**
     * ??
     * @param request
     * @param response
     * @param plupload
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/contractHomeAnnexUpload")
    public AjaxJson contractHomeAnnexUpload(MultipartHttpServletRequest request, HttpServletResponse response) {
        logger.info("---??---");
        AjaxJson json = new AjaxJson();
        json.setMessage("?!");
        MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
        MultipartFile file = multiRequest.getFile("file");
        try {
            String employeeId = request.getParameter("employeeId");
            Employee employee = employeeService.get(employeeId);
            if (employee != null) {
                EmployeeContractHomeAnnex homeAnnex = new EmployeeContractHomeAnnex();
                homeAnnex.setAnnexContent(file.getBytes());
                homeAnnex.setAnnexName(file.getOriginalFilename());
                homeAnnex.setEmployee(employee);
                homeAnnexService.save(homeAnnex);
            }
            json.setMessage("?");
            json.setSuccess(true);
        } catch (Exception e) {
            e.printStackTrace();
            json.setMessage("??!");
            json.setSuccess(false);
        }
        return json;
    }

    /**
     * ??
     * @param session
     * @param request
     * @param params
     * @return
     */
    @OperationLog(content = "", type = OperationType.DELETE)
    @ResponseBody
    @RequestMapping(value = "/contractHomeAnnexDownload/{annexId}")
    public void contractHomeAnnexDownload(HttpServletRequest request, HttpServletResponse response,
            @PathVariable String annexId) {
        logger.info("--??--");
        try {
            EmployeeContractHomeAnnex homeAnnex = homeAnnexService.get(annexId);
            if (homeAnnex != null && homeAnnex.getAnnexContent() != null) {
                InputStream in = new ByteArrayInputStream(homeAnnex.getAnnexContent());
                DownloadUtil.downloadFile(in, homeAnnex.getAnnexName(), response);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * ??
     * @param session
     * @param request
     * @param params
     * @return
     */
    @OperationLog(content = "", type = OperationType.DELETE)
    @ResponseBody
    @RequestMapping(value = "/contractHomeAnnexDelete", method = RequestMethod.POST)
    public AjaxJson contractHomeAnnexDelete(HttpSession session, HttpServletRequest request,
            @RequestParam Map<String, Object> params) {
        logger.info("--??--");
        AjaxJson json = new AjaxJson();
        try {
            String annexId = (String) params.get("annexId");
            EmployeeContractHomeAnnex homeAnnex = homeAnnexService.get(annexId);
            if (homeAnnex != null) {
                homeAnnexService.delete(homeAnnex);
                json.setSuccess(true);
                json.setMessage("??");
            }
        } catch (Exception e) {
            e.printStackTrace();
            json.setSuccess(false);
            json.setMessage("?");
        }
        return json;
    }

    /**
     * ???
     * @param request
     * @param response
     * @param plupload
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/contractFinalAnnexList", method = RequestMethod.POST)
    public AjaxJson contractFinalAnnexList(HttpSession session, HttpServletRequest request,
            @RequestParam Map<String, Object> params) {
        logger.info("---???---");
        AjaxJson json = new AjaxJson();
        try {
            Map<String, Object> reqParams = new HashMap<String, Object>();
            reqParams.put("employeeId", (String) params.get("employeeId"));
            List<EmployeeContractFinalAnnex> finalAnnexs = finalAnnexService.find(reqParams);
            json.setModel(finalAnnexs);
            json.setSuccess(true);
        } catch (Exception e) {
            e.printStackTrace();
            json.setSuccess(false);
        }
        return json;
    }

    /**
     * ??
     * @param request
     * @param response
     * @param plupload
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/contractFinalAnnexUpload")
    public AjaxJson contractFinalAnnexUpload(MultipartHttpServletRequest request, HttpServletResponse response) {
        logger.info("---??---");
        AjaxJson json = new AjaxJson();
        json.setMessage("?!");
        MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
        MultipartFile file = multiRequest.getFile("file");
        try {
            String employeeId = request.getParameter("employeeId");
            Employee employee = employeeService.get(employeeId);
            if (employee != null) {
                EmployeeContractFinalAnnex finalAnnex = new EmployeeContractFinalAnnex();
                finalAnnex.setAnnexContent(file.getBytes());
                finalAnnex.setAnnexName(file.getOriginalFilename());
                finalAnnex.setEmployee(employee);
                finalAnnexService.save(finalAnnex);
            }
            json.setMessage("?");
            json.setSuccess(true);
        } catch (Exception e) {
            e.printStackTrace();
            json.setMessage("??!");
            json.setSuccess(false);
        }
        return json;
    }

    /**
     * ??
     * @param session
     * @param request
     * @param params
     * @return
     */
    @OperationLog(content = "", type = OperationType.DELETE)
    @ResponseBody
    @RequestMapping(value = "/contractFinalAnnexDownload/{annexId}")
    public void contractFinalAnnexDownload(HttpServletRequest request, HttpServletResponse response,
            @PathVariable String annexId) {
        logger.info("--??--");
        try {
            EmployeeContractFinalAnnex finalAnnex = finalAnnexService.get(annexId);
            if (finalAnnex != null && finalAnnex.getAnnexContent() != null) {
                InputStream in = new ByteArrayInputStream(finalAnnex.getAnnexContent());
                DownloadUtil.downloadFile(in, finalAnnex.getAnnexName(), response);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * ??
     * @param session
     * @param request
     * @param params
     * @return
     */
    @OperationLog(content = "", type = OperationType.DELETE)
    @ResponseBody
    @RequestMapping(value = "/contractFinalAnnexDelete", method = RequestMethod.POST)
    public AjaxJson contractFinalAnnexDelete(HttpSession session, HttpServletRequest request,
            @RequestParam Map<String, Object> params) {
        logger.info("--??--");
        AjaxJson json = new AjaxJson();
        try {
            String annexId = (String) params.get("annexId");
            EmployeeContractFinalAnnex finalAnnex = finalAnnexService.get(annexId);
            if (finalAnnex != null) {
                finalAnnexService.delete(finalAnnex);
                json.setSuccess(true);
                json.setMessage("??");
            }
        } catch (Exception e) {
            e.printStackTrace();
            json.setSuccess(false);
            json.setMessage("?");
        }
        return json;
    }

    /**
     * Excel
     * @param session
     * @param request
     * @param params
     * @return
     */
    @RequiresPermissions("emp:baseinfomgr:export")
    @OperationLog(content = "Excel", type = OperationType.VIEW)
    @ResponseBody
    @RequestMapping(value = "/export", method = RequestMethod.POST)
    public void export(HttpServletRequest request, HttpServletResponse response,
            @RequestParam Map<String, Object> params) {
        logger.info("--Excel--");
        try {
            String fileName = ".xlsx";
            String filePath = getExportPath(request) + fileName;

            Map<String, Object> reqParams = Maps.newHashMap(params);
            List<Employee> employees = employeeService.find(reqParams);
            List<ExcelColumn> excelColumns = DynamicgridItem
                    .toExcelColumns(DynamicgridItemCache.getDynamicgridItemsByName(""));
            if (CollectionUtils.isNotEmpty(excelColumns)) {
                for (ExcelColumn excelColumn : excelColumns) {
                    if ("?".equals(excelColumn.getTitle())) {
                        excelColumns.remove(excelColumn);
                        break;
                    }
                }
                for (ExcelColumn excelColumn : excelColumns) {
                    if ("?".equals(excelColumn.getTitle())) {
                        excelColumns.remove(excelColumn);
                        break;
                    }
                }
                ObjectMapper m = new ObjectMapper();
                String json = m.writeValueAsString(employees);
                List<Map<String, Object>> data = convertJsonArrToMap(json);

                CustomizeToExcel.toFile(excelColumns, data, filePath);
            }
            DownloadUtil.downloadFile(filePath, fileName, response);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}