Bläddra i källkod

电子归档添加批量驳回功能,待办、已办、我发起的取消创建时间展示列

user5 2 år sedan
förälder
incheckning
7cd97d9caa

+ 15 - 0
src/main/java/com/jeeplus/modules/ruralprojectrecords/dao/RuralProjectMessageAllDao.java

@@ -5,6 +5,7 @@ package com.jeeplus.modules.ruralprojectrecords.dao;
 
 import com.jeeplus.common.persistence.CrudDao;
 import com.jeeplus.common.persistence.annotation.MyBatisDao;
+import com.jeeplus.modules.projectcontentinfo.entity.ProjectReportRecord;
 import com.jeeplus.modules.ruralprojectrecords.entity.DownloadProjectRecords;
 import com.jeeplus.modules.ruralprojectrecords.entity.DownloadProjectReporteds;
 import com.jeeplus.modules.ruralprojectrecords.entity.RuralProjectRecords;
@@ -166,4 +167,18 @@ public interface RuralProjectMessageAllDao extends CrudDao<RuralProjectRecords>
      */
     Integer querySignatureCount(RuralProjectRecords projectRecords);
 
+    /**
+     * 根据项目id查询项目信息
+     * @param projectIdList
+     * @return
+     */
+    List<RuralProjectRecords> getProjectRecordsByIdList(@Param("projectIdList") List<String> projectIdList);
+
+    /**
+     * 根据项目质量复核id查询电子归档信息
+     * @param reportIdList
+     * @return
+     */
+    List<ProjectReportRecord> getReportRecordByReportIdList(@Param("reportIdList") List<String> reportIdList);
+
 }

+ 188 - 0
src/main/java/com/jeeplus/modules/ruralprojectrecords/service/RuralProjectMessageAllService.java

@@ -4,6 +4,8 @@ import com.jeeplus.common.config.Global;
 import com.jeeplus.common.persistence.Page;
 import com.jeeplus.common.service.CrudService;
 import com.jeeplus.common.utils.MenuStatusEnum;
+import com.jeeplus.modules.act.entity.Act;
+import com.jeeplus.modules.act.service.ActTaskService;
 import com.jeeplus.modules.projectAccessory.dao.ProjectTemplateDao;
 import com.jeeplus.modules.projectEngineering.service.ProjectEngineeringService;
 import com.jeeplus.modules.projectFilingBatch.dao.ProjectFilingBatchDao;
@@ -12,6 +14,8 @@ import com.jeeplus.modules.projectFilingBatch.entity.ProjectFilingBatch;
 import com.jeeplus.modules.projectFilingBatch.entity.ProjectFilingbatchRelation;
 import com.jeeplus.modules.projectcontentinfo.dao.ProjectReportDataDao;
 import com.jeeplus.modules.projectcontentinfo.dao.ProjectcontentinfoDao;
+import com.jeeplus.modules.projectcontentinfo.entity.ProjectReportRecord;
+import com.jeeplus.modules.projectcontentinfo.service.ProjectReportRecordService;
 import com.jeeplus.modules.projectrecord.entity.ProjectRecordTreeData;
 import com.jeeplus.modules.projectreportnum.service.ProjectReportNumService;
 import com.jeeplus.modules.ruralprojectrecords.dao.RuralProjectClientLinkmanDao;
@@ -22,6 +26,7 @@ import com.jeeplus.modules.serialnum.service.SerialNumTplService;
 import com.jeeplus.modules.sys.dao.UserDao;
 import com.jeeplus.modules.sys.entity.MainDictDetail;
 import com.jeeplus.modules.sys.entity.Office;
+import com.jeeplus.modules.sys.entity.User;
 import com.jeeplus.modules.sys.service.AreaService;
 import com.jeeplus.modules.sys.service.OfficeService;
 import com.jeeplus.modules.sys.utils.DictUtils;
@@ -37,6 +42,9 @@ import com.jeeplus.modules.workprojectnotify.entity.WorkProjectNotify;
 import com.jeeplus.modules.workprojectnotify.service.WorkProjectNotifyService;
 import jersey.repackaged.com.google.common.collect.Lists;
 import org.activiti.engine.HistoryService;
+import org.activiti.engine.history.HistoricProcessInstance;
+import org.activiti.engine.runtime.ProcessInstance;
+import org.activiti.engine.task.Task;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -106,6 +114,10 @@ public class RuralProjectMessageAllService extends CrudService<RuralProjectMessa
     @Autowired
     private RuralProjectMessageAllDao ruralProjectMessageAllDao;
     @Autowired
+    private ActTaskService actTaskService;
+    @Autowired
+    private ProjectReportRecordService projectReportRecordService;
+    @Autowired
     private RuralProjectMessageAllConfigService ruralProjectMessageAllConfigService;
 
 
@@ -1297,6 +1309,182 @@ public class RuralProjectMessageAllService extends CrudService<RuralProjectMessa
         return page;
     }
 
+    /**
+     * 根据项目id进行电子归档的批量驳回操作
+     * @param projectIdList
+     * @return
+     */
+    @Transactional(readOnly = false)
+    public String reportBatchReject(List<String> projectIdList){
+        Map map = new HashMap();
+
+        //获取当前登录人信息
+        User user = UserUtils.getUser();
+
+        //合规的项目集合(B级项目)
+        List<RuralProjectRecords> complianceProjectList = Lists.newArrayList();
+        //不合规的项目集合(A级项目)
+        List<RuralProjectRecords> irregularityProjectList = Lists.newArrayList();
+        //不合规的项目集合(没有进行质量复核的项目)
+        List<RuralProjectRecords> irregularityReportProjectList = Lists.newArrayList();
+        //合规的项目集合(质量复核人员和当前登陆人相同)
+        List<RuralProjectRecords> complianceBzshbUserIdProjectList = Lists.newArrayList();
+        //合规的项目集合(质量复核人员和当前登陆人不同)
+        List<RuralProjectRecords> irregularityBzshbUserIdProjectList = Lists.newArrayList();
+        //合规的项目质量复核id集合(质量复核人员和当前登陆人相同)
+        List<String> complianceBzshbUserIdReportIdList = Lists.newArrayList();
+
+
+        //驳回成功的电子归档数据
+        List<ProjectReportRecord> successProjectReportRecordList = Lists.newArrayList();
+        //审核状态不符合的电子归档数据
+        List<ProjectReportRecord> inconformityStatusProjectReportRecordList = Lists.newArrayList();
+        //审核节点不符合的电子归档数据
+        List<ProjectReportRecord> inconformityNodeProjectReportRecordList = Lists.newArrayList();
+
+        //根据项目id查询项目信息,并筛选出项目的项目等级为B级的信息
+        List<RuralProjectRecords> projectRecordsList = ruralProjectMessageAllDao.getProjectRecordsByIdList(projectIdList);
+        for (RuralProjectRecords projectRecords : projectRecordsList) {
+            //判断项目登记为B级的数据进行保留,A级的进行舍去
+            if("1".equals(projectRecords.getSubmitMoney())){
+                //判断质量复核通过的数据
+                if(null != projectRecords.getProjectReportStatus() && 5 == projectRecords.getProjectReportStatus()){
+                    complianceProjectList.add(projectRecords);
+                }else{
+                    irregularityReportProjectList.add(projectRecords);
+                }
+            }else{
+                irregularityProjectList.add(projectRecords);
+            }
+        }
+        //根据项目id批量查询项目质量复核选择的审核人信息
+        //循环质量复核信息,将不是当前登陆人审核的数据信息排除
+        for (RuralProjectRecords projectRecords: complianceProjectList) {
+            //如果报告审核人员和当前登陆人相同,则该数据符合要求
+            if(projectRecords.getBzshbUserId().equals(user.getId())){
+                complianceBzshbUserIdProjectList.add(projectRecords);
+                complianceBzshbUserIdReportIdList.add(projectRecords.getPrdId());
+            }else{
+                irregularityBzshbUserIdProjectList.add(projectRecords);
+            }
+        }
+
+        //复核条件的项目信息查询对应的电子归档信息
+        if(complianceBzshbUserIdReportIdList.size()>0){
+            //根据项目质量复核id查询电子归档信息
+            List<ProjectReportRecord> reportRecordByReportIdList = ruralProjectMessageAllDao.getReportRecordByReportIdList(complianceBzshbUserIdReportIdList);
+            //保证项目电子归档的审核状态为2
+            for (ProjectReportRecord reportRecord : reportRecordByReportIdList) {
+                if("2".equals(reportRecord.getStatus())){
+                    //根据电子归档流程id查询流程信息
+                    Act act = getByAct(reportRecord.getProcessInstanceId());
+                    //给驳回信息添加信息
+                    act.setFlag("no");
+                    //判定当前节点为总审审批节点
+                    if("bzshb".equals(act.getTaskDefKey())){
+                        reportRecord.setAct(act);
+                        List<User> users = UserUtils.getByProssType(reportRecord.getProcessInstanceId(),5);
+                        if (users==null ) {
+                            users = UserUtils.getByRoleActivityEnname("bggdgly",3,user.getOffice().getId(),"10",reportRecord.getCreateBy());
+                        }
+                        projectReportRecordService.newAuditSaveTwo(reportRecord, users);
+                        successProjectReportRecordList.add(reportRecord);
+                    } else {
+                        //电子归档审核节点不对的数据
+                        inconformityStatusProjectReportRecordList.add(reportRecord);
+                    }
+                } else {
+                    //电子归档流程状态不对的数据
+                    inconformityNodeProjectReportRecordList.add(reportRecord);
+                }
+            }
+        }
+        //成功的电子归档报告号信息
+        List<String> successNumberList = Lists.newArrayList();
+        //审核节点不对的电子归档报告号信息
+        List<String> statusNumberList = Lists.newArrayList();
+        //流程状态不对的电子归档报告号信息
+        List<String> nodeNumberList = Lists.newArrayList();
+        //审核人不对的电子归档报告号信息
+        List<String> noBzshbUserNumberList = Lists.newArrayList();
+        //没有质量复核的项目编号信息
+        List<String> irregularityReportProjectNumberList = Lists.newArrayList();
+
+        StringBuilder returnStr = new StringBuilder();
+        //成功的电子归档报告号信息
+        if(successProjectReportRecordList.size()>0){
+            for (ProjectReportRecord info : successProjectReportRecordList) {
+                successNumberList.add(info.getReport().getNumber());
+            }
+            returnStr.append("报告号:").append(String.join("、",successNumberList)).append(" 驳回成功。</br>");
+        }
 
+        //审核节点不对的电子归档报告号信息
+        if(inconformityStatusProjectReportRecordList.size()>0){
+            for (ProjectReportRecord info : inconformityStatusProjectReportRecordList) {
+                statusNumberList.add(info.getReport().getNumber());
+            }
+            returnStr.append("报告号:").append(String.join("、",statusNumberList)).append(" 因审核节点错误驳回失败。</br>");
+        }
+
+        //流程状态不对的电子归档报告号信息
+        if(inconformityNodeProjectReportRecordList.size()>0){
+            for (ProjectReportRecord info : inconformityNodeProjectReportRecordList) {
+                nodeNumberList.add(info.getReport().getNumber());
+            }
+            returnStr.append("报告号:").append(String.join("、",nodeNumberList)).append(" 因审核状态错误驳回失败。</br>");
+        }
+
+        //审核人不对的电子归档报告号信息
+        if(irregularityBzshbUserIdProjectList.size()>0){
+            for (RuralProjectRecords info : irregularityBzshbUserIdProjectList) {
+                noBzshbUserNumberList.add(info.getProjectReportNumber());
+            }
+            returnStr.append("报告号:").append(String.join("、",noBzshbUserNumberList)).append(" 因审核人不符驳回失败。</br>");
+        }
+
+        //没有质量复核的项目编号信息
+        if(irregularityReportProjectList.size()>0){
+            for (RuralProjectRecords info : irregularityReportProjectList) {
+                irregularityReportProjectNumberList.add(info.getProjectId());
+            }
+            returnStr.append("项目编号:").append(String.join("、",irregularityReportProjectNumberList)).append(" 因未质量符合驳回失败。");
+        }
+        map.put("success",true);
+
+        return returnStr.toString();
+    }
+
+
+
+    public Act getByAct(String processInstanceId){
+        Act act = new Act();
+        HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
+        ProcessInstance processInstance = actTaskService.getProcIns(processInstanceId);
+        if (processInstance!=null) {
+            List<Task> taskList = actTaskService.getCurrentTaskList(processInstance);
+            if(taskList!=null && taskList.size()>1){
+                for (Task taskInfok:taskList) {
+                    if (UserUtils.getUser().getId().equals(taskInfok.getAssignee())) {
+                        act.setTaskId(taskInfok.getId());
+                        act.setTaskName(taskInfok.getName());
+                        act.setTaskDefKey(taskInfok.getTaskDefinitionKey());
+                        act.setProcDefId(taskInfok.getProcessDefinitionId());
+                        act.setProcInsId(taskInfok.getProcessInstanceId());
+                        act.setTask(taskInfok);
+                    }
+                }
+            }else {
+                Task task = actTaskService.getCurrentTaskInfo(processInstance);
+                act.setTaskId(task.getId());
+                act.setTaskName(task.getName());
+                act.setTaskDefKey(task.getTaskDefinitionKey());
+                act.setProcDefId(task.getProcessDefinitionId());
+                act.setProcInsId(task.getProcessInstanceId());
+                act.setTask(task);
+            }
+        }
+        return  act;
+    }
 
 }

+ 22 - 1
src/main/java/com/jeeplus/modules/ruralprojectrecords/web/RuralProjectMessageAllController.java

@@ -805,6 +805,27 @@ public class RuralProjectMessageAllController extends BaseController {
         return "redirect:"+Global.getAdminPath()+"/ruralProject/ruralProjectMessageAll/?repage";
     }
 
-
+    /**
+     * 电子归档批量驳回
+     */
+    @RequiresPermissions("ruralProject:ruralProjectMessageAll:reportBatchReject")
+    @RequestMapping(value = "reportBatchReject")
+    @ResponseBody
+    public Object reportBatchReject(HttpServletRequest request, HttpServletResponse response, RedirectAttributes redirectAttributes) {
+        Map<String,Object> map = new HashMap<>();
+
+        String listIds = request.getParameter("listId");
+        List<String> idList = Arrays.asList(listIds.split(","));
+        String resultStr = "";
+        if(idList.size()>0){
+            resultStr = ruralProjectMessageAllService.reportBatchReject(idList);
+            map.put("str",resultStr);
+            map.put("success",true);
+        }else{
+            map.put("str","选择项目数据错误");
+            map.put("success",false);
+        }
+        return map;
+    }
 
 }

+ 76 - 0
src/main/resources/mappings/modules/ruralprojectrecords/RuralProjectMessageAllDao.xml

@@ -271,6 +271,38 @@ END) as projectScale*/
 		left join rural_project_report_record_down prrd on prrd.report_id = prd.id
 	</sql>
 
+	<sql id="projectReportRecordColumns">
+		a.id AS "id",
+		a.create_by AS "createBy.id",
+		a.create_date AS "createDate",
+		a.update_by AS "updateBy.id",
+		a.update_date AS "updateDate",
+		a.remarks AS "remarks",
+		a.del_flag AS "delFlag",
+		a.report_id AS "report.id",
+		a.company_id AS "companyId",
+		a.office_id AS "officeId",
+		a.record_num AS "recordNum",
+		a.file_num AS "fileNum",
+		a.file_num_tow AS "fileNumTow",
+		a.name AS "name",
+		a.record_date AS "recordDate",
+		a.accomplish_date AS "accomplishDate",
+		a.status AS "status",
+		a.number_count AS "numberCount",
+		a.process_instance_id AS "processInstanceId",
+		a.sign_cost_one AS "signCostOne.id",
+		a.sign_cost_two AS "signCostTwo.id",
+		u.name AS "createBy.name",
+		d.name AS "report.name",
+		d.number AS "report.number",
+		a.reference_remarks as "referenceRemarks",
+		a.reference_attachment_id as "referenceAttachmentId",
+		a.catalogue_attachment_id as "catalogueAttachmentId",
+		a.record_audit_type as "recordAuditType",
+		a.project_content_data_id as "projectContentDataId"
+	</sql>
+
 
 	<select id="get" resultType="RuralProjectRecords" >
 		SELECT
@@ -2296,4 +2328,48 @@ END) as projectScale*/
 		</where>
 	</select>
 
+	<select id="getProjectRecordsByIdList" resultType="RuralProjectRecords" >
+		select a.id,a.project_id as "projectId",a.project_name as "projectName", a.submit_money as "submitMoney", prd.id as "prdId",ifnull(prd.status,0) as "projectReportStatus"
+		,ifnull(prd.number ,"") as "projectReportNumber"
+		,prd.bzshb_user_id as "bzshbUserId"
+		from rural_project_records a
+		left join project_report_data prd on a.id = prd.project_id
+		<where>
+			a.del_flag = 0 and a.status = 5
+			<if test="projectIdList!=null and projectIdList.size!=0">
+				and a.id in
+				<foreach collection="projectIdList" item="id" separator="," open="(" close=")">
+					#{id}
+				</foreach>
+			</if>
+		</where>
+	</select>
+
+	<select id="getReportRecordByReportIdList" resultType="ProjectReportRecord" >
+		SELECT
+		<include refid="projectReportRecordColumns"/>,
+		wci.contract_num AS "contractNum",
+		wci.name AS "contractName",
+		wct.name AS "clientName",
+		d.report_date AS "report.reportDate",
+		r.project_name AS "projectName",
+		r.project_id AS "projectNum",
+		r.id as "report.project.id"
+		FROM rural_project_report_record a
+		LEFT JOIN project_report_data d ON d.id = a.report_id
+		LEFT JOIN sys_user u ON u.id = a.create_by
+		LEFT JOIN rural_project_records r ON r.id = d.project_id
+		LEFT JOIN work_contract_info wci on r.contract_id = wci.id
+		LEFT JOIN work_client_info wct on wci.client_id = wct.id
+		<where>
+			a.del_flag = 0
+			<if test="reportIdList!=null and reportIdList.size!=0">
+				and a.report_id in
+				<foreach collection="reportIdList" item="id" separator="," open="(" close=")">
+					#{id}
+				</foreach>
+			</if>
+		</where>
+	</select>
+
 </mapper>

+ 58 - 1
src/main/webapp/webpage/modules/ruralprojectrecords/ruralporjectmessage/all/ruralProjectMessageAllList.jsp

@@ -912,6 +912,13 @@
 						<shiro:hasPermission name="ruralProject:ruralProjectMessageAll:reportedDownload">
 							<a href="javascript:void(0)" style='background-color: #FFB800' onclick="downloadDialogre('上报信息导出', '${ctx}/ruralProject/ruralProjectMessageAll/skipDownloadReportedForm','40%', '70%','','下载,关闭')" class="layui-btn layui-btn-sm layui-bg-blue" > 上报信息导出</a>
 						</shiro:hasPermission>
+
+
+						<shiro:hasPermission name="ruralProject:ruralProjectMessageAll:reportBatchReject">
+							<button type="button" data-toggle="tooltip" data-placement="top" class="layui-btn layui-btn-sm layui-bg-blue" id="reportBatchReject"> 批量驳回</button>
+						</shiro:hasPermission>
+
+
 						<button class="layui-btn layui-btn-sm" data-toggle="tooltip" data-placement="left" onclick="sortOrRefresh()" title="刷新"> 刷新</button>
 						<div class=" layui-btn-sm" style="float: right;width: 300px">
 							<span style="color: red">咨询营业收入:${moneyAll}(万元)</span>
@@ -939,10 +946,11 @@
     layui.use('table', function(){
         layui.table.render({
             limit:${ page.pageSize }
+			,id:"checkboxTable"
             ,elem: '#contentTable1'
             ,page: false
             ,cols: [[
-                // {checkbox: true, fixed: true},
+                {checkbox: true, fixed: true},
                 {field:'index',align:'center',  title: '序号',width:60}
 				,{field: 'projId',align:'center', title: '项目编号',width:145}
 				,{field:'projName',align:'center', title: '项目名称', minWidth:400,templet:function(d){
@@ -1291,6 +1299,55 @@
             // ,even: true
             // ,height: 315
         });
+        // 质量符合批量驳回
+		$("#reportBatchReject").bind("click",function () {
+			//获得表格CheckBox已经选中的行的信息
+			var checkList = layui.table.checkStatus('checkboxTable').data;
+			//定义数组存放批量删除的行的id
+			var listId = [];
+			//进行遍历所有选中行数据,拿出每一行的id存储到数组中
+			$.each(checkList, function (i, data) {
+				listId.push(data.id);
+			});
+			if (listId.length <= 0) {
+				layer.msg("请选择需要驳回的项目信息", {icon: 2})
+			} else {
+				subConfirmx("是否驳回选择的项目信息?","${ctx}/ruralProject/ruralProjectMessageAll/reportBatchReject?listId="+ listId)
+
+				// $("#searchForm").attr("action","${ctx}/ruralProject/ruralProjectMessageAll/reportBatchReject?listId="+ listId);
+				// $("#searchForm").submit();
+				return true;
+			}
+		});
+
+
+
+		// 确认对话框
+		function subConfirmx(mess, href){
+
+			top.layer.confirm(mess, {icon: 3, title:'系统提示'}, function(index){
+				//do something
+				if (typeof href == 'function') {
+					href();
+				}else{
+					$.ajax({
+						type:"post",
+						url:href,
+						dataType:"json",
+						success:function(data){
+							if(data.success) {
+								top.layer.msg(data.str, {icon: 1});
+								window.location.reload();
+							}else {
+								top.layer.msg(data.str, {icon: 0});
+							}
+						}
+					})
+				}
+				top.layer.close(index);
+			});
+			return false;
+		}
     })
 
     resizeListTable();

+ 2 - 2
src/main/webapp/webpage/modules/workprojectnotify/workProjectNotifyBacklogListByMine.jsp

@@ -481,9 +481,9 @@
                 ,{align:'center',title: '提交人', width:80,templet:function(d){
                         return "<span title='"+ d.submit +"'>" + d.submit + "</span>";
                     }}
-                ,{field:'op',align:'center', title: '创建时间', width:140,templet:function(d){
+                /*,{field:'op',align:'center', title: '创建时间', width:140,templet:function(d){
                         return "<span title='"+ d.date +"'>" + d.ymddate + "</span>";
-                    }}
+                    }}*/
             ]]
             ,data: [
                 <c:if test="${ not empty page.list}">

+ 2 - 2
src/main/webapp/webpage/modules/workprojectnotify/workProjectNotifyList.jsp

@@ -840,9 +840,9 @@
                         return "<span title='"+ d.submit +"'>" + d.submit + "</span>";
                     }}
                 ,{field:'status1', align:'center',title: '审批状态',width:100}
-                ,{field:'op',align:'center', title: '创建时间', width:140,templet:function(d){
+                /*,{field:'op',align:'center', title: '创建时间', width:140,templet:function(d){
                         return "<span title='"+ d.date +"'>" + d.ymddate + "</span>";
-                    }}
+                    }}*/
                 ,{field:'wapCreateDate',align:'center', title: '开始时间', width:180,templet:function(d){
                         return "<span title='"+ d.wapCreateDate +"'>" + d.wapCreateDate + "</span>";
                     }}

+ 2 - 2
src/main/webapp/webpage/modules/workprojectnotify/workProjectNotifyReadBacklogList.jsp

@@ -526,9 +526,9 @@
                 ,{align:'center',title: '提交人', width:80,templet:function(d){
                         return "<span title='"+ d.submit +"'>" + d.submit + "</span>";
                     }}
-                ,{field:'op',align:'center', title: '创建时间', width:140,templet:function(d){
+                /*,{field:'op',align:'center', title: '创建时间', width:140,templet:function(d){
                         return "<span title='"+ d.date +"'>" + d.ymddate + "</span>";
-                    }}
+                    }}*/
                 ,{field:'wapCreateDate',align:'center', title: '开始时间', width:180,templet:function(d){
                         return "<span title='"+ d.wapCreateDate +"'>" + d.wapCreateDate + "</span>";
                     }}