package cn.com.lzt.userwage.controller; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Collections; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.lang.StringUtils; import org.hibernate.Query; import org.jeecgframework.core.common.controller.BaseController; import org.jeecgframework.core.common.hibernate.qbc.CriteriaQuery; import org.jeecgframework.core.common.model.json.AjaxJson; import org.jeecgframework.core.common.model.json.DataGrid; import org.jeecgframework.core.constant.Globals; import org.jeecgframework.core.util.JeecgDataAutorUtils; import org.jeecgframework.core.util.oConvertUtils; import org.jeecgframework.tag.core.easyui.TagUtil; import org.jeecgframework.web.system.pojo.base.TSBaseUser; import org.jeecgframework.web.system.service.SystemService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.servlet.ModelAndView; import cn.com.lzt.arrangedutyoperate.dto.UserAndUserPersonnelDto; import cn.com.lzt.arrangedutyoperate.service.ArrangeDutyOperateServiceI; import cn.com.lzt.common.util.SystemUtils; import cn.com.lzt.dialogDeal.service.UserDepartOrgDealServiceI; import cn.com.lzt.project.entity.ProjectEntity; import cn.com.lzt.userwage.dao.UserWageMinidaoDao; import cn.com.lzt.userwage.entity.UserWageEntity; import cn.com.lzt.userwage.service.UserNewWagePayrollServiceI; import cn.com.lzt.userwage.service.UserNewWageServiceI; import cn.com.lzt.userwagestrategy.entity.UserNewWagestrategyEntity; import cn.com.lzt.userwagestrategy.service.UserWagestrategyServiceI; /** * @Title: Controller * @Description: 员工工资核算表 * @author onlineGenerator * @date 2017-10-26 18:36:30 * @version V1.0 * */ @Controller @RequestMapping("/userNewWagePayrollController") public class UserNewWagePayrollController extends BaseController { @Autowired private UserNewWagePayrollServiceI userPayrollService; @Autowired private SystemService systemService; @Autowired private UserNewWageServiceI userWageService; @Autowired private UserWagestrategyServiceI userWagestrategyService; @Autowired private ArrangeDutyOperateServiceI arrangeDutyOperateService; // 用户和项目关系处理 @Autowired UserDepartOrgDealServiceI userDepartOrgDealServiceI; @Autowired UserWageMinidaoDao userWageMinidaoDao; @RequestMapping(params = "personnelBaseArchivesManageSelectList") public ModelAndView personnelBaseArchivesManageSelectList(HttpServletRequest request) { request.setAttribute("pid", request.getParameter("pid")); return new ModelAndView("cn/com/lzt/userwage/personnelBaseArchivesManageSelectList"); } @RequestMapping(params = "getPersonnelBaseArchivesManageInfo") public void getPersonnelBaseArchivesManageInfo(UserAndUserPersonnelDto userAndUserPersonnelDto,String yearmonth,HttpServletRequest request, HttpServletResponse response, DataGrid dataGrid) { //extractIdListByComma String pid=request.getParameter("pid"); List useridListAll=new ArrayList(); //根据项目pid查询所有可选用户,包括当前已选择的方便编辑;== if(pid!=null&&pid.length()!=0){ pid=pid.split(",")[0]; userAndUserPersonnelDto.setPid(pid); } //包括该项目id //根据项目id查询所有子节点id List ChildIdList=userDepartOrgDealServiceI.getChildIdByProjectDepartId(pid); /******************************************************************/ /* * 找到整个项目的工资策略,删除那些没有工资策略的员工 */ CriteriaQuery cq = new CriteriaQuery(UserNewWagestrategyEntity.class); cq.in("belongUnitid", ChildIdList.toArray(new String[0])); cq.add(); cq.eq("deleteFlag", "0"); cq.add(); List wageStraEntities = systemService.getListByCriteriaQuery(cq, false); HashMap hm_userid2wageStragegy = new HashMap<>(); for(UserNewWagestrategyEntity wagtstr : wageStraEntities) { hm_userid2wageStragegy.put(wagtstr.getUserid(), wagtstr); } userAndUserPersonnelDto.setChildDepartIdList(ChildIdList); userAndUserPersonnelDto.setUserIdList(useridListAll); String authSql = JeecgDataAutorUtils.loadDataSearchConditonSQLString(); List listUserAndUserPersonnelDto = userWageMinidaoDao.getUserAndUserPersonnelNoPage(userAndUserPersonnelDto,authSql); if(listUserAndUserPersonnelDto != null) { for(int i=listUserAndUserPersonnelDto.size()-1 ; i>=0 ; i--) { String uid =listUserAndUserPersonnelDto.get(i).getUserid(); if(!hm_userid2wageStragegy.containsKey(uid)) { listUserAndUserPersonnelDto.remove(i); } } } Collections.sort(listUserAndUserPersonnelDto); //根据项目pid查询所有可选用户,包括当前已选择的方便编辑;== //dataGrid.setTotal(listUserAndUserPersonnelDto.getTotal()); dataGrid.setResults(listUserAndUserPersonnelDto); TagUtil.datagrid(response, dataGrid); } /** * 员工工资核算 * @return * @throws Exception */ @RequestMapping(params = "userPayrollByUserId") @ResponseBody public AjaxJson userPayrollByUserId(HttpServletRequest request) throws Exception{ AjaxJson j = new AjaxJson(); List userWagestrategyEntity = null; String ids = request.getParameter("userid"); String moth = request.getParameter("monthly"); String pid = request.getParameter("pid"); String tmpe = ""; j.setMsg("员工工资核算完成"); if(isWagePayrollExpired(moth)) { j.setSuccess(false); j.setMsg("该月工资已发放,无法手工核算。请联系人力资源部。"); return j; } if(StringUtils.isNotEmpty(ids)){ tmpe = "2"; List idList = extractIdListByComma(ids); if(!idList.isEmpty() && idList.size() > 0){ userWagestrategyEntity = new ArrayList(); for (String str : idList) { AjaxJson s = isDuties(str); if(!s.isSuccess()){ return s; } StringBuffer hql = new StringBuffer("from UserNewWagestrategyEntity where userid = :str"); List uList = systemService.getSession().createQuery(hql.toString()).setParameter("str", str).list(); if(!uList.isEmpty()){ userWagestrategyEntity.add(uList.get(0)); }else{ TSBaseUser ts = systemService.get(TSBaseUser.class, str); j.setMsg("员工【"+ts.getRealName()+"】的没有工资策略,请先操作工资策略设定!"); return j; } } //查询工资核算表需要重新核算的数据 /*StringBuffer hql = new StringBuffer("from UserWageEntity where id in (:ids)"); userList = systemService.getSession().createQuery(hql.toString()).setParameterList("ids", idList).list();*/ userPayrollService.userPayroll(userWagestrategyEntity,moth,tmpe); systemService.addLog("员工工资核算完成", Globals.Log_Type_INSERT, Globals.Log_Leavel_INFO); } } return j; } /** * 员工工资删除 * @return * @throws Exception */ @RequestMapping(params = "deleteUserWageByUserId") @ResponseBody public AjaxJson deleteUserWageByUserId(HttpServletRequest request) throws Exception{ AjaxJson j = new AjaxJson(); List userWagestrategyEntity = null; String ids = request.getParameter("userid"); String moth = request.getParameter("monthly"); String pid = request.getParameter("pid"); String tmpe = ""; j.setMsg("员工工资删除完成"); if(isWagePayrollExpired(moth)) { j.setSuccess(false); j.setMsg("该月工资已发放,无法删除。请联系人力资源部。"); return j; } if(StringUtils.isNotEmpty(ids)){ List idList = extractIdListByComma(ids); if(!idList.isEmpty() && idList.size() > 0){ String userid = idList.get(0); StringBuffer hql = new StringBuffer("from UserWageEntity where userid = :userid and monthly = :moth"); Query query = systemService.getSession().createQuery(hql.toString()); query.setParameter("userid", userid); query.setParameter("moth", moth); List list = query.list(); if(!list.isEmpty() && list.size()>0){ UserWageEntity wage = list.get(0); try { userWageService.delete(wage); }catch(Exception e) { TSBaseUser ts = systemService.get(TSBaseUser.class, userid); j.setMsg("员工【"+ts.getRealName()+"】的"+moth+"工资删除失败,请重试"); j.setSuccess(false); return j; } }else{ TSBaseUser ts = systemService.get(TSBaseUser.class, userid); j.setMsg("未找到员工【"+ts.getRealName()+"】的"+moth+"工资"); j.setSuccess(false); return j; } systemService.addLog("员工工资删除完成:"+userid, Globals.Log_Type_DEL, Globals.Log_Leavel_INFO); } } return j; } /** * 员工工资核算 * @return * @throws Exception */ @RequestMapping(params = "userPayroll") @ResponseBody public AjaxJson userPayroll(HttpServletRequest request) throws Exception{ AjaxJson j = new AjaxJson(); List userWagestrategyEntity = null; String ids = request.getParameter("ids"); String moth = request.getParameter("moth"); String tmpe = ""; j.setMsg("员工工资核算完成"); // if(isWagePayrollExpired(moth)) { // j.setSuccess(false); // j.setMsg("抱歉!该月工资已发放,不允许任何更改。"); // return j; // } if(StringUtils.isNotEmpty(ids)){ tmpe = "2"; List idList = extractIdListByComma(ids); if(!idList.isEmpty() && idList.size() > 0){ userWagestrategyEntity = new ArrayList(); for (String str : idList) { AjaxJson s = isDuties(str); if(!s.isSuccess()){ return s; } StringBuffer hql = new StringBuffer("from UserNewWagestrategyEntity where userid = :str"); List uList = systemService.getSession().createQuery(hql.toString()).setParameter("str", str).list(); if(!uList.isEmpty()){ userWagestrategyEntity.add(uList.get(0)); }else{ TSBaseUser ts = systemService.get(TSBaseUser.class, str); j.setMsg("员工【"+ts.getRealName()+"】的没有工资策略,请先操作工资策略设定!"); return j; } } //查询工资核算表需要重新核算的数据 /*StringBuffer hql = new StringBuffer("from UserWageEntity where id in (:ids)"); userList = systemService.getSession().createQuery(hql.toString()).setParameterList("ids", idList).list();*/ userPayrollService.userPayroll(userWagestrategyEntity,moth,tmpe); systemService.addLog("员工工资核算完成", Globals.Log_Type_INSERT, Globals.Log_Leavel_INFO); } } return j; } /** * 所有项目经理工资核算 * @return * @throws Exception */ @RequestMapping(params = "projectManagerPayroll") @ResponseBody public AjaxJson projectManagerPayroll(HttpServletRequest request) throws Exception{ AjaxJson j = new AjaxJson(); String moth = request.getParameter("moth"); String tmpe = "1"; j.setMsg("所有项目经理工资核算完成"); // if(isWagePayrollExpired(moth)) { // j.setSuccess(false); // j.setMsg("抱歉!该月工资已发放,不允许任何更改。"); // return j; // } StringBuffer projecthql = new StringBuffer("from ProjectEntity where 1=1"); List projectlist = systemService.getSession().createQuery(projecthql.toString()).list(); List idList = new ArrayList(); for(ProjectEntity pentity : projectlist) { if(pentity.getJianguanLeader() != null && !idList.contains(pentity.getJianguanLeader())) { AjaxJson s = isDuties(pentity.getJianguanLeader()); if(s.isSuccess()){ idList.add(pentity.getJianguanLeader()); } } if(pentity.getXianchangLeader() != null && !idList.contains(pentity.getXianchangLeader())) { AjaxJson s = isDuties(pentity.getXianchangLeader()); if(s.isSuccess()){ idList.add(pentity.getXianchangLeader()); } } } if(!idList.isEmpty() && idList.size() > 0){ StringBuffer hql = new StringBuffer("from UserNewWagestrategyEntity where userid in (:str)"); List uList = systemService.getSession().createQuery(hql.toString()).setParameterList("str", idList).list(); if(!uList.isEmpty()){ userPayrollService.userPayroll(uList,moth,tmpe); systemService.addLog("所有项目经理工资核算完成", Globals.Log_Type_INSERT, Globals.Log_Leavel_INFO); }else{ j.setMsg("没有发现可以核算工资的项目经理"); return j; } //查询工资核算表需要重新核算的数据 /*StringBuffer hql = new StringBuffer("from UserWageEntity where id in (:ids)"); userList = systemService.getSession().createQuery(hql.toString()).setParameterList("ids", idList).list();*/ } return j; } /** * 上月工资,只能在4-15日之间核算(不含15日) * @param moth * @return * @throws ParseException */ private boolean isWagePayrollExpired(String moth) throws ParseException { if(SystemUtils.isDebugEnvirementByOS()) { return false; } SimpleDateFormat format = new SimpleDateFormat("yyyy-MM"); SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd"); Calendar begincal = Calendar.getInstance(); Calendar endcal = Calendar.getInstance(); try { begincal.setTime(format.parse(moth)); begincal.add(Calendar.MONTH, 1); begincal.set(Calendar.DAY_OF_MONTH, 4); endcal.setTime(format.parse(moth)); endcal.add(Calendar.MONTH, 1); endcal.set(Calendar.DAY_OF_MONTH, 14); Date now = new Date(); if(now.before(begincal.getTime())) { return true; } if(now.after(endcal.getTime())) { return true; } } catch (ParseException e) { throw e; } return false; } @RequestMapping(params = "calcuUserWages") @ResponseBody public void userPayroll1(HttpServletRequest request,String yearmonth) throws Exception{ List userWagestrategyEntity = userPayrollService.getList(UserNewWagestrategyEntity.class); for (UserNewWagestrategyEntity user : userWagestrategyEntity) { AjaxJson s = isDuties(user.getUserid()); if(!s.isSuccess()){ return; } } //List userWagestrategyEntity = userPayrollServiceI.findListbySql("select * from t_bus_user_wagestrategy"); userPayrollService.userPayroll(userWagestrategyEntity,yearmonth,"1"); } /** * 判断员工是否有职务和工资策略 * @param userid * @return */ private AjaxJson isDuties(String userid){ AjaxJson j = new AjaxJson(); j.setSuccess(true); if(oConvertUtils.isNotEmpty(userid)){ TSBaseUser user = systemService.get(TSBaseUser.class, userid); if(!"admin".equals(user.getUserName()) && !"110".equals(user.getUserName())){ Map map = userPayrollService.isDuties(userid); if(map.isEmpty() || oConvertUtils.isEmpty(map.get("basicWage"))){ j.setSuccess(false); j.setMsg("员工【"+user.getRealName()+"】没有职务或没有给职务设置基本工资,请设置!"); } } } return j; } /** * 得到当前年月 * @return */ private String getMonthlys(){ Calendar cal = Calendar.getInstance(); int year = cal.get(Calendar.YEAR); int month = cal.get(Calendar.MONTH ); if(month < 10){ month = Integer.valueOf(0+""+month); } return year+"-"+month; } }