ProjecttaskController.java 37 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976
  1. package com.xcgl.projecttask.controller;
  2. import cn.com.lzt.common.util.CustomerConstant;
  3. import com.aliyun.oss.OSSClient;
  4. import com.aliyun.oss.model.OSSObject;
  5. import com.xcgl.activititask.bean.ActivitiTaskResult;
  6. import com.xcgl.activititask.entity.PActivitiTaskEntity;
  7. import com.xcgl.activititask.util.ActivitiTaskHandler;
  8. import com.xcgl.activititask.util.ActivitiTaskHandlerUtil;
  9. import com.xcgl.projecttask.dao.ProjectTaskDao;
  10. import com.xcgl.projecttask.entity.ProjecttaskEntity;
  11. import com.xcgl.projecttask.service.ProjecttaskServiceI;
  12. import com.xcgl.projecttaskplan.entity.ProjectTaskPlanEntity;
  13. import com.xcgl.taskresult.entity.TaskResultEntity;
  14. import com.xcgl.utils.XcglConstant;
  15. import org.apache.commons.lang.StringUtils;
  16. import org.apache.log4j.Logger;
  17. import org.hibernate.criterion.Restrictions;
  18. import org.jeecgframework.core.beanvalidator.BeanValidators;
  19. import org.jeecgframework.core.common.controller.BaseController;
  20. import org.jeecgframework.core.common.exception.BusinessException;
  21. import org.jeecgframework.core.common.hibernate.qbc.CriteriaQuery;
  22. import org.jeecgframework.core.common.model.json.AjaxJson;
  23. import org.jeecgframework.core.common.model.json.DataGrid;
  24. import org.jeecgframework.core.constant.Globals;
  25. import org.jeecgframework.core.util.*;
  26. import org.jeecgframework.poi.excel.ExcelImportUtil;
  27. import org.jeecgframework.poi.excel.entity.ExportParams;
  28. import org.jeecgframework.poi.excel.entity.ImportParams;
  29. import org.jeecgframework.poi.excel.entity.vo.NormalExcelConstants;
  30. import org.jeecgframework.tag.core.easyui.TagUtil;
  31. import org.jeecgframework.web.system.pojo.base.TSDepart;
  32. import org.jeecgframework.web.system.pojo.base.TSUser;
  33. import org.jeecgframework.web.system.service.SystemService;
  34. import org.springframework.beans.factory.annotation.Autowired;
  35. import org.springframework.http.HttpHeaders;
  36. import org.springframework.http.HttpStatus;
  37. import org.springframework.http.MediaType;
  38. import org.springframework.http.ResponseEntity;
  39. import org.springframework.stereotype.Controller;
  40. import org.springframework.ui.ModelMap;
  41. import org.springframework.web.bind.annotation.*;
  42. import org.springframework.web.multipart.MultipartFile;
  43. import org.springframework.web.multipart.MultipartHttpServletRequest;
  44. import org.springframework.web.servlet.ModelAndView;
  45. import org.springframework.web.util.UriComponentsBuilder;
  46. import javax.servlet.http.HttpServletRequest;
  47. import javax.servlet.http.HttpServletResponse;
  48. import javax.validation.ConstraintViolation;
  49. import javax.validation.Validator;
  50. import java.io.BufferedInputStream;
  51. import java.io.IOException;
  52. import java.io.InputStream;
  53. import java.io.OutputStream;
  54. import java.net.URI;
  55. import java.text.SimpleDateFormat;
  56. import java.util.*;
  57. import java.util.zip.ZipEntry;
  58. import java.util.zip.ZipOutputStream;
  59. /**
  60. * @Title: Controller
  61. * @Description: 项目工作
  62. * @author onlineGenerator
  63. * @date 2018-09-07 18:09:01
  64. * @version V1.0
  65. *
  66. */
  67. @Controller
  68. @RequestMapping("/projecttaskController")
  69. public class ProjecttaskController extends BaseController {
  70. /**
  71. * Logger for this class
  72. */
  73. private static final Logger logger = Logger.getLogger(ProjecttaskController.class);
  74. @Autowired
  75. private ProjecttaskServiceI projecttaskService;
  76. @Autowired
  77. private SystemService systemService;
  78. @Autowired
  79. private Validator validator;
  80. @Autowired
  81. private ProjectTaskDao projectTaskDao;
  82. /**
  83. * 项目工作列表 页面跳转
  84. *
  85. * @return
  86. */
  87. @RequestMapping(params = "list")
  88. public ModelAndView list(HttpServletRequest request) {
  89. ModelAndView mv = null;
  90. String plantype = request.getParameter("type");
  91. if(StringUtils.isNotEmpty(plantype)){
  92. switch (plantype) {
  93. case "xmpx":// 培训工作(项目培训)
  94. mv = new ModelAndView("com/xcgl/projecttask/projecttaskList-peixun");
  95. break;
  96. case "lzsb":// 离职上报
  97. mv = new ModelAndView("com/xcgl/projecttask/projecttaskList-lizhi");
  98. break;
  99. case "wlsq":// 物料申请
  100. mv = new ModelAndView("com/xcgl/projecttask/projecttaskList-wuliao");
  101. break;
  102. case "bjxc":// 保洁工作
  103. mv = new ModelAndView("com/xcgl/projecttask/projecttaskList-baojie");
  104. break;
  105. case "pmdept": //项目管理部工作
  106. mv = new ModelAndView("com/xcgl/projecttask/projecttaskList-pmdept");
  107. break;
  108. case "tyrw":// 通用工作
  109. mv = new ModelAndView("com/xcgl/projecttask/projecttaskList");
  110. break;
  111. }
  112. }
  113. if(mv == null)
  114. mv = new ModelAndView("com/xcgl/projecttask/projecttaskList");
  115. request.setAttribute("tasktype", plantype);
  116. request.setAttribute("planid", request.getParameter("planid"));
  117. return mv;
  118. }
  119. /**
  120. * easyui AJAX请求数据
  121. *
  122. * @param request
  123. * @param response
  124. * @param dataGrid
  125. */
  126. @RequestMapping(params = "datagrid")
  127. public void datagrid(ProjecttaskEntity projecttask,HttpServletRequest request, HttpServletResponse response, DataGrid dataGrid) {
  128. CriteriaQuery cq = new CriteriaQuery(ProjecttaskEntity.class, dataGrid);
  129. //查询条件组装器
  130. // org.jeecgframework.core.extend.hqlsearch.HqlGenerateUtil.installHql(cq, projecttask, request.getParameterMap());
  131. try{
  132. //自定义追加查询条件
  133. String tasktype = request.getParameter("tasktype");
  134. if(StringUtils.isNotEmpty(tasktype)){
  135. cq.eq("tasktype", tasktype );
  136. }
  137. String query_planendtime_begin = request.getParameter("planendtime_begin1");
  138. String query_planendtime_end = request.getParameter("planendtime_end2");
  139. if(StringUtil.isNotEmpty(query_planendtime_begin)){
  140. cq.ge("planendtime", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(query_planendtime_begin));
  141. }
  142. if(StringUtil.isNotEmpty(query_planendtime_end)){
  143. cq.le("planendtime", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(query_planendtime_end));
  144. }
  145. String description = request.getParameter("description");
  146. if(StringUtil.isNotEmpty(description)) {
  147. cq.like("description", "%"+description+"%");
  148. }
  149. String name = request.getParameter("name");
  150. if(StringUtil.isNotEmpty(name)) {
  151. cq.like("name", "%"+name+"%");
  152. }
  153. String owner = request.getParameter("owner");
  154. if(StringUtil.isNotEmpty(owner)) {
  155. cq.eq("owner", owner);
  156. }
  157. String taskstatus = request.getParameter("taskstatus");
  158. if(StringUtil.isNotEmpty(taskstatus)) {
  159. cq.eq("taskstatus", taskstatus);
  160. }
  161. String projectid = request.getParameter("projectid");
  162. if(StringUtil.isNotEmpty(projectid)) {
  163. cq.eq("projectid", projectid);
  164. }
  165. if(StringUtil.isNotEmpty(projecttask.getTaskplanid())) {
  166. cq.eq("taskplanid", projecttask.getTaskplanid());
  167. }
  168. }catch (Exception e) {
  169. throw new BusinessException(e.getMessage());
  170. }
  171. cq.add();
  172. this.projecttaskService.getDataGridReturn(cq, true);
  173. List dataList = dataGrid.getResults();
  174. String deptSql = "select id,departname from t_s_depart ";
  175. List<Map<String, Object>> projectinfo = systemService.findForJdbc(deptSql);
  176. HashMap<String, String> projectMap = new HashMap<String, String>();
  177. for (Map<String, Object> map : projectinfo) {
  178. projectMap.put(map.get("id").toString(), map.get("departname").toString());
  179. }
  180. String userSql = "select id,realname from t_s_base_user";
  181. List<Map<String, Object>> userinfo = systemService.findForJdbc(userSql);
  182. HashMap<String, String> userMap = new HashMap<String, String>();
  183. for (Map<String, Object> map : userinfo) {
  184. userMap.put(map.get("id").toString(), map.get("realname").toString());
  185. }
  186. ArrayList<String> ids = new ArrayList<String>();
  187. for(Object data :dataList) {
  188. ProjecttaskEntity task = (ProjecttaskEntity)data;
  189. setOutTimeMsg(task);
  190. task.setProjectname(projectMap.get( task.getProjectid()));
  191. task.setOwnername(userMap.get(task.getOwner()));
  192. ids.add(task.getId());
  193. }
  194. String qryUploadAttr = request.getParameter("qryupload");
  195. if(ids.size() > 0 && StringUtils.isNotEmpty(qryUploadAttr) && qryUploadAttr.equals("1")) {
  196. String idstr = "'"+StringUtils.join(ids,"','")+"'";
  197. String attrSql = "select distinct taskid from t_sys_file file "
  198. + "left join p_taskresult result on file.busi_id = result.id and file.busi_table = 'p_taskresult' "
  199. + "where result.taskid in("+idstr+") ";
  200. List<String> exsitID = systemService.findListbySql(attrSql);
  201. HashMap<String,String> exsitIDMap = new HashMap<String, String>();
  202. for (String id : exsitID) {
  203. exsitIDMap.put(id, id);
  204. }
  205. for(Object data :dataList) {
  206. ProjecttaskEntity task = (ProjecttaskEntity)data;
  207. if(exsitIDMap.containsKey(task.getId())) {
  208. task.setUploadattr("有附件");
  209. }
  210. }
  211. }
  212. dataGrid.setResults(dataList);
  213. TagUtil.datagrid(response, dataGrid);
  214. }
  215. /**
  216. * 删除项目工作
  217. *
  218. * @return
  219. */
  220. @RequestMapping(params = "doDel")
  221. @ResponseBody
  222. public AjaxJson doDel(ProjecttaskEntity projecttask, HttpServletRequest request) {
  223. String message = null;
  224. AjaxJson j = new AjaxJson();
  225. projecttask = systemService.getEntity(ProjecttaskEntity.class, projecttask.getId());
  226. message = "项目工作删除成功";
  227. try{
  228. projecttaskService.delete(projecttask);
  229. systemService.addLog(message, Globals.Log_Type_DEL, Globals.Log_Leavel_INFO);
  230. }catch(Exception e){
  231. e.printStackTrace();
  232. message = "项目工作删除失败";
  233. throw new BusinessException(e.getMessage());
  234. }
  235. j.setMsg(message);
  236. return j;
  237. }
  238. @RequestMapping(params = "goCloseTask")
  239. public String goCloseTask(HttpServletRequest request) {
  240. String id = request.getParameter("id");
  241. if(StringUtils.isNotBlank(id)){
  242. ProjecttaskEntity projecttask= projecttaskService.getEntity(ProjecttaskEntity.class, id);
  243. request.setAttribute("task", projecttask);
  244. }
  245. return "com/xcgl/projecttask/close_task";
  246. }
  247. @RequestMapping(params = "doCloseTask")
  248. @ResponseBody
  249. public AjaxJson doCloseTask(String id,String msg, HttpServletRequest request) {
  250. AjaxJson retJson = new AjaxJson();
  251. TSUser tuser = (TSUser) ContextHolderUtils.getSession().getAttribute("LOCAL_CLINET_USER");
  252. String changeSql = "update p_projecttask set taskstatus =? ,executer = ? ,closemsg=? where id = ? ";
  253. systemService.executeSql(changeSql, XcglConstant.TASKSTATUS_CLOSED, tuser.getId(), msg, id);
  254. retJson.setMsg("工作关闭成功。");
  255. return retJson;
  256. }
  257. /**
  258. * 批量删除项目工作
  259. *
  260. * @return
  261. */
  262. @RequestMapping(params = "doBatchDel")
  263. @ResponseBody
  264. public AjaxJson doBatchDel(String ids,HttpServletRequest request){
  265. String message = null;
  266. AjaxJson j = new AjaxJson();
  267. message = "项目工作删除成功";
  268. try{
  269. for(String id:ids.split(",")){
  270. ProjecttaskEntity projecttask = systemService.getEntity(ProjecttaskEntity.class,
  271. id
  272. );
  273. projecttaskService.delete(projecttask);
  274. systemService.addLog(message, Globals.Log_Type_DEL, Globals.Log_Leavel_INFO);
  275. }
  276. }catch(Exception e){
  277. e.printStackTrace();
  278. message = "项目工作删除失败";
  279. throw new BusinessException(e.getMessage());
  280. }
  281. j.setMsg(message);
  282. return j;
  283. }
  284. /**
  285. * 添加项目工作
  286. *
  287. * @return
  288. */
  289. @RequestMapping(params = "doAdd")
  290. @ResponseBody
  291. public AjaxJson doAdd(ProjecttaskEntity projecttask, HttpServletRequest request) {
  292. String message = null;
  293. AjaxJson j = new AjaxJson();
  294. message = "项目工作添加成功";
  295. try{
  296. projecttaskService.save(projecttask);
  297. systemService.addLog(message, Globals.Log_Type_INSERT, Globals.Log_Leavel_INFO);
  298. }catch(Exception e){
  299. e.printStackTrace();
  300. message = "项目工作添加失败";
  301. throw new BusinessException(e.getMessage());
  302. }
  303. j.setMsg(message);
  304. return j;
  305. }
  306. /**
  307. * 更新项目工作
  308. *
  309. * @return
  310. */
  311. @RequestMapping(params = "doUpdate")
  312. @ResponseBody
  313. public AjaxJson doUpdate(ProjecttaskEntity projecttask, HttpServletRequest request) {
  314. String message = null;
  315. AjaxJson j = new AjaxJson();
  316. message = "项目工作更新成功";
  317. ProjecttaskEntity t = projecttaskService.get(ProjecttaskEntity.class, projecttask.getId());
  318. try {
  319. MyBeanUtils.copyBeanNotNull2Bean(projecttask, t);
  320. projecttaskService.saveOrUpdate(t);
  321. systemService.addLog(message, Globals.Log_Type_UPDATE, Globals.Log_Leavel_INFO);
  322. } catch (Exception e) {
  323. e.printStackTrace();
  324. message = "项目工作更新失败";
  325. throw new BusinessException(e.getMessage());
  326. }
  327. j.setMsg(message);
  328. return j;
  329. }
  330. /**
  331. * 项目工作新增页面跳转
  332. *
  333. * @return
  334. */
  335. @RequestMapping(params = "goAdd")
  336. public ModelAndView goAdd(ProjecttaskEntity projecttask, HttpServletRequest req) {
  337. if (StringUtil.isNotEmpty(projecttask.getId())) {
  338. projecttask = projecttaskService.getEntity(ProjecttaskEntity.class, projecttask.getId());
  339. req.setAttribute("projecttaskPage", projecttask);
  340. }
  341. return new ModelAndView("com/xcgl/projecttask/projecttask-add");
  342. }
  343. /**
  344. * 项目工作编辑页面跳转
  345. *
  346. * @return
  347. */
  348. @RequestMapping(params = "goUpdate")
  349. public ModelAndView goUpdate(ProjecttaskEntity projecttask, HttpServletRequest req) {
  350. if (StringUtil.isNotEmpty(projecttask.getId())) {
  351. projecttask = projecttaskService.getEntity(ProjecttaskEntity.class, projecttask.getId());
  352. //查询名称数据
  353. if(StringUtils.isNotEmpty(projecttask.getOwner())) {
  354. TSUser owner = systemService.get(TSUser.class, projecttask.getOwner());
  355. projecttask.setOwnername(owner.getRealName());
  356. }
  357. if(StringUtils.isNotEmpty(projecttask.getExecuter())) {
  358. TSUser owner = systemService.get(TSUser.class, projecttask.getExecuter());
  359. projecttask.setExecutername(owner.getRealName());
  360. }
  361. if(StringUtils.isNotEmpty(projecttask.getProjectid())) {
  362. TSDepart dept = systemService.get(TSDepart.class, projecttask.getProjectid());
  363. projecttask.setProjectname(dept.getDepartname());
  364. }
  365. if(StringUtils.isNotEmpty(projecttask.getTaskplanid())) {
  366. ProjectTaskPlanEntity plan = systemService.get(ProjectTaskPlanEntity.class, projecttask.getTaskplanid());
  367. projecttask.setPlanname(plan.getName());
  368. }
  369. req.setAttribute("projecttaskPage", projecttask);
  370. }
  371. return new ModelAndView("com/xcgl/projecttask/projecttask-update");
  372. }
  373. /**
  374. * 导入功能跳转
  375. *
  376. * @return
  377. */
  378. @RequestMapping(params = "upload")
  379. public ModelAndView upload(HttpServletRequest req) {
  380. req.setAttribute("controller_name","projecttaskController");
  381. return new ModelAndView("common/upload/pub_excel_upload");
  382. }
  383. /**
  384. * 导出excel
  385. *
  386. * @param request
  387. * @param response
  388. */
  389. @RequestMapping(params = "exportXls")
  390. public String exportXls(ProjecttaskEntity projecttask,HttpServletRequest request,HttpServletResponse response
  391. , DataGrid dataGrid,ModelMap modelMap) {
  392. CriteriaQuery cq = new CriteriaQuery(ProjecttaskEntity.class, dataGrid);
  393. //查询条件组装器
  394. try{
  395. //自定义追加查询条件
  396. String tasktype = request.getParameter("tasktype");
  397. if(StringUtils.isNotEmpty(tasktype)){
  398. cq.eq("tasktype", tasktype );
  399. }
  400. String query_planendtime_begin = request.getParameter("planendtime_begin1");
  401. String query_planendtime_end = request.getParameter("planendtime_end2");
  402. if(StringUtil.isNotEmpty(query_planendtime_begin)){
  403. cq.ge("planendtime", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(query_planendtime_begin));
  404. }
  405. if(StringUtil.isNotEmpty(query_planendtime_end)){
  406. cq.le("planendtime", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(query_planendtime_end));
  407. }
  408. String description = request.getParameter("description");
  409. if(StringUtil.isNotEmpty(description)) {
  410. cq.like("description", "%"+description+"%");
  411. }
  412. String name = request.getParameter("name");
  413. if(StringUtil.isNotEmpty(name)) {
  414. cq.like("name", "%"+name+"%");
  415. }
  416. String owner = request.getParameter("owner");
  417. if(StringUtil.isNotEmpty(owner)) {
  418. cq.eq("owner", owner);
  419. }
  420. String taskstatus = request.getParameter("taskstatus");
  421. if(StringUtil.isNotEmpty(taskstatus)) {
  422. cq.eq("taskstatus", owner);
  423. }
  424. String projectid = request.getParameter("projectid");
  425. if(StringUtil.isNotEmpty(projectid)) {
  426. cq.eq("projectid", owner);
  427. }
  428. }catch (Exception e) {
  429. throw new BusinessException(e.getMessage());
  430. }
  431. cq.add();
  432. List<ProjecttaskEntity> projecttasks = this.projecttaskService.getListByCriteriaQuery(cq,false);
  433. modelMap.put(NormalExcelConstants.FILE_NAME,"项目工作");
  434. modelMap.put(NormalExcelConstants.CLASS,ProjecttaskEntity.class);
  435. modelMap.put(NormalExcelConstants.PARAMS,new ExportParams("项目工作列表", "导出人:"+ResourceUtil.getSessionUser().getRealName(),
  436. "导出信息"));
  437. modelMap.put(NormalExcelConstants.DATA_LIST,projecttasks);
  438. return NormalExcelConstants.JEECG_EXCEL_VIEW;
  439. }
  440. /**
  441. * 导出excel 使模板
  442. *
  443. * @param request
  444. * @param response
  445. */
  446. @RequestMapping(params = "exportXlsByT")
  447. public String exportXlsByT(ProjecttaskEntity projecttask,HttpServletRequest request,HttpServletResponse response
  448. , DataGrid dataGrid,ModelMap modelMap) {
  449. modelMap.put(NormalExcelConstants.FILE_NAME,"项目工作");
  450. modelMap.put(NormalExcelConstants.CLASS,ProjecttaskEntity.class);
  451. modelMap.put(NormalExcelConstants.PARAMS,new ExportParams("项目工作列表", "导出人:"+ResourceUtil.getSessionUser().getRealName(),
  452. "导出信息"));
  453. modelMap.put(NormalExcelConstants.DATA_LIST,new ArrayList());
  454. return NormalExcelConstants.JEECG_EXCEL_VIEW;
  455. }
  456. @SuppressWarnings("unchecked")
  457. @RequestMapping(params = "importExcel", method = RequestMethod.POST)
  458. @ResponseBody
  459. public AjaxJson importExcel(HttpServletRequest request, HttpServletResponse response) {
  460. AjaxJson j = new AjaxJson();
  461. MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
  462. Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
  463. for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
  464. MultipartFile file = entity.getValue();// 获取上传文件对象
  465. ImportParams params = new ImportParams();
  466. params.setTitleRows(2);
  467. params.setHeadRows(1);
  468. params.setNeedSave(true);
  469. try {
  470. List<ProjecttaskEntity> listProjecttaskEntitys = ExcelImportUtil.importExcel(file.getInputStream(),ProjecttaskEntity.class,params);
  471. for (ProjecttaskEntity projecttask : listProjecttaskEntitys) {
  472. projecttaskService.save(projecttask);
  473. }
  474. j.setMsg("文件导入成功!");
  475. } catch (Exception e) {
  476. j.setMsg("文件导入失败!");
  477. logger.error(ExceptionUtil.getExceptionMessage(e));
  478. }finally{
  479. try {
  480. file.getInputStream().close();
  481. } catch (IOException e) {
  482. e.printStackTrace();
  483. }
  484. }
  485. }
  486. return j;
  487. }
  488. @RequestMapping(method = RequestMethod.GET)
  489. @ResponseBody
  490. public List<ProjecttaskEntity> list() {
  491. List<ProjecttaskEntity> listProjecttasks=projecttaskService.getList(ProjecttaskEntity.class);
  492. return listProjecttasks;
  493. }
  494. @RequestMapping(value = "/{id}", method = RequestMethod.GET)
  495. @ResponseBody
  496. public ResponseEntity<?> get(@PathVariable("id") String id) {
  497. ProjecttaskEntity task = projecttaskService.get(ProjecttaskEntity.class, id);
  498. if (task == null) {
  499. return new ResponseEntity(HttpStatus.NOT_FOUND);
  500. }
  501. return new ResponseEntity(task, HttpStatus.OK);
  502. }
  503. @RequestMapping(method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE)
  504. @ResponseBody
  505. public ResponseEntity<?> create(@RequestBody ProjecttaskEntity projecttask, UriComponentsBuilder uriBuilder) {
  506. //调用JSR303 Bean Validator进行校验,如果出错返回含400错误码及json格式的错误信息.
  507. Set<ConstraintViolation<ProjecttaskEntity>> failures = validator.validate(projecttask);
  508. if (!failures.isEmpty()) {
  509. return new ResponseEntity(BeanValidators.extractPropertyAndMessage(failures), HttpStatus.BAD_REQUEST);
  510. }
  511. //保存
  512. try{
  513. projecttaskService.save(projecttask);
  514. } catch (Exception e) {
  515. e.printStackTrace();
  516. return new ResponseEntity(HttpStatus.NO_CONTENT);
  517. }
  518. //按照Restful风格约定,创建指向新任务的url, 也可以直接返回id或对象.
  519. String id = projecttask.getId();
  520. URI uri = uriBuilder.path("/api/projecttaskController/" + id).build().toUri();
  521. HttpHeaders headers = new HttpHeaders();
  522. headers.setLocation(uri);
  523. return new ResponseEntity(headers, HttpStatus.CREATED);
  524. }
  525. @RequestMapping(value = "/{id}", method = RequestMethod.PUT, consumes = MediaType.APPLICATION_JSON_VALUE)
  526. public ResponseEntity<?> update(@RequestBody ProjecttaskEntity projecttask) {
  527. //调用JSR303 Bean Validator进行校验,如果出错返回含400错误码及json格式的错误信息.
  528. Set<ConstraintViolation<ProjecttaskEntity>> failures = validator.validate(projecttask);
  529. if (!failures.isEmpty()) {
  530. return new ResponseEntity(BeanValidators.extractPropertyAndMessage(failures), HttpStatus.BAD_REQUEST);
  531. }
  532. //保存
  533. try{
  534. projecttaskService.saveOrUpdate(projecttask);
  535. } catch (Exception e) {
  536. e.printStackTrace();
  537. return new ResponseEntity(HttpStatus.NO_CONTENT);
  538. }
  539. //按Restful约定,返回204状态码, 无内容. 也可以返回200状态码.
  540. return new ResponseEntity(HttpStatus.NO_CONTENT);
  541. }
  542. @RequestMapping(value = "/{id}", method = RequestMethod.DELETE)
  543. @ResponseStatus(HttpStatus.NO_CONTENT)
  544. public void delete(@PathVariable("id") String id) {
  545. projecttaskService.deleteEntityById(ProjecttaskEntity.class, id);
  546. }
  547. @RequestMapping(params = "taskUndoCountStatic")
  548. @ResponseBody
  549. public Object taskUndoCountStatic(HttpServletRequest request) {
  550. List<?> list =projectTaskDao.taskUndoCountStatic(ResourceUtil.getSessionUser().getId());
  551. return list;
  552. }
  553. @RequestMapping(params = "userTaskList")
  554. public String userTaskList(HttpServletRequest request) {
  555. return "com/xcgl/projecttask/user-task";
  556. }
  557. @RequestMapping(params = "userTaskDatagrid")
  558. public void userTaskDatagrid(ProjecttaskEntity projecttask,HttpServletRequest request, HttpServletResponse response, DataGrid dataGrid) {
  559. CriteriaQuery cq = new CriteriaQuery(ProjecttaskEntity.class, dataGrid);
  560. //查询条件组装器
  561. // org.jeecgframework.core.extend.hqlsearch.HqlGenerateUtil.installHql(cq, projecttask, request.getParameterMap());
  562. try{
  563. TSUser user = ResourceUtil.getSessionUser();
  564. cq.add(Restrictions.eq("owner",user.getId()));
  565. cq.add(Restrictions.ne("taskstatus","20"));
  566. String filter = request.getParameter("filter");
  567. if(StringUtils.isNotBlank(filter)){
  568. if(filter.equals("1")){//紧急
  569. Calendar c = Calendar.getInstance();
  570. c.add(Calendar.DAY_OF_MONTH,1);
  571. cq.add(Restrictions.gt("planendtime",new Date()));
  572. cq.add(Restrictions.lt("planendtime",c.getTime()));
  573. }
  574. if(filter.equals("2")){//逾期
  575. cq.add(Restrictions.lt("planendtime",new Date()));
  576. }
  577. }
  578. }catch (Exception e) {
  579. throw new BusinessException(e.getMessage());
  580. }
  581. cq.add();
  582. this.projecttaskService.getDataGridReturn(cq, true);
  583. List<ProjecttaskEntity> resultList = dataGrid.getResults();
  584. for(ProjecttaskEntity ptask : resultList){
  585. String sourceType = ptask.getSourcetype();
  586. if(!StringUtils.equals(sourceType,"activititask")){
  587. ptask.setSourceid(null);
  588. }
  589. }
  590. TagUtil.datagrid(response, dataGrid);
  591. }
  592. //完成任务
  593. @RequestMapping(params = "finishTask")
  594. @ResponseBody
  595. public Object finishTask(ProjecttaskEntity projecttask,HttpServletRequest request) {
  596. projecttask = systemService.findUniqueByProperty(ProjecttaskEntity.class,"id" ,projecttask.getId() );
  597. projecttask.setExeendtime(new Date());
  598. projecttask.setTaskstatus(XcglConstant.TASKSTATUS_DONE);
  599. systemService.save(projecttask);
  600. return true;
  601. }
  602. //检查任务
  603. @RequestMapping(params = "checkResult")
  604. @ResponseBody
  605. public Object checkResult(ProjecttaskEntity projecttask,HttpServletRequest request) {
  606. projecttask = systemService.getEntity(ProjecttaskEntity.class,projecttask.getId());
  607. String activitiTaskId = projecttask.getActivitiTaskId();
  608. if(StringUtils.isNotBlank(activitiTaskId)){
  609. PActivitiTaskEntity pActivitiTaskEntity = systemService.getEntity(PActivitiTaskEntity.class,activitiTaskId);
  610. ActivitiTaskHandler handler = ActivitiTaskHandlerUtil.getHandler(pActivitiTaskEntity.getExecuteClass());
  611. return handler.checkResult(projecttask);
  612. }
  613. return new ActivitiTaskResult(true);
  614. }
  615. @RequestMapping(params = "goExeTaskView")
  616. public ModelAndView goExeTaskView(HttpServletRequest request) {
  617. ModelAndView mv = null;
  618. String id = request.getParameter("id");
  619. String entrance = request.getParameter("entrance");
  620. if(entrance == null || "".equals(entrance)){
  621. request.setAttribute("entrance", "other");
  622. }else{
  623. request.setAttribute("entrance", entrance);
  624. }
  625. ProjecttaskEntity task = systemService.get(ProjecttaskEntity.class, id);
  626. List<TaskResultEntity> taskresultList = systemService.findByProperty(TaskResultEntity.class, "taskid", id);
  627. try {
  628. if(taskresultList.size() > 0) {
  629. request.setAttribute("taskresult", taskresultList.get(0));
  630. }else {
  631. TaskResultEntity taskresult = new TaskResultEntity();
  632. taskresult.setTaskid(id);
  633. systemService.save(taskresult);
  634. request.setAttribute("taskresult", taskresult);
  635. }
  636. } catch (Exception e) {
  637. logger.error(e.getMessage());
  638. }
  639. mv = new ModelAndView("com/xcgl/taskresult/taskResultByTask-add");
  640. request.setAttribute("task", task);
  641. return mv;
  642. }
  643. @RequestMapping(params = "doExeTask")
  644. @ResponseBody
  645. public AjaxJson doExeTask(String id, HttpServletRequest request) {
  646. String msg = "工作开始执行。";
  647. AjaxJson retJson = new AjaxJson();
  648. TSUser tuser = (TSUser) ContextHolderUtils.getSession().getAttribute("LOCAL_CLINET_USER");
  649. ProjecttaskEntity task = systemService.get(ProjecttaskEntity.class, id);
  650. task.setTaskstatus(XcglConstant.TASKSTATUS_EXEING);
  651. task.setExecuter(tuser.getId());
  652. task.setExestarttime(new Date());
  653. // String changeSql = "update p_projecttask set taskstatus = ? ,executer = ? where id = ?";
  654. // systemService.executeSql(changeSql, XcglConstant.TASKSTATUS_EXEING, tuser.getId(), id);
  655. systemService.saveOrUpdate(task);
  656. retJson.setMsg(msg);
  657. retJson.setObj(task);
  658. systemService.addLog(msg+"taskid:"+id, Globals.Log_Leavel_INFO, Globals.Log_Type_OTHER);
  659. return retJson;
  660. }
  661. //查询业务实体的的审批流实例id(procInstId)
  662. @RequestMapping(params = "findProcInstId")
  663. @ResponseBody
  664. public AjaxJson findProcInstId(String sourceid,String tasktype, HttpServletRequest request) {
  665. String msg = "查询审批流实例成功";
  666. AjaxJson retJson = new AjaxJson();
  667. if(StringUtils.isEmpty(sourceid) || StringUtils.isEmpty(tasktype)) {
  668. retJson.setSuccess(false);
  669. retJson.setMsg("系统异常,数据错误,请联系管理员");
  670. return retJson;
  671. }
  672. //这两个签报类型与任务类型值不同,需要转换,其他都相同
  673. if(tasktype.equals("sameleveltransfer")) {
  674. tasktype = "samelevel_transfer_new";
  675. }else if(tasktype.equals("user_leave")) {
  676. tasktype = "leave_new";
  677. }
  678. String findtableSql = "select real_tablename from t_process_busconfig where process_type = '"+tasktype+"'";
  679. List<String> tables = systemService.findListbySql(findtableSql);
  680. if(tables == null || tables.size() == 0) {
  681. retJson.setSuccess(false);
  682. retJson.setMsg("查询不到审批流配置数据,请联系管理员");
  683. return retJson;
  684. }
  685. String procInstIdSql = "select proc_inst_id from "+tables.get(0)+" where id = '"+sourceid+"'";
  686. List<String> instIds = systemService.findListbySql(procInstIdSql);
  687. if(instIds == null || instIds.size() == 0) {
  688. retJson.setSuccess(false);
  689. retJson.setMsg("查询不到签报数据,请联系管理员");
  690. return retJson;
  691. }
  692. retJson.setObj(instIds.get(0));
  693. retJson.setMsg(msg);
  694. return retJson;
  695. }
  696. @RequestMapping(params = "myTaskList")
  697. public String myTaskList(HttpServletRequest request) {
  698. return "com/xcgl/projecttask/mytaskList";
  699. }
  700. @RequestMapping(params = "myTaskListDatagrid")
  701. public void myTaskListDatagrid(ProjecttaskEntity projecttask,HttpServletRequest request, HttpServletResponse response, DataGrid dataGrid) {
  702. CriteriaQuery cq = new CriteriaQuery(ProjecttaskEntity.class, dataGrid);
  703. // 查询条件组装器
  704. if (StringUtils.isNotBlank(projecttask.getCreateName())) {
  705. // 模糊查询
  706. cq.like("createName", "%" + projecttask.getCreateName() + "%");
  707. projecttask.setCreateName(null);
  708. }
  709. // 查询条件组装器
  710. if (StringUtils.isNotBlank(projecttask.getName())) {
  711. // 模糊查询
  712. cq.like("name", "%" + projecttask.getName() + "%");
  713. projecttask.setName(null);
  714. }
  715. //查询条件组装器
  716. if(StringUtils.isNotBlank(projecttask.getTaskstatus())){
  717. if("1".equals(projecttask.getTaskstatus())){
  718. //未完成(预计完成时间大于等于当前时间,Taskstatus=0,1)
  719. cq.in("taskstatus", new Object[]{"0", "1"});
  720. cq.ge("planendtime", new Date());
  721. projecttask.setTaskstatus(null);
  722. }else if("20".equals(projecttask.getTaskstatus())){
  723. //已完成(完成时间小于等于预计完成时间,Taskstatus=20)
  724. cq.eq("taskstatus", "20");
  725. cq.add(Restrictions.leProperty("exeendtime","planendtime"));
  726. projecttask.setTaskstatus(null);
  727. }else if("30".equals(projecttask.getTaskstatus())){
  728. //逾期未完成(预计完成时间小于当前时间,Taskstatus=0,1)
  729. cq.in("taskstatus", new Object[]{"0", "1"});
  730. cq.lt("planendtime", new Date());
  731. projecttask.setTaskstatus(null);
  732. }else if("40".equals(projecttask.getTaskstatus())){
  733. //逾期已完成(完成时间大于预计完成时间,Taskstatus=20)
  734. cq.eq("taskstatus", "20");
  735. cq.add(Restrictions.gtProperty("exeendtime","planendtime"));
  736. projecttask.setTaskstatus(null);
  737. }
  738. }
  739. //查询条件组装器
  740. try{
  741. TSUser user = ResourceUtil.getSessionUser();
  742. cq.add(Restrictions.eq("owner",user.getId()));
  743. }catch (Exception e) {
  744. throw new BusinessException(e.getMessage());
  745. }
  746. org.jeecgframework.core.extend.hqlsearch.HqlGenerateUtil.installHql(cq, projecttask, request.getParameterMap());
  747. cq.add();
  748. this.projecttaskService.getDataGridReturn(cq, true);
  749. List<ProjecttaskEntity> resultList = dataGrid.getResults();
  750. for(ProjecttaskEntity ptask : resultList){
  751. String sourceType = ptask.getSourcetype();
  752. if(!StringUtils.equals(sourceType,"activititask")){
  753. ptask.setSourceid(null);
  754. }
  755. if("0".equals(ptask.getTaskstatus()) || "1".equals(ptask.getTaskstatus())){
  756. Date nowDate = new Date();
  757. Date endDate = ptask.getPlanendtime();
  758. if (nowDate.getTime() > endDate.getTime()) {
  759. ptask.setStateWrittenWords("逾期未完成");
  760. }else{
  761. ptask.setStateWrittenWords("未完成");
  762. }
  763. }else if("20".equals(ptask.getTaskstatus())){
  764. Date endTime = ptask.getExeendtime();
  765. if(endTime == null){
  766. ptask.setStateWrittenWords("已完成");
  767. }else{
  768. Date endDate = ptask.getPlanendtime();
  769. if(endTime.getTime() > endDate.getTime()){
  770. ptask.setStateWrittenWords("逾期已完成");
  771. }else{
  772. ptask.setStateWrittenWords("已完成");
  773. }
  774. }
  775. }else if("10".equals(ptask.getTaskstatus())){
  776. ptask.setStateWrittenWords("已关闭");
  777. }
  778. }
  779. TagUtil.datagrid(response, dataGrid);
  780. }
  781. // 下载附件
  782. @RequestMapping(params = "downloadAttr")
  783. public void downloadAttr(String taskid ,HttpServletRequest request, HttpServletResponse response) {
  784. String deptSql = "select dept.departname as projectname,result.id as id "
  785. + "from p_taskresult result \n"
  786. + "left join p_projecttask task on result.taskid = task.id\n"
  787. + "left join t_s_depart dept on task.projectid = dept.id\n" + "where task.id =? ";
  788. List<Map<String, Object>> projectinfo = systemService.findForJdbc(deptSql, taskid);
  789. HashMap<String, String> projectMap = new HashMap<String, String>();
  790. for (Map<String, Object> map : projectinfo) {
  791. projectMap.put(map.get("id").toString(), map.get("projectname").toString());
  792. }
  793. List<Map<String, Object>> fileInfo = new ArrayList<Map<String, Object>>();
  794. String fileInfoSql = "select file_url,file_name,busi_id "
  795. + "from t_sys_file file left join p_taskresult result on file.busi_id = result.id and file.busi_table = 'p_taskresult' where result.taskid = ?";
  796. fileInfo = systemService.findForJdbc(fileInfoSql, taskid);
  797. if (fileInfo.size() == 0) {
  798. return;
  799. }
  800. zipfiles(fileInfo, projectMap, request, response);
  801. }
  802. // 下载所有附件附件
  803. @RequestMapping(params = "downloadAllAttr")
  804. public void downloadAllAttr(String planid, HttpServletRequest request, HttpServletResponse response) {
  805. String planEndTimeBegin = request.getParameter("planendtime_begin1");
  806. String planEndTImeEnd = request.getParameter("planendtime_end2");
  807. String taskstatus = request.getParameter("taskstatus");
  808. String whereStr= "";
  809. whereStr += StringUtils.isNotEmpty(planEndTimeBegin)?" and task.planendtime > '"+planEndTimeBegin+"'" :"";
  810. whereStr += StringUtils.isNotEmpty(planEndTImeEnd)?" and task.planendtime < '"+planEndTImeEnd+"'" :"";
  811. whereStr += StringUtils.isNotEmpty(taskstatus)?" and task.taskstatus = '"+taskstatus+"'" :"";
  812. String deptSql = "select dept.departname as projectname,result.id as id from p_taskresult result \n"
  813. + "left join p_projecttask task on result.taskid = task.id \n"
  814. + "left join t_s_depart dept on task.projectid = dept.id \n" + "where task.taskplanid =? "+whereStr;
  815. List<Map<String, Object>> projectinfo = systemService.findForJdbc(deptSql, planid);
  816. HashMap<String, String> projectMap = new HashMap<String, String>();
  817. for (Map<String, Object> map : projectinfo) {
  818. projectMap.put(map.get("id").toString(), map.get("projectname").toString());
  819. }
  820. String fileInfoSql = "select file_url,file_name,busi_id\n" + "from t_sys_file file \n"
  821. + "left join p_taskresult result on file.busi_id = result.id and file.busi_table = 'p_taskresult' \n"
  822. + "left join p_projecttask task on result.taskid = task.id\n" + "where task.taskplanid = ?"+whereStr;
  823. List<Map<String, Object>> fileInfo = systemService.findForJdbc(fileInfoSql, planid);
  824. if (fileInfo.size() == 0) {
  825. return;
  826. }
  827. zipfiles(fileInfo, projectMap, request, response);
  828. }
  829. private void zipfiles(List<Map<String,Object>> fileInfo,HashMap<String,String> projectMap,HttpServletRequest request, HttpServletResponse response) {
  830. InputStream inputStream = null;
  831. OutputStream outputStream = null;
  832. ZipOutputStream zipOutputStream = null;
  833. String timenow = "";
  834. SimpleDateFormat formater = new SimpleDateFormat("yyMMddHHmmss_sss");
  835. try {
  836. timenow = formater.format(new Date());
  837. } catch (Exception e) {
  838. }
  839. OSSClient ossClient = null;
  840. try {
  841. outputStream=response.getOutputStream();
  842. String codedFileName = "任务附件下载_"+timenow+".zip";
  843. if (isIE(request)) {
  844. codedFileName = java.net.URLEncoder.encode(codedFileName, "UTF8");
  845. } else {
  846. codedFileName = new String(codedFileName.getBytes("UTF-8"), "ISO-8859-1");
  847. }
  848. zipOutputStream = new ZipOutputStream(outputStream);
  849. response.setContentType("application/octet-stream ");
  850. response.setHeader("Connection", "close"); // 表示不能用浏览器直接打开
  851. response.setHeader("Accept-Ranges", "bytes");// 告诉客户端允许断点续传多线程连接下载
  852. response.setHeader("Content-Disposition",
  853. "attachment;filename=" + codedFileName);
  854. response.setCharacterEncoding("UTF-8");
  855. ossClient = new OSSClient(CustomerConstant.ENDPOINT, CustomerConstant.ACCESSKEY_ID, CustomerConstant.ACCESSKEY_SECRET);
  856. for (Map<String, Object> map : fileInfo) {
  857. String fileUrl = map.get("file_url").toString();
  858. String fileName = projectMap.get(map.get("busi_id").toString())+ "_"+map.get("file_name").toString();
  859. OSSObject ossObject = ossClient.getObject(CustomerConstant.BUCKETNAME, fileUrl);
  860. inputStream = new BufferedInputStream(ossObject.getObjectContent());
  861. ZipEntry entry = new ZipEntry(fileName);
  862. zipOutputStream.putNextEntry(entry);
  863. byte[] buf = new byte[1024];
  864. int len;
  865. while ((len = inputStream.read(buf)) > 0) {
  866. zipOutputStream.write(buf, 0, len);
  867. }
  868. }
  869. // 关闭client
  870. ossClient.shutdown();
  871. zipOutputStream.flush();
  872. } catch (Exception e) {
  873. logger.info("--通过流的方式获取文件异常--" + e.getMessage());
  874. }finally{
  875. try {
  876. if(zipOutputStream != null) {
  877. zipOutputStream.close();
  878. }
  879. if(inputStream != null){
  880. inputStream.close();
  881. }
  882. if(outputStream != null){
  883. outputStream.close();
  884. }
  885. } catch (IOException e) {
  886. org.jeecgframework.core.util.LogUtil.error(e.getMessage());
  887. }
  888. }
  889. }
  890. boolean isIE(HttpServletRequest request) {
  891. return (request.getHeader("USER-AGENT").toLowerCase().indexOf("msie") > 0 || request.getHeader("USER-AGENT").toLowerCase().indexOf("rv:11.0") > 0) ? true : false;
  892. }
  893. private void setOutTimeMsg(ProjecttaskEntity task) {
  894. if(task.getExeendtime() == null && task.getPlanendtime().compareTo(new Date()) < 0) {
  895. task.setOuttimemsg("已逾期");
  896. }
  897. if(task.getExeendtime() != null && task.getExeendtime().compareTo(task.getPlanendtime()) > 0) {
  898. task.setOuttimemsg("逾期完成");
  899. }
  900. }
  901. @RequestMapping(params = "downloadAttrByTask")
  902. public void downloadAttrByTask(String taskid, HttpServletRequest request, HttpServletResponse response) {
  903. String deptSql = "select dept.departname as projectname ,task.taskplanid as id from p_projecttask task \n"
  904. + "left join t_s_depart dept on task.projectid = dept.id \n" + "where task.id =? " ;
  905. List<Map<String, Object>> projectinfo = systemService.findForJdbc(deptSql, taskid);
  906. HashMap<String, String> projectMap = new HashMap<String, String>();
  907. for (Map<String, Object> map : projectinfo) {
  908. projectMap.put(map.get("id").toString(), map.get("projectname").toString());
  909. }
  910. String fileInfoSql = "select file_url,file_name,busi_id\n" + "from t_sys_file file where file.busi_id =? ";
  911. List<Map<String, Object>> fileInfo = systemService.findForJdbc(fileInfoSql, projectinfo.get(0).get("id".toString()));
  912. if (fileInfo.size() == 0) {
  913. return;
  914. }
  915. zipfiles(fileInfo, projectMap, request, response);
  916. }
  917. }