Bladeren bron

批示留言增加暂存、撤回功能。提交一个版本

wanyuan 9 maanden geleden
bovenliggende
commit
05a0af734a
17 gewijzigde bestanden met toevoegingen van 432 en 25 verwijderingen
  1. 19 0
      02-script/sql/v1.4_createTaskProcessSummaryTemp.sql
  2. 15 0
      tc-service/tap-task/src/main/java/com/minto/app/task/beans/task_process_summary_temp.hbm.xml
  3. 17 0
      tc-service/tap-task/src/main/java/com/minto/app/task/dao/ITaskProcessSummaryTempDao.java
  4. 36 0
      tc-service/tap-task/src/main/java/com/minto/app/task/dao/TaskProcessSummaryTempDaoImpl.java
  5. 54 0
      tc-service/tap-task/src/main/java/com/minto/app/task/manager/TaskManagerImpl.java
  6. 3 0
      tc-service/tap-task/src/main/resources/META-INF/module/task/i18n/task_en.properties
  7. 2 0
      tc-service/tap-task/src/main/resources/META-INF/module/task/i18n/task_zh_CN.properties
  8. 2 0
      tip-api/src/main/java/com/minto/app/behavior/manager/IBehManager.java
  9. 31 0
      tip-api/src/main/java/com/minto/app/task/beans/TaskProcessSummaryTempBean.java
  10. 33 1
      tip-api/src/main/java/com/minto/app/task/manager/ITaskManager.java
  11. 4 0
      tip-api/src/main/java/com/minto/app/task/util/TaskTransverter.java
  12. 3 0
      tip-front/src/main/java/com/minto/app/task/controller/TaskByTypeController.java
  13. 74 19
      tip-front/src/main/java/com/minto/app/task/controller/TaskController.java
  14. 0 1
      tip-front/src/main/webapp/tc_suite/minto/task/js/listAction.js
  15. 24 0
      tip-front/src/main/webapp/tc_suite/taskmt/js/task.js
  16. 106 0
      tip-front/src/main/webapp/tc_suite/taskmt/taskMessageList.jsp
  17. 9 4
      tip-service/tip-common/src/main/java/com/minto/app/behavior/manager/BehManagerImpl.java

+ 19 - 0
02-script/sql/v1.4_createTaskProcessSummaryTemp.sql

@@ -0,0 +1,19 @@
+-- ----------------------------
+-- Table structure for task_process_summary_temp
+-- ----------------------------
+DROP TABLE IF EXISTS "public"."task_process_summary_temp";
+CREATE TABLE "public"."task_process_summary_temp"(
+    "id"        int8 NOT NULL,
+    "task_id"   int8,
+    "person_id" int8,
+    "data"      text COLLATE "pg_catalog"."default"
+);
+COMMENT ON COLUMN "public"."task_process_summary_temp"."id" IS '批示留言暂存信息';
+COMMENT ON COLUMN "public"."task_process_summary_temp"."task_id" IS '任务id';
+COMMENT ON COLUMN "public"."task_process_summary_temp"."person_id" IS '人员id';
+COMMENT ON COLUMN "public"."task_process_summary_temp"."data" IS '暂存数据';
+
+-- ----------------------------
+-- Primary Key structure for table task_process_summary_temp
+-- ----------------------------
+ALTER TABLE "public"."task_process_summary_temp" ADD CONSTRAINT "task_process_summary_temp_pkey" PRIMARY KEY ("id");

+ 15 - 0
tc-service/tap-task/src/main/java/com/minto/app/task/beans/task_process_summary_temp.hbm.xml

@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="gb2312"?>
+<!--
+  ~ Copyright (c) 2014, 2022, Chengdu Minto Technology Co.,LTD. All rights reserved.
+  ~ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+  -->
+
+<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
+<hibernate-mapping package="com.minto.app.task.beans">
+    <class name="com.minto.app.task.beans.TaskProcessSummaryTempBean" table="task_process_summary_temp">
+        <id column="id" name="id" type="java.lang.Long"><generator class="assigned" /></id>
+        <property column="task_id" length="19" name="taskId" not-null="false" type="java.lang.Long" />
+        <property column="person_id" length="19" name="personId" not-null="false" type="java.lang.Long" />
+        <property column="data" name="data" not-null="false" type="java.lang.String" />
+    </class>
+</hibernate-mapping>

+ 17 - 0
tc-service/tap-task/src/main/java/com/minto/app/task/dao/ITaskProcessSummaryTempDao.java

@@ -0,0 +1,17 @@
+package com.minto.app.task.dao;
+
+import com.minto.app.task.beans.TaskProcessSummaryTempBean;
+import com.minto.core.dao.BaseDao;
+
+/**
+ * 应用模块名称<p>
+ * 代码描述<p>
+ *
+ * @author wany
+ * @since 2024/5/30
+ */
+public interface ITaskProcessSummaryTempDao extends BaseDao{
+    TaskProcessSummaryTempBean findOneByTaskAndPerson(Long taskId, Long personId);
+
+    void deleteByTaskAndPerson(Long taskId, Long personId);
+}

+ 36 - 0
tc-service/tap-task/src/main/java/com/minto/app/task/dao/TaskProcessSummaryTempDaoImpl.java

@@ -0,0 +1,36 @@
+package com.minto.app.task.dao;
+
+import java.util.List;
+
+import com.minto.app.task.beans.TaskProcessSummaryTempBean;
+import com.minto.core.dao.BaseDaoImpl;
+import com.minto.core.util.CollectionUtil;
+import org.hibernate.criterion.Criterion;
+import org.hibernate.criterion.Restrictions;
+import org.springframework.stereotype.Repository;
+
+/**
+ * 应用模块名称<p>
+ * 代码描述<p>
+ *
+ * @author wany
+ * @since 2024/5/30
+ */
+@Repository("taskProcessSummaryTempDao")
+public class TaskProcessSummaryTempDaoImpl extends BaseDaoImpl implements ITaskProcessSummaryTempDao{
+
+    @Override
+    public TaskProcessSummaryTempBean findOneByTaskAndPerson(Long taskId, Long personId){
+        Criterion criterion = Restrictions.and(Restrictions.eq("taskId", taskId),
+                Restrictions.eq("personId", personId));
+        List<TaskProcessSummaryTempBean> list = getHibernateTpl().query(TaskProcessSummaryTempBean.class, criterion);
+        return CollectionUtil.isEmpty(list) ? null : list.get(0);
+    }
+
+    @Override
+    public void deleteByTaskAndPerson(Long taskId, Long personId){
+        Criterion criterion = Restrictions.and(Restrictions.eq("taskId", taskId),
+                Restrictions.eq("personId", personId));
+        getHibernateTpl().delete(TaskProcessSummaryTempBean.class, criterion);
+    }
+}

+ 54 - 0
tc-service/tap-task/src/main/java/com/minto/app/task/manager/TaskManagerImpl.java

@@ -225,6 +225,8 @@ public class TaskManagerImpl implements ITaskManager {
 	@Autowired
 	private ITaskProcessSummaryDao taskProcessSummaryDao;
 	@Autowired
+	private ITaskProcessSummaryTempDao taskProcessSummaryTempDao;
+	@Autowired
 	private ITaskReportSummaryDao taskReportSummaryDao;
 	@Autowired
 	private ITaskProcessRelationDao taskProcessRelationDao;
@@ -20551,4 +20553,56 @@ public class TaskManagerImpl implements ITaskManager {
 	public void saveTaskProcessSummaryBeanList(List<TaskProcessSummaryBean> taskProcessSummaryBeans) {
 		taskProcessSummaryDao.addTaskProcess(taskProcessSummaryBeans);
 	}
+
+	@Override
+	public Long saveOrUpdateTaskProcessTemp(TaskProcessSummaryTempBean tempBean){
+		if(tempBean.getTaskId() == null || tempBean.getPersonId() == null){
+			throw new IllegalArgumentException("参数错误!");
+		}
+		TaskProcessSummaryTempBean db = findTaskProcessTempByTaskAndPerson(tempBean.getTaskId(),
+				tempBean.getPersonId());
+		if(db == null){
+			tempBean.setId(UUIDUtil.UUIDAbsLong());
+			taskProcessSummaryTempDao.save(tempBean);
+		} else{
+			tempBean.setId(db.getId());
+			taskProcessSummaryTempDao.update(tempBean);
+		}
+		return tempBean.getId();
+	}
+
+	@Override
+	public TaskProcessSummaryTempBean findTaskProcessTempByTaskAndPerson(Long taskId, Long personId){
+		return taskProcessSummaryTempDao.findOneByTaskAndPerson(taskId, personId);
+	}
+
+	@Override
+	public void deleteTaskProcessTempByTaskAndPerson(Long taskId, Long personId){
+		taskProcessSummaryTempDao.deleteByTaskAndPerson(taskId, personId);
+	}
+
+	@Override
+	public void deleteTaskProcess(Long itemId, Long pid) throws Exception{
+		//移除附件
+		TaskProcessSummaryBean process = taskProcessSummaryDao.findTaskProcessById(itemId);
+		if(process == null){
+			return;
+		}
+		Calendar instance = Calendar.getInstance();
+		instance.setTime(process.getProcessDate());
+		instance.add(Calendar.MINUTE,30);
+		if(!pid.equals(process.getPersonId())){
+			throw new IllegalAccessException("不是批示/留言的发布者不能撤回!");
+		}
+		if(new Date().compareTo(instance.getTime())>0){
+			throw new IllegalAccessException("已发布超过30分钟不能撤回!");
+		}
+		//移除附件
+		attachmentManager.deleteByReference(process.getTaskId(),itemId);
+		//移除行为
+		behManager.deleteByBehTypeAndExt1(ResourceTypeEnum.Task.getKey(),String.valueOf(process.getTaskId()),
+				String.valueOf(itemId));
+		//移除批示留言
+		taskProcessSummaryDao.delete(TaskProcessSummaryBean.class,itemId);
+	}
 }

+ 3 - 0
tc-service/tap-task/src/main/resources/META-INF/module/task/i18n/task_en.properties

@@ -54,6 +54,7 @@ task.department.to.settle=Department to settle
 task.task.to.settle=Task to settle
 task.generate.report=Generate report
 task.withdraw=Withdraw
+task.porcess.withdraw=Withdraw
 task.escalation.plan=Escalation plan
 task.release.plan=Release plan
 task.sign.for=Sign for
@@ -99,6 +100,7 @@ task.comment.message=Comment / Message
 task.enter.message.content=Enter message content
 task.add.attachments=Add attachments
 task.submit=Submit
+task.temporarily.store=Temporarily Store
 task.no.information=no information!
 task.issued=Issued
 task.progress.report=Progress report
@@ -145,6 +147,7 @@ task.supervision.notice=Supervision notice
 task.upload=Upload
 task.supervisor=Supervisor
 task.security.classification=security.classification
+
 task.reply=Reply
 task.signing.situation=Signing situation
 task.inspection.work=Inspection work

+ 2 - 0
tc-service/tap-task/src/main/resources/META-INF/module/task/i18n/task_zh_CN.properties

@@ -55,6 +55,7 @@ task.department.to.settle=\u5355\u4F4D\u529E\u7ED3
 task.task.to.settle=\u4E8B\u9879\u529E\u7ED3
 task.generate.report=\u751F\u6210\u62A5\u544A
 task.withdraw=\u64A4\u56DE\u4E8B\u9879
+task.porcess.withdraw=\u64A4\u56DE
 task.escalation.plan=\u4E0A\u62A5\u8BA1\u5212
 task.release.plan=\u53D1\u5E03\u8BA1\u5212
 task.sign.for=\u7B7E\u6536
@@ -100,6 +101,7 @@ task.comment.message=\u6279\u793A/\u7559\u8A00
 task.enter.message.content=\u8F93\u5165\u7559\u8A00\u5185\u5BB9
 task.add.attachments=\u6DFB\u52A0\u9644\u4EF6
 task.submit=\u63D0\u4EA4
+task.temporarily.store=\u6682\u5B58
 task.no.information=\u6682\u65E0\u4FE1\u606F\uFF01
 task.issued=\u4E0B\u53D1
 task.progress.report=\u8FDB\u5EA6\u6C47\u62A5

+ 2 - 0
tip-api/src/main/java/com/minto/app/behavior/manager/IBehManager.java

@@ -595,4 +595,6 @@ public interface IBehManager {
      * @return
      */
     List<Map<String, Object>> findBehaviorByBehType(int behType, List<Long> ids);
+
+    void deleteByBehTypeAndExt1(Integer resType, String resId, String ext1);
 }

+ 31 - 0
tip-api/src/main/java/com/minto/app/task/beans/TaskProcessSummaryTempBean.java

@@ -0,0 +1,31 @@
+package com.minto.app.task.beans;
+
+import com.minto.core.po.BasePO;
+import lombok.*;
+
+/**
+ * 任务模块<p>
+ * 人员批示留言暂存信息<p>
+ *
+ * @author wany
+ * @since 2024/5/30
+ */
+@Setter
+@Getter
+public class TaskProcessSummaryTempBean extends BasePO{
+    /**
+     * 任务id
+     */
+    private Long taskId;
+
+    /**
+     * 人员id
+     */
+    private Long personId;
+
+    /**
+     * 暂存数据
+     */
+    public String data;
+
+}

+ 33 - 1
tip-api/src/main/java/com/minto/app/task/manager/ITaskManager.java

@@ -34,7 +34,6 @@ import com.minto.tip.common.exceptions.BusinessException;
 import org.hibernate.criterion.Criterion;
 import org.springframework.lang.NonNull;
 
-import javax.validation.constraints.NotNull;
 import java.sql.SQLException;
 import java.text.ParseException;
 import java.util.*;
@@ -4626,6 +4625,39 @@ public interface ITaskManager {
     Map<String,Object> checkingTaskEmail(List<Long> taskId);
 
     void saveTaskProcessSummaryBeanList(List<TaskProcessSummaryBean> taskProcessSummaryBeans);
+
+    /**
+     * 保存或者更新批示、留言的暂存
+     *
+     * @param tempBean
+     * @return
+     */
+    Long saveOrUpdateTaskProcessTemp(TaskProcessSummaryTempBean tempBean);
+
+    /**
+     * 查询暂存的批示、留言信息
+     *
+     * @param taskId
+     * @param personId
+     * @return
+     */
+    TaskProcessSummaryTempBean findTaskProcessTempByTaskAndPerson(Long taskId, Long personId);
+
+    /**
+     * 移除暂存的批示、留言信息
+     *
+     * @param taskId
+     * @param personId
+     * @return
+     */
+    void deleteTaskProcessTempByTaskAndPerson(Long taskId, Long personId);
+
+    /**
+     * 撤回批示留言
+     * @param itemId
+     * @param pid
+     */
+    void deleteTaskProcess(Long itemId,Long pid) throws Exception;
 }
 
 

+ 4 - 0
tip-api/src/main/java/com/minto/app/task/util/TaskTransverter.java

@@ -966,6 +966,10 @@ public class TaskTransverter{
                     resultObj.put("personIsLeader",TaskByTypeUtil.isLeader(person.getId(), person.getOrgCorporationId()));
                     resultObj.put("dname", orgDepartmentBean == null ? "" : orgDepartmentBean.getDname());
                     resultObj.put("comeFrom", tprocss.getComeFrom());
+                    Calendar instance = Calendar.getInstance();
+                    instance.add(Calendar.MINUTE, -30);
+                    //时间小于三十分钟,批示留言可撤回
+                    resultObj.put("lessThanHalfAnHour",tprocss.getProcessDate()!=null && DateUtil.compare_date(instance.getTime(),tprocss.getProcessDate()) < 0);
                 }
                 result = true;
             } else if (o instanceof CommonResourceRelationBean) {

+ 3 - 0
tip-front/src/main/java/com/minto/app/task/controller/TaskByTypeController.java

@@ -7952,6 +7952,9 @@ public class TaskByTypeController extends BaseController{
             // 人员id
             final Long pid = user.getId();
             Long departmentId = AppContext.currentDepartmentId();
+            //暂存信息
+            model.put("pid", pid);
+            model.put("tempProcess", taskManager.findTaskProcessTempByTaskAndPerson(taskId, pid));
 
             //设置查看标记 by zhangyu 2018-5-18
             TaskSummaryBean summary = taskManager.findTaskSummaryBeanById(taskId);

+ 74 - 19
tip-front/src/main/java/com/minto/app/task/controller/TaskController.java

@@ -6,6 +6,24 @@
 package com.minto.app.task.controller;
 
 
+import java.io.*;
+import java.nio.charset.StandardCharsets;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.util.*;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipOutputStream;
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.Cookie;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.Valid;
+import javax.validation.constraints.NotBlank;
+
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 import com.google.common.collect.Sets;
@@ -112,24 +130,6 @@ import org.springframework.util.CollectionUtils;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.servlet.ModelAndView;
 
-import javax.servlet.ServletOutputStream;
-import javax.servlet.http.Cookie;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.validation.Valid;
-import javax.validation.constraints.NotBlank;
-import java.io.*;
-import java.nio.charset.StandardCharsets;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.time.LocalDate;
-import java.time.LocalDateTime;
-import java.util.*;
-import java.util.function.Function;
-import java.util.stream.Collectors;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipOutputStream;
-
 import static com.minto.app.project.controller.ProjectController.createTaskMemberBean;
 
 @Controller
@@ -1251,6 +1251,60 @@ public class TaskController extends BaseController {
         return null;
     }
 
+    /**
+     * 暂存批示留言
+     * @param id
+     * @param request
+     * @param response
+     * @return
+     * @throws Exception
+     */
+    @RequestMapping(value = "/task/{id}/bbs/", method = RequestMethod.POST, params = { "m=tempSaveTaskProcess" })
+    public void saveTaskProcessTemp(@PathVariable("id") Long id , HttpServletRequest request,
+            HttpServletResponse response) throws Exception {
+        Map<String, Object> result = new HashMap<>();
+        try{
+            TaskProcessSummaryTempBean tempBean = new TaskProcessSummaryTempBean();
+            tempBean.setTaskId(id);
+            tempBean.setPersonId(AppContext.currentUserId());
+            tempBean.setData(ReqUtil.getString(request, "data", ""));
+            taskManager.saveOrUpdateTaskProcessTemp(tempBean);
+            result.put("state", "success");
+        } catch(Exception e){
+            result.put("state", "error");
+            result.put("message", e.getMessage());
+            log.error(e.getMessage(), e);
+        } finally{
+            RespUtil.rendJson(response, result);
+        }
+
+    }
+
+    /**
+     * 撤回批示留言
+     * @param id
+     * @param request
+     * @param response
+     * @return
+     * @throws Exception
+     */
+    @RequestMapping(value = "/task/{id}/bbs/", method = RequestMethod.POST, params = { "m=withdrawTaskProcess" })
+    public void withdrawTaskProcess(@PathVariable("id") Long id , HttpServletRequest request,HttpServletResponse response) throws Exception {
+        Map<String, Object> result = new HashMap<>();
+        try{
+            Long itemId = ReqUtil.getLong(request, "itemId");
+            Long pid = AppContext.getCurrentUser().getId();
+            taskManager.deleteTaskProcess(itemId,pid);
+            result.put("state", "success");
+        } catch(Exception e){
+            result.put("state", "error");
+            result.put("message", e.getMessage());
+            log.error(e.getMessage(), e);
+        } finally{
+            RespUtil.rendJson(response, result);
+        }
+    }
+
 
     //汇报留言保存
     @RequestMapping(value = "/task/{id}/saveReportLeave")
@@ -3645,7 +3699,8 @@ public class TaskController extends BaseController {
                     }
                 });
             }
-
+            //移除暂存信息
+            taskManager.deleteTaskProcessTempByTaskAndPerson(Long.parseLong(id), pid);
         } catch (Exception e) {
             log.error(ExceptionUtil.printExceptionStackTrace(e));
             result.put("state", "error");

+ 0 - 1
tip-front/src/main/webapp/tc_suite/minto/task/js/listAction.js

@@ -153,7 +153,6 @@ function auditTask(taskType,auditType,id){
  * @param callback 回调
  */
 function sendTask(taskType,id,callback){
-    debugger;
     if (id.length === 0) {
         $.alert($.i18n("task.the.items.to.be.assigned"));
         return ;

+ 24 - 0
tip-front/src/main/webapp/tc_suite/taskmt/js/task.js

@@ -1278,6 +1278,7 @@ task.process.initEvent = function() {
 task.process.initProcessEvent = function() {
 	$("a[name='reply']").unbind().click($(this),task.process.showReplay);
 	$("a[name='replys']").unbind().click($(this),task.process.showReplays);
+	$("a[name='withdraw']").unbind().click($(this),task.process.withdraw);
 	$("textarea[name='opinion']").unbind().click($(this), task.cleanText);
 	$("a[name='cancelReply']").unbind().click($(this), task.process.cancelReplay);
 	$("a[name='saveReply']").unbind().click($(this), task.process.saveReplay);
@@ -1660,6 +1661,29 @@ task.process.saveReplay = function(event) {
         });
     }
 };
+task.process.withdraw = function(event) {
+	var _this = $(this);
+	var itemId = _this.attr("itemId");
+	var taskId = $("input[name=taskId]").val();
+	var url = TC.config.baseUrl+'/task/'+taskId+'/bbs/?m=withdrawTaskProcess&itemId='+itemId;
+	$.ajax({
+		url:url,
+		type:"POST",
+		async:false,
+		success: function (result) {
+			if(result.state==='success'){
+				$.ok("撤回成功!",function(){
+					window.location.reload();
+					if(window.parent && $.isFunction(window.parent.selectCount)){
+						window.parent.selectCount();
+					}
+				});
+			}else{
+				$.error("撤回失败!");
+			}
+		}
+	});
+};
 function NoClick(){
     if (isCommited == true) {
         $.alert("请不要频繁点击!");

+ 106 - 0
tip-front/src/main/webapp/tc_suite/taskmt/taskMessageList.jsp

@@ -205,6 +205,8 @@
 </head>
 <body id="taslProcessBody" style="overflow: auto;padding-top: 10px;box-sizing: border-box; height: 100%;">
 <audio src="" id="messageAudio"></audio>
+<input type="hidden" name="taskId" value="${taskId}"/>
+<input type="hidden" name="pid" value="${pid}"/>
 <div id="gdDiv" style="height: 100%;">
     <div>
         <%-- 最上边留言框、附件图标、提交按钮部分 --%>
@@ -246,6 +248,9 @@
                                     <%--<a id="addAtt"  href="javascript:;" style="float: left;margin-top: 3px;">--%>
                                         <%--<lable style="float: left;">${tc:i18n("common.add.attachment")}</lable>--%>
                                     <%--</a>--%>
+                                    <div class="mt-btn mt-btn-blue" id="tempStoreBtn" style="float: right;margin:0;">
+                                        <span class="input" href="javascript:;">${tc:i18n("task.temporarily.store")}</span><%--暂存--%>
+                                    </div>
                                     <div class="mt-btn mt-btn-blue" id="btn2" style="float: right;margin:0;">
                                         <span class="input" href="javascript:;">${tc:i18n("task.submit")}</span><%--提交--%>
                                     </div>
@@ -286,6 +291,9 @@
                                     <%--<a id="addAtt"  href="javascript:;" style="float: left;">--%>
                                         <%--<lable style="float: left;">${tc:i18n("task.add.attachments")}</lable><!--添加附件-->--%>
                                     <%--</a>--%>
+                                    <div class="mt-btn mt-btn-blue" id="tempStoreBtn" style="float: right;margin:0;">
+                                        <span class="input" href="javascript:;">${tc:i18n("task.temporarily.store")}</span><%--暂存--%>
+                                    </div>
                                     <div class="mt-btn mt-btn-blue" id="btn2" style="float: right;margin:0;">
                                         <span class="input">${tc:i18n("task.submit")}</span><%--提交--%>
                                     </div>
@@ -893,6 +901,11 @@
                                             </c:if> --%>
                                         </c:if>
                                     </c:if>
+                                    <%-- 一级留言[撤回]文字按钮 --%>
+                                    <c:if test="${process.itemType == 10002004 && process.itemId != -1 && process.pid == pid && process.lessThanHalfAnHour}">
+                                        <a href="javascript:;" name="withdraw" class="mt-btn-font" itemId="${process.itemId}"
+                                           style="float: right;margin: 0;">[${tc:i18n("task.porcess.withdraw")}]</a>
+                                    </c:if>
                                 </div>
                             </td>
                         </tr>
@@ -1825,6 +1838,84 @@
         }
     });
 
+    //暂存
+    $("#tempStoreBtn").click(function() {
+        var opinion = $("#opinion2").val().toString().replace(/%26quot;/g,"\"").replace(/%26apos;/g,"\'").replace(/%26/g,'&');
+        if(opinion == null || opinion == ''){
+            $.dialog({
+                width:290,
+                height:120,
+                title : "系统提示",
+                content : "内容不能为空!",
+                lock : true,
+                icon : "error.gif",
+                parent : this,
+                ok : function() {
+                    //window.location.reload();
+                }
+            });
+            return;
+        }
+        //判断大于且不包括500字 modify by liusx
+        if(opinion.length > 255){
+            $("#opinion2").val("").css("color","#000");
+            $.dialog({
+                width:290,
+                height:120,
+                title : "系统提示",
+                content : "内容不能超过255字!",
+                lock : true,
+                icon : "alert.gif",
+                parent : this,
+                ok : function() {
+                    this.close();
+                }
+            });
+            $("#opinion2").val(opinion);
+            return;
+        }
+        var checkFormPass = TC.ui.formValidator({
+            formObject:$("#processForm2")
+        });
+        if(checkFormPass){
+            TC.ui.progressBar();
+            var array = $("#processForm2").serializeArray();
+            var data = serialize(array);
+            var url = '${path}/task/${taskId}/bbs/?m=tempSaveTaskProcess';
+            debugger;
+            $.ajax({
+                type: "POST",
+                url: url,
+                async: true,
+                data: {data:data},
+                dataType: "JSON",
+                traditional: true,
+                success: function (result) {
+                    if (result.state === "error") {
+                        $.dialog({
+                            title: "系统提示",
+                            icon:  "error.gif",
+                            content: result.message,
+                            lock: true,
+                            parent: this,
+                            ok: function () {
+                                this.close();
+                            }
+                        });
+                    } else {
+                        window.parent.selectCount();
+                        window.location.reload();
+                    }
+                    TC.ui.closeProgressBar();
+                },
+                error: function () {
+                    $.alert("提交失败");
+                }
+            });
+        }
+
+    });
+
     $("#addAtt").click(function(){
         TC.ui.rel.show({width:650,height:460,model:1 ,onSuccess:function(result) {
                 var fileResult = result.fileResult;
@@ -1835,6 +1926,21 @@
             }});
     });;
 
+    function serialize(obj){
+        var o ={};
+        $.each(obj,function(){
+            if(o[this.name]){
+                if(!o[this.name].push){
+                    o[this.name]=[o[this.name]];
+                }
+                o[this.name].push(this.value||"");
+            }else {
+                o[this.name] = this.value || "";
+            }
+        });
+        return o;
+    }
+
     //展示查看,隐藏批示
     function showViewTask(){
         if(!$("#viewTaskDiv").is(":hidden")){

+ 9 - 4
tip-service/tip-common/src/main/java/com/minto/app/behavior/manager/BehManagerImpl.java

@@ -29,10 +29,7 @@ import com.minto.core.util.*;
 import com.minto.tip.common.exceptions.BusinessException;
 import com.minto.tip.common.util.AsynchronousBatchTask;
 import com.minto.tip.event.EventDispatcher;
-import org.hibernate.criterion.Criterion;
-import org.hibernate.criterion.DetachedCriteria;
-import org.hibernate.criterion.Order;
-import org.hibernate.criterion.Restrictions;
+import org.hibernate.criterion.*;
 import org.jetbrains.annotations.NotNull;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -1442,4 +1439,12 @@ public class BehManagerImpl extends AsynchronousBatchTask<BehSummaryBean> implem
             EventDispatcher.fireEvent(new BehSaveEvent(summaryBean));
         }
     }
+
+    @Override
+    public void deleteByBehTypeAndExt1(Integer resType, String resId, String ext1){
+        LogicalExpression c = Restrictions.and(Restrictions.eq("resType", resType),
+                Restrictions.eq("resId", resType));
+        c = Restrictions.and(c,Restrictions.eq("ext1", ext1));
+        behSummaryDao.delete(BehSummaryBean.class,c);
+    }
 }