UserNewWagePayrollController.java 15 KB

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