UserPayrollController.java 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384
  1. package cn.com.lzt.userwage.controller;
  2. import cn.com.lzt.arrangedutyoperate.dto.UserAndUserPersonnelDto;
  3. import cn.com.lzt.arrangedutyoperate.service.ArrangeDutyOperateServiceI;
  4. import cn.com.lzt.common.util.SystemUtils;
  5. import cn.com.lzt.dialogDeal.service.UserDepartOrgDealServiceI;
  6. import cn.com.lzt.userwage.dao.UserWageMinidaoDao;
  7. import cn.com.lzt.userwage.entity.UserWageEntity;
  8. import cn.com.lzt.userwage.service.UserPayrollServiceI;
  9. import cn.com.lzt.userwage.service.UserWageServiceI;
  10. import cn.com.lzt.userwagestrategy.entity.UserWagestrategyEntity;
  11. import cn.com.lzt.userwagestrategy.service.UserWagestrategyServiceI;
  12. import org.apache.commons.lang.StringUtils;
  13. import org.hibernate.Query;
  14. import org.jeecgframework.core.common.controller.BaseController;
  15. import org.jeecgframework.core.common.hibernate.qbc.CriteriaQuery;
  16. import org.jeecgframework.core.common.model.json.AjaxJson;
  17. import org.jeecgframework.core.common.model.json.DataGrid;
  18. import org.jeecgframework.core.constant.Globals;
  19. import org.jeecgframework.core.util.JeecgDataAutorUtils;
  20. import org.jeecgframework.core.util.oConvertUtils;
  21. import org.jeecgframework.tag.core.easyui.TagUtil;
  22. import org.jeecgframework.web.system.pojo.base.TSBaseUser;
  23. import org.jeecgframework.web.system.service.SystemService;
  24. import org.springframework.beans.factory.annotation.Autowired;
  25. import org.springframework.stereotype.Controller;
  26. import org.springframework.web.bind.annotation.RequestMapping;
  27. import org.springframework.web.bind.annotation.ResponseBody;
  28. import org.springframework.web.servlet.ModelAndView;
  29. import javax.servlet.http.HttpServletRequest;
  30. import javax.servlet.http.HttpServletResponse;
  31. import java.text.ParseException;
  32. import java.text.SimpleDateFormat;
  33. import java.util.*;
  34. /**
  35. * @Title: Controller
  36. * @Description: 员工工资核算表
  37. * @author onlineGenerator
  38. * @date 2017-10-26 18:36:30
  39. * @version V1.0
  40. *
  41. */
  42. @Controller
  43. @RequestMapping("/userPayrollController")
  44. public class UserPayrollController extends BaseController {
  45. @Autowired
  46. private UserPayrollServiceI userPayrollService;
  47. @Autowired
  48. private SystemService systemService;
  49. @Autowired
  50. private UserWageServiceI userWageService;
  51. @Autowired
  52. private UserWagestrategyServiceI userWagestrategyService;
  53. @Autowired
  54. private ArrangeDutyOperateServiceI arrangeDutyOperateService;
  55. // 用户和项目关系处理
  56. @Autowired
  57. UserDepartOrgDealServiceI userDepartOrgDealServiceI;
  58. @Autowired
  59. UserWageMinidaoDao userWageMinidaoDao;
  60. @RequestMapping(params = "personnelBaseArchivesManageSelectList")
  61. public ModelAndView personnelBaseArchivesManageSelectList(HttpServletRequest request) {
  62. request.setAttribute("pid", request.getParameter("pid"));
  63. return new ModelAndView("cn/com/lzt/userwage/personnelBaseArchivesManageSelectList");
  64. }
  65. @RequestMapping(params = "getPersonnelBaseArchivesManageInfo")
  66. public void getPersonnelBaseArchivesManageInfo(UserAndUserPersonnelDto userAndUserPersonnelDto,String yearmonth,HttpServletRequest request, HttpServletResponse response, DataGrid dataGrid) {
  67. //extractIdListByComma
  68. String pid=request.getParameter("pid");
  69. List<String> useridListAll=new ArrayList<String>();
  70. //根据项目pid查询所有可选用户,包括当前已选择的方便编辑;==
  71. if(pid!=null&&pid.length()!=0){
  72. pid=pid.split(",")[0];
  73. userAndUserPersonnelDto.setPid(pid);
  74. }
  75. //包括该项目id
  76. //根据项目id查询所有子节点id
  77. List<String> ChildIdList=userDepartOrgDealServiceI.getChildIdByProjectDepartId(pid);
  78. /******************************************************************/
  79. /*
  80. * 找到整个项目的工资策略,删除那些没有工资策略的员工
  81. */
  82. CriteriaQuery cq = new CriteriaQuery(UserWagestrategyEntity.class);
  83. cq.in("belongUnitid", ChildIdList.toArray(new String[0]));
  84. cq.add();
  85. cq.eq("deleteFlag", "0");
  86. cq.add();
  87. List<UserWagestrategyEntity> wageStraEntities = systemService.getListByCriteriaQuery(cq, false);
  88. HashMap<String, UserWagestrategyEntity> hm_userid2wageStragegy = new HashMap<>();
  89. for(UserWagestrategyEntity wagtstr : wageStraEntities) {
  90. hm_userid2wageStragegy.put(wagtstr.getUserid(), wagtstr);
  91. }
  92. userAndUserPersonnelDto.setChildDepartIdList(ChildIdList);
  93. userAndUserPersonnelDto.setUserIdList(useridListAll);
  94. String authSql = JeecgDataAutorUtils.loadDataSearchConditonSQLString();
  95. List<UserAndUserPersonnelDto> listUserAndUserPersonnelDto = userWageMinidaoDao.getUserAndUserPersonnelNoPage(userAndUserPersonnelDto,authSql);
  96. if(listUserAndUserPersonnelDto != null) {
  97. for(int i=listUserAndUserPersonnelDto.size()-1 ; i>=0 ; i--) {
  98. String uid =listUserAndUserPersonnelDto.get(i).getUserid();
  99. if(!hm_userid2wageStragegy.containsKey(uid)) {
  100. listUserAndUserPersonnelDto.remove(i);
  101. }
  102. }
  103. }
  104. Collections.sort(listUserAndUserPersonnelDto);
  105. //根据项目pid查询所有可选用户,包括当前已选择的方便编辑;==
  106. //dataGrid.setTotal(listUserAndUserPersonnelDto.getTotal());
  107. dataGrid.setResults(listUserAndUserPersonnelDto);
  108. TagUtil.datagrid(response, dataGrid);
  109. }
  110. /**
  111. * 员工工资核算
  112. * @return
  113. * @throws Exception
  114. */
  115. @RequestMapping(params = "userPayrollByUserId")
  116. @ResponseBody
  117. public AjaxJson userPayrollByUserId(HttpServletRequest request) throws Exception{
  118. AjaxJson j = new AjaxJson();
  119. List<UserWagestrategyEntity> userWagestrategyEntity = null;
  120. String ids = request.getParameter("userid");
  121. String moth = request.getParameter("monthly");
  122. String pid = request.getParameter("pid");
  123. String tmpe = "";
  124. String isproject = request.getParameter("isproject");
  125. j.setMsg("员工工资核算完成");
  126. if(isWagePayrollExpired(moth)) {
  127. j.setSuccess(false);
  128. j.setMsg("该月工资已发放,无法手工核算。请联系人力资源部。");
  129. return j;
  130. }
  131. if(StringUtils.isNotEmpty(ids)){
  132. tmpe = "2";
  133. List<String> idList = extractIdListByComma(ids);
  134. if(!idList.isEmpty() && idList.size() > 0){
  135. userWagestrategyEntity = new ArrayList<UserWagestrategyEntity>();
  136. for (String str : idList) {
  137. AjaxJson s = isDuties(str);
  138. if(!s.isSuccess()){
  139. return s;
  140. }
  141. if(StringUtils.isNotBlank( isproject) && isproject.equals("1") ) {
  142. StringBuffer wagehql = new StringBuffer("from UserWageEntity where userid =? and monthly = ? ");
  143. List<UserWageEntity> wageList = systemService.findHql(wagehql.toString(), str,moth);
  144. if(!wageList.isEmpty() && wageList.get(0).getStatus().equals("2")) {
  145. //人事已确认
  146. TSBaseUser ts = systemService.get(TSBaseUser.class, str);
  147. j.setSuccess(false);
  148. j.setMsg("员工【"+ts.getRealName()+"】工资已确认,不能手工核算");
  149. return j;
  150. }
  151. }
  152. StringBuffer hql = new StringBuffer("from UserWagestrategyEntity where userid = :str");
  153. List<UserWagestrategyEntity> uList = systemService.getSession().createQuery(hql.toString()).setParameter("str", str).list();
  154. if(!uList.isEmpty()){
  155. userWagestrategyEntity.add(uList.get(0));
  156. }else{
  157. TSBaseUser ts = systemService.get(TSBaseUser.class, str);
  158. j.setMsg("员工【"+ts.getRealName()+"】的没有工资策略,请先操作工资策略设定!");
  159. return j;
  160. }
  161. }
  162. //查询工资核算表需要重新核算的数据
  163. /*StringBuffer hql = new StringBuffer("from UserWageEntity where id in (:ids)");
  164. userList = systemService.getSession().createQuery(hql.toString()).setParameterList("ids", idList).list();*/
  165. userPayrollService.userPayroll(userWagestrategyEntity,moth,tmpe);
  166. systemService.addLog("员工工资核算完成", Globals.Log_Type_INSERT, Globals.Log_Leavel_INFO);
  167. }
  168. }
  169. return j;
  170. }
  171. /**
  172. * 员工工资删除
  173. * @return
  174. * @throws Exception
  175. */
  176. @RequestMapping(params = "deleteUserWageByUserId")
  177. @ResponseBody
  178. public AjaxJson deleteUserWageByUserId(HttpServletRequest request) throws Exception{
  179. AjaxJson j = new AjaxJson();
  180. List<UserWagestrategyEntity> userWagestrategyEntity = null;
  181. String ids = request.getParameter("userid");
  182. String moth = request.getParameter("monthly");
  183. String pid = request.getParameter("pid");
  184. String tmpe = "";
  185. j.setMsg("员工工资删除完成");
  186. if(isWagePayrollExpired(moth)) {
  187. j.setSuccess(false);
  188. j.setMsg("该月工资已发放,无法删除。请联系人力资源部。");
  189. return j;
  190. }
  191. if(StringUtils.isNotEmpty(ids)){
  192. List<String> idList = extractIdListByComma(ids);
  193. if(!idList.isEmpty() && idList.size() > 0){
  194. String userid = idList.get(0);
  195. StringBuffer hql = new StringBuffer("from UserWageEntity where userid = :userid and monthly = :moth");
  196. Query query = systemService.getSession().createQuery(hql.toString());
  197. query.setParameter("userid", userid);
  198. query.setParameter("moth", moth);
  199. List<UserWageEntity> list = query.list();
  200. if(!list.isEmpty() && list.size()>0){
  201. UserWageEntity wage = list.get(0);
  202. try {
  203. userWageService.delete(wage);
  204. }catch(Exception e) {
  205. TSBaseUser ts = systemService.get(TSBaseUser.class, userid);
  206. j.setMsg("员工【"+ts.getRealName()+"】的"+moth+"工资删除失败,请重试");
  207. j.setSuccess(false);
  208. return j;
  209. }
  210. }else{
  211. TSBaseUser ts = systemService.get(TSBaseUser.class, userid);
  212. j.setMsg("未找到员工【"+ts.getRealName()+"】的"+moth+"工资");
  213. j.setSuccess(false);
  214. return j;
  215. }
  216. systemService.addLog("员工工资删除完成:"+userid, Globals.Log_Type_DEL, Globals.Log_Leavel_INFO);
  217. }
  218. }
  219. return j;
  220. }
  221. /**
  222. * 员工工资核算
  223. * @return
  224. * @throws Exception
  225. */
  226. @RequestMapping(params = "userPayroll")
  227. @ResponseBody
  228. public AjaxJson userPayroll(HttpServletRequest request) throws Exception{
  229. AjaxJson j = new AjaxJson();
  230. List<UserWagestrategyEntity> userWagestrategyEntity = null;
  231. String ids = request.getParameter("ids");
  232. String moth = request.getParameter("moth");
  233. String tmpe = "";
  234. j.setMsg("员工工资核算完成");
  235. if(isWagePayrollExpired(moth)) {
  236. j.setSuccess(false);
  237. j.setMsg("抱歉!该月工资已发放,不允许任何更改。");
  238. return j;
  239. }
  240. if(StringUtils.isNotEmpty(ids)){
  241. tmpe = "2";
  242. List<String> idList = extractIdListByComma(ids);
  243. if(!idList.isEmpty() && idList.size() > 0){
  244. userWagestrategyEntity = new ArrayList<UserWagestrategyEntity>();
  245. for (String str : idList) {
  246. AjaxJson s = isDuties(str);
  247. if(!s.isSuccess()){
  248. return s;
  249. }
  250. StringBuffer hql = new StringBuffer("from UserWagestrategyEntity where userid = :str");
  251. List<UserWagestrategyEntity> uList = systemService.getSession().createQuery(hql.toString()).setParameter("str", str).list();
  252. if(!uList.isEmpty()){
  253. userWagestrategyEntity.add(uList.get(0));
  254. }else{
  255. TSBaseUser ts = systemService.get(TSBaseUser.class, str);
  256. j.setMsg("员工【"+ts.getRealName()+"】的没有工资策略,请先操作工资策略设定!");
  257. return j;
  258. }
  259. }
  260. //查询工资核算表需要重新核算的数据
  261. /*StringBuffer hql = new StringBuffer("from UserWageEntity where id in (:ids)");
  262. userList = systemService.getSession().createQuery(hql.toString()).setParameterList("ids", idList).list();*/
  263. userPayrollService.userPayroll(userWagestrategyEntity,moth,tmpe);
  264. systemService.addLog("员工工资核算完成", Globals.Log_Type_INSERT, Globals.Log_Leavel_INFO);
  265. }
  266. }
  267. return j;
  268. }
  269. /**
  270. * 上月工资,只能在4-15日之间核算(不含15日)
  271. * @param moth
  272. * @return
  273. * @throws ParseException
  274. */
  275. private boolean isWagePayrollExpired(String moth) throws ParseException {
  276. if(SystemUtils.isDebugEnvirementByOS()) {
  277. return false;
  278. }
  279. SimpleDateFormat format = new SimpleDateFormat("yyyy-MM");
  280. SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd");
  281. Calendar begincal = Calendar.getInstance();
  282. Calendar endcal = Calendar.getInstance();
  283. try {
  284. begincal.setTime(format.parse(moth));
  285. begincal.add(Calendar.MONTH, 1);
  286. begincal.set(Calendar.DAY_OF_MONTH, 4);
  287. endcal.setTime(format.parse(moth));
  288. endcal.add(Calendar.MONTH, 1);
  289. endcal.set(Calendar.DAY_OF_MONTH, 14);
  290. Date now = new Date();
  291. if(now.before(begincal.getTime())) {
  292. return true;
  293. }
  294. if(now.after(endcal.getTime())) {
  295. return true;
  296. }
  297. } catch (ParseException e) {
  298. throw e;
  299. }
  300. return false;
  301. }
  302. @RequestMapping(params = "calcuUserWages")
  303. @ResponseBody
  304. public void userPayroll1(HttpServletRequest request,String yearmonth) throws Exception{
  305. List<UserWagestrategyEntity> userWagestrategyEntity = userPayrollService.getList(UserWagestrategyEntity.class);
  306. for (UserWagestrategyEntity user : userWagestrategyEntity) {
  307. AjaxJson s = isDuties(user.getUserid());
  308. if(!s.isSuccess()){
  309. return;
  310. }
  311. }
  312. //List<UserWagestrategyEntity> userWagestrategyEntity = userPayrollServiceI.findListbySql("select * from t_bus_user_wagestrategy");
  313. userPayrollService.userPayroll(userWagestrategyEntity,yearmonth,"1");
  314. }
  315. /**
  316. * 判断员工是否有职务和工资策略
  317. * @param userid
  318. * @return
  319. */
  320. private AjaxJson isDuties(String userid){
  321. AjaxJson j = new AjaxJson();
  322. j.setSuccess(true);
  323. if(oConvertUtils.isNotEmpty(userid)){
  324. TSBaseUser user = systemService.get(TSBaseUser.class, userid);
  325. if(!"admin".equals(user.getUserName()) && !"110".equals(user.getUserName())){
  326. Map<String,String> map = userPayrollService.isDuties(userid);
  327. if(map.isEmpty() || oConvertUtils.isEmpty(map.get("basicWage"))){
  328. j.setSuccess(false);
  329. j.setMsg("员工【"+user.getRealName()+"】没有职务或没有给职务设置基本工资,请设置!");
  330. }
  331. }
  332. }
  333. return j;
  334. }
  335. /**
  336. * 得到当前年月
  337. * @return
  338. */
  339. private String getMonthlys(){
  340. Calendar cal = Calendar.getInstance();
  341. int year = cal.get(Calendar.YEAR);
  342. int month = cal.get(Calendar.MONTH );
  343. if(month < 10){
  344. month = Integer.valueOf(0+""+month);
  345. }
  346. return year+"-"+month;
  347. }
  348. }