Quellcode durchsuchen

Merge remote-tracking branch 'origin/master'

# Conflicts:
#	src/main/java/com/jeeplus/modules/workinvoice/entity/WorkInvoice.java
#	src/main/java/com/jeeplus/modules/workinvoice/service/WorkInvoiceService.java
#	src/main/resources/mappings/modules/workinvoice/WorkInvoiceDao.xml
sangwenwei vor 1 Jahr
Ursprung
Commit
a943807849
55 geänderte Dateien mit 7821 neuen und 167 gelöschten Zeilen
  1. 2 0
      src/main/java/com/jeeplus/common/utils/MenuStatusEnum.java
  2. 31 0
      src/main/java/com/jeeplus/modules/act/service/ActTaskService.java
  3. 10 0
      src/main/java/com/jeeplus/modules/projectcontentinfo/entity/Projectcontentinfo.java
  4. 6 0
      src/main/java/com/jeeplus/modules/ruralprojectrecords/dao/RuralProjectRecordsDao.java
  5. 120 0
      src/main/java/com/jeeplus/modules/ruralprojectrecords/entity/SignByPracticeInfo.java
  6. 44 3
      src/main/java/com/jeeplus/modules/ruralprojectrecords/service/RuralProjectMessageNewService.java
  7. 8 0
      src/main/java/com/jeeplus/modules/ruralprojectrecords/service/RuralProjectRecordsService.java
  8. 394 0
      src/main/java/com/jeeplus/modules/signatureManagement/businessSignature/controller/BusinessSignatureController.java
  9. 23 0
      src/main/java/com/jeeplus/modules/signatureManagement/businessSignature/dao/BusinessSignatureDao.java
  10. 119 0
      src/main/java/com/jeeplus/modules/signatureManagement/businessSignature/entity/BusinessSignatureInfo.java
  11. 849 0
      src/main/java/com/jeeplus/modules/signatureManagement/businessSignature/service/BusinessSignatureService.java
  12. 381 0
      src/main/java/com/jeeplus/modules/signatureManagement/electronicSignature/controller/ElectronicSignatureController.java
  13. 22 0
      src/main/java/com/jeeplus/modules/signatureManagement/electronicSignature/dao/ElectronicSignatureDao.java
  14. 119 0
      src/main/java/com/jeeplus/modules/signatureManagement/electronicSignature/entity/ElectronicSignatureInfo.java
  15. 831 0
      src/main/java/com/jeeplus/modules/signatureManagement/electronicSignature/service/ElectronicSignatureService.java
  16. 3 0
      src/main/java/com/jeeplus/modules/sys/dao/OfficeDao.java
  17. 9 0
      src/main/java/com/jeeplus/modules/sys/entity/User.java
  18. 48 29
      src/main/java/com/jeeplus/modules/sys/service/CompanyService.java
  19. 6 0
      src/main/java/com/jeeplus/modules/sys/service/OfficeService.java
  20. 1 1
      src/main/java/com/jeeplus/modules/workcontractinfo/service/WorkContractInfoService.java
  21. 1 1
      src/main/java/com/jeeplus/modules/workcontractinfo/web/WorkContractInfoController.java
  22. 24 4
      src/main/java/com/jeeplus/modules/workinvoice/service/WorkInvoiceAllService.java
  23. 197 103
      src/main/java/com/jeeplus/modules/workprojectnotify/web/WorkProjectNotifyController.java
  24. 9 0
      src/main/java/com/jeeplus/modules/workstaff/entity/WorkStaffBasicInfo.java
  25. 1 0
      src/main/java/com/jeeplus/modules/workstaff/service/WorkStaffBasicInfoService.java
  26. 5 0
      src/main/resources/mappings/modules/ruralprojectrecords/RuralProjectRecordsDao.xml
  27. 218 0
      src/main/resources/mappings/modules/signatureManagement/businessSignature/BusinessSignatureDao.xml
  28. 218 0
      src/main/resources/mappings/modules/signatureManagement/electronicSignature/ElectronicSignatureDao.xml
  29. 2 2
      src/main/resources/mappings/modules/sys/MainDictDetailDao.xml
  30. 15 0
      src/main/resources/mappings/modules/sys/OfficeDao.xml
  31. 3 0
      src/main/resources/mappings/modules/sys/UserDao.xml
  32. 1 0
      src/main/resources/mappings/modules/workstaff/WorkStaffBasicInfoDao.xml
  33. BIN
      src/main/webapp/dot/业务用章承诺书.docx
  34. BIN
      src/main/webapp/dot/印章刻制申请表.docx
  35. BIN
      src/main/webapp/dot/电子用章承诺书.docx
  36. 2 2
      src/main/webapp/webpage/modules/disputeMediation/projectNonPrelitigationMediation/projectNonPrelitigationMediationList.jsp
  37. 2 2
      src/main/webapp/webpage/modules/disputeMediation/projectPrelitigationMediation/projectPrelitigationMediationList.jsp
  38. 58 8
      src/main/webapp/webpage/modules/ruralprojectrecords/cost/projectcontentinfo/new/reportForm.jsp
  39. 52 8
      src/main/webapp/webpage/modules/ruralprojectrecords/ruralporjectmessage/projectcontentinfo/new/judgementReport/projectRecordsJudgementForm.jsp
  40. 342 0
      src/main/webapp/webpage/modules/signatureManagement/businessSignature/BusinessSignatureAudit.jsp
  41. 421 0
      src/main/webapp/webpage/modules/signatureManagement/businessSignature/BusinessSignatureForm.jsp
  42. 459 0
      src/main/webapp/webpage/modules/signatureManagement/businessSignature/BusinessSignatureList.jsp
  43. 429 0
      src/main/webapp/webpage/modules/signatureManagement/businessSignature/BusinessSignatureModify.jsp
  44. 15 0
      src/main/webapp/webpage/modules/signatureManagement/businessSignature/BusinessSignatureTask.jsp
  45. 296 0
      src/main/webapp/webpage/modules/signatureManagement/businessSignature/BusinessSignatureView.jsp
  46. 342 0
      src/main/webapp/webpage/modules/signatureManagement/electronicSignature/ElectronicSignatureAudit.jsp
  47. 472 0
      src/main/webapp/webpage/modules/signatureManagement/electronicSignature/ElectronicSignatureForm.jsp
  48. 459 0
      src/main/webapp/webpage/modules/signatureManagement/electronicSignature/ElectronicSignatureList.jsp
  49. 428 0
      src/main/webapp/webpage/modules/signatureManagement/electronicSignature/ElectronicSignatureModify.jsp
  50. 15 0
      src/main/webapp/webpage/modules/signatureManagement/electronicSignature/ElectronicSignatureTask.jsp
  51. 296 0
      src/main/webapp/webpage/modules/signatureManagement/electronicSignature/ElectronicSignatureView.jsp
  52. 1 1
      src/main/webapp/webpage/modules/workinvoice/workInvoiceAllTwoList.jsp
  53. 2 2
      src/main/webapp/webpage/modules/workinvoice/workInvoiceTwoList.jsp
  54. 1 1
      src/main/webapp/webpage/modules/workreimbursement/new/workReimbursementNewFormAdd.jsp
  55. 9 0
      src/main/webapp/webpage/modules/workstaff/workStaffBasicInfoForm.jsp

+ 2 - 0
src/main/java/com/jeeplus/common/utils/MenuStatusEnum.java

@@ -81,6 +81,8 @@ public enum MenuStatusEnum {
     DAILY_OFFICE_WORK("a130098e278142e9a47e3b77caccc26d","日常-签章申请"),
     PROJECT_REPORT_WORK("567496e2311547d89ac2679c496c32c8","报告-签章申请"),
     DISPUTE_MEDIATION("c0ce72cbeb5d446a946795b0a3b7e4a4","纠纷调解"),
+    ELECTRONIC_SIGNATURE("50cfb2ad32814623a976bb7776e87c12","电子用章管理"),
+    EBUSINESS_SIGNATURE("976b008b2c0f402ea7015bb15665d1f4","业务用章管理"),
     END("19940722131313","废弃");
 
     private String value;

+ 31 - 0
src/main/java/com/jeeplus/modules/act/service/ActTaskService.java

@@ -1110,4 +1110,35 @@ public class ActTaskService extends BaseService {
 	}
 
 
+	public Act getByAct(String processInstanceId){
+		Act act = new Act();
+		HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
+		ProcessInstance processInstance = this.getProcIns(processInstanceId);
+		if (processInstance!=null) {
+			List<Task> taskList = this.getCurrentTaskList(processInstance);
+			if(taskList!=null && taskList.size()>1){
+				for (Task taskInfok:taskList) {
+					if (taskInfok.getAssignee().equals(UserUtils.getUser().getId())) {
+						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 = this.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);
+			}
+		}
+		act.setComment("app审批");
+		return  act;
+	}
+
 }

+ 10 - 0
src/main/java/com/jeeplus/modules/projectcontentinfo/entity/Projectcontentinfo.java

@@ -78,6 +78,8 @@ public class Projectcontentinfo extends TreeEntity<Projectcontentinfo> {
 	private String projectId;		//宜居性资料或者成果文件的id
 	private List<ProjectTemplateInfo> projectAchievementFileDataList;   //全过程依据性文件
 
+	private String dataSynchronism;	//同步质量复核和项目登记中送审价和送审规模数据的判定条件
+
 
 	public RuralProjectRecords getProjectOnRural() {
 		return projectOnRural;
@@ -444,4 +446,12 @@ public class Projectcontentinfo extends TreeEntity<Projectcontentinfo> {
 	public void setNodeId(String nodeId) {
 		this.nodeId = nodeId;
 	}
+
+	public String getDataSynchronism() {
+		return dataSynchronism;
+	}
+
+	public void setDataSynchronism(String dataSynchronism) {
+		this.dataSynchronism = dataSynchronism;
+	}
 }

+ 6 - 0
src/main/java/com/jeeplus/modules/ruralprojectrecords/dao/RuralProjectRecordsDao.java

@@ -155,6 +155,12 @@ public interface RuralProjectRecordsDao extends CrudDao<RuralProjectRecords> {
      * @param projectRecords
      */
     void updateDate(RuralProjectRecords projectRecords);
+
+    /**
+     * 修改项目送审规模
+     * @param projectRecords
+     */
+    void updateSubmitScale(RuralProjectRecords projectRecords);
     /**
      * 修改项目等级
      * B级改为A级

+ 120 - 0
src/main/java/com/jeeplus/modules/ruralprojectrecords/entity/SignByPracticeInfo.java

@@ -0,0 +1,120 @@
+package com.jeeplus.modules.ruralprojectrecords.entity;
+
+import java.util.List;
+
+/**
+ * 静默个人执业章签署信息表
+ * @author: 徐滕
+ * @version: 2024-05-28 16:46
+ */
+public class SignByPracticeInfo {
+
+    private String contractId;  //合同ID和bizId必须填写一个	合同ID
+    private String bizId;   //合同ID和bizId必须填写一个	合同的唯一标识,由调用方生成
+    private String tenantId;    //签署人所在签署方公司ID(契约锁系统id) 必填
+    private String tenantName;  //签署人所在签署方公司名称 必填
+    private String registerNo;  //签署人所在签署方公司统一信用代码 必填
+    private String contact; //	签署人信息:联系方式:手机号,电子邮箱 必填
+    private String receiverNumber;  //签署人信息:员工编号 必填
+    private String cardNo;  //签署人信息:身份证号码 必填
+    private String openUserId;  //签署人信息:三方用户id 必填
+    private String userId;  //签署人信息:契约锁用户唯一id 必填
+    private String accountNo;   //签署人信息:登录账号 必填
+    private List<Stamper> stampers; //	签署信息,详情参考Stamper。
+
+    public String getContractId() {
+        return contractId;
+    }
+
+    public void setContractId(String contractId) {
+        this.contractId = contractId;
+    }
+
+    public String getBizId() {
+        return bizId;
+    }
+
+    public void setBizId(String bizId) {
+        this.bizId = bizId;
+    }
+
+    public String getTenantId() {
+        return tenantId;
+    }
+
+    public void setTenantId(String tenantId) {
+        this.tenantId = tenantId;
+    }
+
+    public String getTenantName() {
+        return tenantName;
+    }
+
+    public void setTenantName(String tenantName) {
+        this.tenantName = tenantName;
+    }
+
+    public String getRegisterNo() {
+        return registerNo;
+    }
+
+    public void setRegisterNo(String registerNo) {
+        this.registerNo = registerNo;
+    }
+
+    public String getContact() {
+        return contact;
+    }
+
+    public void setContact(String contact) {
+        this.contact = contact;
+    }
+
+    public String getReceiverNumber() {
+        return receiverNumber;
+    }
+
+    public void setReceiverNumber(String receiverNumber) {
+        this.receiverNumber = receiverNumber;
+    }
+
+    public String getCardNo() {
+        return cardNo;
+    }
+
+    public void setCardNo(String cardNo) {
+        this.cardNo = cardNo;
+    }
+
+    public String getOpenUserId() {
+        return openUserId;
+    }
+
+    public void setOpenUserId(String openUserId) {
+        this.openUserId = openUserId;
+    }
+
+    public String getUserId() {
+        return userId;
+    }
+
+    public void setUserId(String userId) {
+        this.userId = userId;
+    }
+
+    public String getAccountNo() {
+        return accountNo;
+    }
+
+    public void setAccountNo(String accountNo) {
+        this.accountNo = accountNo;
+    }
+
+    public List<Stamper> getStampers() {
+        return stampers;
+    }
+
+    public void setStampers(List<Stamper> stampers) {
+        this.stampers = stampers;
+    }
+}

+ 44 - 3
src/main/java/com/jeeplus/modules/ruralprojectrecords/service/RuralProjectMessageNewService.java

@@ -100,6 +100,7 @@ import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.io.File;
 import java.io.IOException;
+import java.math.BigDecimal;
 import java.text.SimpleDateFormat;
 import java.util.*;
 
@@ -585,6 +586,18 @@ public class RuralProjectMessageNewService extends CrudService<RuralProjectMessa
     public String saveData(Projectcontentinfo projectcontentinfo,int type) {
         RuralProjectRecords ruralProjectRecords = projectcontentinfo.getProjectOnRural();
 
+        if(StringUtils.isNotBlank(projectcontentinfo.getDataSynchronism()) && "1".equals(projectcontentinfo.getDataSynchronism())){
+            ProjectReportData projectReportData = projectcontentinfo.getProjectReportData();
+
+            if(StringUtils.isNotBlank(projectReportData.getReviewFee())){
+                //将送审价转换并添加到项目的送审规模中
+                Double reviewFee = Double.parseDouble(projectReportData.getReviewFee())/10000;
+                BigDecimal reviewFeeB = BigDecimal.valueOf(reviewFee);
+                reviewFeeB = reviewFeeB.setScale(2, BigDecimal.ROUND_HALF_UP);
+                ruralProjectRecords.setSubmitScale(reviewFeeB);
+            }
+        }
+
         //修改项目开始时间和结束时间
         System.out.println(ruralProjectRecords.getStartDate());
         System.out.println(ruralProjectRecords.getEndingDate());
@@ -595,6 +608,9 @@ public class RuralProjectMessageNewService extends CrudService<RuralProjectMessa
                 projectPlanDao.update(planInfo);
             }
         }
+        if(null != ruralProjectRecords.getSubmitScale()){
+            ruralProjectRecordsService.updateSubmitScale(ruralProjectRecords);
+        }
 
         String count = "0";
         String infoId = "";
@@ -1052,7 +1068,7 @@ public class RuralProjectMessageNewService extends CrudService<RuralProjectMessa
         ProjectReportData reportData = projectReportDataDao.get(projectReportData.getId());
         //根据报告id查询是否存在审核通过时间。若没有则将当前时间设定为审核通过事件
         //添加首次审核通过日期
-        if(null == reportData.getFirstAuditDate()){
+        if(null == reportData || null == reportData.getFirstAuditDate()){
             projectReportData.setFirstAuditDate(new Date());
         }
 
@@ -1328,7 +1344,7 @@ public class RuralProjectMessageNewService extends CrudService<RuralProjectMessa
                             RuralProjectRecords ruralProjectRecords = ruralProjectRecordsService.get(projectReportData.getProject().getId());
 
                             if(StringUtils.isBlank(projectReportData.getNumber()) && "2".equals(ruralProjectRecords.getSubmitMoney())){
-                                String reportNo = createReportNo(reportData.getConditionType());
+                                String reportNo = createReportNo(reportData.getConditionType(),ruralProjectRecords);
                                 projectReportData.setNumber(reportNo);
                             }
                             //添加审核通过日期
@@ -1996,7 +2012,32 @@ public class RuralProjectMessageNewService extends CrudService<RuralProjectMessa
     /**
      * 生成一个报告号
      */
-    public String createReportNo(String bizCode){
+    public String createReportNo(String bizCode,RuralProjectRecords projectRecords){
+        //ProjectType 1.工程咨询 2.造价审核
+        switch (projectRecords.getProjectType()){
+            case "1":
+                if("8".equals(projectRecords.getAttachmentProjectSort())){
+                    bizCode = "1006";
+                } else if("10".equals(projectRecords.getAttachmentProjectSort())){
+                    bizCode = "1008";
+                }else{
+                    bizCode = "10";
+                }
+                break;
+            case "2":
+                if("5".equals(projectRecords.getAttachmentProjectSort()) || "6".equals(projectRecords.getAttachmentProjectSort())){
+                    bizCode = "1005";
+                }else if("8".equals(projectRecords.getAttachmentProjectSort())){
+                    bizCode = "1007";
+                }else if("20".equals(projectRecords.getAttachmentProjectSort())){
+                    bizCode = RuralProjectRecords.SHANGHAI_COORDINATE_BIZCODE;
+                }
+                else{
+                    bizCode = "1003";
+                }
+                break;
+        }
+
         String msg = projectReportNumService.saveNumber(bizCode);//保存
         return msg;
     }

+ 8 - 0
src/main/java/com/jeeplus/modules/ruralprojectrecords/service/RuralProjectRecordsService.java

@@ -3201,6 +3201,14 @@ public class RuralProjectRecordsService extends CrudService<RuralProjectRecordsD
 		dao.updateDate(projectRecords);
 	}
 
+	/**
+	 * 修改项目送审规模
+	 * @param projectRecords
+	 */
+	public void updateSubmitScale(RuralProjectRecords projectRecords){
+		dao.updateSubmitScale(projectRecords);
+	}
+
 	public void disposeData(RuralProjectcontentinfo ruralProjectcontentinfo){
 		List<ProjectTemplateInfo> fileAttachmentList = ruralProjectcontentinfo.getFileAttachmentList();
 		List<ProjectTemplateInfo> gistdataList = ruralProjectcontentinfo.getFileGistdataList();

+ 394 - 0
src/main/java/com/jeeplus/modules/signatureManagement/businessSignature/controller/BusinessSignatureController.java

@@ -0,0 +1,394 @@
+package com.jeeplus.modules.signatureManagement.businessSignature.controller;
+
+import com.google.common.collect.Lists;
+import com.jeeplus.common.config.Global;
+import com.jeeplus.common.persistence.Page;
+import com.jeeplus.common.utils.MyBeanUtils;
+import com.jeeplus.common.utils.StringUtils;
+import com.jeeplus.common.utils.ThisLocalityDownloadUtil;
+import com.jeeplus.common.web.BaseController;
+import com.jeeplus.modules.act.service.ActTaskService;
+import com.jeeplus.modules.ruralprojectrecords.enums.ProjectStatusEnum;
+import com.jeeplus.modules.signatureManagement.businessSignature.entity.BusinessSignatureInfo;
+import com.jeeplus.modules.signatureManagement.businessSignature.service.BusinessSignatureService;
+import com.jeeplus.modules.sys.entity.User;
+import com.jeeplus.modules.sys.utils.DictUtils;
+import com.jeeplus.modules.sys.utils.UserUtils;
+import com.jeeplus.modules.workclientinfo.entity.WorkClientAttachment;
+import org.activiti.engine.HistoryService;
+import org.apache.shiro.authz.annotation.Logical;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.ModelAttribute;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.servlet.mvc.support.RedirectAttributes;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+
+/**
+ * 电子签章印章管理controller
+ * @author: 徐滕
+ * @version: 2024-05-30 16:31
+ */
+@Controller
+@RequestMapping(value = "${adminPath}/businessSignature/businessSignature")
+public class BusinessSignatureController extends BaseController {
+
+    @Autowired
+    private BusinessSignatureService businessSignatureService;
+    @Autowired
+    private ActTaskService actTaskService;
+    @Autowired
+    protected HistoryService historyService;
+
+    @ModelAttribute
+    public BusinessSignatureInfo get(@RequestParam(required=false) String id) {
+        BusinessSignatureInfo entity = null;
+        if (StringUtils.isNotBlank(id)){
+            entity = businessSignatureService.get(id);
+        }
+        if (entity == null){
+            entity = new BusinessSignatureInfo();
+        }
+        return entity;
+    }
+
+
+
+    /**
+     * 电子签章印章管理列表页面
+     */
+    @RequiresPermissions("businessSignature:businessSignature:list")
+    @RequestMapping(value = {"list", ""})
+    public String list(BusinessSignatureInfo businessSignatureInfo, HttpServletRequest request, HttpServletResponse response, Model model) {
+        //进行查询之后进行任何操作,返回还是查询之后的数据页面
+        if (StringUtils.isNotBlank(businessSignatureInfo.getToflag())){
+            if (businessSignatureInfo.getToflag().equals("1")){
+                request.getSession().removeAttribute("searchBusinessSignatureInfo");
+                BusinessSignatureInfo search=businessSignatureInfo;
+                request.getSession().setAttribute("searchBusinessSignatureInfo",search);
+            }
+        }else{
+            if (request.getSession().getAttribute("searchBusinessSignatureInfo")!=null){
+                businessSignatureInfo= (BusinessSignatureInfo) request.getSession().getAttribute("searchBusinessSignatureInfo");
+                model.addAttribute("businessSignatureInfo", businessSignatureInfo);
+            }
+        }
+        if(UserUtils.isManager()){
+            model.addAttribute("flag","1");
+        }
+        //获取电子签章印章管理
+        Page<BusinessSignatureInfo> page = businessSignatureService.findPage(new Page<BusinessSignatureInfo>(request, response), businessSignatureInfo);
+        List<BusinessSignatureInfo> list = page.getList();
+
+
+        model.addAttribute("page", page);
+        return "modules/signatureManagement/businessSignature/BusinessSignatureList";
+    }
+
+
+    /**
+     * 查看,增加,编辑电子签章印章管理表单页面
+     */
+    @RequiresPermissions(value={"businessSignature:businessSignature:add","businessSignature:businessSignature:edit"},logical= Logical.OR)
+    @RequestMapping(value = "form")
+    public String form(BusinessSignatureInfo businessSignatureInfo, Model model) {
+        if (businessSignatureInfo!=null&&StringUtils.isNotBlank(businessSignatureInfo.getId())) {
+            businessSignatureInfo = businessSignatureService.get(businessSignatureInfo.getId());
+        }else {
+            businessSignatureInfo.setCreateBy(UserUtils.getUser());
+            businessSignatureInfo.setOffice(UserUtils.getSelectOffice());
+            businessSignatureInfo.setCreateDate(new Date());
+        }
+
+
+        model.addAttribute("businessSignatureInfo", businessSignatureInfo);
+        return "modules/signatureManagement/businessSignature/BusinessSignatureForm";
+    }
+
+    /**
+     * 暂存信息
+     */
+    @RequiresPermissions(value={"businessSignature:businessSignature:add","businessSignature:businessSignature:edit"},logical=Logical.OR)
+    @RequestMapping(value = "tstore")
+    public String tstore(BusinessSignatureInfo businessSignatureInfo, Model model, RedirectAttributes redirectAttributes) {
+        if (!beanValidator(model, businessSignatureInfo)){
+            return form(businessSignatureInfo, model);
+        }
+        try {
+            if (!businessSignatureInfo.getIsNewRecord()) {//编辑表单保存
+                BusinessSignatureInfo t = businessSignatureService.get(businessSignatureInfo.getId());//从数据库取出记录的值
+
+                if(t.getStatus() == 2){
+                    addMessage(redirectAttributes, "业务用章申请已送审,无法重复送审");
+                    return "redirect:"+Global.getAdminPath()+"/businessSignature/businessSignature/?repage";
+                }else if(t.getStatus() == 5){
+                    addMessage(redirectAttributes, "业务用章申请已审核完成,无法再次送审");
+                    return "redirect:"+Global.getAdminPath()+"/businessSignature/businessSignature/?repage";
+                }
+                MyBeanUtils.copyBeanNotNull2Bean(businessSignatureInfo, t);//将编辑表单中的非NULL值覆盖数据库记录中的值
+                t.setStatus(1);
+                businessSignatureService.saveInfo(t);//保存
+            } else {//新增表单保存
+                businessSignatureInfo.setStatus(1);
+                businessSignatureService.saveInfo(businessSignatureInfo);//保存
+            }
+            addMessage(redirectAttributes, "保存业务用章申请成功");
+        }catch (Exception e){
+            logger.error("保存业务用章申请异常:",e);
+            addMessage(redirectAttributes, "保存业务用章申请异常:"+e.getMessage());
+        }
+        return "redirect:"+Global.getAdminPath()+"/businessSignature/businessSignature/?repage";
+    }
+
+    /**
+     * 保存电子签章印章管理信息
+     */
+    @RequiresPermissions(value={"businessSignature:businessSignature:add","businessSignature:businessSignature:edit"},logical=Logical.OR)
+    @RequestMapping(value = "save")
+    public String save(BusinessSignatureInfo businessSignatureInfo, Model model, RedirectAttributes redirectAttributes) throws Exception {
+        if (!beanValidator(model, businessSignatureInfo)){
+            return form(businessSignatureInfo, model);
+        }
+        try {
+
+            if (!businessSignatureInfo.getIsNewRecord()) {//编辑表单保存
+                BusinessSignatureInfo t = businessSignatureService.get(businessSignatureInfo.getId());//从数据库取出记录的值
+
+                if(t.getStatus() == 2){
+                    addMessage(redirectAttributes, "业务用章申请已送审,无法重复送审");
+                    return "redirect:"+ Global.getAdminPath()+"/businessSignature/businessSignature/?repage";
+                }else if(t.getStatus() == 5){
+                    addMessage(redirectAttributes, "业务用章申请已审核完成,无法再次送审");
+                    return "redirect:"+Global.getAdminPath()+"/businessSignature/businessSignature/?repage";
+                }
+                MyBeanUtils.copyBeanNotNull2Bean(businessSignatureInfo, t);//将编辑表单中的非NULL值覆盖数据库记录中的值
+                businessSignatureService.save(t, ProjectStatusEnum.SIGNED);//保存
+            } else {//新增表单保存
+                businessSignatureService.save(businessSignatureInfo, ProjectStatusEnum.SIGNED);//保存
+            }
+            addMessage(redirectAttributes, "保存业务用章申请成功");
+        }catch (Exception e){
+            logger.error("保存业务用章申请异常:",e);
+            addMessage(redirectAttributes, "保存业务用章申请异常:"+e.getMessage());
+        }
+        return "redirect:"+Global.getAdminPath()+"/businessSignature/businessSignature/?repage";
+    }
+
+
+
+    @RequestMapping(value = "getProcess")
+    public String getProcess(BusinessSignatureInfo businessSignatureInfo, Model model, HttpServletRequest request){
+        model.addAttribute("processInstanceId", businessSignatureInfo.getProcessInstanceId());
+        return "modules/signatureManagement/businessSignature/BusinessSignatureTask";
+    }
+
+    /**
+     * 撤回操作
+     * @param request
+     * @param redirectAttributes
+     * @return
+     * @throws Exception
+     */
+    @RequestMapping(value = "revoke")
+    public String revoke(HttpServletRequest request, RedirectAttributes redirectAttributes) throws Exception {
+        HashMap<String, String> requestMap = findRequestMap(request);
+        String id = requestMap.get("id");
+        try {
+            BusinessSignatureInfo businessSignatureInfo = businessSignatureService.get(id);
+            if(3==businessSignatureInfo.getStatus() || 4==businessSignatureInfo.getStatus()){
+                addMessage(redirectAttributes, "业务用章申请已撤回、驳回,请勿重复操作");
+                return "redirect:"+Global.getAdminPath()+"/dailyOfficeWork/dailyOfficeWorkSignature/?repage";
+            }else if(5==businessSignatureInfo.getStatus()){
+                addMessage(redirectAttributes, "业务用章申请已审批通过,无法撤回");
+                return "redirect:"+Global.getAdminPath()+"/dailyOfficeWork/dailyOfficeWorkSignature/?repage";
+            }
+            businessSignatureService.cancelInvalidate(businessSignatureInfo);
+            addMessage(redirectAttributes, "撤回该业务用章申请成功");
+        }catch (Exception e){
+            logger.info(e.getMessage());
+            addMessage(redirectAttributes, "撤回该业务用章申请失败");
+        }
+        return "redirect:" + Global.getAdminPath() + "/businessSignature/businessSignature/?repage";
+    }
+
+
+    /**
+     * 删除操作
+     */
+    @RequiresPermissions("businessSignature:businessSignature:del")
+    @RequestMapping(value = "delete")
+    public String delete(BusinessSignatureInfo businessSignatureInfo, RedirectAttributes redirectAttributes) {
+
+        businessSignatureService.delete(businessSignatureInfo);
+        addMessage(redirectAttributes, "作废业务用章申请成功");
+        if (StringUtils.isNotBlank(businessSignatureInfo.getHome()) && "home".equals(businessSignatureInfo.getHome())){
+            return "redirect:" + Global.getAdminPath() + "/home/?repage";
+        }else {
+            return "redirect:"+Global.getAdminPath()+"/businessSignature/businessSignature/?repage";
+        }
+    }
+
+    /**
+     * 查看,增加,编辑项目表单页面
+     */
+    @RequiresPermissions(value={"businessSignature:businessSignature:view"},logical= Logical.OR)
+    @RequestMapping(value = "view")
+    public String view(BusinessSignatureInfo businessSignatureInfo, Model model) {
+        if (businessSignatureInfo!=null&&StringUtils.isNotBlank(businessSignatureInfo.getId())) {
+            businessSignatureInfo = businessSignatureService.get(businessSignatureInfo.getId());
+        }else {
+            businessSignatureInfo.setCreateBy(UserUtils.getUser());
+            businessSignatureInfo.setCreateDate(new Date());
+        }
+
+        if(StringUtils.isNotBlank(businessSignatureInfo.getUseType())){
+            String useTypeStr = DictUtils.getMainDictLabel(businessSignatureInfo.getUseType(), "businessSignature", "");
+            businessSignatureInfo.setUseType(useTypeStr);
+        }
+
+        List<WorkClientAttachment> signatureWorkAttachments = Lists.newArrayList();
+        model.addAttribute("businessSignatureInfo", businessSignatureInfo);
+        return "modules/signatureManagement/businessSignature/BusinessSignatureView";
+    }
+
+
+
+    /**
+     * 查看,增加,编辑项目表单页面
+     */
+    @RequiresPermissions(value={"businessSignature:businessSignature:edit"},logical= Logical.OR)
+    @RequestMapping(value = "modify")
+    public String modify(BusinessSignatureInfo businessSignatureInfo, Model model) {
+        if (businessSignatureInfo!=null&&StringUtils.isNotBlank(businessSignatureInfo.getId())) {
+            businessSignatureInfo = businessSignatureService.get(businessSignatureInfo.getId());
+        }else {
+            businessSignatureInfo.setCreateBy(UserUtils.getUser());
+            businessSignatureInfo.setCreateDate(new Date());
+        }
+
+        if(StringUtils.isNotBlank(businessSignatureInfo.getProcessInstanceId())){
+            businessSignatureInfo.setAct(actTaskService.getByAct(businessSignatureInfo.getProcessInstanceId()));
+        }
+
+        model.addAttribute("businessSignatureInfo", businessSignatureInfo);
+        return "modules/signatureManagement/businessSignature/BusinessSignatureModify";
+    }
+
+
+
+
+
+    /**
+     * 审批
+     * @param businessSignatureInfo
+     * @param redirectAttributes
+     * @return
+     */
+    @RequestMapping("saveAudit")
+    public String saveAudit(BusinessSignatureInfo businessSignatureInfo, RedirectAttributes redirectAttributes)  {
+        String home = businessSignatureInfo.getHome();
+        try {
+            String taskDefKey = businessSignatureInfo.getAct().getTaskDefKey();
+            //当状态为未通过时,重新修改数据
+            if ("modifyApply".equals(taskDefKey)) {
+                businessSignatureInfo.getAct().setComment("重新申请");
+            }
+            List<User> users = Lists.newArrayList();
+            if ("bmzr".equals(taskDefKey)){
+                users = UserUtils.getByProssType(businessSignatureInfo.getProcessInstanceId(),2);
+                if (users==null )
+                    users = UserUtils.getByRoleActivityEnname("gsyzshy",3,businessSignatureInfo.getOffice().getId(),"12",businessSignatureInfo.getCreateBy());
+            }else if ("gsyzshy".equals(taskDefKey)){
+                users = UserUtils.getByProssType(businessSignatureInfo.getProcessInstanceId(),3);
+                if (users==null )
+                    users = UserUtils.getByRoleActivityEnname("bgsquhe",3,businessSignatureInfo.getOffice().getId(),"12",businessSignatureInfo.getCreateBy());
+            }else if ("bgsquhe".equals(taskDefKey)){
+                users = UserUtils.getByProssType(businessSignatureInfo.getProcessInstanceId(),3);
+                if (users==null )
+                    users = UserUtils.getByRoleActivityEnname("bgsquhe",3,businessSignatureInfo.getOffice().getId(),"12",businessSignatureInfo.getCreateBy());
+            }else if ("modifyApply".equals(taskDefKey)){
+                users = UserUtils.getByProssType(businessSignatureInfo.getProcessInstanceId(),1);
+            }
+            String flag = businessSignatureInfo.getAct().getFlag();
+            if ("yes".equals(flag) && (users==null || users.size()==0)){
+                addMessage(redirectAttributes, "审批失败,审批人为空,请联系管理员!");
+            }else {
+                if (businessSignatureInfo.getStatus() != 2 && businessSignatureInfo.getStatus() != 4 && businessSignatureInfo.getStatus() != 5) {
+                    addMessage(redirectAttributes, "业务用章申请未发起,请发起申请");
+                    if (StringUtils.isNotBlank(home) && "home".equals(home)) {
+                        return "redirect:" + Global.getAdminPath() + "/home/?repage";
+                    }else if (StringUtils.isNotBlank(home) && "notifyList".equals(home)){
+                        return "redirect:" + Global.getAdminPath() + "/workprojectnotify/workProjectNotify/list/?repage";
+                    } else {
+                        return "redirect:" + Global.getAdminPath() + "/businessSignature/businessSignature/?repage";
+                    }
+                }
+                if(businessSignatureInfo.getStatus() == 5){
+                    addMessage(redirectAttributes, "业务用章申请已登记完成,无法再次送审");
+                    if (StringUtils.isNotBlank(home) && "home".equals(home)){
+                        return "redirect:" + Global.getAdminPath() + "/home/?repage";
+                    }else if (StringUtils.isNotBlank(home) && "notifyList".equals(home)){
+                        return "redirect:" + Global.getAdminPath() + "/workprojectnotify/workProjectNotify/list/?repage";
+                    }else {
+                        return "redirect:"+Global.getAdminPath()+"/businessSignature/businessSignature/?repage";
+                    }
+                }
+                String str = businessSignatureService.signatuereSaveAudit(businessSignatureInfo,users);
+                addMessage(redirectAttributes, str);
+            }
+        }catch (Exception e){
+            addMessage(redirectAttributes, "业务用章申请审批失败");
+            logger.error("Exception e:"+e);
+        }
+
+        if (StringUtils.isNotBlank(home) && "home".equals(home)){
+            return "redirect:" + Global.getAdminPath() + "/home/?repage";
+        }else if (StringUtils.isNotBlank(home) && "notifyList".equals(home)){
+            return "redirect:" + Global.getAdminPath() + "/workprojectnotify/workProjectNotify/list/?repage";
+        }else {
+            return "redirect:"+Global.getAdminPath()+"/businessSignature/businessSignature/?repage";
+        }
+    }
+
+
+
+    /**
+     * 导出
+     * @param request
+     * @param response
+     */
+    @RequestMapping(value = "downloadTemplate")
+    public void downloadTemplate(HttpServletRequest request,HttpServletResponse response) {
+        try {
+            ThisLocalityDownloadUtil download = new ThisLocalityDownloadUtil();
+            download.download("业务用章承诺书.docx",request,response);
+        } catch (Exception e) {
+            logger.error("业务用章承诺书模板下载失败!",e);
+        }
+    }
+
+    /**
+     * 导出
+     * @param request
+     * @param response
+     */
+    @RequestMapping(value = "downloadApplicationTemplate")
+    public void downloadApplicationTemplate(HttpServletRequest request,HttpServletResponse response) {
+        try {
+            ThisLocalityDownloadUtil download = new ThisLocalityDownloadUtil();
+            download.download("印章刻制申请表.docx",request,response);
+        } catch (Exception e) {
+            logger.error("印章刻制申请表模板下载失败!",e);
+        }
+    }
+
+
+}

+ 23 - 0
src/main/java/com/jeeplus/modules/signatureManagement/businessSignature/dao/BusinessSignatureDao.java

@@ -0,0 +1,23 @@
+package com.jeeplus.modules.signatureManagement.businessSignature.dao;
+
+import com.jeeplus.common.persistence.CrudDao;
+import com.jeeplus.common.persistence.annotation.MyBatisDao;
+import com.jeeplus.modules.signatureManagement.businessSignature.entity.BusinessSignatureInfo;
+import com.jeeplus.modules.signatureManagement.electronicSignature.entity.ElectronicSignatureInfo;
+
+
+/**
+ * 电子签章印章管理Dao
+ * @author: 徐滕
+ * @version: 2024-05-30 16:41
+ */
+@MyBatisDao
+public interface BusinessSignatureDao extends CrudDao<BusinessSignatureInfo> {
+
+
+    /**
+     * 修改状态值和流程id
+     * @param businessSignatureInfo
+     */
+    void updateProcessIdAndStatus(BusinessSignatureInfo businessSignatureInfo);
+}

+ 119 - 0
src/main/java/com/jeeplus/modules/signatureManagement/businessSignature/entity/BusinessSignatureInfo.java

@@ -0,0 +1,119 @@
+package com.jeeplus.modules.signatureManagement.businessSignature.entity;
+
+import com.google.common.collect.Lists;
+import com.jeeplus.common.persistence.ActEntity;
+import com.jeeplus.modules.sys.entity.Office;
+import com.jeeplus.modules.workclientinfo.entity.WorkClientAttachment;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 电子签章印章管理
+ * @author: 徐滕
+ * @version: 2024-05-30 16:19
+ */
+public class BusinessSignatureInfo extends ActEntity<BusinessSignatureInfo> {
+
+    private String name; //使用场景描述
+    private String useType; //使用场景:1:审定单;2:报告
+    private Date applicationDate;   //申请时间
+    private Office company;		// 公司ID
+    private Office office;   //部门
+    private Integer status;   //流程状态
+    private String processInstanceId;   //流程id
+    private Date beginDate;   //申请开始时间
+    private Date endDate;   //申请结束时间
+    private String home;
+
+
+    private List<WorkClientAttachment> workAttachments = Lists.newArrayList();//附件信息
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getUseType() {
+        return useType;
+    }
+
+    public void setUseType(String useType) {
+        this.useType = useType;
+    }
+
+    public Date getApplicationDate() {
+        return applicationDate;
+    }
+
+    public void setApplicationDate(Date applicationDate) {
+        this.applicationDate = applicationDate;
+    }
+
+    public List<WorkClientAttachment> getWorkAttachments() {
+        return workAttachments;
+    }
+
+    public void setWorkAttachments(List<WorkClientAttachment> workAttachments) {
+        this.workAttachments = workAttachments;
+    }
+
+    public Office getCompany() {
+        return company;
+    }
+
+    public void setCompany(Office company) {
+        this.company = company;
+    }
+
+    public Office getOffice() {
+        return office;
+    }
+
+    public void setOffice(Office office) {
+        this.office = office;
+    }
+
+    public Integer getStatus() {
+        return status;
+    }
+
+    public void setStatus(Integer status) {
+        this.status = status;
+    }
+
+    public String getProcessInstanceId() {
+        return processInstanceId;
+    }
+
+    public void setProcessInstanceId(String processInstanceId) {
+        this.processInstanceId = processInstanceId;
+    }
+
+    public Date getBeginDate() {
+        return beginDate;
+    }
+
+    public void setBeginDate(Date beginDate) {
+        this.beginDate = beginDate;
+    }
+
+    public Date getEndDate() {
+        return endDate;
+    }
+
+    public void setEndDate(Date endDate) {
+        this.endDate = endDate;
+    }
+
+    public String getHome() {
+        return home;
+    }
+
+    public void setHome(String home) {
+        this.home = home;
+    }
+}

+ 849 - 0
src/main/java/com/jeeplus/modules/signatureManagement/businessSignature/service/BusinessSignatureService.java

@@ -0,0 +1,849 @@
+package com.jeeplus.modules.signatureManagement.businessSignature.service;
+
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import com.jeeplus.common.persistence.Page;
+import com.jeeplus.common.service.CrudService;
+import com.jeeplus.common.utils.IdGen;
+import com.jeeplus.common.utils.MenuStatusEnum;
+import com.jeeplus.modules.act.service.ActTaskService;
+import com.jeeplus.modules.ruralprojectrecords.enums.ProjectStatusEnum;
+import com.jeeplus.modules.serialnum.service.SerialNumTplService;
+import com.jeeplus.modules.signatureManagement.businessSignature.dao.BusinessSignatureDao;
+import com.jeeplus.modules.signatureManagement.businessSignature.entity.BusinessSignatureInfo;
+import com.jeeplus.modules.sys.entity.Office;
+import com.jeeplus.modules.sys.entity.User;
+import com.jeeplus.modules.sys.service.OfficeService;
+import com.jeeplus.modules.sys.service.WorkattachmentService;
+import com.jeeplus.modules.sys.utils.DictUtils;
+import com.jeeplus.modules.sys.utils.UserUtils;
+import com.jeeplus.modules.workactivity.dao.WorkActivityProcessDao;
+import com.jeeplus.modules.workactivity.entity.Activity;
+import com.jeeplus.modules.workactivity.entity.WorkActivityProcess;
+import com.jeeplus.modules.workactivity.service.ActivityService;
+import com.jeeplus.modules.workactivity.service.WorkActivityProcessService;
+import com.jeeplus.modules.workactivitymenu.entity.WorkActivityMenu;
+import com.jeeplus.modules.workactivitymenu.service.WorkActivityMenuService;
+import com.jeeplus.modules.workclientinfo.dao.WorkClientAttachmentDao;
+import com.jeeplus.modules.workclientinfo.entity.WorkClientAttachment;
+import com.jeeplus.modules.workprojectnotify.entity.WorkProjectNotify;
+import com.jeeplus.modules.workprojectnotify.service.WorkProjectNotifyService;
+import com.jeeplus.modules.workprojectnotify.util.UtilNotify;
+import org.activiti.engine.ActivitiObjectNotFoundException;
+import org.activiti.engine.IdentityService;
+import org.activiti.engine.RuntimeService;
+import org.activiti.engine.runtime.ProcessInstance;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.*;
+
+/**
+ * @author: 徐滕
+ * @version: 2024-05-30 16:41
+ */
+@Service
+@Transactional(readOnly = true)
+public class BusinessSignatureService extends CrudService<BusinessSignatureDao, BusinessSignatureInfo> {
+
+    private static final byte[] SYN_BYTE = new byte[0];
+    @Autowired
+    private OfficeService officeService;
+    @Autowired
+    private SerialNumTplService serialNumTplService;
+    @Autowired
+    private WorkClientAttachmentDao workClientAttachmentDao;
+    @Autowired
+    private WorkActivityMenuService workActivityMenuService;
+    @Autowired
+    private RuntimeService runtimeService;
+    @Autowired
+    private WorkActivityProcessService workActivityProcessService;
+    @Autowired
+    private WorkProjectNotifyService workProjectNotifyService;
+    @Autowired
+    private IdentityService identityService;
+    @Autowired
+    private WorkattachmentService workattachmentService;
+    @Autowired
+    private WorkActivityProcessDao workActivityProcessDao;
+    @Autowired
+    private ActTaskService actTaskService;
+    @Autowired
+    private ActivityService activityService;
+
+
+    public BusinessSignatureInfo get(String id) {
+        if(StringUtils.isBlank(id)){
+            return new BusinessSignatureInfo();
+        }
+        BusinessSignatureInfo dailyOfficeWork = super.get(id);
+        if(dailyOfficeWork != null){
+            //获取附件信息
+            WorkClientAttachment workClientAttachment = new WorkClientAttachment();
+            workClientAttachment.setAttachmentId(id);
+            workClientAttachment.setAttachmentFlag("193");
+            dailyOfficeWork.setWorkAttachments(workattachmentService.getAttachmentList(workClientAttachment));
+
+            //添加当前文件服务器类型
+            dailyOfficeWork.setUploadMode(uploadMode);
+            //数据处理(如果为阿里云文件服务器,则对查看的路径进行处理)
+            WorkattachmentService.clientAttachmentManageOnUrl(dailyOfficeWork.getWorkAttachments());
+        }
+        return dailyOfficeWork;
+    }
+
+
+
+    public Page<BusinessSignatureInfo> findPage(Page<BusinessSignatureInfo> page, BusinessSignatureInfo businessSignatureInfo) {
+        //设置数据权限
+        if(!UserUtils.getUser().isAdmin()) {
+            String dataScopeSql = null;
+            dataScopeSql = dataScopeFilter(businessSignatureInfo.getCurrentUser(), "o", "u", "s", MenuStatusEnum.EBUSINESS_SIGNATURE.getValue());
+            businessSignatureInfo.getSqlMap().put("dsf", dataScopeSql);
+            businessSignatureInfo.getSqlMap().put("delFlag", "AND a.del_flag = 0");
+        }
+        if(null!= businessSignatureInfo.getOffice() && StringUtils.isNotBlank(businessSignatureInfo.getOffice().getId())){
+            //查询该选择节点下所有的部门Id
+            List<String> officeIdList = officeService.getChildrenOffice(businessSignatureInfo.getOffice().getId());
+            officeIdList.add(businessSignatureInfo.getOffice().getId());
+            businessSignatureInfo.setOfficeIdList(officeIdList);
+        }
+        int count = dao.queryCount(businessSignatureInfo);
+        page.setCount(count);
+        page.setCountFlag(false);
+        businessSignatureInfo.setPage(page);
+        List<BusinessSignatureInfo> recordsList = findList(businessSignatureInfo);
+        page.setList(recordsList);
+        return page;
+    }
+
+
+
+
+
+
+
+
+    /**
+     * 新增方法
+     * @param businessSignatureInfo
+     */
+    @Transactional(readOnly = false)
+    public void saveInfo(BusinessSignatureInfo businessSignatureInfo) {
+
+        businessSignatureInfo.setStatus(1);
+        User createBy = businessSignatureInfo.getCreateBy();
+        if(createBy != null){
+            createBy = UserUtils.get(createBy.getId());
+        }else {
+            createBy = UserUtils.getUser();
+        }
+
+        //添加申请编号
+        /*synchronized (SYN_BYTE) {
+            if (StringUtils.isBlank(businessSignatureInfo.getNumber())) {
+                //工程造价鉴定 需要纸质归档
+                assert createBy != null;
+                businessSignatureInfo.setNumber(serialNumTplService.genSerialNum(createBy.getCompany(), DailyOfficeWork.DAILY_OFFICE_WORK_KEY));
+
+            }
+        }*/
+
+        if(StringUtils.isBlank(businessSignatureInfo.getId())){
+            businessSignatureInfo.setCompany(UserUtils.getUser().getCompany());
+            businessSignatureInfo.setOffice(UserUtils.getUser().getOffice());
+            businessSignatureInfo.preInsert();
+            dao.insert(businessSignatureInfo);
+        }else {
+            businessSignatureInfo.preUpdate();
+            dao.update(businessSignatureInfo);
+        }
+
+        //保存签章附件信息
+        this.saveAttachments(businessSignatureInfo);
+    }
+
+
+    @Transactional(readOnly = false)
+    public void save(BusinessSignatureInfo businessSignatureInfo, ProjectStatusEnum status) throws Exception {
+        businessSignatureInfo.setCompany(UserUtils.getUser().getCompany());
+        businessSignatureInfo.setOffice(UserUtils.getUser().getOffice());
+
+        businessSignatureInfo.setStatus(status.getValue());
+        User createBy = businessSignatureInfo.getCreateBy();
+        if(createBy != null){
+            createBy = UserUtils.get(createBy.getId());
+        }else {
+            createBy = UserUtils.getUser();
+        }
+
+        //添加申请编号
+        /*synchronized (SYN_BYTE) {
+            if (StringUtils.isBlank(businessSignatureInfo.getNumber())) {
+                //工程造价鉴定 需要纸质归档
+                assert createBy != null;
+                businessSignatureInfo.setNumber(serialNumTplService.genSerialNum(createBy.getCompany(), DailyOfficeWork.DAILY_OFFICE_WORK_KEY));
+
+            }
+        }*/
+        if(businessSignatureInfo.getStatus()== ProjectStatusEnum.INVALID.getValue()){
+            businessSignatureInfo.setId(IdGen.uuid());
+            dao.insert(businessSignatureInfo);
+        }else {
+            super.save(businessSignatureInfo);
+        }
+        //保存签章附件信息
+        this.saveAttachments(businessSignatureInfo);
+        //启动审批流程
+        this.startAudit(businessSignatureInfo,businessSignatureInfo.getProcessInstanceId());
+    }
+
+    /**
+     * 保存附件
+     * @param businessSignatureInfo
+     */
+    private void saveAttachments(BusinessSignatureInfo businessSignatureInfo) {
+        if (businessSignatureInfo.getWorkAttachments()!=null && !businessSignatureInfo.getWorkAttachments().isEmpty()) {
+            //保存附件信息
+            for (WorkClientAttachment workClientAttachment : businessSignatureInfo.getWorkAttachments()) {
+                if (StringUtils.isBlank(workClientAttachment.getId())&&StringUtils.isNotBlank(workClientAttachment.getAttachmentId())) {
+                    continue;
+                }
+                if (StringUtils.isBlank(workClientAttachment.getId())&&StringUtils.isBlank(workClientAttachment.getUrl())) {
+                    continue;
+                }
+                if (WorkClientAttachment.DEL_FLAG_NORMAL.equals(workClientAttachment.getDelFlag())) {
+                    workClientAttachment.setAttachmentId(businessSignatureInfo.getId());
+                    workClientAttachment.setAttachmentFlag("193");
+                    workClientAttachment.setAttachmentUser(UserUtils.getUser().getId());
+                    if (StringUtils.isBlank(workClientAttachment.getId()) || "null".equals(workClientAttachment.getId())) {
+                        workClientAttachment.preInsert();
+                        workClientAttachmentDao.insert(workClientAttachment);
+                    } else {
+                        workClientAttachment.preUpdate();
+                        workClientAttachmentDao.update(workClientAttachment);
+                    }
+                } else {
+                    workClientAttachmentDao.delete(workClientAttachment);
+                }
+            }
+        }
+    }
+
+
+    /**
+     * 启动审批流程
+     *
+     * @param businessSignatureInfo
+     */
+    private void startAudit(BusinessSignatureInfo businessSignatureInfo, String processInstanceId) throws Exception {
+        try{
+            Map<String, Object> variables = new HashMap<String, Object>();
+            identityService.setAuthenticatedUserId(businessSignatureInfo.getCurrentUser().getId());
+            Office office = businessSignatureInfo.getOffice();
+            office = officeService.get(office.getId());
+            businessSignatureInfo.setOffice(office);
+            String useTypeStr = DictUtils.getMainDictLabel(businessSignatureInfo.getUseType(), "businessSignature", "");
+            String contentStr = "业务用章申请描述:"+ businessSignatureInfo.getName()+"。待审批,申请使用场景:"+useTypeStr;
+            String titleStr = "业务用章申请描述:"+ businessSignatureInfo.getName()+"。待审批,申请使用场景:"+useTypeStr;
+
+            String businessKey = businessSignatureInfo.getId();
+
+            WorkActivityMenu workActivityMenu = workActivityMenuService.findByParentAndOffice("7854872f45b84acd893010e66a3db2c8", office);
+            // 启动流程
+            String processType = workActivityMenu.getProcessType();
+            StringBuffer buffer = new StringBuffer();
+            Activity activity = new Activity();
+            WorkProjectNotify workProjectNotify = UtilNotify
+                    .saveNotify(businessSignatureInfo.getId(),
+                            null,
+                            businessSignatureInfo.getCompany().getId(),
+                            titleStr,
+                            contentStr,
+                            "193",
+                            "0",
+                            "待审批",
+                            ""
+                    );
+
+            List<User> users = new ArrayList<>();
+
+            List<User> bmzrs = Lists.newArrayList();
+
+            String officeName = "";
+
+            Office loginUserOffice = UserUtils.getUser().getOffice();
+            if(StringUtils.isNotBlank(loginUserOffice.getParentIds())){
+                // 使用 split 方法将字符串分割成数组
+                String[] parentIdArray = loginUserOffice.getParentIds().split(",");
+                // 将数组转换为 List
+                List<String> parentIdList = new ArrayList<>(Arrays.asList(parentIdArray));
+                parentIdList.add(loginUserOffice.getId());
+                List<Office> parentOffice = officeService.getByIdList(parentIdList);
+                List<String> officeNameList = Lists.newArrayList();
+                for (Office loginParentOffice : parentOffice) {
+                    officeNameList.add(loginParentOffice.getName());
+                }
+                officeName = String.join(", ", officeNameList);
+            }
+
+            if(StringUtils.isNotBlank(officeName)) {
+                if(officeName.contains("工程五部") ||
+                        officeName.contains("盐城分公司") ||
+                        officeName.contains("河北团队") ||
+                        officeName.contains("河北团队2") ||
+                        officeName.contains("四川团队") ||
+                        officeName.contains("苏州分公司")){
+                    //查找办公室审批人员
+                    bmzrs = UserUtils.getByRoleActivityEnname("bgsquhe",3,office.getId(),"11",businessSignatureInfo.getCreateBy());
+                } else {
+                    //查找部门主任审批人员
+                    bmzrs = UserUtils.getByRoleActivityEnname("bmzr",2,office.getId(),"6",businessSignatureInfo.getCreateBy());
+                }
+            }
+
+            List<User> gsyzshyList = UserUtils.getByRoleActivityEnname("gsyzshy",3,office.getId(),"11",businessSignatureInfo.getCreateBy());
+
+            //查找办公室审批人员
+            List<User> bgsList = UserUtils.getByRoleActivityEnname("bgsquhe",3,office.getId(),"11",businessSignatureInfo.getCreateBy());
+
+
+            if (StringUtils.isNotBlank(workActivityMenu.getId())) {
+                processType = workActivityMenu.getProcessType();
+                workActivityMenu = workActivityMenuService.get(workActivityMenu.getId());
+                List<Activity> activities = workActivityMenu.getActivities();
+                for (Activity a : activities) {
+                    String encount = a.getEncount();
+                    String enlist = a.getEnlist();
+                    if (a.getRole()!=null && StringUtils.isNotBlank(a.getRole().getEnname())){
+                        List enusers = UserUtils.getByRoleActivityEnnames(a.getRole().getEnname(),office.getId(),"8",businessSignatureInfo.getCreateBy());
+                        if (enusers.size()==0){
+                            throw new Exception("流程审批人不能为空,角色"+a.getRole().getName()+"下无用户,请联系管理员!");
+                        }
+                        variables.put(enlist, enusers);
+                        variables.put(encount, enusers.size());
+                    }
+                    if (a.getDelFlag().equals("0") && a.getCount() == 1) {
+                        activity = a;
+                    }
+                }
+                buffer.append(activity.getRole().getEnname());
+                if (StringUtils.isNotBlank(activity.getId())) {
+                    //角色审批
+                    if (StringUtils.isNotBlank(activity.getRole().getEnname())) {
+                        users = UserUtils.getByRoleActivityEnnames(activity.getRole().getEnname(),office.getId(),"11",businessSignatureInfo.getCreateBy());
+                    }
+                    //人员审批
+                    if (StringUtils.isNotBlank(activity.getUser().getId())) {
+                        users.add(activity.getUser());
+                    }
+                }
+                workProjectNotify.setId("");
+            } else {
+                if (bmzrs.size() == 0){
+                    throw new Exception("流程审批人不能为空,角色部门负责人下无用户,请联系管理员!");
+                }
+                processType = "businessSignature";
+                variables.put("applyUserId", businessSignatureInfo.getCreateBy().getId());
+                variables.put("bmzrCount",bmzrs.size());
+                variables.put("bmzrList",bmzrs);
+                users.addAll(bmzrs);
+            }
+            List<String> userIds = new ArrayList<>(users.size());
+            for (User u : users){
+                userIds.add(u.getId());
+                workProjectNotify.setUser(u);
+                workProjectNotify.setId("");
+                workProjectNotify.setNotifyRole("部门主任审批");
+                workProjectNotifyService.save(workProjectNotify);
+                Map<String,Object> extras = new HashMap<>();
+                extras.put("type","7003");
+                extras.put("procDefKey","193");
+                extras.put("id",workProjectNotify.getId());
+                UserUtils.pushInfoToApp(titleStr,contentStr,extras,u.getId());
+            }
+
+            long t1 = System.currentTimeMillis();
+            UserUtils.pushIm(userIds,contentStr);
+            logger.info("推送消息耗时:{}ms",System.currentTimeMillis()-t1);
+            variables.put("busId", businessKey);
+            variables.put("type", processType);
+            variables.put("title", "业务用章申请描述:" + businessSignatureInfo.getName());//设置标题;
+
+            ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(processType, businessKey, variables);
+            if (StringUtils.isNotBlank(processInstanceId)) {
+                workActivityProcessService.updateProcessInstanceId(processInstance.getId(),processInstanceId);
+                workActivityProcessService.deleteProcessInstanceId(processInstanceId);
+                workActivityProcessService.deleteProcessIdAuditUsers(processInstanceId);
+            }
+            List<Activity> list = workActivityMenu.getActivities();
+            if (list != null && list.size() != 0) {
+                workActivityProcessService.saveList(list, processInstance.getId());
+            } else {
+                WorkActivityProcess workActivityProcess = new WorkActivityProcess();
+                workActivityProcess.setProcessKey(processType);
+                workActivityProcess.setCount(1);
+                workActivityProcess.setProcessInstanceId(processInstance.getId());
+                workActivityProcess.setIsApproval("0");
+                workActivityProcessService.save(workActivityProcess);
+                workActivityProcess.setCount(2);
+                workActivityProcess.setId("");
+                workActivityProcessService.save(workActivityProcess);
+                workActivityProcess.setCount(3);
+                workActivityProcess.setId("");
+                workActivityProcessService.save(workActivityProcess);
+                workActivityProcessService.insertAuditsByType(bmzrs,processInstance.getId(),1,1);
+                workActivityProcessService.insertAuditsByType(gsyzshyList,processInstance.getId(),2,0);
+                workActivityProcessService.insertAuditsByType(bgsList,processInstance.getId(),3,0);
+            }
+            businessSignatureInfo.setProcessInstanceId(processInstance.getId());
+            businessSignatureInfo.setStatus(ProjectStatusEnum.IN_APRL.getValue());
+            dao.updateProcessIdAndStatus(businessSignatureInfo);
+            //通知添加流程实例ID
+            workProjectNotify.setProcessInstanceId(processInstance.getId());
+            workProjectNotifyService.save(workProjectNotify);
+        }catch (Exception e){
+            logger.error("启动审批流程异常:",e);
+            throw e;
+        }
+    }
+
+
+
+    /**
+     * 报告:强制撤销
+     * @param businessSignatureInfo
+     */
+    @Transactional(readOnly = false)
+    public void cancelInvalidate(BusinessSignatureInfo businessSignatureInfo) {
+        try {
+            String invalidateProcessInstanceId = businessSignatureInfo.getProcessInstanceId();
+            //将流程图中尚未走到的task的流程追踪信息逻辑删除,添加一条"撤销"流程追踪信息
+            WorkActivityProcess process = new WorkActivityProcess();
+            process.setProcessInstanceId(businessSignatureInfo.getProcessInstanceId());
+            process.setIsApproval("0");
+            WorkActivityProcess workActivityProcess = new WorkActivityProcess();
+            workActivityProcess.setProcessInstanceId(businessSignatureInfo.getProcessInstanceId());
+            List<WorkActivityProcess> processList = workActivityProcessService.findList(workActivityProcess);
+            WorkProjectNotify notify = new WorkProjectNotify();
+            notify.setNotifyId(businessSignatureInfo.getId());
+            List<User> userList = workProjectNotifyService.readByNotifyId(notify);
+            if (userList!=null && userList.size()!=0) {
+                for (User u : userList) {
+                    User user = UserUtils.get(u.getId());
+                    UserUtils.pushMeIm(user.getId());
+                }
+            }
+            if(processList!=null && processList.size()>0){
+                for (int i =0;i<processList.size();i++) {
+                    WorkActivityProcess p = processList.get(i);
+                    if(com.jeeplus.common.utils.StringUtils.isNotBlank(p.getIsApproval()) && "0".equals(p.getIsApproval())){
+                        p.setDelFlag("1");
+                        p.setIsApproval("-1");
+                        workActivityProcessDao.updateDelFlagAndIsApproval(p);
+                    }
+                }
+                WorkActivityProcess pro = new WorkActivityProcess();
+                pro.setId("");
+                pro.preInsert();
+                pro.setDelFlag("0");
+                pro.setRemarks("[强制撤销]");
+                pro.setProcessKey(processList.get(0).getProcessKey());
+                pro.setIsApproval("1");
+                pro.setProcessInstanceId(processList.get(0).getProcessInstanceId());
+                pro.setCount(0);
+                workActivityProcessDao.insert(pro);
+            }
+
+            //结束该流程,设为"撤销"状态
+            actTaskService.endProcessInstance(invalidateProcessInstanceId,"业务用章申请-强制撤销");
+            businessSignatureInfo.setStatus(3);
+            businessSignatureInfo.preUpdate();
+            dao.update(businessSignatureInfo);
+
+        }catch (ActivitiObjectNotFoundException e){
+            System.err.println("业务用章申请撤销异常,因为这个流程已不存在!");
+            e.printStackTrace();
+            logger.error("Exception e:"+e);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+            logger.error("Exception e:"+e);
+        }
+
+    }
+    /**
+     * 签章流程审核方法
+     * @param businessSignatureInfo
+     * @param auditUsers
+     * @return
+     * @throws Exception
+     */
+    @Transactional(readOnly = false)
+    public String signatuereSaveAudit(BusinessSignatureInfo businessSignatureInfo, List<User> auditUsers) {
+        int status = businessSignatureInfo.getStatus();
+        String taskDefKey = businessSignatureInfo.getAct().getTaskDefKey();
+        if (!"modifyApply".equals(taskDefKey) && !taskDefKey.contains("audit") ) {
+            actTaskService.claim(businessSignatureInfo.getAct().getTaskId(), UserUtils.getUser().getId());
+        }else {
+            //驳回修改进入该方法
+            businessSignatureInfo.getAct().setFlag("yes");
+            saveInfo(businessSignatureInfo);
+            businessSignatureInfo.setStatus(ProjectStatusEnum.IN_APRL.getValue());
+        }
+
+        String comment = "";
+        if ( status == ProjectStatusEnum.REJECTED.getValue()) {
+            comment = ("yes".equals(businessSignatureInfo.getAct().getFlag())?"[重新申请] ":"[已撤销] ");
+        }else {
+            comment = ("yes".equals(businessSignatureInfo.getAct().getFlag())?"[同意] ":"[驳回] ")+businessSignatureInfo.getAct().getComment();
+        }
+
+        if (!"yes".equals(businessSignatureInfo.getAct().getFlag())) {
+            businessSignatureInfo.setStatus(ProjectStatusEnum.REJECTED.getValue());
+        }
+
+        User createUser = UserUtils.get(businessSignatureInfo.getCreateBy().getId());
+
+        Map<String, Object> vars = Maps.newHashMap();
+        String notifyRole = "";
+        //业务逻辑对应的条件表达式
+        User user = null;
+        List<Activity> activitieList = activityService.getByProcessInstanceId(businessSignatureInfo.getProcessInstanceId());
+        WorkActivityMenu workActivityMenu = new WorkActivityMenu();
+        if (activitieList != null && activitieList.size() != 0) {
+            Iterator<Activity> iterator = activitieList.iterator();
+            while (iterator.hasNext()){
+                Activity activityInfo = iterator.next();
+                if (!"businessSignature".equals(activityInfo.getProcessKey())){
+                    iterator.remove();
+                }
+            }
+            workActivityMenu.setProcessType(activitieList.get(0).getProcessKey());
+            workActivityMenu.setActivities(activitieList);
+        }
+
+        WorkActivityProcess workActivityProcess = new WorkActivityProcess();
+        WorkActivityProcess selectProcess = new WorkActivityProcess();
+        selectProcess.setProcessInstanceId(businessSignatureInfo.getProcessInstanceId());
+        List<WorkActivityProcess> workActivityProcesses = workActivityProcessService.findList(selectProcess);
+        List<Activity> activities = workActivityMenu.getActivities();
+        String  taskCount = "1";
+        String enname = "";
+        Office office = businessSignatureInfo.getOffice();
+        office = officeService.get(office.getId());
+        businessSignatureInfo.setOffice(office);
+        String useTypeStr = DictUtils.getMainDictLabel(businessSignatureInfo.getUseType(), "businessSignature", "");
+        String notifyStr = "业务用章申请描述:"+ businessSignatureInfo.getName()+"。待审批,申请使用场景:"+useTypeStr;
+        String str = notifyStr+",创建人:"+businessSignatureInfo.getCreateBy().getName()+",所属部门:"+businessSignatureInfo.getOffice().getName();
+        String titleStr = "业务用章申请描述:"+ businessSignatureInfo.getName()+"。待审批";
+        int key = 0;
+        //业务逻辑对应的条件表达式
+        String exp = "";
+        if (StringUtils.isNotBlank(workActivityMenu.getProcessType()) && !workActivityMenu.getProcessType().equals("businessSignature")) {
+            key = 1;
+            for (int i = 0; i < workActivityProcesses.size(); i++) {
+                WorkActivityProcess activityProcess = workActivityProcesses.get(i);
+                if (taskDefKey.equals("modifyApply")) {
+                    taskCount = "0";
+                    workActivityProcess.setId("");
+                    workActivityProcess.setCount(0);
+                    if (!"yes".equals(businessSignatureInfo.getAct().getFlag())) {
+                        businessSignatureInfo.setStatus(ProjectStatusEnum.RECALL.getValue());
+                        workActivityProcess.setIsApproval("2");
+                        vars.put("pass", false);
+                    } else {
+                        vars.put("pass", true);
+                        workActivityProcess.setIsApproval("1");
+                    }
+                    break;
+                } else {
+                    taskCount = activityProcess.getCount()+"";
+                    workActivityProcess = activityProcess;
+                    if (!workActivityProcess.getIsApproval().equals("0")) {
+                        workActivityProcess.setId("");
+                    }
+                    for (Activity activity : activities) {
+                        if (activity.getCount() == activityProcess.getCount()) {
+                            notifyRole = activity.getName();
+                            break;
+                        }
+                    }
+                    if (!"yes".equals(businessSignatureInfo.getAct().getFlag())) {
+                        notifyRole = "调整签章申请";
+                        businessSignatureInfo.setStatus(ProjectStatusEnum.REJECTED.getValue());
+                        workActivityProcess.setIsApproval("2");
+                        String returnBack = "-1";
+                        for (Activity activity : activities) {
+                            if (activity.getCount() == activityProcess.getCount()) {
+                                returnBack = activity.getReturnBack();
+                                break;
+                            }
+                        }
+                        if (returnBack.equals("0")) {
+                            workActivityProcess.setId("");
+                        }
+                        vars.put("pass", false);
+                    } else {
+                        workActivityProcess.setIsApproval("1");
+                        vars.put("pass", true);
+                    }
+                    break;
+                }
+            }
+        }else {
+            workActivityMenu.setProcessType("businessSignature");
+            for (int i = 0; i < workActivityProcesses.size(); i++) {
+                WorkActivityProcess activityProcess = workActivityProcesses.get(i);
+                String count = String.valueOf(activityProcess.getCount());
+                workActivityProcess = activityProcess;
+                if (!workActivityProcess.getIsApproval().equals("0")) {
+                    workActivityProcess.setId("");
+                }
+                // 审核环节
+                if ("bmzr".equals(taskDefKey) && count.contains("1")) {
+                    taskCount = "1";
+                    exp = "pass";
+                    if ("yes".equals(businessSignatureInfo.getAct().getFlag())) {
+                        workActivityProcessService.insertAuditsByType(auditUsers,businessSignatureInfo.getProcessInstanceId(),2,1);
+                        notifyRole = "公司领导审核";
+                        workActivityProcess.setIsApproval("1");
+                        enname = "gsyzshy";
+                        vars.put("gsyzshyList", auditUsers);
+                        vars.put("gsyzshyCount",auditUsers.size());
+                    } else {
+                        notifyRole = "调整业务用章申请";
+                        workActivityProcess.setIsApproval("2");
+                    }
+                    break;
+                }else if ("gsyzshy".equals(taskDefKey) && count.contains("2")) {
+                    taskCount = "2";
+                    exp = "pass";
+                    if ("yes".equals(businessSignatureInfo.getAct().getFlag())) {
+                        workActivityProcessService.insertAuditsByType(auditUsers,businessSignatureInfo.getProcessInstanceId(),2,1);
+                        notifyRole = "办公室审核";
+                        workActivityProcess.setIsApproval("1");
+                        enname = "bgsquhe";
+                        vars.put("bgsquheList", auditUsers);
+                        vars.put("bgsquheCount",auditUsers.size());
+                    } else {
+                        notifyRole = "调整业务用章申请";
+                        workActivityProcess.setIsApproval("2");
+                    }
+                    break;
+                }else if ("bgsquhe".equals(taskDefKey) && count.contains("3")) {
+                    taskCount = "3";
+                    exp = "pass";
+                    if ("yes".equals(businessSignatureInfo.getAct().getFlag())) {
+                        notifyRole = "审批通过";
+                        workActivityProcess.setIsApproval("1");
+                        businessSignatureInfo.setApplicationDate(new Date());
+                    } else {
+                        notifyRole = "调整业务用章申请";
+                        workActivityProcess.setIsApproval("2");
+                    }
+                    break;
+                } else if ("modifyApply".equals(taskDefKey) && "0".equals(count)) {
+                    notifyRole = "部门负责人审批";
+                    taskCount = "0";
+                    enname = "bmzr";
+                    workActivityProcess.setCount(0);
+                    if("yes".equals(businessSignatureInfo.getAct().getFlag())){
+                        workActivityProcess.setIsApproval("1");
+                        vars.put("pass",true);
+                        vars.put("passs",true);
+                    }else{
+                        workActivityProcess.setIsApproval("2");
+                        businessSignatureInfo.setStatus(ProjectStatusEnum.RECALL.getValue());
+                        vars.put("pass",false);
+                        vars.put("passs",false);
+                    }
+                    break;
+                }
+            }
+        }
+
+        // 设置意见
+        businessSignatureInfo.getAct().setComment(("yes".equals(businessSignatureInfo.getAct().getFlag()) ? "[同意] " : "[驳回] ") + businessSignatureInfo.getAct().getComment());
+        businessSignatureInfo.preUpdate();
+        // 提交流程任务
+        vars.put(exp, "yes".equals(businessSignatureInfo.getAct().getFlag()) ? true : false);
+        vars.put("passs", true);
+        workActivityProcessService.updateProcess(workActivityProcess,workActivityMenu,key,taskCount,businessSignatureInfo.getProcessInstanceId(),taskDefKey,"modifyApply",businessSignatureInfo.getAct().getFlag(),comment, activities);
+        // 提交流程任务
+        actTaskService.complete(businessSignatureInfo.getAct().getTaskId(), businessSignatureInfo.getAct().getProcInsId(), businessSignatureInfo.getAct().getComment(), vars);
+
+        boolean state = actTaskService.isProcessEnd(businessSignatureInfo.getAct().getProcInsId());
+        List<User> users = new ArrayList<>();
+        List<User> userList = new ArrayList<>();
+
+
+        if(!state) {
+            users.add(businessSignatureInfo.getCreateBy());
+            //审核完成提示框
+
+            String title = "业务用章申请描述:"+ businessSignatureInfo.getName()+"。签章申请审批完成,申请使用场景:"+useTypeStr+"。";
+            String content = "业务用章申请描述:"+ businessSignatureInfo.getName()+"。签章申请审批完成,申请使用场景:"+useTypeStr;
+
+            if ("yes".equals(businessSignatureInfo.getAct().getFlag())) {
+                businessSignatureInfo.setStatus(ProjectStatusEnum.SIGNED.getValue());
+                WorkProjectNotify customNotify = new WorkProjectNotify();
+                customNotify.setNotifyId(businessSignatureInfo.getId());
+                userList = workProjectNotifyService.readByNotifyId(customNotify);
+                users.add(businessSignatureInfo.getCreateBy());
+                workProjectNotifyService
+                        .save(UtilNotify
+                                .saveNotify(businessSignatureInfo.getId(),
+                                        businessSignatureInfo.getCreateBy(),
+                                        businessSignatureInfo.getCompany().getId(),
+                                        title,
+                                        content,
+                                        "193",
+                                        "0",
+                                        "待通知",
+                                        notifyRole));
+            } else {
+                WorkProjectNotify customNotify = new WorkProjectNotify();
+                customNotify.setNotifyId(businessSignatureInfo.getId());
+                userList = workProjectNotifyService.readByNotifyId(customNotify);
+                users.add(businessSignatureInfo.getCreateBy());
+                if (businessSignatureInfo.getStatus()!= ProjectStatusEnum.RECALL.getValue()){
+                    businessSignatureInfo.setStatus(ProjectStatusEnum.REJECTED.getValue());
+                    workProjectNotifyService
+                            .save(UtilNotify
+                                    .saveNotify(businessSignatureInfo.getId(),
+                                            businessSignatureInfo.getCreateBy(),
+                                            businessSignatureInfo.getCompany().getId(),
+                                            titleStr,
+                                            notifyStr,
+                                            "193",
+                                            "0",
+                                            "待通知",
+                                            notifyRole));
+                }
+            }
+            workActivityProcessService.deleteProcessIdAuditUsers(businessSignatureInfo.getProcessInstanceId());
+
+        }else{
+            if (StringUtils.isNotBlank(workActivityMenu.getProcessType()) && !workActivityMenu.getProcessType().equals("businessSignature")) {
+                WorkProjectNotify notify = new WorkProjectNotify();
+                notify.setNotifyId(businessSignatureInfo.getId());
+                userList = workProjectNotifyService.readByNotifyId(notify);
+                WorkProjectNotify workProjectNotify = UtilNotify
+                        .saveNotify(businessSignatureInfo.getId(),
+                                new User(),
+                                businessSignatureInfo.getCompany().getId(),
+                                titleStr,
+                                str,
+                                "193",
+                                "0",
+                                "待审批",
+                                notifyRole);
+                String count = taskDefKey.replace("audit","").replace("task","");
+                List<WorkProjectNotify> workProjectNotifys = activityService.getByFlagAndTaskDefKeyList(
+                        activities,
+                        workProjectNotify,
+                        taskDefKey,
+                        businessSignatureInfo.getAct().getFlag(),
+                        count,
+                        businessSignatureInfo.getCreateBy(),
+                        businessSignatureInfo.getOffice().getId(),
+                        "4");
+                for (WorkProjectNotify workProjectNotify1:workProjectNotifys){
+                    users.add(workProjectNotify1.getUser());
+                    workProjectNotify1.setId("");
+                    workProjectNotify1.setIsNewRecord(false);
+                    workProjectNotifyService.save(workProjectNotify1);
+                }
+            }else {
+                if (!"yes".equals(businessSignatureInfo.getAct().getFlag())) {//驳回待办提醒
+
+                    str = "业务用章申请描述:"+ businessSignatureInfo.getName()+"。被驳回,请选择重新申请或作废,申请使用场景:"+useTypeStr+"。";
+                    titleStr = "业务用章申请描述:"+ businessSignatureInfo.getName()+"。被驳回,请选择重新申请或作废,申请使用场景:"+useTypeStr+"。";
+                    WorkProjectNotify notify = new WorkProjectNotify();
+                    notify.setNotifyId(businessSignatureInfo.getId());
+                    userList = workProjectNotifyService.readByNotifyId(notify);
+                    //users.add(user);
+                    WorkProjectNotify workProjectNotify = UtilNotify
+                            .saveNotify(businessSignatureInfo.getId(),
+                                    businessSignatureInfo.getCreateBy(),
+                                    businessSignatureInfo.getCompany().getId(),
+                                    titleStr,
+                                    str,
+                                    "193",
+                                    "0",
+                                    "重新申请",
+                                    notifyRole);
+                    workProjectNotifyService.save(workProjectNotify);
+                } else {
+                    if (StringUtils.isNotBlank(enname)) {//驳回重新申请待办信息
+                        str = "业务用章申请描述:"+ businessSignatureInfo.getName()+"。待审批,申请使用场景:"+useTypeStr+"。";
+                        titleStr = "业务用章申请描述:"+ businessSignatureInfo.getName()+"。待审批,申请使用场景:"+useTypeStr+"。";
+
+                        WorkProjectNotify notify = new WorkProjectNotify();
+                        notify.setNotifyId(businessSignatureInfo.getId());
+                        userList = workProjectNotifyService.readByNotifyId(notify);
+                        WorkProjectNotify workProjectNotify = UtilNotify
+                                .saveNotify(businessSignatureInfo.getId(),
+                                        new User(),
+                                        businessSignatureInfo.getCompany().getId(),
+                                        titleStr,
+                                        str,
+                                        "193",
+                                        "0",
+                                        "待审批",
+                                        notifyRole);
+                        for (User user1:auditUsers){
+                            users.add(user1);
+                            workProjectNotify.setUser(user1);
+                            workProjectNotify.setId("");
+                            workProjectNotify.setIsNewRecord(false);
+                            workProjectNotifyService.save(workProjectNotify);
+                            Map<String,Object> extras = new HashMap<>();
+                            extras.put("type","7003");
+                            extras.put("procDefKey","193");
+                            extras.put("id",workProjectNotify.getId());
+                            UserUtils.pushInfoToApp(titleStr,str,extras,user1.getId());
+                        }
+                    }else {
+                        WorkProjectNotify notify = new WorkProjectNotify();
+                        notify.setNotifyId(businessSignatureInfo.getId());
+                        userList = workProjectNotifyService.readByNotifyId(notify);
+                        users.add(businessSignatureInfo.getCreateBy());
+                        workProjectNotifyService
+                                .save(UtilNotify
+                                        .saveNotify(businessSignatureInfo.getId(),
+                                                businessSignatureInfo.getCreateBy(),
+                                                businessSignatureInfo.getCompany().getId(),
+                                                titleStr,
+                                                str,
+                                                "193",
+                                                "0",
+                                                "重新申请",
+                                                notifyRole));
+                    }
+                }
+            }
+        }
+
+        if (users!=null && users.size()!=0) {
+            List<String> userIds = new ArrayList<>(users.size());
+            for (User u : users) {
+                userIds.add(u.getId());
+            }
+            UserUtils.pushIm(userIds,titleStr);
+        }
+        if (userList!=null && userList.size()!=0) {
+            for (User u : userList) {
+                UserUtils.pushMeIm(u.getId());
+            }
+        }
+        dao.update(businessSignatureInfo);
+        return "保存审核意见成功!";
+    }
+
+
+}

+ 381 - 0
src/main/java/com/jeeplus/modules/signatureManagement/electronicSignature/controller/ElectronicSignatureController.java

@@ -0,0 +1,381 @@
+package com.jeeplus.modules.signatureManagement.electronicSignature.controller;
+
+import com.google.common.collect.Lists;
+import com.jeeplus.common.config.Global;
+import com.jeeplus.common.oss.OSSClientUtil;
+import com.jeeplus.common.persistence.Page;
+import com.jeeplus.common.utils.MyBeanUtils;
+import com.jeeplus.common.utils.StringUtils;
+import com.jeeplus.common.utils.ThisLocalityDownloadUtil;
+import com.jeeplus.common.web.BaseController;
+import com.jeeplus.modules.act.entity.Act;
+import com.jeeplus.modules.act.service.ActTaskService;
+import com.jeeplus.modules.ruralprojectrecords.enums.ProjectStatusEnum;
+import com.jeeplus.modules.signature.dailyOfficeWork.entity.DailyOfficeWork;
+import com.jeeplus.modules.signatureManagement.electronicSignature.entity.ElectronicSignatureInfo;
+import com.jeeplus.modules.signatureManagement.electronicSignature.service.ElectronicSignatureService;
+import com.jeeplus.modules.sys.entity.User;
+import com.jeeplus.modules.sys.utils.DictUtils;
+import com.jeeplus.modules.sys.utils.UserUtils;
+import com.jeeplus.modules.workclientinfo.entity.WorkClientAttachment;
+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.shiro.authz.annotation.Logical;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.ModelAttribute;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.servlet.mvc.support.RedirectAttributes;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+
+/**
+ * 电子签章印章管理controller
+ * @author: 徐滕
+ * @version: 2024-05-30 16:31
+ */
+@Controller
+@RequestMapping(value = "${adminPath}/electronicSignature/electronicSignature")
+public class ElectronicSignatureController extends BaseController {
+
+    @Autowired
+    private ElectronicSignatureService electronicSignatureService;
+    @Autowired
+    private ActTaskService actTaskService;
+    @Autowired
+    protected HistoryService historyService;
+
+    @ModelAttribute
+    public ElectronicSignatureInfo get(@RequestParam(required=false) String id) {
+        ElectronicSignatureInfo entity = null;
+        if (StringUtils.isNotBlank(id)){
+            entity = electronicSignatureService.get(id);
+        }
+        if (entity == null){
+            entity = new ElectronicSignatureInfo();
+        }
+        return entity;
+    }
+
+
+
+    /**
+     * 电子签章印章管理列表页面
+     */
+    @RequiresPermissions("electronicSignature:electronicSignature:list")
+    @RequestMapping(value = {"list", ""})
+    public String list(ElectronicSignatureInfo electronicSignatureInfo, HttpServletRequest request, HttpServletResponse response, Model model) {
+        //进行查询之后进行任何操作,返回还是查询之后的数据页面
+        if (StringUtils.isNotBlank(electronicSignatureInfo.getToflag())){
+            if (electronicSignatureInfo.getToflag().equals("1")){
+                request.getSession().removeAttribute("searchElectronicSignatureInfo");
+                ElectronicSignatureInfo search=electronicSignatureInfo;
+                request.getSession().setAttribute("searchElectronicSignatureInfo",search);
+            }
+        }else{
+            if (request.getSession().getAttribute("searchElectronicSignatureInfo")!=null){
+                electronicSignatureInfo= (ElectronicSignatureInfo) request.getSession().getAttribute("searchElectronicSignatureInfo");
+                model.addAttribute("electronicSignatureInfo", electronicSignatureInfo);
+            }
+        }
+        if(UserUtils.isManager()){
+            model.addAttribute("flag","1");
+        }
+        //获取电子签章印章管理
+        Page<ElectronicSignatureInfo> page = electronicSignatureService.findPage(new Page<ElectronicSignatureInfo>(request, response), electronicSignatureInfo);
+        List<ElectronicSignatureInfo> list = page.getList();
+
+
+        model.addAttribute("page", page);
+        return "modules/signatureManagement/electronicSignature/ElectronicSignatureList";
+    }
+
+
+    /**
+     * 查看,增加,编辑电子签章印章管理表单页面
+     */
+    @RequiresPermissions(value={"electronicSignature:electronicSignature:add","electronicSignature:electronicSignature:edit"},logical= Logical.OR)
+    @RequestMapping(value = "form")
+    public String form(ElectronicSignatureInfo electronicSignatureInfo, Model model) {
+        if (electronicSignatureInfo!=null&&StringUtils.isNotBlank(electronicSignatureInfo.getId())) {
+            electronicSignatureInfo = electronicSignatureService.get(electronicSignatureInfo.getId());
+        }else {
+            electronicSignatureInfo.setCreateBy(UserUtils.getUser());
+            electronicSignatureInfo.setOffice(UserUtils.getSelectOffice());
+            electronicSignatureInfo.setCreateDate(new Date());
+        }
+
+
+        model.addAttribute("electronicSignatureInfo", electronicSignatureInfo);
+        return "modules/signatureManagement/electronicSignature/ElectronicSignatureForm";
+    }
+
+    /**
+     * 暂存信息
+     */
+    @RequiresPermissions(value={"electronicSignature:electronicSignature:add","electronicSignature:electronicSignature:edit"},logical=Logical.OR)
+    @RequestMapping(value = "tstore")
+    public String tstore(ElectronicSignatureInfo electronicSignatureInfo, Model model, RedirectAttributes redirectAttributes) {
+        if (!beanValidator(model, electronicSignatureInfo)){
+            return form(electronicSignatureInfo, model);
+        }
+        try {
+            if (!electronicSignatureInfo.getIsNewRecord()) {//编辑表单保存
+                ElectronicSignatureInfo t = electronicSignatureService.get(electronicSignatureInfo.getId());//从数据库取出记录的值
+
+                if(t.getStatus() == 2){
+                    addMessage(redirectAttributes, "电子印章申请已送审,无法重复送审");
+                    return "redirect:"+Global.getAdminPath()+"/electronicSignature/electronicSignature/?repage";
+                }else if(t.getStatus() == 5){
+                    addMessage(redirectAttributes, "电子印章申请已审核完成,无法再次送审");
+                    return "redirect:"+Global.getAdminPath()+"/electronicSignature/electronicSignature/?repage";
+                }
+                MyBeanUtils.copyBeanNotNull2Bean(electronicSignatureInfo, t);//将编辑表单中的非NULL值覆盖数据库记录中的值
+                t.setStatus(1);
+                electronicSignatureService.saveInfo(t);//保存
+            } else {//新增表单保存
+                electronicSignatureInfo.setStatus(1);
+                electronicSignatureService.saveInfo(electronicSignatureInfo);//保存
+            }
+            addMessage(redirectAttributes, "保存电子印章申请成功");
+        }catch (Exception e){
+            logger.error("保存电子印章申请异常:",e);
+            addMessage(redirectAttributes, "保存电子印章申请异常:"+e.getMessage());
+        }
+        return "redirect:"+Global.getAdminPath()+"/electronicSignature/electronicSignature/?repage";
+    }
+
+    /**
+     * 保存电子签章印章管理信息
+     */
+    @RequiresPermissions(value={"electronicSignature:electronicSignature:add","electronicSignature:electronicSignature:edit"},logical=Logical.OR)
+    @RequestMapping(value = "save")
+    public String save(ElectronicSignatureInfo electronicSignatureInfo, Model model, RedirectAttributes redirectAttributes) throws Exception {
+        if (!beanValidator(model, electronicSignatureInfo)){
+            return form(electronicSignatureInfo, model);
+        }
+        try {
+
+            if (!electronicSignatureInfo.getIsNewRecord()) {//编辑表单保存
+                ElectronicSignatureInfo t = electronicSignatureService.get(electronicSignatureInfo.getId());//从数据库取出记录的值
+
+                if(t.getStatus() == 2){
+                    addMessage(redirectAttributes, "电子印章申请已送审,无法重复送审");
+                    return "redirect:"+ Global.getAdminPath()+"/electronicSignature/electronicSignature/?repage";
+                }else if(t.getStatus() == 5){
+                    addMessage(redirectAttributes, "电子印章申请已审核完成,无法再次送审");
+                    return "redirect:"+Global.getAdminPath()+"/electronicSignature/electronicSignature/?repage";
+                }
+                MyBeanUtils.copyBeanNotNull2Bean(electronicSignatureInfo, t);//将编辑表单中的非NULL值覆盖数据库记录中的值
+                electronicSignatureService.save(t, ProjectStatusEnum.SIGNED);//保存
+            } else {//新增表单保存
+                electronicSignatureService.save(electronicSignatureInfo, ProjectStatusEnum.SIGNED);//保存
+            }
+            addMessage(redirectAttributes, "保存电子印章申请成功");
+        }catch (Exception e){
+            logger.error("保存电子印章申请异常:",e);
+            addMessage(redirectAttributes, "保存电子印章申请异常:"+e.getMessage());
+        }
+        return "redirect:"+Global.getAdminPath()+"/electronicSignature/electronicSignature/?repage";
+    }
+
+
+
+    @RequestMapping(value = "getProcess")
+    public String getProcess(ElectronicSignatureInfo electronicSignatureInfo, Model model, HttpServletRequest request){
+        model.addAttribute("processInstanceId", electronicSignatureInfo.getProcessInstanceId());
+        return "modules/signatureManagement/electronicSignature/ElectronicSignatureTask";
+    }
+
+    /**
+     * 撤回操作
+     * @param request
+     * @param redirectAttributes
+     * @return
+     * @throws Exception
+     */
+    @RequestMapping(value = "revoke")
+    public String revoke(HttpServletRequest request, RedirectAttributes redirectAttributes) throws Exception {
+        HashMap<String, String> requestMap = findRequestMap(request);
+        String id = requestMap.get("id");
+        try {
+            ElectronicSignatureInfo electronicSignatureInfo = electronicSignatureService.get(id);
+            if(3==electronicSignatureInfo.getStatus() || 4==electronicSignatureInfo.getStatus()){
+                addMessage(redirectAttributes, "电子印章申请已撤回、驳回,请勿重复操作");
+                return "redirect:"+Global.getAdminPath()+"/dailyOfficeWork/dailyOfficeWorkSignature/?repage";
+            }else if(5==electronicSignatureInfo.getStatus()){
+                addMessage(redirectAttributes, "电子印章申请已审批通过,无法撤回");
+                return "redirect:"+Global.getAdminPath()+"/dailyOfficeWork/dailyOfficeWorkSignature/?repage";
+            }
+            electronicSignatureService.cancelInvalidate(electronicSignatureInfo);
+            addMessage(redirectAttributes, "撤回该电子印章申请成功");
+        }catch (Exception e){
+            logger.info(e.getMessage());
+            addMessage(redirectAttributes, "撤回该电子印章申请失败");
+        }
+        return "redirect:" + Global.getAdminPath() + "/electronicSignature/electronicSignature/?repage";
+    }
+
+
+    /**
+     * 删除操作
+     */
+    @RequiresPermissions("electronicSignature:electronicSignature:del")
+    @RequestMapping(value = "delete")
+    public String delete(ElectronicSignatureInfo electronicSignatureInfo, RedirectAttributes redirectAttributes) {
+
+        electronicSignatureService.delete(electronicSignatureInfo);
+        addMessage(redirectAttributes, "作废电子印章申请成功");
+        if (StringUtils.isNotBlank(electronicSignatureInfo.getHome()) && "home".equals(electronicSignatureInfo.getHome())){
+            return "redirect:" + Global.getAdminPath() + "/home/?repage";
+        }else {
+            return "redirect:"+Global.getAdminPath()+"/electronicSignature/electronicSignature/?repage";
+        }
+    }
+
+    /**
+     * 查看,增加,编辑项目表单页面
+     */
+    @RequiresPermissions(value={"electronicSignature:electronicSignature:view"},logical= Logical.OR)
+    @RequestMapping(value = "view")
+    public String view(ElectronicSignatureInfo electronicSignatureInfo, Model model) {
+        if (electronicSignatureInfo!=null&&StringUtils.isNotBlank(electronicSignatureInfo.getId())) {
+            electronicSignatureInfo = electronicSignatureService.get(electronicSignatureInfo.getId());
+        }else {
+            electronicSignatureInfo.setCreateBy(UserUtils.getUser());
+            electronicSignatureInfo.setCreateDate(new Date());
+        }
+
+        if(StringUtils.isNotBlank(electronicSignatureInfo.getUseType())){
+            String useTypeStr = DictUtils.getMainDictLabel(electronicSignatureInfo.getUseType(), "electronicSignature", "");
+            electronicSignatureInfo.setUseType(useTypeStr);
+        }
+
+        List<WorkClientAttachment> signatureWorkAttachments = Lists.newArrayList();
+        model.addAttribute("electronicSignatureInfo", electronicSignatureInfo);
+        return "modules/signatureManagement/electronicSignature/ElectronicSignatureView";
+    }
+
+
+
+    /**
+     * 查看,增加,编辑项目表单页面
+     */
+    @RequiresPermissions(value={"electronicSignature:electronicSignature:edit"},logical= Logical.OR)
+    @RequestMapping(value = "modify")
+    public String modify(ElectronicSignatureInfo electronicSignatureInfo, Model model) {
+        if (electronicSignatureInfo!=null&&StringUtils.isNotBlank(electronicSignatureInfo.getId())) {
+            electronicSignatureInfo = electronicSignatureService.get(electronicSignatureInfo.getId());
+        }else {
+            electronicSignatureInfo.setCreateBy(UserUtils.getUser());
+            electronicSignatureInfo.setCreateDate(new Date());
+        }
+
+        if(StringUtils.isNotBlank(electronicSignatureInfo.getProcessInstanceId())){
+            electronicSignatureInfo.setAct(actTaskService.getByAct(electronicSignatureInfo.getProcessInstanceId()));
+        }
+
+        model.addAttribute("electronicSignatureInfo", electronicSignatureInfo);
+        return "modules/signatureManagement/electronicSignature/ElectronicSignatureModify";
+    }
+
+
+
+
+
+    /**
+     * 审批
+     * @param electronicSignatureInfo
+     * @param redirectAttributes
+     * @return
+     */
+    @RequestMapping("saveAudit")
+    public String saveAudit(ElectronicSignatureInfo electronicSignatureInfo, RedirectAttributes redirectAttributes)  {
+        String home = electronicSignatureInfo.getHome();
+        try {
+            String taskDefKey = electronicSignatureInfo.getAct().getTaskDefKey();
+            //当状态为未通过时,重新修改数据
+            if ("modifyApply".equals(taskDefKey)) {
+                electronicSignatureInfo.getAct().setComment("重新申请");
+            }
+            List<User> users = Lists.newArrayList();
+            if ("bmzr".equals(taskDefKey)){
+                users = UserUtils.getByProssType(electronicSignatureInfo.getProcessInstanceId(),2);
+                if (users==null )
+                    users = UserUtils.getByRoleActivityEnname("gsyzshy",3,electronicSignatureInfo.getOffice().getId(),"12",electronicSignatureInfo.getCreateBy());
+            }else if ("gsyzshy".equals(taskDefKey)){
+                users = UserUtils.getByProssType(electronicSignatureInfo.getProcessInstanceId(),3);
+                if (users==null )
+                    users = UserUtils.getByRoleActivityEnname("gsyzshy",3,electronicSignatureInfo.getOffice().getId(),"12",electronicSignatureInfo.getCreateBy());
+            }else if ("modifyApply".equals(taskDefKey)){
+                users = UserUtils.getByProssType(electronicSignatureInfo.getProcessInstanceId(),1);
+            }
+            String flag = electronicSignatureInfo.getAct().getFlag();
+            if ("yes".equals(flag) && (users==null || users.size()==0)){
+                addMessage(redirectAttributes, "审批失败,审批人为空,请联系管理员!");
+            }else {
+                if (electronicSignatureInfo.getStatus() != 2 && electronicSignatureInfo.getStatus() != 4 && electronicSignatureInfo.getStatus() != 5) {
+                    addMessage(redirectAttributes, "电子印章申请未发起,请发起申请");
+                    if (StringUtils.isNotBlank(home) && "home".equals(home)) {
+                        return "redirect:" + Global.getAdminPath() + "/home/?repage";
+                    }else if (StringUtils.isNotBlank(home) && "notifyList".equals(home)){
+                        return "redirect:" + Global.getAdminPath() + "/workprojectnotify/workProjectNotify/list/?repage";
+                    } else {
+                        return "redirect:" + Global.getAdminPath() + "/electronicSignature/electronicSignature/?repage";
+                    }
+                }
+                if(electronicSignatureInfo.getStatus() == 5){
+                    addMessage(redirectAttributes, "电子印章申请已登记完成,无法再次送审");
+                    if (StringUtils.isNotBlank(home) && "home".equals(home)){
+                        return "redirect:" + Global.getAdminPath() + "/home/?repage";
+                    }else if (StringUtils.isNotBlank(home) && "notifyList".equals(home)){
+                        return "redirect:" + Global.getAdminPath() + "/workprojectnotify/workProjectNotify/list/?repage";
+                    }else {
+                        return "redirect:"+Global.getAdminPath()+"/electronicSignature/electronicSignature/?repage";
+                    }
+                }
+                String str = electronicSignatureService.signatuereSaveAudit(electronicSignatureInfo,users);
+                addMessage(redirectAttributes, str);
+            }
+        }catch (Exception e){
+            addMessage(redirectAttributes, "电子印章申请审批失败");
+            logger.error("Exception e:"+e);
+        }
+
+        if (StringUtils.isNotBlank(home) && "home".equals(home)){
+            return "redirect:" + Global.getAdminPath() + "/home/?repage";
+        }else if (StringUtils.isNotBlank(home) && "notifyList".equals(home)){
+            return "redirect:" + Global.getAdminPath() + "/workprojectnotify/workProjectNotify/list/?repage";
+        }else {
+            return "redirect:"+Global.getAdminPath()+"/electronicSignature/electronicSignature/?repage";
+        }
+    }
+
+
+
+    /**
+     * 导出
+     * @param request
+     * @param response
+     */
+    @RequestMapping(value = "downloadTemplate")
+    public void thisLocalityDownloadUtil(HttpServletRequest request,HttpServletResponse response) {
+        try {
+            ThisLocalityDownloadUtil download = new ThisLocalityDownloadUtil();
+            download.download("电子印章承诺书.docx",request,response);
+        } catch (Exception e) {
+            logger.error("电子印章承诺书模板下载失败!",e);
+        }
+    }
+
+
+}

+ 22 - 0
src/main/java/com/jeeplus/modules/signatureManagement/electronicSignature/dao/ElectronicSignatureDao.java

@@ -0,0 +1,22 @@
+package com.jeeplus.modules.signatureManagement.electronicSignature.dao;
+
+import com.jeeplus.common.persistence.CrudDao;
+import com.jeeplus.common.persistence.annotation.MyBatisDao;
+import com.jeeplus.modules.signatureManagement.electronicSignature.entity.ElectronicSignatureInfo;
+
+
+/**
+ * 电子签章印章管理Dao
+ * @author: 徐滕
+ * @version: 2024-05-30 16:41
+ */
+@MyBatisDao
+public interface ElectronicSignatureDao extends CrudDao<ElectronicSignatureInfo> {
+
+
+    /**
+     * 修改状态值和流程id
+     * @param projectReportSignature
+     */
+    void updateProcessIdAndStatus(ElectronicSignatureInfo projectReportSignature);
+}

+ 119 - 0
src/main/java/com/jeeplus/modules/signatureManagement/electronicSignature/entity/ElectronicSignatureInfo.java

@@ -0,0 +1,119 @@
+package com.jeeplus.modules.signatureManagement.electronicSignature.entity;
+
+import com.google.common.collect.Lists;
+import com.jeeplus.common.persistence.ActEntity;
+import com.jeeplus.modules.sys.entity.Office;
+import com.jeeplus.modules.workclientinfo.entity.WorkClientAttachment;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 电子签章印章管理
+ * @author: 徐滕
+ * @version: 2024-05-30 16:19
+ */
+public class ElectronicSignatureInfo extends ActEntity<ElectronicSignatureInfo> {
+
+    private String name; //使用场景描述
+    private String useType; //使用场景:1:审定单;2:报告
+    private Date applicationDate;   //申请时间
+    private Office company;		// 公司ID
+    private Office office;   //部门
+    private Integer status;   //流程状态
+    private String processInstanceId;   //流程id
+    private Date beginDate;   //申请开始时间
+    private Date endDate;   //申请结束时间
+    private String home;
+
+
+    private List<WorkClientAttachment> workAttachments = Lists.newArrayList();//附件信息
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getUseType() {
+        return useType;
+    }
+
+    public void setUseType(String useType) {
+        this.useType = useType;
+    }
+
+    public Date getApplicationDate() {
+        return applicationDate;
+    }
+
+    public void setApplicationDate(Date applicationDate) {
+        this.applicationDate = applicationDate;
+    }
+
+    public List<WorkClientAttachment> getWorkAttachments() {
+        return workAttachments;
+    }
+
+    public void setWorkAttachments(List<WorkClientAttachment> workAttachments) {
+        this.workAttachments = workAttachments;
+    }
+
+    public Office getCompany() {
+        return company;
+    }
+
+    public void setCompany(Office company) {
+        this.company = company;
+    }
+
+    public Office getOffice() {
+        return office;
+    }
+
+    public void setOffice(Office office) {
+        this.office = office;
+    }
+
+    public Integer getStatus() {
+        return status;
+    }
+
+    public void setStatus(Integer status) {
+        this.status = status;
+    }
+
+    public String getProcessInstanceId() {
+        return processInstanceId;
+    }
+
+    public void setProcessInstanceId(String processInstanceId) {
+        this.processInstanceId = processInstanceId;
+    }
+
+    public Date getBeginDate() {
+        return beginDate;
+    }
+
+    public void setBeginDate(Date beginDate) {
+        this.beginDate = beginDate;
+    }
+
+    public Date getEndDate() {
+        return endDate;
+    }
+
+    public void setEndDate(Date endDate) {
+        this.endDate = endDate;
+    }
+
+    public String getHome() {
+        return home;
+    }
+
+    public void setHome(String home) {
+        this.home = home;
+    }
+}

+ 831 - 0
src/main/java/com/jeeplus/modules/signatureManagement/electronicSignature/service/ElectronicSignatureService.java

@@ -0,0 +1,831 @@
+package com.jeeplus.modules.signatureManagement.electronicSignature.service;
+
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import com.jeeplus.common.persistence.Page;
+import com.jeeplus.common.service.CrudService;
+import com.jeeplus.common.utils.IdGen;
+import com.jeeplus.common.utils.MenuStatusEnum;
+import com.jeeplus.modules.act.entity.Act;
+import com.jeeplus.modules.act.service.ActTaskService;
+import com.jeeplus.modules.ruralprojectrecords.enums.ProjectStatusEnum;
+import com.jeeplus.modules.serialnum.service.SerialNumTplService;
+import com.jeeplus.modules.signature.dailyOfficeWork.entity.DailyOfficeWork;
+import com.jeeplus.modules.signatureManagement.electronicSignature.dao.ElectronicSignatureDao;
+import com.jeeplus.modules.signatureManagement.electronicSignature.entity.ElectronicSignatureInfo;
+import com.jeeplus.modules.sys.entity.Office;
+import com.jeeplus.modules.sys.entity.User;
+import com.jeeplus.modules.sys.service.OfficeService;
+import com.jeeplus.modules.sys.service.WorkattachmentService;
+import com.jeeplus.modules.sys.utils.DictUtils;
+import com.jeeplus.modules.sys.utils.UserUtils;
+import com.jeeplus.modules.workactivity.dao.WorkActivityProcessDao;
+import com.jeeplus.modules.workactivity.entity.Activity;
+import com.jeeplus.modules.workactivity.entity.WorkActivityProcess;
+import com.jeeplus.modules.workactivity.service.ActivityService;
+import com.jeeplus.modules.workactivity.service.WorkActivityProcessService;
+import com.jeeplus.modules.workactivitymenu.entity.WorkActivityMenu;
+import com.jeeplus.modules.workactivitymenu.service.WorkActivityMenuService;
+import com.jeeplus.modules.workclientinfo.dao.WorkClientAttachmentDao;
+import com.jeeplus.modules.workclientinfo.entity.WorkClientAttachment;
+import com.jeeplus.modules.workprojectnotify.entity.WorkProjectNotify;
+import com.jeeplus.modules.workprojectnotify.service.WorkProjectNotifyService;
+import com.jeeplus.modules.workprojectnotify.util.UtilNotify;
+import org.activiti.engine.ActivitiObjectNotFoundException;
+import org.activiti.engine.IdentityService;
+import org.activiti.engine.RuntimeService;
+import org.activiti.engine.runtime.ProcessInstance;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.*;
+
+/**
+ * @author: 徐滕
+ * @version: 2024-05-30 16:41
+ */
+@Service
+@Transactional(readOnly = true)
+public class ElectronicSignatureService extends CrudService<ElectronicSignatureDao, ElectronicSignatureInfo> {
+
+    private static final byte[] SYN_BYTE = new byte[0];
+    @Autowired
+    private OfficeService officeService;
+    @Autowired
+    private SerialNumTplService serialNumTplService;
+    @Autowired
+    private WorkClientAttachmentDao workClientAttachmentDao;
+    @Autowired
+    private WorkActivityMenuService workActivityMenuService;
+    @Autowired
+    private RuntimeService runtimeService;
+    @Autowired
+    private WorkActivityProcessService workActivityProcessService;
+    @Autowired
+    private WorkProjectNotifyService workProjectNotifyService;
+    @Autowired
+    private IdentityService identityService;
+    @Autowired
+    private WorkattachmentService workattachmentService;
+    @Autowired
+    private WorkActivityProcessDao workActivityProcessDao;
+    @Autowired
+    private ActTaskService actTaskService;
+    @Autowired
+    private ActivityService activityService;
+
+
+    public ElectronicSignatureInfo get(String id) {
+        if(StringUtils.isBlank(id)){
+            return new ElectronicSignatureInfo();
+        }
+        ElectronicSignatureInfo dailyOfficeWork = super.get(id);
+        if(dailyOfficeWork != null){
+            //获取附件信息
+            WorkClientAttachment workClientAttachment = new WorkClientAttachment();
+            workClientAttachment.setAttachmentId(id);
+            workClientAttachment.setAttachmentFlag("192");
+            dailyOfficeWork.setWorkAttachments(workattachmentService.getAttachmentList(workClientAttachment));
+
+            //添加当前文件服务器类型
+            dailyOfficeWork.setUploadMode(uploadMode);
+            //数据处理(如果为阿里云文件服务器,则对查看的路径进行处理)
+            WorkattachmentService.clientAttachmentManageOnUrl(dailyOfficeWork.getWorkAttachments());
+        }
+        return dailyOfficeWork;
+    }
+
+
+
+    public Page<ElectronicSignatureInfo> findPage(Page<ElectronicSignatureInfo> page, ElectronicSignatureInfo electronicSignatureInfo) {
+        //设置数据权限
+        if(!UserUtils.getUser().isAdmin()) {
+            String dataScopeSql = null;
+            dataScopeSql = dataScopeFilter(electronicSignatureInfo.getCurrentUser(), "o", "u", "s", MenuStatusEnum.ELECTRONIC_SIGNATURE.getValue());
+            electronicSignatureInfo.getSqlMap().put("dsf", dataScopeSql);
+            electronicSignatureInfo.getSqlMap().put("delFlag", "AND a.del_flag = 0");
+        }
+        if(null!= electronicSignatureInfo.getOffice() && StringUtils.isNotBlank(electronicSignatureInfo.getOffice().getId())){
+            //查询该选择节点下所有的部门Id
+            List<String> officeIdList = officeService.getChildrenOffice(electronicSignatureInfo.getOffice().getId());
+            officeIdList.add(electronicSignatureInfo.getOffice().getId());
+            electronicSignatureInfo.setOfficeIdList(officeIdList);
+        }
+        int count = dao.queryCount(electronicSignatureInfo);
+        page.setCount(count);
+        page.setCountFlag(false);
+        electronicSignatureInfo.setPage(page);
+        List<ElectronicSignatureInfo> recordsList = findList(electronicSignatureInfo);
+        page.setList(recordsList);
+        return page;
+    }
+
+
+
+
+
+
+
+
+    /**
+     * 新增方法
+     * @param electronicSignatureInfo
+     */
+    @Transactional(readOnly = false)
+    public void saveInfo(ElectronicSignatureInfo electronicSignatureInfo) {
+
+        electronicSignatureInfo.setStatus(1);
+        User createBy = electronicSignatureInfo.getCreateBy();
+        if(createBy != null){
+            createBy = UserUtils.get(createBy.getId());
+        }else {
+            createBy = UserUtils.getUser();
+        }
+
+        //添加申请编号
+        /*synchronized (SYN_BYTE) {
+            if (StringUtils.isBlank(electronicSignatureInfo.getNumber())) {
+                //工程造价鉴定 需要纸质归档
+                assert createBy != null;
+                electronicSignatureInfo.setNumber(serialNumTplService.genSerialNum(createBy.getCompany(), DailyOfficeWork.DAILY_OFFICE_WORK_KEY));
+
+            }
+        }*/
+
+        if(StringUtils.isBlank(electronicSignatureInfo.getId())){
+            electronicSignatureInfo.setCompany(UserUtils.getUser().getCompany());
+            electronicSignatureInfo.setOffice(UserUtils.getUser().getOffice());
+            electronicSignatureInfo.preInsert();
+            dao.insert(electronicSignatureInfo);
+        }else {
+            electronicSignatureInfo.preUpdate();
+            dao.update(electronicSignatureInfo);
+        }
+
+        //保存签章附件信息
+        this.saveAttachments(electronicSignatureInfo);
+    }
+
+
+    @Transactional(readOnly = false)
+    public void save(ElectronicSignatureInfo electronicSignatureInfo, ProjectStatusEnum status) throws Exception {
+        electronicSignatureInfo.setCompany(UserUtils.getUser().getCompany());
+        electronicSignatureInfo.setOffice(UserUtils.getUser().getOffice());
+
+        electronicSignatureInfo.setStatus(status.getValue());
+        User createBy = electronicSignatureInfo.getCreateBy();
+        if(createBy != null){
+            createBy = UserUtils.get(createBy.getId());
+        }else {
+            createBy = UserUtils.getUser();
+        }
+
+        //添加申请编号
+        /*synchronized (SYN_BYTE) {
+            if (StringUtils.isBlank(electronicSignatureInfo.getNumber())) {
+                //工程造价鉴定 需要纸质归档
+                assert createBy != null;
+                electronicSignatureInfo.setNumber(serialNumTplService.genSerialNum(createBy.getCompany(), DailyOfficeWork.DAILY_OFFICE_WORK_KEY));
+
+            }
+        }*/
+        if(electronicSignatureInfo.getStatus()== ProjectStatusEnum.INVALID.getValue()){
+            electronicSignatureInfo.setId(IdGen.uuid());
+            dao.insert(electronicSignatureInfo);
+        }else {
+            super.save(electronicSignatureInfo);
+        }
+        //保存签章附件信息
+        this.saveAttachments(electronicSignatureInfo);
+        //启动审批流程
+        this.startAudit(electronicSignatureInfo,electronicSignatureInfo.getProcessInstanceId());
+    }
+
+    /**
+     * 保存附件
+     * @param electronicSignatureInfo
+     */
+    private void saveAttachments(ElectronicSignatureInfo electronicSignatureInfo) {
+        if (electronicSignatureInfo.getWorkAttachments()!=null && !electronicSignatureInfo.getWorkAttachments().isEmpty()) {
+            //保存附件信息
+            for (WorkClientAttachment workClientAttachment : electronicSignatureInfo.getWorkAttachments()) {
+                if (StringUtils.isBlank(workClientAttachment.getId())&&StringUtils.isNotBlank(workClientAttachment.getAttachmentId())) {
+                    continue;
+                }
+                if (StringUtils.isBlank(workClientAttachment.getId())&&StringUtils.isBlank(workClientAttachment.getUrl())) {
+                    continue;
+                }
+                if (WorkClientAttachment.DEL_FLAG_NORMAL.equals(workClientAttachment.getDelFlag())) {
+                    workClientAttachment.setAttachmentId(electronicSignatureInfo.getId());
+                    workClientAttachment.setAttachmentFlag("192");
+                    workClientAttachment.setAttachmentUser(UserUtils.getUser().getId());
+                    if (StringUtils.isBlank(workClientAttachment.getId()) || "null".equals(workClientAttachment.getId())) {
+                        workClientAttachment.preInsert();
+                        workClientAttachmentDao.insert(workClientAttachment);
+                    } else {
+                        workClientAttachment.preUpdate();
+                        workClientAttachmentDao.update(workClientAttachment);
+                    }
+                } else {
+                    workClientAttachmentDao.delete(workClientAttachment);
+                }
+            }
+        }
+    }
+
+
+    /**
+     * 启动审批流程
+     *
+     * @param electronicSignatureInfo
+     */
+    private void startAudit(ElectronicSignatureInfo electronicSignatureInfo, String processInstanceId) throws Exception {
+        try{
+            Map<String, Object> variables = new HashMap<String, Object>();
+            identityService.setAuthenticatedUserId(electronicSignatureInfo.getCurrentUser().getId());
+            Office office = electronicSignatureInfo.getOffice();
+            office = officeService.get(office.getId());
+            electronicSignatureInfo.setOffice(office);
+            String useTypeStr = DictUtils.getMainDictLabel(electronicSignatureInfo.getUseType(), "electronicSignature", "");
+            String contentStr = "电子印章申请描述:"+ electronicSignatureInfo.getName()+"。待审批,申请使用场景:"+useTypeStr;
+            String titleStr = "电子印章申请描述:"+ electronicSignatureInfo.getName()+"。待审批,申请使用场景:"+useTypeStr;
+
+            String businessKey = electronicSignatureInfo.getId();
+
+            WorkActivityMenu workActivityMenu = workActivityMenuService.findByParentAndOffice("7854872f45b84acd893010e66a3db2c8", office);
+            // 启动流程
+            String processType = workActivityMenu.getProcessType();
+            StringBuffer buffer = new StringBuffer();
+            Activity activity = new Activity();
+            WorkProjectNotify workProjectNotify = UtilNotify
+                    .saveNotify(electronicSignatureInfo.getId(),
+                            null,
+                            electronicSignatureInfo.getCompany().getId(),
+                            titleStr,
+                            contentStr,
+                            "192",
+                            "0",
+                            "待审批",
+                            ""
+                    );
+
+            List<User> users = new ArrayList<>();
+
+            List<User> bmzrs = Lists.newArrayList();
+
+            String officeName = "";
+
+            Office loginUserOffice = UserUtils.getUser().getOffice();
+            if(StringUtils.isNotBlank(loginUserOffice.getParentIds())){
+                // 使用 split 方法将字符串分割成数组
+                String[] parentIdArray = loginUserOffice.getParentIds().split(",");
+                // 将数组转换为 List
+                List<String> parentIdList = new ArrayList<>(Arrays.asList(parentIdArray));
+                parentIdList.add(loginUserOffice.getId());
+                List<Office> parentOffice = officeService.getByIdList(parentIdList);
+                List<String> officeNameList = Lists.newArrayList();
+                for (Office loginParentOffice : parentOffice) {
+                    officeNameList.add(loginParentOffice.getName());
+                }
+                officeName = String.join(", ", officeNameList);
+            }
+
+            if(StringUtils.isNotBlank(officeName)) {
+                if(officeName.contains("工程五部") ||
+                        officeName.contains("盐城分公司") ||
+                        officeName.contains("河北团队") ||
+                        officeName.contains("河北团队2") ||
+                        officeName.contains("四川团队") ||
+                        officeName.contains("苏州分公司")){
+                    //查找办公室审批人员
+                    bmzrs = UserUtils.getByRoleActivityEnname("bgsquhe",3,office.getId(),"11",electronicSignatureInfo.getCreateBy());
+                } else {
+                    //查找部门主任审批人员
+                    bmzrs = UserUtils.getByRoleActivityEnname("bmzr",2,office.getId(),"6",electronicSignatureInfo.getCreateBy());
+                }
+            }
+
+            List<User> gsyzshyList = UserUtils.getByRoleActivityEnname("gsyzshy",3,office.getId(),"11",electronicSignatureInfo.getCreateBy());
+
+
+
+            if (StringUtils.isNotBlank(workActivityMenu.getId())) {
+                processType = workActivityMenu.getProcessType();
+                workActivityMenu = workActivityMenuService.get(workActivityMenu.getId());
+                List<Activity> activities = workActivityMenu.getActivities();
+                for (Activity a : activities) {
+                    String encount = a.getEncount();
+                    String enlist = a.getEnlist();
+                    if (a.getRole()!=null && StringUtils.isNotBlank(a.getRole().getEnname())){
+                        List enusers = UserUtils.getByRoleActivityEnnames(a.getRole().getEnname(),office.getId(),"8",electronicSignatureInfo.getCreateBy());
+                        if (enusers.size()==0){
+                            throw new Exception("流程审批人不能为空,角色"+a.getRole().getName()+"下无用户,请联系管理员!");
+                        }
+                        variables.put(enlist, enusers);
+                        variables.put(encount, enusers.size());
+                    }
+                    if (a.getDelFlag().equals("0") && a.getCount() == 1) {
+                        activity = a;
+                    }
+                }
+                buffer.append(activity.getRole().getEnname());
+                if (StringUtils.isNotBlank(activity.getId())) {
+                    //角色审批
+                    if (StringUtils.isNotBlank(activity.getRole().getEnname())) {
+                        users = UserUtils.getByRoleActivityEnnames(activity.getRole().getEnname(),office.getId(),"11",electronicSignatureInfo.getCreateBy());
+                    }
+                    //人员审批
+                    if (StringUtils.isNotBlank(activity.getUser().getId())) {
+                        users.add(activity.getUser());
+                    }
+                }
+                workProjectNotify.setId("");
+            } else {
+                if (bmzrs.size() == 0){
+                    throw new Exception("流程审批人不能为空,角色部门负责人下无用户,请联系管理员!");
+                }
+                processType = "electronicSignature";
+                variables.put("applyUserId", electronicSignatureInfo.getCreateBy().getId());
+                variables.put("bmzrCount",bmzrs.size());
+                variables.put("bmzrList",bmzrs);
+                users.addAll(bmzrs);
+            }
+            List<String> userIds = new ArrayList<>(users.size());
+            for (User u : users){
+                userIds.add(u.getId());
+                workProjectNotify.setUser(u);
+                workProjectNotify.setId("");
+                workProjectNotify.setNotifyRole("部门主任审批");
+                workProjectNotifyService.save(workProjectNotify);
+                Map<String,Object> extras = new HashMap<>();
+                extras.put("type","7003");
+                extras.put("procDefKey","192");
+                extras.put("id",workProjectNotify.getId());
+                UserUtils.pushInfoToApp(titleStr,contentStr,extras,u.getId());
+            }
+
+            long t1 = System.currentTimeMillis();
+            UserUtils.pushIm(userIds,contentStr);
+            logger.info("推送消息耗时:{}ms",System.currentTimeMillis()-t1);
+            variables.put("busId", businessKey);
+            variables.put("type", processType);
+            variables.put("title", "电子印章申请描述:" + electronicSignatureInfo.getName());//设置标题;
+
+            ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(processType, businessKey, variables);
+            if (StringUtils.isNotBlank(processInstanceId)) {
+                workActivityProcessService.updateProcessInstanceId(processInstance.getId(),processInstanceId);
+                workActivityProcessService.deleteProcessInstanceId(processInstanceId);
+                workActivityProcessService.deleteProcessIdAuditUsers(processInstanceId);
+            }
+            List<Activity> list = workActivityMenu.getActivities();
+            if (list != null && list.size() != 0) {
+                workActivityProcessService.saveList(list, processInstance.getId());
+            } else {
+                WorkActivityProcess workActivityProcess = new WorkActivityProcess();
+                workActivityProcess.setProcessKey(processType);
+                workActivityProcess.setCount(1);
+                workActivityProcess.setProcessInstanceId(processInstance.getId());
+                workActivityProcess.setIsApproval("0");
+                workActivityProcessService.save(workActivityProcess);
+                workActivityProcess.setCount(2);
+                workActivityProcess.setId("");
+                workActivityProcessService.save(workActivityProcess);
+                workActivityProcessService.insertAuditsByType(bmzrs,processInstance.getId(),1,1);
+                workActivityProcessService.insertAuditsByType(gsyzshyList,processInstance.getId(),2,0);
+            }
+            electronicSignatureInfo.setProcessInstanceId(processInstance.getId());
+            electronicSignatureInfo.setStatus(ProjectStatusEnum.IN_APRL.getValue());
+            dao.updateProcessIdAndStatus(electronicSignatureInfo);
+            //通知添加流程实例ID
+            workProjectNotify.setProcessInstanceId(processInstance.getId());
+            workProjectNotifyService.save(workProjectNotify);
+        }catch (Exception e){
+            logger.error("启动审批流程异常:",e);
+            throw e;
+        }
+    }
+
+
+
+    /**
+     * 报告:强制撤销
+     * @param electronicSignatureInfo
+     */
+    @Transactional(readOnly = false)
+    public void cancelInvalidate(ElectronicSignatureInfo electronicSignatureInfo) {
+        try {
+            String invalidateProcessInstanceId = electronicSignatureInfo.getProcessInstanceId();
+            //将流程图中尚未走到的task的流程追踪信息逻辑删除,添加一条"撤销"流程追踪信息
+            WorkActivityProcess process = new WorkActivityProcess();
+            process.setProcessInstanceId(electronicSignatureInfo.getProcessInstanceId());
+            process.setIsApproval("0");
+            WorkActivityProcess workActivityProcess = new WorkActivityProcess();
+            workActivityProcess.setProcessInstanceId(electronicSignatureInfo.getProcessInstanceId());
+            List<WorkActivityProcess> processList = workActivityProcessService.findList(workActivityProcess);
+            WorkProjectNotify notify = new WorkProjectNotify();
+            notify.setNotifyId(electronicSignatureInfo.getId());
+            List<User> userList = workProjectNotifyService.readByNotifyId(notify);
+            if (userList!=null && userList.size()!=0) {
+                for (User u : userList) {
+                    User user = UserUtils.get(u.getId());
+                    UserUtils.pushMeIm(user.getId());
+                }
+            }
+            if(processList!=null && processList.size()>0){
+                for (int i =0;i<processList.size();i++) {
+                    WorkActivityProcess p = processList.get(i);
+                    if(com.jeeplus.common.utils.StringUtils.isNotBlank(p.getIsApproval()) && "0".equals(p.getIsApproval())){
+                        p.setDelFlag("1");
+                        p.setIsApproval("-1");
+                        workActivityProcessDao.updateDelFlagAndIsApproval(p);
+                    }
+                }
+                WorkActivityProcess pro = new WorkActivityProcess();
+                pro.setId("");
+                pro.preInsert();
+                pro.setDelFlag("0");
+                pro.setRemarks("[强制撤销]");
+                pro.setProcessKey(processList.get(0).getProcessKey());
+                pro.setIsApproval("1");
+                pro.setProcessInstanceId(processList.get(0).getProcessInstanceId());
+                pro.setCount(0);
+                workActivityProcessDao.insert(pro);
+            }
+
+            //结束该流程,设为"撤销"状态
+            actTaskService.endProcessInstance(invalidateProcessInstanceId,"电子用章申请-强制撤销");
+            electronicSignatureInfo.setStatus(3);
+            electronicSignatureInfo.preUpdate();
+            dao.update(electronicSignatureInfo);
+
+        }catch (ActivitiObjectNotFoundException e){
+            System.err.println("电子用章申请撤销异常,因为这个流程已不存在!");
+            e.printStackTrace();
+            logger.error("Exception e:"+e);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+            logger.error("Exception e:"+e);
+        }
+
+    }
+    /**
+     * 签章流程审核方法
+     * @param electronicSignatureInfo
+     * @param auditUsers
+     * @return
+     * @throws Exception
+     */
+    @Transactional(readOnly = false)
+    public String signatuereSaveAudit(ElectronicSignatureInfo electronicSignatureInfo, List<User> auditUsers) {
+        int status = electronicSignatureInfo.getStatus();
+        String taskDefKey = electronicSignatureInfo.getAct().getTaskDefKey();
+        if (!"modifyApply".equals(taskDefKey) && !taskDefKey.contains("audit") ) {
+            actTaskService.claim(electronicSignatureInfo.getAct().getTaskId(), UserUtils.getUser().getId());
+        }else {
+            //驳回修改进入该方法
+            electronicSignatureInfo.getAct().setFlag("yes");
+            saveInfo(electronicSignatureInfo);
+            electronicSignatureInfo.setStatus(ProjectStatusEnum.IN_APRL.getValue());
+        }
+
+        String comment = "";
+        if ( status == ProjectStatusEnum.REJECTED.getValue()) {
+            comment = ("yes".equals(electronicSignatureInfo.getAct().getFlag())?"[重新申请] ":"[已撤销] ");
+        }else {
+            comment = ("yes".equals(electronicSignatureInfo.getAct().getFlag())?"[同意] ":"[驳回] ")+electronicSignatureInfo.getAct().getComment();
+        }
+
+        if (!"yes".equals(electronicSignatureInfo.getAct().getFlag())) {
+            electronicSignatureInfo.setStatus(ProjectStatusEnum.REJECTED.getValue());
+        }
+
+        User createUser = UserUtils.get(electronicSignatureInfo.getCreateBy().getId());
+
+        Map<String, Object> vars = Maps.newHashMap();
+        String notifyRole = "";
+        //业务逻辑对应的条件表达式
+        User user = null;
+        List<Activity> activitieList = activityService.getByProcessInstanceId(electronicSignatureInfo.getProcessInstanceId());
+        WorkActivityMenu workActivityMenu = new WorkActivityMenu();
+        if (activitieList != null && activitieList.size() != 0) {
+            Iterator<Activity> iterator = activitieList.iterator();
+            while (iterator.hasNext()){
+                Activity activityInfo = iterator.next();
+                if (!"electronicSignature".equals(activityInfo.getProcessKey())){
+                    iterator.remove();
+                }
+            }
+            workActivityMenu.setProcessType(activitieList.get(0).getProcessKey());
+            workActivityMenu.setActivities(activitieList);
+        }
+
+        WorkActivityProcess workActivityProcess = new WorkActivityProcess();
+        WorkActivityProcess selectProcess = new WorkActivityProcess();
+        selectProcess.setProcessInstanceId(electronicSignatureInfo.getProcessInstanceId());
+        List<WorkActivityProcess> workActivityProcesses = workActivityProcessService.findList(selectProcess);
+        List<Activity> activities = workActivityMenu.getActivities();
+        String  taskCount = "1";
+        String enname = "";
+        Office office = electronicSignatureInfo.getOffice();
+        office = officeService.get(office.getId());
+        electronicSignatureInfo.setOffice(office);
+        String useTypeStr = DictUtils.getMainDictLabel(electronicSignatureInfo.getUseType(), "electronicSignature", "");
+        String notifyStr = "电子印章申请描述:"+ electronicSignatureInfo.getName()+"。待审批,申请使用场景:"+useTypeStr;
+        String str = notifyStr+",创建人:"+electronicSignatureInfo.getCreateBy().getName()+",所属部门:"+electronicSignatureInfo.getOffice().getName();
+        String titleStr = "电子印章申请描述:"+ electronicSignatureInfo.getName()+"。待审批";
+        int key = 0;
+        //业务逻辑对应的条件表达式
+        String exp = "";
+        if (StringUtils.isNotBlank(workActivityMenu.getProcessType()) && !workActivityMenu.getProcessType().equals("electronicSignature")) {
+            key = 1;
+            for (int i = 0; i < workActivityProcesses.size(); i++) {
+                WorkActivityProcess activityProcess = workActivityProcesses.get(i);
+                if (taskDefKey.equals("modifyApply")) {
+                    taskCount = "0";
+                    workActivityProcess.setId("");
+                    workActivityProcess.setCount(0);
+                    if (!"yes".equals(electronicSignatureInfo.getAct().getFlag())) {
+                        electronicSignatureInfo.setStatus(ProjectStatusEnum.RECALL.getValue());
+                        workActivityProcess.setIsApproval("2");
+                        vars.put("pass", false);
+                    } else {
+                        vars.put("pass", true);
+                        workActivityProcess.setIsApproval("1");
+                    }
+                    break;
+                } else {
+                    taskCount = activityProcess.getCount()+"";
+                    workActivityProcess = activityProcess;
+                    if (!workActivityProcess.getIsApproval().equals("0")) {
+                        workActivityProcess.setId("");
+                    }
+                    for (Activity activity : activities) {
+                        if (activity.getCount() == activityProcess.getCount()) {
+                            notifyRole = activity.getName();
+                            break;
+                        }
+                    }
+                    if (!"yes".equals(electronicSignatureInfo.getAct().getFlag())) {
+                        notifyRole = "调整签章申请";
+                        electronicSignatureInfo.setStatus(ProjectStatusEnum.REJECTED.getValue());
+                        workActivityProcess.setIsApproval("2");
+                        String returnBack = "-1";
+                        for (Activity activity : activities) {
+                            if (activity.getCount() == activityProcess.getCount()) {
+                                returnBack = activity.getReturnBack();
+                                break;
+                            }
+                        }
+                        if (returnBack.equals("0")) {
+                            workActivityProcess.setId("");
+                        }
+                        vars.put("pass", false);
+                    } else {
+                        workActivityProcess.setIsApproval("1");
+                        vars.put("pass", true);
+                    }
+                    break;
+                }
+            }
+        }else {
+            workActivityMenu.setProcessType("electronicSignature");
+            for (int i = 0; i < workActivityProcesses.size(); i++) {
+                WorkActivityProcess activityProcess = workActivityProcesses.get(i);
+                String count = String.valueOf(activityProcess.getCount());
+                workActivityProcess = activityProcess;
+                if (!workActivityProcess.getIsApproval().equals("0")) {
+                    workActivityProcess.setId("");
+                }
+                // 审核环节
+                if ("bmzr".equals(taskDefKey) && count.contains("1")) {
+                    taskCount = "1";
+                    exp = "pass";
+                    if ("yes".equals(electronicSignatureInfo.getAct().getFlag())) {
+                        workActivityProcessService.insertAuditsByType(auditUsers,electronicSignatureInfo.getProcessInstanceId(),2,1);
+                        notifyRole = "公司领导审核";
+                        workActivityProcess.setIsApproval("1");
+                        enname = "gsyzshy";
+                        vars.put("gsyzshyList", auditUsers);
+                        vars.put("gsyzshyCount",auditUsers.size());
+                    } else {
+                        notifyRole = "调整电子用章申请";
+                        workActivityProcess.setIsApproval("2");
+                    }
+                    break;
+                }else if ("gsyzshy".equals(taskDefKey) && count.contains("2")) {
+                    taskCount = "2";
+                    exp = "pass";
+                    if ("yes".equals(electronicSignatureInfo.getAct().getFlag())) {
+                        notifyRole = "审批通过";
+                        workActivityProcess.setIsApproval("1");
+                        electronicSignatureInfo.setApplicationDate(new Date());
+                    } else {
+                        notifyRole = "调整电子用章申请";
+                        workActivityProcess.setIsApproval("2");
+                    }
+                    break;
+                } else if ("modifyApply".equals(taskDefKey) && "0".equals(count)) {
+                    notifyRole = "部门负责人审批";
+                    taskCount = "0";
+                    enname = "bmzr";
+                    workActivityProcess.setCount(0);
+                    if("yes".equals(electronicSignatureInfo.getAct().getFlag())){
+                        workActivityProcess.setIsApproval("1");
+                        vars.put("pass",true);
+                        vars.put("passs",true);
+                    }else{
+                        workActivityProcess.setIsApproval("2");
+                        electronicSignatureInfo.setStatus(ProjectStatusEnum.RECALL.getValue());
+                        vars.put("pass",false);
+                        vars.put("passs",false);
+                    }
+                    break;
+                }
+            }
+        }
+        // 设置意见
+        electronicSignatureInfo.getAct().setComment(("yes".equals(electronicSignatureInfo.getAct().getFlag()) ? "[同意] " : "[驳回] ") + electronicSignatureInfo.getAct().getComment());
+        // 提交流程任务
+        vars.put(exp, "yes".equals(electronicSignatureInfo.getAct().getFlag()) ? true : false);
+        vars.put("passs", true);
+
+        workActivityProcessService.updateProcess(workActivityProcess,workActivityMenu,key,taskCount,electronicSignatureInfo.getProcessInstanceId(),taskDefKey,"modifyApply",electronicSignatureInfo.getAct().getFlag(),comment, activities);
+        // 设置意见
+        electronicSignatureInfo.getAct().setComment(comment);
+        electronicSignatureInfo.preUpdate();
+        actTaskService.complete(electronicSignatureInfo.getAct().getTaskId(), electronicSignatureInfo.getAct().getProcInsId(), electronicSignatureInfo.getAct().getComment(), vars);
+
+        boolean state = actTaskService.isProcessEnd(electronicSignatureInfo.getAct().getProcInsId());
+        List<User> users = new ArrayList<>();
+        List<User> userList = new ArrayList<>();
+
+
+        if(!state) {
+            users.add(electronicSignatureInfo.getCreateBy());
+            //审核完成提示框
+
+            String title = "电子印章申请描述:"+ electronicSignatureInfo.getName()+"。申请审批完成,申请使用场景:"+useTypeStr+"。";
+            String content = "电子印章申请描述:"+ electronicSignatureInfo.getName()+"。申请审批完成,申请使用场景:"+useTypeStr;
+
+            if ("yes".equals(electronicSignatureInfo.getAct().getFlag())) {
+                electronicSignatureInfo.setStatus(ProjectStatusEnum.SIGNED.getValue());
+                WorkProjectNotify customNotify = new WorkProjectNotify();
+                customNotify.setNotifyId(electronicSignatureInfo.getId());
+                userList = workProjectNotifyService.readByNotifyId(customNotify);
+                users.add(electronicSignatureInfo.getCreateBy());
+                workProjectNotifyService
+                        .save(UtilNotify
+                                .saveNotify(electronicSignatureInfo.getId(),
+                                        electronicSignatureInfo.getCreateBy(),
+                                        electronicSignatureInfo.getCompany().getId(),
+                                        title,
+                                        content,
+                                        "192",
+                                        "0",
+                                        "待通知",
+                                        notifyRole));
+            } else {
+                WorkProjectNotify customNotify = new WorkProjectNotify();
+                customNotify.setNotifyId(electronicSignatureInfo.getId());
+                userList = workProjectNotifyService.readByNotifyId(customNotify);
+                users.add(electronicSignatureInfo.getCreateBy());
+                if (electronicSignatureInfo.getStatus()!= ProjectStatusEnum.RECALL.getValue()){
+                    electronicSignatureInfo.setStatus(ProjectStatusEnum.REJECTED.getValue());
+                    workProjectNotifyService
+                            .save(UtilNotify
+                                    .saveNotify(electronicSignatureInfo.getId(),
+                                            electronicSignatureInfo.getCreateBy(),
+                                            electronicSignatureInfo.getCompany().getId(),
+                                            titleStr,
+                                            notifyStr,
+                                            "192",
+                                            "0",
+                                            "待通知",
+                                            notifyRole));
+                }
+            }
+            workActivityProcessService.deleteProcessIdAuditUsers(electronicSignatureInfo.getProcessInstanceId());
+
+        }else{
+            if (StringUtils.isNotBlank(workActivityMenu.getProcessType()) && !workActivityMenu.getProcessType().equals("electronicSignature")) {
+                WorkProjectNotify notify = new WorkProjectNotify();
+                notify.setNotifyId(electronicSignatureInfo.getId());
+                userList = workProjectNotifyService.readByNotifyId(notify);
+                WorkProjectNotify workProjectNotify = UtilNotify
+                        .saveNotify(electronicSignatureInfo.getId(),
+                                new User(),
+                                electronicSignatureInfo.getCompany().getId(),
+                                titleStr,
+                                str,
+                                "192",
+                                "0",
+                                "待审批",
+                                notifyRole);
+                String count = taskDefKey.replace("audit","").replace("task","");
+                List<WorkProjectNotify> workProjectNotifys = activityService.getByFlagAndTaskDefKeyList(
+                        activities,
+                        workProjectNotify,
+                        taskDefKey,
+                        electronicSignatureInfo.getAct().getFlag(),
+                        count,
+                        electronicSignatureInfo.getCreateBy(),
+                        electronicSignatureInfo.getOffice().getId(),
+                        "4");
+                for (WorkProjectNotify workProjectNotify1:workProjectNotifys){
+                    users.add(workProjectNotify1.getUser());
+                    workProjectNotify1.setId("");
+                    workProjectNotify1.setIsNewRecord(false);
+                    workProjectNotifyService.save(workProjectNotify1);
+                }
+            }else {
+                if (!"yes".equals(electronicSignatureInfo.getAct().getFlag())) {//驳回待办提醒
+
+                    str = "电子印章申请描述:"+ electronicSignatureInfo.getName()+"。被驳回,请选择重新申请或作废,申请使用场景:"+useTypeStr+"。";
+                    titleStr = "电子印章申请描述:"+ electronicSignatureInfo.getName()+"。被驳回,请选择重新申请或作废,申请使用场景:"+useTypeStr+"。";
+                    WorkProjectNotify notify = new WorkProjectNotify();
+                    notify.setNotifyId(electronicSignatureInfo.getId());
+                    userList = workProjectNotifyService.readByNotifyId(notify);
+                    //users.add(user);
+                    WorkProjectNotify workProjectNotify = UtilNotify
+                            .saveNotify(electronicSignatureInfo.getId(),
+                                    electronicSignatureInfo.getCreateBy(),
+                                    electronicSignatureInfo.getCompany().getId(),
+                                    titleStr,
+                                    str,
+                                    "192",
+                                    "0",
+                                    "重新申请",
+                                    notifyRole);
+                    workProjectNotifyService.save(workProjectNotify);
+                } else {
+                    if (StringUtils.isNotBlank(enname)) {//驳回重新申请待办信息
+                        str = "电子印章申请描述:"+ electronicSignatureInfo.getName()+"。待审批,申请使用场景:"+useTypeStr+"。";
+                        titleStr = "电子印章申请描述:"+ electronicSignatureInfo.getName()+"。待审批,申请使用场景:"+useTypeStr+"。";
+
+                        WorkProjectNotify notify = new WorkProjectNotify();
+                        notify.setNotifyId(electronicSignatureInfo.getId());
+                        userList = workProjectNotifyService.readByNotifyId(notify);
+                        WorkProjectNotify workProjectNotify = UtilNotify
+                                .saveNotify(electronicSignatureInfo.getId(),
+                                        new User(),
+                                        electronicSignatureInfo.getCompany().getId(),
+                                        titleStr,
+                                        str,
+                                        "192",
+                                        "0",
+                                        "待审批",
+                                        notifyRole);
+                        for (User user1:auditUsers){
+                            users.add(user1);
+                            workProjectNotify.setUser(user1);
+                            workProjectNotify.setId("");
+                            workProjectNotify.setIsNewRecord(false);
+                            workProjectNotifyService.save(workProjectNotify);
+                            Map<String,Object> extras = new HashMap<>();
+                            extras.put("type","7003");
+                            extras.put("procDefKey","192");
+                            extras.put("id",workProjectNotify.getId());
+                            UserUtils.pushInfoToApp(titleStr,str,extras,user1.getId());
+                        }
+                    }else {
+                        WorkProjectNotify notify = new WorkProjectNotify();
+                        notify.setNotifyId(electronicSignatureInfo.getId());
+                        userList = workProjectNotifyService.readByNotifyId(notify);
+                        users.add(electronicSignatureInfo.getCreateBy());
+                        workProjectNotifyService
+                                .save(UtilNotify
+                                        .saveNotify(electronicSignatureInfo.getId(),
+                                                electronicSignatureInfo.getCreateBy(),
+                                                electronicSignatureInfo.getCompany().getId(),
+                                                titleStr,
+                                                str,
+                                                "192",
+                                                "0",
+                                                "重新申请",
+                                                notifyRole));
+                    }
+                }
+            }
+        }
+
+        if (users!=null && users.size()!=0) {
+            List<String> userIds = new ArrayList<>(users.size());
+            for (User u : users) {
+                userIds.add(u.getId());
+            }
+            UserUtils.pushIm(userIds,titleStr);
+        }
+        if (userList!=null && userList.size()!=0) {
+            for (User u : userList) {
+                UserUtils.pushMeIm(u.getId());
+            }
+        }
+        dao.update(electronicSignatureInfo);
+        return "保存审核意见成功!";
+    }
+
+
+}

+ 3 - 0
src/main/java/com/jeeplus/modules/sys/dao/OfficeDao.java

@@ -113,4 +113,7 @@ public interface OfficeDao extends TreeDao<Office> {
 	 */
 	List<Office> getChildrenOfficeById(String id);
 
+
+	List<Office> getByIdList( @Param("idList") List<String> idList);
+
 }

+ 9 - 0
src/main/java/com/jeeplus/modules/sys/entity/User.java

@@ -105,6 +105,7 @@ public class User extends DataEntity<User> {
     private String otherServiceFlag;  //是否获取其他服务待办
 
     private String areaRemark;  //部门地区备注(永不标注部门中所在的城市,比如一部中有 苏州、安徽的等等)
+	private String areaPrincipal; //是否为地区负责人	1:是;0:不是
 
 	public String getWeChatId() {
 		return weChatId;
@@ -606,6 +607,14 @@ public class User extends DataEntity<User> {
 	public void setAreaRemark(String areaRemark) {
 		this.areaRemark = areaRemark;
 	}
+
+	public String getAreaPrincipal() {
+		return areaPrincipal;
+	}
+
+	public void setAreaPrincipal(String areaPrincipal) {
+		this.areaPrincipal = areaPrincipal;
+	}
 	//	public String getPosition() {
 //		return position;
 //	}

+ 48 - 29
src/main/java/com/jeeplus/modules/sys/service/CompanyService.java

@@ -879,13 +879,25 @@ public class CompanyService extends CrudService<CompanyDao, Company> {
             xzroleActivity2 = sysRoleActivityService.getByEnname(enname+"zjl");
         }
         List<SysRoleActivity> roleActivities = new ArrayList<>();
-        roleActivities.add(sysRoleActivity);
-        roleActivities.add(cwroleActivity);
-        roleActivities.add(xzroleActivity);
-        roleActivities.add(zlroleActivity);
-        roleActivities.add(xzroleActivity2);
-        role1.setRoleActivityList(roleActivities);
-        roleDao.insertRoleActivity(role1);
+        if(null != sysRoleActivity){
+            roleActivities.add(sysRoleActivity);
+        }
+        if(null != sysRoleActivity){
+            roleActivities.add(cwroleActivity);
+        }
+        if(null != sysRoleActivity){
+            roleActivities.add(xzroleActivity);
+        }
+        if(null != sysRoleActivity){
+            roleActivities.add(zlroleActivity);
+        }
+        if(null != sysRoleActivity){
+            roleActivities.add(xzroleActivity2);
+        }
+        if(roleActivities.size()>0){
+            role1.setRoleActivityList(roleActivities);
+            roleDao.insertRoleActivity(role1);
+        }
         return role1;
     }
 
@@ -1146,10 +1158,12 @@ public class CompanyService extends CrudService<CompanyDao, Company> {
                 }else {
                     sysRoleActivity = sysRoleActivityService.getByEnname(ename+"cwbzr");
                 }
-                List<SysRoleActivity> roleActivities = new ArrayList<>();
-                roleActivities.add(sysRoleActivity);
-                role1.setRoleActivityList(roleActivities);
-                roleDao.insertRoleActivity(role1);
+                if(null != sysRoleActivity){
+                    List<SysRoleActivity> roleActivities = new ArrayList<>();
+                    roleActivities.add(sysRoleActivity);
+                    role1.setRoleActivityList(roleActivities);
+                    roleDao.insertRoleActivity(role1);
+                }
             }else if (office.getName().equals("办公室")){
                 String enname = UserUtils.getRoleActivity(com.getId()) + StringUtils.getPinYinHeadChar( "行政部主任", 1);
                 SysRoleActivity sysRoleActivity = new SysRoleActivity();
@@ -1164,10 +1178,12 @@ public class CompanyService extends CrudService<CompanyDao, Company> {
                 }else {
                     sysRoleActivity = sysRoleActivityService.getByEnname(ename+"xzbzr");
                 }
-                List<SysRoleActivity> roleActivities = new ArrayList<>();
-                roleActivities.add(sysRoleActivity);
-                role1.setRoleActivityList(roleActivities);
-                roleDao.insertRoleActivity(role1);
+                if(null != sysRoleActivity) {
+                    List<SysRoleActivity> roleActivities = new ArrayList<>();
+                    roleActivities.add(sysRoleActivity);
+                    role1.setRoleActivityList(roleActivities);
+                    roleDao.insertRoleActivity(role1);
+                }
             }else if(office.getName().equals("市场部")){
                 String enname = UserUtils.getRoleActivity(com.getId()) + StringUtils.getPinYinHeadChar("市场研发管理部主任", 1);
                 SysRoleActivity sysRoleActivity = new SysRoleActivity();
@@ -1192,12 +1208,13 @@ public class CompanyService extends CrudService<CompanyDao, Company> {
                     sysRoleActivity = sysRoleActivityService.getByEnname(ename+"scyfglbzr");
                     sysRoleActivity2 = sysRoleActivityService.getByEnname(ename+"dzspr");
                 }
-
-                List<SysRoleActivity> roleActivities = new ArrayList<>();
-                roleActivities.add(sysRoleActivity);
-                roleActivities.add(sysRoleActivity2);
-                role1.setRoleActivityList(roleActivities);
-                roleDao.insertRoleActivity(role1);
+                if(null != sysRoleActivity) {
+                    List<SysRoleActivity> roleActivities = new ArrayList<>();
+                    roleActivities.add(sysRoleActivity);
+                    roleActivities.add(sysRoleActivity2);
+                    role1.setRoleActivityList(roleActivities);
+                    roleDao.insertRoleActivity(role1);
+                }
             }
             roleList.add(role1);
         }
@@ -1328,11 +1345,13 @@ public class CompanyService extends CrudService<CompanyDao, Company> {
             String enname = UserUtils.getRoleActivityEnname(com.getId(),UserUtils.getUser());
             roleActivity = sysRoleActivityService.getByEnname(enname+"fgld");
         }
-        for (Role role1 : roleList) {
-            List<SysRoleActivity> roleActivities = new ArrayList<>();
-            roleActivities.add(roleActivity);
-            role1.setRoleActivityList(roleActivities);
-            roleDao.insertRoleActivity(role1);
+        if(null != roleActivity){
+            for (Role role1 : roleList) {
+                List<SysRoleActivity> roleActivities = new ArrayList<>();
+                roleActivities.add(roleActivity);
+                role1.setRoleActivityList(roleActivities);
+                roleDao.insertRoleActivity(role1);
+            }
         }
         return roleList;
     }
@@ -2485,11 +2504,11 @@ public class CompanyService extends CrudService<CompanyDao, Company> {
         //根据公司创建文件总工岗位
         this.createCompanyBZSHBManagerRole(com, comOffice,deptZLJG,"2");
         //根据公司创建行政主管
-        this.createCompanyHZZGRole(com, comOffice,deptBGS,"2");
+        //this.createCompanyHZZGRole(com, comOffice,deptBGS,"2");
         //根据公司创建投标专员
-        this.createCompanyRLZYRole(com, comOffice,deptOffice,"2");
+        //this.createCompanyRLZYRole(com, comOffice,deptOffice,"2");
         //根据公司创建投标专员
-        this.createCompanyALTBZYRole(comOffice, comOffice,deptZLJG,"1");
+        //this.createCompanyALTBZYRole(comOffice, comOffice,deptZLJG,"1");
         //根据公司创建人事岗位
         //this.createCompanyHRRole(comRole,company, com, comOffice,deptOffice,"2");
         comRole.setOffice(comOffice);

+ 6 - 0
src/main/java/com/jeeplus/modules/sys/service/OfficeService.java

@@ -413,4 +413,10 @@ public class OfficeService extends TreeService<OfficeDao, Office> {
 		
 		return returnOfficeList;
 	}
+
+
+	public List<Office> getByIdList(List<String> idList){
+		return officeDao.getByIdList(idList);
+	}
+
 }

+ 1 - 1
src/main/java/com/jeeplus/modules/workcontractinfo/service/WorkContractInfoService.java

@@ -946,7 +946,7 @@ public class WorkContractInfoService extends CrudService<WorkContractInfoDao, Wo
 		List<User>  bmzrs = UserUtils.getByRoleActivityEnname("bmzr",2,office.getId(),"2",workContractInfo.getCreateBy());
 //		List<User>  scyfglbzrs = UserUtils.getByRoleActivityEnname("scyfglbzr",1,office.getId(),"2",workContractInfo.getCreateBy());
 		//获取总经理人员信息
-		List<User>  zjls = UserUtils.getByRoleActivityEnname("zjl",3,office.getId(),"2",workContractInfo.getCreateBy());
+		List<User>  zjls = UserUtils.getByRoleActivityEnname("zjl",1,office.getId(),"2",workContractInfo.getCreateBy());
 		long end3 = System.currentTimeMillis();
 		logger.info("合同送审-查找人员审核任务结束,共耗时:[" + (end3-begin2) / 1000 + "]秒");
 		long begin3 = System.currentTimeMillis();

+ 1 - 1
src/main/java/com/jeeplus/modules/workcontractinfo/web/WorkContractInfoController.java

@@ -1854,7 +1854,7 @@ public class WorkContractInfoController extends BaseController {
             if ("bmzr".equals(taskDefKey)){
                 users = UserUtils.getByProssType(workContractInfo.getProcessInstanceId(),2);
                 if (users==null )
-                    users = UserUtils.getByRoleActivityEnname("zjl",3,workContractInfo.getChargeCompany(),"2",workContractInfo.getCreateBy());
+                    users = UserUtils.getByRoleActivityEnname("zjl",1,workContractInfo.getChargeCompany(),"2",workContractInfo.getCreateBy());
             }else  if ("zjl".equals(taskDefKey)){
                 users = UserUtils.getByProssType(workContractInfo.getProcessInstanceId(),3);
                 /*if (users==null )

+ 24 - 4
src/main/java/com/jeeplus/modules/workinvoice/service/WorkInvoiceAllService.java

@@ -210,10 +210,17 @@ public class WorkInvoiceAllService extends CrudService<WorkInvoiceDao, WorkInvoi
 	public Page<WorkInvoice> findPage(Page<WorkInvoice> page, WorkInvoice workInvoice) {
 //		workInvoice.getSqlMap().put("dsf", dataScopeFilter(workInvoice.getCurrentUser(), "o", "u","s", MenuStatusEnum.WORK_INVOICE.getValue()));
 		if(StringUtils.isNotBlank(workInvoice.getOfficeId())){
-			//查询该选择节点下所有的部门Id
-			List<String> officeIdList = officeService.getChildrenOffice(workInvoice.getOfficeId());
-			officeIdList.add(workInvoice.getOfficeId());
-			workInvoice.setOfficeIdList(officeIdList);
+			if("一部本部".equals(workInvoice.getOfficeId())){
+				List<String> officeIdList = Lists.newArrayList();
+				Office office = officeService.getByName("工程一部");
+				officeIdList.add(office.getId());
+				workInvoice.setOfficeIdList(officeIdList);
+			}else{
+				//查询该选择节点下所有的部门Id
+				List<String> officeIdList = officeService.getChildrenOffice(workInvoice.getOfficeId());
+				officeIdList.add(workInvoice.getOfficeId());
+				workInvoice.setOfficeIdList(officeIdList);
+			}
 		}
 		int count = dao.queryCount(workInvoice);
 		page.setCount(count);
@@ -263,6 +270,19 @@ public class WorkInvoiceAllService extends CrudService<WorkInvoiceDao, WorkInvoi
 	 */
 	public String getSumMoney(WorkInvoice workInvoice){
 		//workInvoice.getSqlMap().put("dsf", dataScopeFilter(workInvoice.getCurrentUser(), "o", "u","s", MenuStatusEnum.WORK_INVOICE.getValue()));
+		if(StringUtils.isNotBlank(workInvoice.getOfficeId())){
+			if("一部本部".equals(workInvoice.getOfficeId())){
+				List<String> officeIdList = Lists.newArrayList();
+				Office office = officeService.getByName("工程一部");
+				officeIdList.add(office.getId());
+				workInvoice.setOfficeIdList(officeIdList);
+			}else{
+				//查询该选择节点下所有的部门Id
+				List<String> officeIdList = officeService.getChildrenOffice(workInvoice.getOfficeId());
+				officeIdList.add(workInvoice.getOfficeId());
+				workInvoice.setOfficeIdList(officeIdList);
+			}
+		}
 		workInvoice.setPage(new Page<WorkInvoice>());
 		String getSumMoney = dao.getSumMoney(workInvoice);
 		if(StringUtils.isBlank(getSumMoney)){

+ 197 - 103
src/main/java/com/jeeplus/modules/workprojectnotify/web/WorkProjectNotifyController.java

@@ -83,6 +83,10 @@ import com.jeeplus.modules.signature.dailyOfficeWork.entity.DailyOfficeWork;
 import com.jeeplus.modules.signature.dailyOfficeWork.service.DailyOfficeWorkService;
 import com.jeeplus.modules.signature.projectReportSignatureWork.entity.ProjectReportSignatureWork;
 import com.jeeplus.modules.signature.projectReportSignatureWork.service.ProjectReportSignatureWorkService;
+import com.jeeplus.modules.signatureManagement.businessSignature.entity.BusinessSignatureInfo;
+import com.jeeplus.modules.signatureManagement.businessSignature.service.BusinessSignatureService;
+import com.jeeplus.modules.signatureManagement.electronicSignature.entity.ElectronicSignatureInfo;
+import com.jeeplus.modules.signatureManagement.electronicSignature.service.ElectronicSignatureService;
 import com.jeeplus.modules.statement.entity.StatementCompanyComprehensiveInfo;
 import com.jeeplus.modules.statement.service.StatementCompanyComprehensiveService;
 import com.jeeplus.modules.sys.dao.RoleDao;
@@ -555,6 +559,10 @@ public class WorkProjectNotifyController extends BaseController {
 
 	@Autowired
 	private ProjectReportSignatureWorkService projectReportSignatureService;
+	@Autowired
+	private ElectronicSignatureService electronicSignatureService;
+	@Autowired
+	private BusinessSignatureService businessSignatureService;
 
 	@ModelAttribute
 	public WorkProjectNotify get(@RequestParam(required=false) String id) {
@@ -1589,114 +1597,16 @@ public class WorkProjectNotifyController extends BaseController {
 					}
 				} else if (workProjectNotify.getType().equals("170")) {    //日常签章
 
-					DailyOfficeWork dailyOfficeWork = dailyOfficeWorkService.get(workProjectNotify.getNotifyId());
-
-					if (dailyOfficeWork != null && StringUtils.isNotBlank(dailyOfficeWork.getId())) {
-
-
-						if(StringUtils.isNotBlank(dailyOfficeWork.getSignatureUrl())){
-							dailyOfficeWork.setSignatureUrlFlag(1);
-							//处理文件路径
-							//如果文件路径中包含 /xg-qz 则表示文件存储在签章的对应文件库中需要单独进行处理
-							/*if(dailyOfficeWork.getSignatureUrl().contains("/xg-qz")){
-								if(StringUtils.isNotBlank(dailyOfficeWork.getSignatureUrl())){
-									String signatureUrl = dailyOfficeWork.getSignatureUrl().replace("/xg-qz","");
-									dailyOfficeWork.setSignatureUrl(signatureUrl);
-								}
-								dailyOfficeWork.setSignatureUrl(new OSSClientUtil().getQzFileTemporaryLookUrl(aliyunUrl + dailyOfficeWork.getSignatureUrl()));
-							}else{
-								dailyOfficeWork.setSignatureUrl(new OSSClientUtil().getFileTemporaryLookUrl(aliyunUrl + dailyOfficeWork.getSignatureUrl()));
-							}*/
-						}else{
-							dailyOfficeWork.setSignatureUrlFlag(0);
-						}
-					}
-					dailyOfficeWork.setAct(getByAct(dailyOfficeWork.getProcessInstanceId()));
-					if(StringUtils.isNotBlank(workProjectNotify.getHome())){
-						dailyOfficeWork.setHome(workProjectNotify.getHome());
-					}else{
-						dailyOfficeWork.setHome("home");
-					}
-					//判定当前流程页面签署是否已经签署过,若签署过,则auditFlag 赋值 1
-					model.addAttribute("auditFlag",dailyOfficeWork.getSignatureFlag());
-
-					model.addAttribute("processInstanceId", dailyOfficeWork.getProcessInstanceId());
-					model.addAttribute("dailyOfficeWork", dailyOfficeWork);
+					return this.dailyOfficeWorkAudit(workProjectNotify,model);
 
-					if (workProjectNotify.getRemarks().contains("待通知") || "view".equals(workProjectNotify.getView())) {
-						List<WorkClientAttachment> signatureWorkAttachments = Lists.newArrayList();
-						if(StringUtils.isNotBlank(dailyOfficeWork.getSignatureUrl())){
-							WorkClientAttachment signatureAttachment = new WorkClientAttachment();
+				} else if (workProjectNotify.getType().equals("192")) {    //电子用章申请
 
-							//处理文件路径
-							//如果文件路径中包含 /xg-qz 则表示文件存储在签章的对应文件库中需要单独进行处理
-							if(dailyOfficeWork.getSignatureUrl().contains("/xg-qz")){
-								if(StringUtils.isNotBlank(dailyOfficeWork.getSignatureUrl())){
-									String signatureUrl = dailyOfficeWork.getSignatureUrl().replace("/xg-qz","");
-									dailyOfficeWork.setSignatureUrl(signatureUrl);
-								}
-								signatureAttachment.setTemporaryUrl(new OSSClientUtil().getQzFileTemporaryLookUrl(aliyunUrl + dailyOfficeWork.getSignatureUrl()));
-							}else{
-								signatureAttachment.setTemporaryUrl(new OSSClientUtil().getFileTemporaryLookUrl(aliyunUrl + dailyOfficeWork.getSignatureUrl()));
-							}
-							User user = UserUtils.get(dailyOfficeWork.getSignatureUploadFileUser().getId());
-							signatureAttachment.setCreateBy(user);
-							signatureAttachment.setUpdateBy(user);
-							signatureAttachment.setCreateDate(dailyOfficeWork.getSignatureUploadDate());
-							signatureAttachment.setUpdateDate(dailyOfficeWork.getSignatureUploadDate());
-							signatureAttachment.setDelFlag("0");
-							signatureAttachment.setAttachmentName(dailyOfficeWork.getSignatureFileName());
-							String type = dailyOfficeWork.getSignatureUrl().substring(dailyOfficeWork.getSignatureUrl().lastIndexOf(".") + 1);
-							signatureAttachment.setType(type);
-							signatureWorkAttachments.add(signatureAttachment);
-						}
+					return this.electronicSignatureAudit(workProjectNotify,model);
 
+				} else if (workProjectNotify.getType().equals("193")) {    //业务用章申请
 
-						if(signatureWorkAttachments.size()>0){
-							dailyOfficeWork.setSignatureWorkAttachments(signatureWorkAttachments);
-						}
-						return "modules/signature/dailyOfficeWorkSignature/DailyOfficeWorkSignatureView";
-					}else if (workProjectNotify.getRemarks().contains("待审批") && !"1".equals(workProjectNotify.getStatus())) {
-						//审核模板标识
-						model.addAttribute("identification", "signatureDailyOfficeWork");
-						model.addAttribute("identificationName","日常签章申请审核意见");
-						return "modules/signature/dailyOfficeWorkSignature/DailyOfficeWorkSignatureAudit";
-					} else if (workProjectNotify.getRemarks().contains("重新申请") && !"1".equals(workProjectNotify.getStatus())) {
-						return "modules/signature/dailyOfficeWorkSignature/DailyOfficeWorkSignatureModify";
-					} else {
-						List<WorkClientAttachment> signatureWorkAttachments = Lists.newArrayList();
-						if(StringUtils.isNotBlank(dailyOfficeWork.getSignatureUrl())){
-							WorkClientAttachment signatureAttachment = new WorkClientAttachment();
+					return this.businessSignatureAudit(workProjectNotify,model);
 
-							//处理文件路径
-							//如果文件路径中包含 /xg-qz 则表示文件存储在签章的对应文件库中需要单独进行处理
-							if(dailyOfficeWork.getSignatureUrl().contains("/xg-qz")){
-								if(StringUtils.isNotBlank(dailyOfficeWork.getSignatureUrl())){
-									String signatureUrl = dailyOfficeWork.getSignatureUrl().replace("/xg-qz","");
-									dailyOfficeWork.setSignatureUrl(signatureUrl);
-								}
-								signatureAttachment.setTemporaryUrl(new OSSClientUtil().getQzFileTemporaryLookUrl(aliyunUrl + dailyOfficeWork.getSignatureUrl()));
-							}else{
-								signatureAttachment.setTemporaryUrl(new OSSClientUtil().getFileTemporaryLookUrl(aliyunUrl + dailyOfficeWork.getSignatureUrl()));
-							}
-							User user = UserUtils.get(dailyOfficeWork.getSignatureUploadFileUser().getId());
-							signatureAttachment.setCreateBy(user);
-							signatureAttachment.setUpdateBy(user);
-							signatureAttachment.setCreateDate(dailyOfficeWork.getSignatureUploadDate());
-							signatureAttachment.setUpdateDate(dailyOfficeWork.getSignatureUploadDate());
-							signatureAttachment.setDelFlag("0");
-							signatureAttachment.setAttachmentName(dailyOfficeWork.getSignatureFileName());
-							String type = dailyOfficeWork.getSignatureUrl().substring(dailyOfficeWork.getSignatureUrl().lastIndexOf(".") + 1);
-							signatureAttachment.setType(type);
-							signatureWorkAttachments.add(signatureAttachment);
-						}
-
-
-						if(signatureWorkAttachments.size()>0){
-							dailyOfficeWork.setSignatureWorkAttachments(signatureWorkAttachments);
-						}
-						return "modules/signature/dailyOfficeWorkSignature/DailyOfficeWorkSignatureView";
-					}
 				} else if (workProjectNotify.getType().equals("173")) {    //报告签章
 					return this.disposeProjectReportSignatureWork(workProjectNotify,model);
 
@@ -10052,5 +9962,189 @@ public class WorkProjectNotifyController extends BaseController {
 		}
 	}
 
+	private String dailyOfficeWorkAudit(WorkProjectNotify workProjectNotify,Model model) {
+
+		DailyOfficeWork dailyOfficeWork = dailyOfficeWorkService.get(workProjectNotify.getNotifyId());
+
+		if (dailyOfficeWork != null && StringUtils.isNotBlank(dailyOfficeWork.getId())) {
 
+
+			if(StringUtils.isNotBlank(dailyOfficeWork.getSignatureUrl())){
+				dailyOfficeWork.setSignatureUrlFlag(1);
+				//处理文件路径
+				//如果文件路径中包含 /xg-qz 则表示文件存储在签章的对应文件库中需要单独进行处理
+							/*if(dailyOfficeWork.getSignatureUrl().contains("/xg-qz")){
+								if(StringUtils.isNotBlank(dailyOfficeWork.getSignatureUrl())){
+									String signatureUrl = dailyOfficeWork.getSignatureUrl().replace("/xg-qz","");
+									dailyOfficeWork.setSignatureUrl(signatureUrl);
+								}
+								dailyOfficeWork.setSignatureUrl(new OSSClientUtil().getQzFileTemporaryLookUrl(aliyunUrl + dailyOfficeWork.getSignatureUrl()));
+							}else{
+								dailyOfficeWork.setSignatureUrl(new OSSClientUtil().getFileTemporaryLookUrl(aliyunUrl + dailyOfficeWork.getSignatureUrl()));
+							}*/
+			}else{
+				dailyOfficeWork.setSignatureUrlFlag(0);
+			}
+		}
+		dailyOfficeWork.setAct(getByAct(dailyOfficeWork.getProcessInstanceId()));
+		if(StringUtils.isNotBlank(workProjectNotify.getHome())){
+			dailyOfficeWork.setHome(workProjectNotify.getHome());
+		}else{
+			dailyOfficeWork.setHome("home");
+		}
+		//判定当前流程页面签署是否已经签署过,若签署过,则auditFlag 赋值 1
+		model.addAttribute("auditFlag",dailyOfficeWork.getSignatureFlag());
+
+		model.addAttribute("processInstanceId", dailyOfficeWork.getProcessInstanceId());
+		model.addAttribute("dailyOfficeWork", dailyOfficeWork);
+
+		if (workProjectNotify.getRemarks().contains("待通知") || "view".equals(workProjectNotify.getView())) {
+			List<WorkClientAttachment> signatureWorkAttachments = Lists.newArrayList();
+			if(StringUtils.isNotBlank(dailyOfficeWork.getSignatureUrl())){
+				WorkClientAttachment signatureAttachment = new WorkClientAttachment();
+
+				//处理文件路径
+				//如果文件路径中包含 /xg-qz 则表示文件存储在签章的对应文件库中需要单独进行处理
+				if(dailyOfficeWork.getSignatureUrl().contains("/xg-qz")){
+					if(StringUtils.isNotBlank(dailyOfficeWork.getSignatureUrl())){
+						String signatureUrl = dailyOfficeWork.getSignatureUrl().replace("/xg-qz","");
+						dailyOfficeWork.setSignatureUrl(signatureUrl);
+					}
+					signatureAttachment.setTemporaryUrl(new OSSClientUtil().getQzFileTemporaryLookUrl(aliyunUrl + dailyOfficeWork.getSignatureUrl()));
+				}else{
+					signatureAttachment.setTemporaryUrl(new OSSClientUtil().getFileTemporaryLookUrl(aliyunUrl + dailyOfficeWork.getSignatureUrl()));
+				}
+				User user = UserUtils.get(dailyOfficeWork.getSignatureUploadFileUser().getId());
+				signatureAttachment.setCreateBy(user);
+				signatureAttachment.setUpdateBy(user);
+				signatureAttachment.setCreateDate(dailyOfficeWork.getSignatureUploadDate());
+				signatureAttachment.setUpdateDate(dailyOfficeWork.getSignatureUploadDate());
+				signatureAttachment.setDelFlag("0");
+				signatureAttachment.setAttachmentName(dailyOfficeWork.getSignatureFileName());
+				String type = dailyOfficeWork.getSignatureUrl().substring(dailyOfficeWork.getSignatureUrl().lastIndexOf(".") + 1);
+				signatureAttachment.setType(type);
+				signatureWorkAttachments.add(signatureAttachment);
+			}
+
+
+			if(signatureWorkAttachments.size()>0){
+				dailyOfficeWork.setSignatureWorkAttachments(signatureWorkAttachments);
+			}
+			return "modules/signature/dailyOfficeWorkSignature/DailyOfficeWorkSignatureView";
+		}else if (workProjectNotify.getRemarks().contains("待审批") && !"1".equals(workProjectNotify.getStatus())) {
+			//审核模板标识
+			model.addAttribute("identification", "signatureDailyOfficeWork");
+			model.addAttribute("identificationName","日常签章申请审核意见");
+			return "modules/signature/dailyOfficeWorkSignature/DailyOfficeWorkSignatureAudit";
+		} else if (workProjectNotify.getRemarks().contains("重新申请") && !"1".equals(workProjectNotify.getStatus())) {
+			return "modules/signature/dailyOfficeWorkSignature/DailyOfficeWorkSignatureModify";
+		} else {
+			List<WorkClientAttachment> signatureWorkAttachments = Lists.newArrayList();
+			if(StringUtils.isNotBlank(dailyOfficeWork.getSignatureUrl())){
+				WorkClientAttachment signatureAttachment = new WorkClientAttachment();
+
+				//处理文件路径
+				//如果文件路径中包含 /xg-qz 则表示文件存储在签章的对应文件库中需要单独进行处理
+				if(dailyOfficeWork.getSignatureUrl().contains("/xg-qz")){
+					if(StringUtils.isNotBlank(dailyOfficeWork.getSignatureUrl())){
+						String signatureUrl = dailyOfficeWork.getSignatureUrl().replace("/xg-qz","");
+						dailyOfficeWork.setSignatureUrl(signatureUrl);
+					}
+					signatureAttachment.setTemporaryUrl(new OSSClientUtil().getQzFileTemporaryLookUrl(aliyunUrl + dailyOfficeWork.getSignatureUrl()));
+				}else{
+					signatureAttachment.setTemporaryUrl(new OSSClientUtil().getFileTemporaryLookUrl(aliyunUrl + dailyOfficeWork.getSignatureUrl()));
+				}
+				User user = UserUtils.get(dailyOfficeWork.getSignatureUploadFileUser().getId());
+				signatureAttachment.setCreateBy(user);
+				signatureAttachment.setUpdateBy(user);
+				signatureAttachment.setCreateDate(dailyOfficeWork.getSignatureUploadDate());
+				signatureAttachment.setUpdateDate(dailyOfficeWork.getSignatureUploadDate());
+				signatureAttachment.setDelFlag("0");
+				signatureAttachment.setAttachmentName(dailyOfficeWork.getSignatureFileName());
+				String type = dailyOfficeWork.getSignatureUrl().substring(dailyOfficeWork.getSignatureUrl().lastIndexOf(".") + 1);
+				signatureAttachment.setType(type);
+				signatureWorkAttachments.add(signatureAttachment);
+			}
+
+
+			if(signatureWorkAttachments.size()>0){
+				dailyOfficeWork.setSignatureWorkAttachments(signatureWorkAttachments);
+			}
+			return "modules/signature/dailyOfficeWorkSignature/DailyOfficeWorkSignatureView";
+		}
+	}
+
+	/**
+	 * 电子用章申请
+	 * @param workProjectNotify
+	 * @param model
+	 * @return
+	 */
+	private String electronicSignatureAudit(WorkProjectNotify workProjectNotify,Model model) {
+
+		ElectronicSignatureInfo electronicSignatureInfo = electronicSignatureService.get(workProjectNotify.getNotifyId());
+
+		electronicSignatureInfo.setAct(getByAct(electronicSignatureInfo.getProcessInstanceId()));
+		if(StringUtils.isNotBlank(workProjectNotify.getHome())){
+			electronicSignatureInfo.setHome(workProjectNotify.getHome());
+		}else{
+			electronicSignatureInfo.setHome("home");
+		}
+
+		model.addAttribute("processInstanceId", electronicSignatureInfo.getProcessInstanceId());
+		model.addAttribute("electronicSignatureInfo", electronicSignatureInfo);
+
+		if (workProjectNotify.getRemarks().contains("待通知") || "view".equals(workProjectNotify.getView())) {
+			return "modules/signatureManagement/electronicSignature/ElectronicSignatureView";
+		}else if (workProjectNotify.getRemarks().contains("待审批") && !"1".equals(workProjectNotify.getStatus())) {
+
+			String useTypeStr = DictUtils.getMainDictLabel(electronicSignatureInfo.getUseType(), "electronicSignature", "");
+			electronicSignatureInfo.setUseType(useTypeStr);
+			//审核模板标识
+			model.addAttribute("identification", "electronicSignature");
+			model.addAttribute("identificationName","电子用章申请审核意见");
+			return "modules/signatureManagement/electronicSignature/ElectronicSignatureAudit";
+		} else if (workProjectNotify.getRemarks().contains("重新申请") && !"1".equals(workProjectNotify.getStatus())) {
+			return "modules/signatureManagement/electronicSignature/ElectronicSignatureModify";
+		} else {
+			return "modules/signatureManagement/electronicSignature/ElectronicSignatureView";
+		}
+	}
+
+	/**
+	 * 业务用章申请
+	 * @param workProjectNotify
+	 * @param model
+	 * @return
+	 */
+	private String businessSignatureAudit(WorkProjectNotify workProjectNotify,Model model) {
+
+		BusinessSignatureInfo businessSignatureInfo = businessSignatureService.get(workProjectNotify.getNotifyId());
+
+		businessSignatureInfo.setAct(getByAct(businessSignatureInfo.getProcessInstanceId()));
+		if(StringUtils.isNotBlank(workProjectNotify.getHome())){
+			businessSignatureInfo.setHome(workProjectNotify.getHome());
+		}else{
+			businessSignatureInfo.setHome("home");
+		}
+
+		model.addAttribute("processInstanceId", businessSignatureInfo.getProcessInstanceId());
+		model.addAttribute("businessSignatureInfo", businessSignatureInfo);
+
+		if (workProjectNotify.getRemarks().contains("待通知") || "view".equals(workProjectNotify.getView())) {
+			return "modules/signatureManagement/businessSignature/BusinessSignatureView";
+		}else if (workProjectNotify.getRemarks().contains("待审批") && !"1".equals(workProjectNotify.getStatus())) {
+
+			String useTypeStr = DictUtils.getMainDictLabel(businessSignatureInfo.getUseType(), "businessSignature", "");
+			businessSignatureInfo.setUseType(useTypeStr);
+			//审核模板标识
+			model.addAttribute("identification", "electronicSignature");
+			model.addAttribute("identificationName","业务用章申请审核意见");
+			return "modules/signatureManagement/businessSignature/BusinessSignatureAudit";
+		} else if (workProjectNotify.getRemarks().contains("重新申请") && !"1".equals(workProjectNotify.getStatus())) {
+			return "modules/signatureManagement/businessSignature/BusinessSignatureModify";
+		} else {
+			return "modules/signatureManagement/businessSignature/BusinessSignatureView";
+		}
+	}
 }

+ 9 - 0
src/main/java/com/jeeplus/modules/workstaff/entity/WorkStaffBasicInfo.java

@@ -120,6 +120,7 @@ public class WorkStaffBasicInfo extends DataEntity<WorkStaffBasicInfo> {
 	private String roleIdStr; //岗位Str
 
 	private String areaRemark; //地区备注(永不标注部门中所在的城市,比如一部中有 苏州、安徽的等等)
+	private String areaPrincipal; //是否为地区负责人	1:是;0:不是
 
 	//劳动关系临时属性
 	private String relationshipStatus;
@@ -909,4 +910,12 @@ public class WorkStaffBasicInfo extends DataEntity<WorkStaffBasicInfo> {
 	public void setAreaRemark(String areaRemark) {
 		this.areaRemark = areaRemark;
 	}
+
+	public String getAreaPrincipal() {
+		return areaPrincipal;
+	}
+
+	public void setAreaPrincipal(String areaPrincipal) {
+		this.areaPrincipal = areaPrincipal;
+	}
 }

+ 1 - 0
src/main/java/com/jeeplus/modules/workstaff/service/WorkStaffBasicInfoService.java

@@ -265,6 +265,7 @@ public class WorkStaffBasicInfoService extends CrudService<WorkStaffBasicInfoDao
             user.setOffice(workStaffBasicInfo.getOffice());
             user.setOtherServiceFlag(workStaffBasicInfo.getOtherServiceFlag());
             user.setAreaRemark(workStaffBasicInfo.getAreaRemark());
+            user.setAreaPrincipal(workStaffBasicInfo.getAreaPrincipal());
             userService.updateUser(user);
             //userService.updateRole(workStaffBasicInfo);
         }else{

+ 5 - 0
src/main/resources/mappings/modules/ruralprojectrecords/RuralProjectRecordsDao.xml

@@ -1579,6 +1579,11 @@
 		    ending_date =  #{endingDate}
 		WHERE id = #{id}
 	</update>
+	<update id="updateSubmitScale">
+		UPDATE rural_project_records SET
+		submit_scale = #{submitScale}
+		WHERE id = #{id}
+	</update>
 	<update id="projectUpgrade">
 		UPDATE rural_project_records SET
 			submit_money ='2',

+ 218 - 0
src/main/resources/mappings/modules/signatureManagement/businessSignature/BusinessSignatureDao.xml

@@ -0,0 +1,218 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.jeeplus.modules.signatureManagement.businessSignature.dao.BusinessSignatureDao">
+
+	<sql id="dailyOfficeWorkColumns">
+		a.id AS "id",
+		a.create_by AS "createBy.id",
+		su.name as "createBy.name",
+		a.create_date AS "createDate",
+		a.update_by AS "updateBy.id",
+		a.update_date AS "updateDate",
+		a.del_flag AS "delFlag",
+		a.remarks as "remarks",
+		a.name as "name",
+		a.use_type  as "useType",
+		a.application_date as "applicationDate",
+		a.status as "status",
+		a.process_instance_id as "processInstanceId",
+		a.office_id as "office.id",
+		so.name as "office.name",
+		soc.name as "company.name",
+		a.company_id as "company.id"
+	</sql>
+
+	<sql id="dailyOfficeWorkLeftColumns">
+        LEFT JOIN sys_user su ON su.id = a.create_by
+        LEFT JOIN sys_office so ON so.id = a.office_id
+        LEFT JOIN sys_office soc ON soc.id = a.company_id
+	</sql>
+
+	<select id="get" resultType="com.jeeplus.modules.signatureManagement.businessSignature.entity.BusinessSignatureInfo" >
+		SELECT
+			<include refid="dailyOfficeWorkColumns"/>
+        FROM signature_business_info a
+		<include refid="dailyOfficeWorkLeftColumns"/>
+		WHERE a.id = #{id} and a.del_flag = 0
+	</select>
+
+	<select id="findList" resultType="com.jeeplus.modules.signatureManagement.businessSignature.entity.BusinessSignatureInfo" >
+		SELECT
+		<include refid="dailyOfficeWorkColumns"/>
+
+		FROM signature_business_info a
+		<include refid="dailyOfficeWorkLeftColumns"/>
+		<where>
+			a.del_flag = 0
+			<if test="name != null and name != ''">
+				AND a.name like concat('%',#{name},'%')
+			</if>
+
+			<if test="useType != null and useType != ''">
+				AND a.use_type = #{useType}
+			</if>
+
+			<if test="createBy != null and((createBy.id != null and createBy.id != '') or (createBy.name != null and createBy.name != ''))">
+				AND (a.create_by = #{createBy.id} or su.name like concat('%',#{createBy.name},'%'))
+			</if>
+
+			<if test="beginDate !=null">
+				AND a.create_date >= #{beginDate}
+			</if>
+			<if test="endDate !=null">
+				AND a.create_date &lt;= #{endDate}
+			</if>
+
+			<if test="status != null and status != ''">
+				AND a.status = #{status}
+			</if>
+
+			<if test="office!=null and office.id=='' and office.name!=null and office.name!='' ">
+				and  so.name like concat('%',#{office.name},'%')
+			</if>
+
+			<if test="officeIdList!=null and officeIdList.size!=0">
+				and a.office_id in
+				<foreach collection="officeIdList" item="officeId" separator="," open="(" close=")">
+					#{officeId}
+				</foreach>
+			</if>
+
+			<if test="sqlMap.dsf !=null and sqlMap.dsf!=''">
+				${sqlMap.dsf}
+			</if>
+		</where>
+		<choose>
+			<when test="page !=null and page.orderBy != null and page.orderBy != ''">
+				ORDER BY ${page.orderBy}
+			</when>
+			<otherwise>
+				ORDER BY a.update_date DESC
+			</otherwise>
+		</choose>
+	</select>
+
+	<select id="queryCount" resultType="int" >
+		SELECT count(a.id)
+		FROM signature_business_info a
+		<include refid="dailyOfficeWorkLeftColumns"/>
+		<where>
+			a.del_flag = 0
+			<if test="name != null and name != ''">
+				AND a.name like concat('%',#{name},'%')
+			</if>
+
+			<if test="useType != null and useType != ''">
+				AND a.use_type = #{useType}
+			</if>
+
+			<if test="createBy != null and((createBy.id != null and createBy.id != '') or (createBy.name != null and createBy.name != ''))">
+				AND (a.create_by = #{createBy.id} or su.name like concat('%',#{createBy.name},'%'))
+			</if>
+
+			<if test="beginDate !=null">
+				AND a.create_date >= #{beginDate}
+			</if>
+			<if test="endDate !=null">
+				AND a.create_date &lt;= #{endDate}
+			</if>
+
+			<if test="status != null and status != ''">
+				AND a.status = #{status}
+			</if>
+
+			<if test="office!=null and office.id=='' and office.name!=null and office.name!='' ">
+				and  so.name like concat('%',#{office.name},'%')
+			</if>
+
+			<if test="officeIdList!=null and officeIdList.size!=0">
+				and a.office_id in
+				<foreach collection="officeIdList" item="officeId" separator="," open="(" close=")">
+					#{officeId}
+				</foreach>
+			</if>
+
+			<if test="sqlMap.dsf !=null and sqlMap.dsf!=''">
+				${sqlMap.dsf}
+			</if>
+		</where>
+	</select>
+
+	<insert id="insert">
+		INSERT INTO signature_business_info(
+			id,
+			create_by,
+			create_date,
+			update_by,
+			update_date,
+			del_flag,
+			remarks,
+			name,
+			use_type,
+			application_date,
+			status,
+			process_instance_id,
+			office_id,
+			company_id
+		) VALUES (
+			#{id},
+			#{createBy.id},
+			#{createDate},
+			#{updateBy.id},
+			#{updateDate},
+			#{delFlag},
+			#{remarks},
+			#{name},
+			#{useType},
+			#{applicationDate},
+			#{status},
+			#{processInstanceId},
+			#{office.id},
+			#{company.id}
+		)
+	</insert>
+
+	<update id="update">
+		UPDATE signature_business_info SET
+			update_by = #{updateBy.id},
+			update_date = #{updateDate},
+			remarks = #{remarks}
+			<if test="name != null and name != ''">
+				,name = #{name}
+			</if>
+			<if test="useType != null and useType != ''">
+				,use_type = #{useType}
+			</if>
+			<if test="applicationDate != null">
+				,application_date = #{applicationDate}
+			</if>
+			<if test="status != null and status != ''">
+				,status = #{status}
+			</if>
+			<if test="processInstanceId != null and processInstanceId != ''">
+				,process_instance_id = #{processInstanceId}
+			</if>
+		WHERE id = #{id}
+	</update>
+
+	<update id="delete">
+		update signature_business_info set del_flag = 1 where id= #{id}
+	</update>
+
+
+
+	<update id="updateProcessIdAndStatus" >
+		UPDATE  signature_business_info SET
+		update_date = now()
+		<if test="null != processInstanceId and '' != processInstanceId">
+			,process_instance_id = #{processInstanceId}
+		</if>
+		<if test="null != status and '' != status">
+			,status = #{status}
+		</if>
+		,update_date = now()
+		WHERE id = #{id}
+	</update>
+
+
+</mapper>

+ 218 - 0
src/main/resources/mappings/modules/signatureManagement/electronicSignature/ElectronicSignatureDao.xml

@@ -0,0 +1,218 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.jeeplus.modules.signatureManagement.electronicSignature.dao.ElectronicSignatureDao">
+
+	<sql id="dailyOfficeWorkColumns">
+		a.id AS "id",
+		a.create_by AS "createBy.id",
+		su.name as "createBy.name",
+		a.create_date AS "createDate",
+		a.update_by AS "updateBy.id",
+		a.update_date AS "updateDate",
+		a.del_flag AS "delFlag",
+		a.remarks as "remarks",
+		a.name as "name",
+		a.use_type  as "useType",
+		a.application_date as "applicationDate",
+		a.status as "status",
+		a.process_instance_id as "processInstanceId",
+		a.office_id as "office.id",
+		so.name as "office.name",
+		soc.name as "company.name",
+		a.company_id as "company.id"
+	</sql>
+
+	<sql id="dailyOfficeWorkLeftColumns">
+        LEFT JOIN sys_user su ON su.id = a.create_by
+        LEFT JOIN sys_office so ON so.id = a.office_id
+        LEFT JOIN sys_office soc ON soc.id = a.company_id
+	</sql>
+
+	<select id="get" resultType="com.jeeplus.modules.signatureManagement.electronicSignature.entity.ElectronicSignatureInfo" >
+		SELECT
+			<include refid="dailyOfficeWorkColumns"/>
+        FROM signature_electronic_info a
+		<include refid="dailyOfficeWorkLeftColumns"/>
+		WHERE a.id = #{id} and a.del_flag = 0
+	</select>
+
+	<select id="findList" resultType="com.jeeplus.modules.signatureManagement.electronicSignature.entity.ElectronicSignatureInfo" >
+		SELECT
+		<include refid="dailyOfficeWorkColumns"/>
+
+		FROM signature_electronic_info a
+		<include refid="dailyOfficeWorkLeftColumns"/>
+		<where>
+			a.del_flag = 0
+			<if test="name != null and name != ''">
+				AND a.name like concat('%',#{name},'%')
+			</if>
+
+			<if test="useType != null and useType != ''">
+				AND a.use_type = #{useType}
+			</if>
+
+			<if test="createBy != null and((createBy.id != null and createBy.id != '') or (createBy.name != null and createBy.name != ''))">
+				AND (a.create_by = #{createBy.id} or su.name like concat('%',#{createBy.name},'%'))
+			</if>
+
+			<if test="beginDate !=null">
+				AND a.create_date >= #{beginDate}
+			</if>
+			<if test="endDate !=null">
+				AND a.create_date &lt;= #{endDate}
+			</if>
+
+			<if test="status != null and status != ''">
+				AND a.status = #{status}
+			</if>
+
+			<if test="office!=null and office.id=='' and office.name!=null and office.name!='' ">
+				and  so.name like concat('%',#{office.name},'%')
+			</if>
+
+			<if test="officeIdList!=null and officeIdList.size!=0">
+				and a.office_id in
+				<foreach collection="officeIdList" item="officeId" separator="," open="(" close=")">
+					#{officeId}
+				</foreach>
+			</if>
+
+			<if test="sqlMap.dsf !=null and sqlMap.dsf!=''">
+				${sqlMap.dsf}
+			</if>
+		</where>
+		<choose>
+			<when test="page !=null and page.orderBy != null and page.orderBy != ''">
+				ORDER BY ${page.orderBy}
+			</when>
+			<otherwise>
+				ORDER BY a.update_date DESC
+			</otherwise>
+		</choose>
+	</select>
+
+	<select id="queryCount" resultType="int" >
+		SELECT count(a.id)
+		FROM signature_electronic_info a
+		<include refid="dailyOfficeWorkLeftColumns"/>
+		<where>
+			a.del_flag = 0
+			<if test="name != null and name != ''">
+				AND a.name like concat('%',#{name},'%')
+			</if>
+
+			<if test="useType != null and useType != ''">
+				AND a.use_type = #{useType}
+			</if>
+
+			<if test="createBy != null and((createBy.id != null and createBy.id != '') or (createBy.name != null and createBy.name != ''))">
+				AND (a.create_by = #{createBy.id} or su.name like concat('%',#{createBy.name},'%'))
+			</if>
+
+			<if test="beginDate !=null">
+				AND a.create_date >= #{beginDate}
+			</if>
+			<if test="endDate !=null">
+				AND a.create_date &lt;= #{endDate}
+			</if>
+
+			<if test="status != null and status != ''">
+				AND a.status = #{status}
+			</if>
+
+			<if test="office!=null and office.id=='' and office.name!=null and office.name!='' ">
+				and  so.name like concat('%',#{office.name},'%')
+			</if>
+
+			<if test="officeIdList!=null and officeIdList.size!=0">
+				and a.office_id in
+				<foreach collection="officeIdList" item="officeId" separator="," open="(" close=")">
+					#{officeId}
+				</foreach>
+			</if>
+
+			<if test="sqlMap.dsf !=null and sqlMap.dsf!=''">
+				${sqlMap.dsf}
+			</if>
+		</where>
+	</select>
+
+	<insert id="insert">
+		INSERT INTO signature_electronic_info(
+			id,
+			create_by,
+			create_date,
+			update_by,
+			update_date,
+			del_flag,
+			remarks,
+			name,
+			use_type,
+			application_date,
+			status,
+			process_instance_id,
+			office_id,
+			company_id
+		) VALUES (
+			#{id},
+			#{createBy.id},
+			#{createDate},
+			#{updateBy.id},
+			#{updateDate},
+			#{delFlag},
+			#{remarks},
+			#{name},
+			#{useType},
+			#{applicationDate},
+			#{status},
+			#{processInstanceId},
+			#{office.id},
+			#{company.id}
+		)
+	</insert>
+
+	<update id="update">
+		UPDATE signature_electronic_info SET
+			update_by = #{updateBy.id},
+			update_date = #{updateDate},
+			remarks = #{remarks}
+			<if test="name != null and name != ''">
+				,name = #{name}
+			</if>
+			<if test="useType != null and useType != ''">
+				,use_type = #{useType}
+			</if>
+			<if test="applicationDate != null">
+				,application_date = #{applicationDate}
+			</if>
+			<if test="status != null and status != ''">
+				,status = #{status}
+			</if>
+			<if test="processInstanceId != null and processInstanceId != ''">
+				,process_instance_id = #{processInstanceId}
+			</if>
+		WHERE id = #{id}
+	</update>
+
+	<update id="delete">
+		update signature_electronic_info set del_flag = 1 where id= #{id}
+	</update>
+
+
+
+	<update id="updateProcessIdAndStatus" >
+		UPDATE  signature_electronic_info SET
+		update_date = now()
+		<if test="null != processInstanceId and '' != processInstanceId">
+			,process_instance_id = #{processInstanceId}
+		</if>
+		<if test="null != status and '' != status">
+			,status = #{status}
+		</if>
+		,update_date = now()
+		WHERE id = #{id}
+	</update>
+
+
+</mapper>

+ 2 - 2
src/main/resources/mappings/modules/sys/MainDictDetailDao.xml

@@ -308,12 +308,12 @@
             <if test="type != null and type != ''">
                 and c.type_name = #{type}
             </if>
-            <if test="company != null and company.id != '' and company.id != null">
+            <!--<if test="company != null and company.id != '' and company.id != null">
                 and a.company_id = #{company.id}
             </if>
             <if test="branchOffice != null and branchOffice != ''">
                 and a.branch_office = #{branchOffice}
-            </if>
+            </if>-->
             <if test="level != null and level != ''">
                 and a.level = #{level}
             </if>

+ 15 - 0
src/main/resources/mappings/modules/sys/OfficeDao.xml

@@ -793,4 +793,19 @@
 	<select id="getChildrenOfficeById" resultType="Office">
 		SELECT * FROM sys_office a WHERE a.parent_ids like CONCAT('%',#{parentId},'%') and del_flag = 0
 	</select>
+
+	<select id="getByIdList" resultType="Office">
+		SELECT
+		<include refid="officeColumns"/>
+		FROM sys_office a
+		<include refid="officeJoins"/>
+		<where>
+			<if test="idList != null and idList.size>0">
+				and a.id in
+				<foreach collection="idList" item="id" separator="," open="(" close=")">
+					#{id}
+				</foreach>
+			</if>
+		</where>
+	</select>
 </mapper>

+ 3 - 0
src/main/resources/mappings/modules/sys/UserDao.xml

@@ -1254,6 +1254,9 @@
 			<if test="areaRemark!=null and areaRemark != ''">
 				,area_remark = #{areaRemark}
 			</if>
+			<if test="areaPrincipal!=null and areaPrincipal != ''">
+				,area_principal = #{areaPrincipal}
+			</if>
 		</set>
 		where id = #{id}
 	</update>

+ 1 - 0
src/main/resources/mappings/modules/workstaff/WorkStaffBasicInfoDao.xml

@@ -79,6 +79,7 @@
 		SELECT
 			<include refid="workStaffBasicInfoColumns"/>
 			,suo.area_remark as "areaRemark"
+			,suo.area_principal as "areaPrincipal"
 		FROM work_staff_basic_info a
 		<include refid="workStaffBasicInfoJoins"/>
 		WHERE a.id = #{id}

BIN
src/main/webapp/dot/业务用章承诺书.docx


BIN
src/main/webapp/dot/印章刻制申请表.docx


BIN
src/main/webapp/dot/电子用章承诺书.docx


+ 2 - 2
src/main/webapp/webpage/modules/disputeMediation/projectNonPrelitigationMediation/projectNonPrelitigationMediationList.jsp

@@ -303,7 +303,7 @@
 								"<span title=" + d.caseNumber + ">" + d.caseNumber + "</span></a>";
 						return xml;
 					}}
-				,{field:'courtName',align:'center', title: '法院名称',width:200,templet:function(d){
+				,{field:'courtName',align:'center', title: '法院名称',minWidth:200,templet:function(d){
 						return "<span title='"+ d.courtName +"'>" + d.courtName + "</span>";
 					}}
 				,{field:'area', align:'center',title: '纠纷地点',width:80}
@@ -316,7 +316,7 @@
 				,{field:'defendantSecond',align:'center', title: '被告2', width:100,templet:function(d){
 						return "<span title='"+ d.defendantSecond +"'>" + d.defendantSecond + "</span>";
 					}}
-				,{field:'mediationDate',align:'center', title: '调解期间', width:100,templet:function(d){
+				,{field:'mediationDate',align:'center', title: '调解期间', width:200,templet:function(d){
 						return "<span title='"+ d.mediationDate +"'>" + d.mediationDate + "</span>";
 					}}
 				,{field:'createName',align:'center', title: '登记人', width:80}

+ 2 - 2
src/main/webapp/webpage/modules/disputeMediation/projectPrelitigationMediation/projectPrelitigationMediationList.jsp

@@ -289,7 +289,7 @@
 								"<span title=" + d.caseNumber + ">" + d.caseNumber + "</span></a>";
 						return xml;
 					}}
-                ,{field:'courtName',align:'center', title: '法院名称',width:200,templet:function(d){
+                ,{field:'courtName',align:'center', title: '法院名称',minWidth:200,templet:function(d){
 						return "<span title='"+ d.courtName +"'>" + d.courtName + "</span>";
 					}}
 					,{field:'area', align:'center',title: '纠纷地点',width:80}
@@ -302,7 +302,7 @@
                 ,{field:'defendantSecond',align:'center', title: '被告2', width:100,templet:function(d){
 						return "<span title='"+ d.defendantSecond +"'>" + d.defendantSecond + "</span>";
 					}}
-                ,{field:'mediationDate',align:'center', title: '调解期间', width:100,templet:function(d){
+                ,{field:'mediationDate',align:'center', title: '调解期间', width:200,templet:function(d){
 						return "<span title='"+ d.mediationDate +"'>" + d.mediationDate + "</span>";
 					}}
                 ,{field:'createName',align:'center', title: '登记人', width:80}

+ 58 - 8
src/main/webapp/webpage/modules/ruralprojectrecords/cost/projectcontentinfo/new/reportForm.jsp

@@ -38,6 +38,20 @@
 				var boolFlag = true;
 				if(boolFlag){
 					if(obj == 1){
+
+						//设置:如果质量复核中的送审价和项目登记中的送审规模额度不同,则给出提示,并蒋项目登记中的送审规模额度进行修改
+						//获取质量复核中填写的送审价
+						var reviewFee = $("#reviewFee").val()
+						//获取项目登记中的送审规模
+						var submitScale = $("#submitScale").val()
+
+						// 将质量复核中的送审价转换为万元
+						let reviewFeeW = reviewFee / 10000;
+						// 四舍五入保留两位小数
+						reviewFeeW = Math.round(reviewFeeW * 100) / 100;
+						reviewFeeW = reviewFeeW.toFixed(2);  // 将结果格式化为字符串,保留两位小数
+						console.log(reviewFeeW)
+
 						var info = false;
 						if(dataList == undefined){
 							dataList = ${fns:toJson(workReviewAudits)}
@@ -207,10 +221,29 @@
 
 									var flags=judgment();
 									if (flags){
-										$("#inputForm").attr("action","${ctx}/ruralProject/ruralCostProjectMessageNew/saveReport");
-										$("#inputForm").submit();
-										top.layer.closeAll();//关闭对话框。
-										return true;
+
+
+
+										if (reviewFeeW !== submitScale) {
+											top.layer.alert(
+													"您在质量复核中填写的送审价和项目登记中填写的送审规模金额不同,我们会将质量复核中的送审价同步到项目登记中的送审规模中!",
+													{ icon: 0 },
+													function(index){
+														$("#dataSynchronism").val("1");
+														$("#inputForm").attr("action","${ctx}/ruralProject/ruralCostProjectMessageNew/saveReport");
+														$("#inputForm").submit();
+														top.layer.closeAll();//关闭对话框。
+														return true;
+													}
+											);
+										} else {
+											$("#dataSynchronism").val("0");
+											$("#inputForm").attr("action","${ctx}/ruralProject/ruralCostProjectMessageNew/saveReport");
+											$("#inputForm").submit();
+											top.layer.closeAll();//关闭对话框。
+											return true;
+										}
+
 									}else{
 										return flags;
 									}
@@ -301,10 +334,25 @@
 
 							var flags=judgment();
 							if (flags){
-								$("#inputForm").attr("action","${ctx}/ruralProject/ruralCostProjectMessageNew/saveReport");
-								$("#inputForm").submit();
-								top.layer.closeAll();//关闭对话框。
-								return true;
+								if (reviewFeeW !== submitScale) {
+									top.layer.alert(
+											"您在质量复核中填写的送审价和项目登记中填写的送审规模金额不同,我们会将质量复核中的送审价同步到项目登记中的送审规模中!",
+											{ icon: 0 },
+											function(index){
+												$("#dataSynchronism").val("1");
+												$("#inputForm").attr("action","${ctx}/ruralProject/ruralCostProjectMessageNew/saveReport");
+												$("#inputForm").submit();
+												top.layer.closeAll();//关闭对话框。
+												return true;
+											}
+									);
+								} else {
+									$("#dataSynchronism").val("0");
+									$("#inputForm").attr("action","${ctx}/ruralProject/ruralCostProjectMessageNew/saveReport");
+									$("#inputForm").submit();
+									top.layer.closeAll();//关闭对话框。
+									return true;
+								}
 							}else{
 								return flags;
 							}
@@ -858,6 +906,8 @@
 		<form:hidden path="project.id"/>
 		<input type="hidden" id="projectSort" value="${projectSort}">
 		<input type="hidden" id="projectOnRuralId" name="projectOnRural.id" value="${projectRecords.id}">
+		<input type="hidden" id="submitScale" value="${projectRecords.submitScale}">
+		<input type="hidden" id="dataSynchronism" name="dataSynchronism" value="">
 		<sys:message content="${message}"/>
 		<%--<div class="form-group layui-row first lw12">
 			<div class="form-group-label"><h2>基本信息</h2></div>

+ 52 - 8
src/main/webapp/webpage/modules/ruralprojectrecords/ruralporjectmessage/projectcontentinfo/new/judgementReport/projectRecordsJudgementForm.jsp

@@ -37,6 +37,18 @@
 				var projectId = '${projectRecords.id}';
 				var boolFlag = true;
 				if(boolFlag){
+					//设置:如果质量复核中的送审价和项目登记中的送审规模额度不同,则给出提示,并蒋项目登记中的送审规模额度进行修改
+					//获取质量复核中填写的送审价
+					var reviewFee = $("#reviewFee").val()
+					//获取项目登记中的送审规模
+					var submitScale = $("#submitScale").val()
+
+					// 将质量复核中的送审价转换为万元
+					let reviewFeeW = reviewFee / 10000;
+					// 四舍五入保留两位小数
+					reviewFeeW = Math.round(reviewFeeW * 100) / 100;
+					reviewFeeW = reviewFeeW.toFixed(2);  // 将结果格式化为字符串,保留两位小数
+					console.log(reviewFeeW)
 					if(obj == 1){
 
 						var info = false;
@@ -209,10 +221,25 @@
 
 									var flags=judgment();
 									if (flags){
-										$("#inputForm").attr("action","${ctx}/ruralProject/ruralCostProjectMessageNew/saveReport");
-										$("#inputForm").submit();
-										top.layer.closeAll();//关闭对话框。
-										return true;
+										if (reviewFeeW !== submitScale) {
+											top.layer.alert(
+													"您在质量复核中填写的送审价和项目登记中填写的送审规模金额不同,我们会将质量复核中的送审价同步到项目登记中的送审规模中!",
+													{ icon: 0 },
+													function(index){
+														$("#dataSynchronism").val("1");
+														$("#inputForm").attr("action","${ctx}/ruralProject/ruralCostProjectMessageNew/saveReport");
+														$("#inputForm").submit();
+														top.layer.closeAll();//关闭对话框。
+														return true;
+													}
+											);
+										} else {
+											$("#dataSynchronism").val("0");
+											$("#inputForm").attr("action","${ctx}/ruralProject/ruralCostProjectMessageNew/saveReport");
+											$("#inputForm").submit();
+											top.layer.closeAll();//关闭对话框。
+											return true;
+										}
 									}else{
 										return flags;
 									}
@@ -307,10 +334,25 @@
 
 							var flags=judgment();
 							if (flags){
-								$("#inputForm").attr("action","${ctx}/ruralProject/ruralCostProjectMessageNew/saveReport");
-								$("#inputForm").submit();
-								top.layer.closeAll();//关闭对话框。
-								return true;
+								if (reviewFeeW !== submitScale) {
+									top.layer.alert(
+											"您在质量复核中填写的送审价和项目登记中填写的送审规模金额不同,我们会将质量复核中的送审价同步到项目登记中的送审规模中!",
+											{ icon: 0 },
+											function(index){
+												$("#dataSynchronism").val("1");
+												$("#inputForm").attr("action","${ctx}/ruralProject/ruralCostProjectMessageNew/saveReport");
+												$("#inputForm").submit();
+												top.layer.closeAll();//关闭对话框。
+												return true;
+											}
+									);
+								} else {
+									$("#dataSynchronism").val("0");
+									$("#inputForm").attr("action","${ctx}/ruralProject/ruralCostProjectMessageNew/saveReport");
+									$("#inputForm").submit();
+									top.layer.closeAll();//关闭对话框。
+									return true;
+								}
 							}else{
 								return flags;
 							}
@@ -858,6 +900,8 @@
 		<form:hidden path="project.id"/>
 		<input type="hidden" id="projectSort" value="${projectSort}">
 		<input type="hidden" id="projectOnRuralId" name="projectOnRural.id" value="${projectRecords.id}">
+			<input type="hidden" id="submitScale" value="${projectRecords.submitScale}">
+			<input type="hidden" id="dataSynchronism" name="dataSynchronism" value="">
 		<sys:message content="${message}"/>
 		<%--<div class="form-group layui-row first lw12">
 			<div class="form-group-label"><h2>基本信息</h2></div>

+ 342 - 0
src/main/webapp/webpage/modules/signatureManagement/businessSignature/BusinessSignatureAudit.jsp

@@ -0,0 +1,342 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>项目审批管理</title>
+	<meta name="decorator" content="default"/>
+	<script type="text/javascript" src="${ctxStatic}/helloweba_editable-select/jquery.editable-select.min.js"></script>
+	<script type="text/javascript" src="${ctxStatic}/iCheck/icheck.min.js"></script>
+	<script type="text/javascript" src="${ctxStatic}/layui/layuidown.js"></script>
+	<script src="${ctxStatic}/common/html/js/script.js"></script>
+	<link rel='stylesheet' type="text/css" href="${ctxStatic}/layui/layuidown.css"/>
+	<link rel='stylesheet' type="text/css" href="${ctxStatic}/helloweba_editable-select/jquery.editable-select.min.css"/>
+
+	<script type="text/javascript">
+		var validateForm;
+		function doSubmit(obj){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+            if(validateForm.form()){
+				var ss= document.getElementById("iframe").contentWindow.document.getElementById("opinion").value
+				$("#opinion").val(ss);
+                if(obj == 1) {
+                    $("#flag").val("yes");
+                }else {
+                    if(obj == 2){
+                        $("#flag").val("no1");
+					}else {
+                        $("#flag").val("no2");
+					}
+                }
+                $("#inputForm").submit();
+                return true;
+            }
+		  return false;
+		}
+		$(document).ready(function() {
+
+			layui.use(['form', 'layer'], function () {
+				var form = layui.form;
+			});
+
+			validateForm = $("#inputForm").validate({
+				submitHandler: function(form){
+					loading('正在提交,请稍等...');
+					form.submit();
+				},
+				errorContainer: "#messageBox",
+				errorPlacement: function(error, element) {
+					$("#messageBox").text("输入有误,请先更正。");
+					if (element.is(":checkbox")||element.is(":radio")||element.parent().is(".input-append")){
+						error.appendTo(element.parent().parent());
+					} else {
+						error.insertAfter(element);
+					}
+				}
+			});
+		});
+        function insertTitle(tValue){
+            var files = $("#attachment_file")[0].files;
+            for(var i = 0;i<files.length;i++) {
+            	var file = files[i];
+				var attachmentId = $("#id").val();
+				var attachmentFlag = "193";
+				console.log(file);
+				var timestamp=new Date().getTime();
+
+					var storeAs = "businessSignature";
+				var uploadPath="http://gangwan-app.oss-cn-hangzhou.aliyuncs.com/"+storeAs;/*将这段字符串存到数据库即可*/
+				var divId = "_attachment";
+				$("#addFile"+divId).show();
+				multipartUploadWithSts(storeAs, file,attachmentId,attachmentFlag,uploadPath,divId,0);
+            }
+        }
+
+        function addFile() {
+            $("#attachment_file").click();
+        }
+
+        function addRow(list, idx, tpl, row){
+            bornTemplete(list, idx, tpl, row, idx);
+        }
+
+        function bornTemplete(list, idx, tpl, row, idx1){
+            $(list).append(Mustache.render(tpl, {
+                idx: idx, delBtn: true, row: row,
+                order:idx1 + 1
+            }));
+            $(list+idx).find("select").each(function(){
+                $(this).val($(this).attr("data-value"));
+            });
+            $(list+idx).find("input[type='checkbox'], input[type='radio']").each(function(){
+                var ss = $(this).attr("data-value").split(',');
+                for (var i=0; i<ss.length; i++){
+                    if($(this).val() == ss[i]){
+                        $(this).attr("checked","checked");
+                    }
+                }
+            });
+        }
+	</script>
+</head>
+<body >
+<div class="single-form">
+	<div class="container">
+		<form:form id="inputForm" modelAttribute="businessSignatureInfo" enctype="multipart/form-data" action="${ctx}/businessSignature/businessSignature/saveAudit" method="post" class="form-horizontal layui-form">
+		<form:hidden path="id"/>
+		<form:hidden path="home"/>
+		<form:hidden path="act.taskId"/>
+		<form:hidden path="act.taskName"/>
+		<form:hidden id="taskDefKey" path="act.taskDefKey"/>
+		<form:hidden path="act.procInsId"/>
+		<form:hidden path="act.procDefId"/>
+		<form:hidden path="processInstanceId"/>
+		<form:hidden id="flag" path="act.flag"/>
+		<input type="hidden" id="opinion" name="act.comment" value="" maxlength="255">
+		<c:set var="status" value="${businessSignatureInfo.act.status}" />
+
+
+
+			<div class="form-group layui-row first">
+				<div class="form-group-label"><h2>业务用章申请基础信息</h2></div>
+				<div class="layui-item layui-col-sm6 lw7">
+					<label class="layui-form-label double-line">业务用章名称:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" style="background-color: #f1f1f1" value="${businessSignatureInfo.name}"/>
+					</div>
+				</div>
+				<%--<div class="layui-item layui-col-sm6 lw7">
+					<label class="layui-form-label">签章编号:</label>
+					<div class="layui-input-block">
+						<div class="input-group">
+							<form:input path="number" htmlEscape="false"  readonly="true" class="form-control layui-input" cssStyle="background-color: #f1f1f1"/>
+						</div>
+					</div>
+				</div>--%>
+
+				<div class="layui-item layui-col-sm6 lw7">
+					<label class="layui-form-label"><span class="require-item">*</span>使用场景:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" style="background-color: #f1f1f1" value="${businessSignatureInfo.useType}"/>
+					</div>
+				</div>
+
+				<div class="layui-item layui-col-sm6 lw7">
+					<label class="layui-form-label">创建人:</label>
+					<div class="layui-input-block">
+						<form:input path="createBy.name" htmlEscape="false"  readonly="true"  class="form-control  layui-input"/>
+						<form:hidden path="createBy.id" htmlEscape="false"   readonly="true"  class="form-control  layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6 lw7">
+					<label class="layui-form-label">所属部门:</label>
+					<div class="layui-input-block">
+						<form:input path="office.name" htmlEscape="false" id="officeName" class="form-control layui-input" readonly="true"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6 lw7">
+					<label class="layui-form-label">申请日期:</label>
+					<div class="layui-input-block">
+						<input id="createDate" name="createDate" htmlEscape="false"  value="<fmt:formatDate value="${businessSignatureInfo.createDate}" pattern="yyyy-MM-dd"/>" readonly="readonly"  class="form-control judgment layui-input"/>
+					</div>
+				</div>
+
+
+				<div class="layui-item layui-col-sm12 lw7 with-textarea">
+					<label class="layui-form-label">备注:</label>
+					<div class="layui-input-block">
+						<textarea htmlEscape="false" rows="4" readonly="true" maxlength="1000"  style="background-color: #f1f1f1" class="form-control" >${businessSignatureInfo.remarks}</textarea>
+					</div>
+				</div>
+			</div>
+
+
+			<div class="form-group layui-row">
+				<div class="form-group-label"><h2>业务用章申请附件信息</h2></div>
+				<div class="layui-item layui-col-xs12" style="padding:0 16px;">
+					<table id="listAttachment" class="table table-bordered table-condensed details">
+						<thead>
+						<tr>
+								<%-- <th>序号</th>--%>
+							<th>文件预览</th>
+							<th>上传人</th>
+							<th>上传时间</th>
+							<th width="180px">操作</th>
+						</tr>
+						</thead>
+						<tbody id="file_attachment">
+						<c:forEach items="${businessSignatureInfo.workAttachments}" var = "workClientAttachment" varStatus="status">
+							<tr>
+									<%-- <td>${status.index + 1}</td>--%>
+								<c:choose>
+									<c:when test="${businessSignatureInfo.uploadMode == 2}">
+										<c:choose>
+											<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpg')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'png')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'gif')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'bmp')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpeg')}">
+												<td><img src="${workClientAttachment.temporaryUrl}" width="50" height="50" onclick="openDialogView('预览','${ctx}/sys/picturepreview/picturePreview?url=${workClientAttachment.temporaryUrl}','90%','90%')" alt="${workClientAttachment.attachmentName}">
+											</c:when>
+											<c:otherwise>
+												<c:choose>
+													<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'pdf')}">
+														<td><a class="attention-info" href="javascript:void(0)" onclick="preview('预览','${workClientAttachment.temporaryUrl}','90%','90%','1')">${workClientAttachment.attachmentName}</a></td>
+													</c:when>
+													<c:otherwise>
+														<c:choose>
+															<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'rar')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'zip')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jar')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'7z')}">
+																<td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.temporaryUrl}',3)">${workClientAttachment.attachmentName}</a></td>
+															</c:when>
+															<c:otherwise>
+																<td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.temporaryUrl}',2)">${workClientAttachment.attachmentName}</a></td>
+															</c:otherwise>
+														</c:choose>
+													</c:otherwise>
+												</c:choose>
+											</c:otherwise>
+										</c:choose>
+									</c:when>
+									<c:otherwise>
+										<c:choose>
+											<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpg')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'png')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'gif')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'bmp')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpeg')}">
+												<td><img src="${workClientAttachment.url}" width="50" height="50" onclick="openDialogView('预览','${ctx}/sys/picturepreview/picturePreview?url=${workClientAttachment.url}','90%','90%')" alt="${workClientAttachment.attachmentName}">
+											</c:when>
+											<c:otherwise>
+												<c:choose>
+													<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'pdf')}">
+														<td><a class="attention-info" href="javascript:void(0)" onclick="preview('预览','${workClientAttachment.url}','90%','90%','1')">${workClientAttachment.attachmentName}</a></td>
+													</c:when>
+													<c:otherwise>
+														<c:choose>
+															<c:when test="${businessSignatureInfo.uploadMode == 2}">
+																<c:choose>
+																	<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpg')
+                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'png')
+                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'gif')
+                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'bmp')
+                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpeg')}">
+																		<td><img src="${workClientAttachment.temporaryUrl}" width="50" height="50" onclick="openDialogView('预览','${ctx}/sys/picturepreview/picturePreview?url=${workClientAttachment.temporaryUrl}','90%','90%')" alt="${workClientAttachment.attachmentName}">
+																	</c:when>
+																	<c:otherwise>
+																		<c:choose>
+																			<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'pdf')}">
+																				<td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.temporaryUrl}',1)">${workClientAttachment.attachmentName}</a></td>
+																			</c:when>
+																			<c:otherwise>
+																				<c:choose>
+																					<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'rar')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'zip')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jar')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'7z')}">
+																						<td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.temporaryUrl}',3)">${workClientAttachment.attachmentName}</a></td>
+																					</c:when>
+																					<c:otherwise>
+																						<td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.temporaryUrl}',2)">${workClientAttachment.attachmentName}</a></td>
+																					</c:otherwise>
+																				</c:choose>
+																			</c:otherwise>
+																		</c:choose>
+																	</c:otherwise>
+																</c:choose>
+															</c:when>
+															<c:otherwise>
+																<c:choose>
+																	<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpg')
+                                                   or fn:containsIgnoreCase(workClientAttachment.attachmentName,'png')
+                                                   or fn:containsIgnoreCase(workClientAttachment.attachmentName,'gif')
+                                                   or fn:containsIgnoreCase(workClientAttachment.attachmentName,'bmp')
+                                                   or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpeg')}">
+																		<td><img src="${workClientAttachment.url}" width="50" height="50" onclick="openDialogView('预览','${ctx}/sys/picturepreview/picturePreview?url=${workClientAttachment.url}','90%','90%')" alt="${workClientAttachment.attachmentName}">
+																	</c:when>
+																	<c:otherwise>
+																		<c:choose>
+																			<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'pdf')}">
+																				<td><a href="javascript:void(0)" onclick="openPreview('${workClientAttachment.url}',1)">${workClientAttachment.attachmentName}</a></td>
+																			</c:when>
+																			<c:otherwise>
+																				<c:choose>
+																					<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'rar')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'zip')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jar')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'7z')}">
+																						<td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.url}',3)">${workClientAttachment.attachmentName}</a></td>
+																					</c:when>
+																					<c:otherwise>
+																						<td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.url}',2)">${workClientAttachment.attachmentName}</a></td>
+																					</c:otherwise>
+																				</c:choose>
+																			</c:otherwise>
+																		</c:choose>
+																	</c:otherwise>
+																</c:choose>
+															</c:otherwise>
+														</c:choose>
+													</c:otherwise>
+												</c:choose>
+											</c:otherwise>
+										</c:choose>
+									</c:otherwise>
+								</c:choose>
+
+								<td>${workClientAttachment.createBy.name}</td>
+								<td><fmt:formatDate value="${workClientAttachment.createDate}" type="both"/></td>
+								<td class="op-td">
+									<div class="op-btn-box" >
+										<a href="javascript:location.href='${ctx}/workfullmanage/workFullManage/downLoadAttach?file='+encodeURIComponent('${workClientAttachment.url}');" class="op-btn op-btn-download"><i class="fa fa-download"></i>&nbsp;下载</a>
+											<%--													<c:if test="${workClientAttachment.createBy.id eq fns:getUser().id}">--%>
+											<%--														<a href="javascript:void(0)" onclick="deleteFileFromAliyun(this,'${ctx}/sys/workattachment/deleteFileFromAliyun?url=${workClientAttachment.url}&id=${workClientAttachment.id}&type=2','addFile_attachment','_attachment')" class="op-btn op-btn-delete" ><i class="fa fa-trash"></i>&nbsp;删除</a>--%>
+											<%--													</c:if>--%>
+									</div>
+								</td>
+							</tr>
+						</c:forEach>
+						</tbody>
+					</table>
+				</div>
+			</div>
+
+
+
+	</form:form>
+		<div class="form-group-label">
+			<div style="float: right"> <a href="javascript:void(0)" style='background-color: #FFB800' onclick="openDialogre('个人模板列表', '${ctx}/auditTemplate/auditTemplate/templateList?identification=${signatureDailyOfficeWork}&name=${identificationName}','80%', '70%','','关闭')" class="nav-btn layui-btn layui-btn-sm" ><i class="fa fa-file-excel-o"></i> 审核意见模板列表</a></div>
+			<h2>审批意见</h2>
+		</div>
+		<iframe id="iframe" src="${ctx}/auditTemplate/auditTemplate/iframeView?identification=${businessSignature}" name="listresult" frameborder="0" align="left" width="100%" height="300" scrolling="value"></iframe>
+			<div class="form-group layui-row">
+				<div class="form-group-label"><h2>${projectNotifyType}审批流程</h2></div>
+				<div class="layui-item layui-col-xs12 form-table-container" >
+					<act:flowChart procInsId="${processInstanceId}"/>
+					<act:histoicFlow procInsId="${processInstanceId}"/>
+				</div>
+			</div>
+	</div>
+</div>
+</body>
+</html>

+ 421 - 0
src/main/webapp/webpage/modules/signatureManagement/businessSignature/BusinessSignatureForm.jsp

@@ -0,0 +1,421 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+    <title>项目管理</title>
+    <meta name="decorator" content="default"/>
+    <script type="text/javascript" src="${ctxStatic}/helloweba_editable-select/jquery.editable-select.min.js"></script>
+    <script type="text/javascript" src="${ctxStatic}/iCheck/icheck.min.js"></script>
+    <script type="text/javascript" src="${ctxStatic}/layui/layuidown.js"></script>
+    <script src="${ctxStatic}/common/html/js/script.js"></script>
+    <link rel='stylesheet' type="text/css" href="${ctxStatic}/layui/layuidown.css"/>
+    <link rel='stylesheet' type="text/css" href="${ctxStatic}/helloweba_editable-select/jquery.editable-select.min.css"/>
+    <style>
+        #projectDesc-error{
+            left:0;
+            top:82px;
+        }
+        .layui-layer-dialog{
+            background: red;
+        }
+        td input{
+            margin-left:-10px !important;
+            height: 42px !important;
+        }
+        .disables {
+            pointer-events: none;
+        }
+        .notDisables {
+            pointer-events: all;
+        }
+        .forbidden{
+            background-color:#c2c2c2;
+        }
+
+        .notForbidden{
+            background-color:#3ca2e0;
+        }
+        .spanzj{
+            color: red;
+            font-size: 12px;
+            padding-left: 10px;
+        }
+    </style>
+    <script type="text/javascript">
+        var validateForm;
+        var isMasterClient = true;//是否是委托方
+        var clientCount = 0;
+        function doSubmit(i){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+            if(validateForm.form()){
+                if(i==2){
+                    $("#inputForm").attr("action","${ctx}/businessSignature/businessSignature/tstore");
+                }else{
+                    var flag = $("#flagFile").val();
+                    if(flag == 'false'){
+                        top.layer.msg('附件信息未上传完成,请等待!', {icon: 0});
+                        return;
+                    }
+                    var length = $("#file_attachment").find("tr").length ;
+                    if(length == 0){
+                        top.layer.msg("请上传申请附件", {icon: 0});
+                        return;
+                    }
+                    var flags=judgment();
+                    if (!flags){
+                        return flags;
+                    }
+                }
+                $("#inputForm").submit();
+                return true;
+            }else{
+                parent.layer.msg("信息未填写完整!", {icon: 5});
+            }
+            return false;
+        }
+        $(document).ready(function() {
+            layui.use(['layer', 'jquery', 'form'], function () {
+                var layer = layui.layer,
+                    $ = layui.jquery,
+                    form = layui.form;
+
+            });
+
+            $("#attachment_btn").click(function () {
+                $("#attachment_file").click();
+            });
+            var radioVal ;
+            validateForm = $("#inputForm").validate({
+                submitHandler: function(form){
+                    loading('正在提交,请稍等...');
+                    form.submit();
+                },
+                errorContainer: "#messageBox",
+                errorPlacement: function(error, element) {
+                    $("#messageBox").text("输入有误,请先更正。");
+                    if (element.is(":checkbox")||element.is(":radio")||element.parent().is(".input-append")){
+                        error.appendTo(element.parent().parent());
+                    } else {
+                        error.insertAfter(element);
+                    }
+                }
+            });
+        });
+
+
+        function insertTitle(tValue){
+            var files = $("#attachment_file")[0].files;
+            for(var i = 0;i<files.length;i++) {
+                var file = files[i];
+                var attachmentId = $("#id").val();
+                var attachmentFlag = "193";
+                console.log(file);
+                var timestamp=new Date().getTime();
+
+                var storeAs = "businessSignature";
+                var uploadPath="http://gangwan-app.oss-cn-hangzhou.aliyuncs.com/"+storeAs;/*将这段字符串存到数据库即可*/
+                var divId = "_attachment";
+                $("#addFile"+divId).show();
+                multipartUploadWithSts(storeAs, file,attachmentId,attachmentFlag,uploadPath,divId,0);
+            }
+        }
+
+
+        function addFile() {
+            $("#attachment_file").click();
+        }
+
+        function addRow(list, idx, tpl, row){
+            bornTemplete(list, idx, tpl, row, idx);
+        }
+
+        function bornTemplete(list, idx, tpl, row, idx1){
+            $(list).append(Mustache.render(tpl, {
+                idx: idx, delBtn: true, row: row,
+                order:idx1 + 1
+            }));
+            $(list+idx).find("select").each(function(){
+                $(this).val($(this).attr("data-value"));
+            });
+            $(list+idx).find("input[type='checkbox'], input[type='radio']").each(function(){
+                var ss = $(this).attr("data-value").split(',');
+                for (var i=0; i<ss.length; i++){
+                    if($(this).val() == ss[i]){
+                        $(this).attr("checked","checked");
+                    }
+                }
+            });
+        }
+        function delRow(obj, prefix){
+            var id = $(prefix+"_id");
+            var delFlag = $(prefix+"_delFlag");
+            $(obj).parent().parent().remove();
+        }
+    </script>
+</head>
+<body>
+<div class="single-form">
+    <div class="container">
+        <sys:message content="${message}"/>
+        <form:form id="inputForm" modelAttribute="businessSignatureInfo" action="${ctx}/businessSignature/businessSignature/save" method="post" class="form-horizontal layui-form ">
+            <form:hidden path="id"/>
+
+            <div class="form-group layui-row">
+                <div class="form-group-label"><h2>业务用章申请基础信息</h2></div>
+                <div class="layui-item layui-col-sm6 lw7">
+                    <label class="layui-form-label double-line"><span class="require-item">*</span>业务用章名称:</label>
+                    <div class="layui-input-block">
+                        <form:input path="name" id="name" maxlength="255" htmlEscape="false" placeholder="请输入业务用章名称" class="form-control layui-input required"/>
+                    </div>
+                </div>
+                <%--<div class="layui-item layui-col-sm6 lw7">
+                    <label class="layui-form-label">签章编号:</label>
+                    <div class="layui-input-block">
+                        <div class="input-group">
+                            <form:input path="number" htmlEscape="false" readonly="true" class="form-control layui-input"/>
+                            &lt;%&ndash;<span class="input-group-btn">
+                                <label class="form-status"><c:choose><c:when test="${not empty dailyOfficeWork.projectStatus}">${fns:getDictLabel(dailyOfficeWork.projectStatus, 'audit_state', '')}</c:when><c:otherwise>新添</c:otherwise></c:choose></label>
+                             </span>&ndash;%&gt;
+                        </div>
+                    </div>
+                </div>--%>
+
+                <div class="layui-item layui-col-sm6 lw7">
+                    <label class="layui-form-label"><span class="require-item">*</span>使用场景:</label>
+                    <div class="layui-input-block readOnlyFFF">
+                        <form:select placeholder="请选择" path="useType" lay-filter="useType" class="form-control judgment editable-select layui-input" id="useType" value="${businessSignatureInfo.useType}">
+                            <form:option value=""/>
+                            <form:options items="${fns:getMainDictList('businessSignature')}" itemLabel="label" itemValue="value" htmlEscape="false"/>
+                        </form:select>
+                    </div>
+                </div>
+
+
+                <div class="layui-item layui-col-sm6 lw7">
+                    <label class="layui-form-label">创建人:</label>
+                    <div class="layui-input-block">
+                        <form:input path="createBy.name" htmlEscape="false"  readonly="true"  class="form-control  layui-input"/>
+                        <form:hidden path="createBy.id" htmlEscape="false"   readonly="true"  class="form-control  layui-input"/>
+                    </div>
+                </div>
+                <div class="layui-item layui-col-sm6 lw7">
+                    <label class="layui-form-label">所属部门:</label>
+                    <div class="layui-input-block">
+                        <form:input path="office.name" htmlEscape="false" id="officeName" class="form-control layui-input" readonly="true"/>
+                    </div>
+                </div>
+                <div class="layui-item layui-col-sm6 lw7">
+                    <label class="layui-form-label">申请日期:</label>
+                    <div class="layui-input-block">
+                        <input id="createDate" name="createDate" htmlEscape="false"  value="<fmt:formatDate value="${businessSignatureInfo.createDate}" pattern="yyyy-MM-dd"/>" readonly="readonly"  class="form-control judgment layui-input"/>
+                    </div>
+                </div>
+
+                <div class="layui-item layui-col-sm12 lw7 with-textarea">
+                    <label class="layui-form-label ">备注:</label>
+                    <div class="layui-input-block">
+                        <form:textarea placeholder="请输入备注" path="remarks" htmlEscape="false" rows="4"  maxlength="255"  class="form-control "/>
+                    </div>
+                </div>
+            </div>
+
+            <div class="form-group layui-row">
+                <div class="form-group-label"><h2><span class="require-item">*</span>业务用章申请附件信息</h2></div>
+                <div class="layui-item nav-btns">
+                    <a id="attachment_btn" class="nav-btn nav-btn-add" title="添加附件"><i class="fa fa-plus"></i>&nbsp;添加附件</a>
+                    <a class="nav-btn nav-btn-export" title="下载业务用章承诺书模板"  onclick="window.location.href='${ctx}/businessSignature/businessSignature/downloadTemplate';"><i class="fa fa-download"></i>&nbsp;下载承诺书模板</a>
+                    <a class="nav-btn nav-btn-export" title="下载印章刻制申请表模板"  onclick="window.location.href='${ctx}/businessSignature/businessSignature/downloadApplicationTemplate';"><i class="fa fa-download"></i>&nbsp;下载申请表模板</a>
+                </div>
+                <div id="addFile_attachment" style="display: none" class="upload-progress">
+                    <span id="fileName_attachment"></span>
+                    <b><span id="baifenbi_attachment"></span></b>
+                    <div class="progress">
+                            <%--进度条--%>
+                        <div id="jindutiao_attachment" class="progress-bar" style="width: 0%" aria-valuenow="0">
+                        </div>
+                    </div>
+                </div>
+                <input id="attachment_file" type="file" name="attachment_file" multiple="multiple"
+                       style="display: none;" onChange="if(this.value)insertTitle(this.value);"/>
+                <span id="attachment_title"></span>
+                <div class="layui-item layui-col-xs12" style="padding:0 16px;">
+                    <table id="upTable" class="table table-bordered table-condensed details">
+                        <thead>
+                        <tr>
+                                <%-- <th>序号</th>--%>
+                            <th>文件</th>
+                            <th>上传人</th>
+                            <th>上传时间</th>
+                            <th width="200px">操作</th>
+                        </tr>
+                        </thead>
+                        <tbody id="file_attachment">
+                        <c:forEach items="${businessSignatureInfo.workAttachments}" var="workClientAttachment"
+                                   varStatus="status">
+                            <tr>
+                                    <%-- <td>${status.index + 1}</td>--%>
+                                <c:choose>
+                                    <c:when test="${businessSignatureInfo.uploadMode == 2}">
+                                        <c:choose>
+                                            <c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpg')
+                                                   or fn:containsIgnoreCase(workClientAttachment.attachmentName,'png')
+                                                   or fn:containsIgnoreCase(workClientAttachment.attachmentName,'gif')
+                                                   or fn:containsIgnoreCase(workClientAttachment.attachmentName,'bmp')
+                                                   or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpeg')}">
+                                                <td><img src="${workClientAttachment.temporaryUrl}" width="50" height="50" onclick="openDialogView('预览','${ctx}/sys/picturepreview/picturePreview?url=${workClientAttachment.temporaryUrl}','90%','90%')" alt="${workClientAttachment.attachmentName}">
+                                            </c:when>
+                                            <c:otherwise>
+                                                <c:choose>
+                                                    <c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'pdf')}">
+                                                        <td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.temporaryUrl}',1)">${workClientAttachment.attachmentName}</a></td>
+                                                    </c:when>
+                                                    <c:otherwise>
+                                                        <c:choose>
+                                                            <c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'rar')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'zip')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jar')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'7z')}">
+                                                                <td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.temporaryUrl}',3)">${workClientAttachment.attachmentName}</a></td>
+                                                            </c:when>
+                                                            <c:otherwise>
+                                                                <td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.temporaryUrl}',2)">${workClientAttachment.attachmentName}</a></td>
+                                                            </c:otherwise>
+                                                        </c:choose>
+                                                    </c:otherwise>
+                                                </c:choose>
+                                            </c:otherwise>
+                                        </c:choose>
+                                    </c:when>
+                                    <c:otherwise>
+                                        <c:choose>
+                                            <c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpg')
+                                             or fn:containsIgnoreCase(workClientAttachment.attachmentName,'png')
+                                             or fn:containsIgnoreCase(workClientAttachment.attachmentName,'gif')
+                                             or fn:containsIgnoreCase(workClientAttachment.attachmentName,'bmp')
+                                             or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpeg')}">
+                                                <td><img src="${workClientAttachment.url}" width="50" height="50" onclick="openDialogView('预览','${ctx}/sys/picturepreview/picturePreview?url=${workClientAttachment.url}','90%','90%')" alt="${workClientAttachment.attachmentName}">
+                                            </c:when>
+                                            <c:otherwise>
+                                                <c:choose>
+                                                    <c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'pdf')}">
+                                                        <td><a class="attention-info" href="javascript:void(0)"
+                                                               onclick="openPreview('${workClientAttachment.url}',1)">${workClientAttachment.attachmentName}</a>
+                                                        </td>
+                                                    </c:when>
+                                                    <c:otherwise>
+                                                        <c:choose>
+                                                            <c:when test="${businessSignatureInfo.uploadMode == 2}">
+                                                                <c:choose>
+                                                                    <c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpg')
+                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'png')
+                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'gif')
+                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'bmp')
+                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpeg')}">
+                                                                        <td><img src="${workClientAttachment.temporaryUrl}" width="50" height="50" onclick="openDialogView('预览','${ctx}/sys/picturepreview/picturePreview?url=${workClientAttachment.temporaryUrl}','90%','90%')" alt="${workClientAttachment.attachmentName}">
+                                                                    </c:when>
+                                                                    <c:otherwise>
+                                                                        <c:choose>
+                                                                            <c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'pdf')}">
+                                                                                <td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.temporaryUrl}',1)">${workClientAttachment.attachmentName}</a></td>
+                                                                            </c:when>
+                                                                            <c:otherwise>
+                                                                                <c:choose>
+                                                                                    <c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'rar')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'zip')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jar')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'7z')}">
+                                                                                        <td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.temporaryUrl}',3)">${workClientAttachment.attachmentName}</a></td>
+                                                                                    </c:when>
+                                                                                    <c:otherwise>
+                                                                                        <td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.temporaryUrl}',2)">${workClientAttachment.attachmentName}</a></td>
+                                                                                    </c:otherwise>
+                                                                                </c:choose>
+                                                                            </c:otherwise>
+                                                                        </c:choose>
+                                                                    </c:otherwise>
+                                                                </c:choose>
+                                                            </c:when>
+                                                            <c:otherwise>
+                                                                <c:choose>
+                                                                    <c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpg')
+                                                   or fn:containsIgnoreCase(workClientAttachment.attachmentName,'png')
+                                                   or fn:containsIgnoreCase(workClientAttachment.attachmentName,'gif')
+                                                   or fn:containsIgnoreCase(workClientAttachment.attachmentName,'bmp')
+                                                   or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpeg')}">
+                                                                        <td><img src="${workClientAttachment.url}" width="50" height="50" onclick="openDialogView('预览','${ctx}/sys/picturepreview/picturePreview?url=${workClientAttachment.url}','90%','90%')" alt="${workClientAttachment.attachmentName}">
+                                                                    </c:when>
+                                                                    <c:otherwise>
+                                                                        <c:choose>
+                                                                            <c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'pdf')}">
+                                                                                <td><a href="javascript:void(0)" onclick="openPreview('${workClientAttachment.url}',1)">${workClientAttachment.attachmentName}</a></td>
+                                                                            </c:when>
+                                                                            <c:otherwise>
+                                                                                <c:choose>
+                                                                                    <c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'rar')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'zip')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jar')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'7z')}">
+                                                                                        <td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.url}',3)">${workClientAttachment.attachmentName}</a></td>
+                                                                                    </c:when>
+                                                                                    <c:otherwise>
+                                                                                        <td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.url}',2)">${workClientAttachment.attachmentName}</a></td>
+                                                                                    </c:otherwise>
+                                                                                </c:choose>
+                                                                            </c:otherwise>
+                                                                        </c:choose>
+                                                                    </c:otherwise>
+                                                                </c:choose>
+                                                            </c:otherwise>
+                                                        </c:choose>
+                                                    </c:otherwise>
+                                                </c:choose>
+                                            </c:otherwise>
+                                        </c:choose>
+                                    </c:otherwise>
+                                </c:choose>
+
+
+
+                                <td>${workClientAttachment.createBy.name}</td>
+                                <td><fmt:formatDate value="${workClientAttachment.createDate}" type="both"/></td>
+                                <td class="op-td">
+                                    <div class="op-btn-box">
+
+                                            <%--附件下载删除--%>
+                                        <c:choose>
+                                            <c:when test="${businessSignatureInfo.uploadMode == 2}">
+                                                <c:choose>
+                                                    <c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'pdf')}">
+                                                        <a href="${workClientAttachment.temporaryUrl}" target="_blank" class="op-btn op-btn-download"><i class="fa fa-download"></i>&nbsp;下载</a>
+                                                    </c:when>
+                                                    <c:otherwise>
+                                                        <a href="${workClientAttachment.temporaryUrl}" class="op-btn op-btn-download"><i class="fa fa-download"></i>&nbsp;下载</a>
+                                                    </c:otherwise>
+                                                </c:choose>
+                                            </c:when>
+                                            <c:otherwise>
+                                                <a href="javascript:location.href='${ctx}/workfullmanage/workFullManage/downLoadAttach?file='+encodeURIComponent('${workClientAttachment.url}');" class="op-btn op-btn-download"><i class="fa fa-download"></i>&nbsp;下载</a>
+                                            </c:otherwise>
+                                        </c:choose>
+                                        <c:if test="${workClientAttachment.createBy.id eq fns:getUser().id}">
+                                            <a href="javascript:void(0)"
+                                               onclick="deleteFileFromAliyun(this,'${ctx}/sys/workattachment/deleteFileFromAliyun?url=${workClientAttachment.url}&id=${workClientAttachment.id}&type=2','addFile')"
+                                               class="op-btn op-btn-delete"><i class="fa fa-trash"></i>&nbsp;删除</a>
+                                        </c:if>
+                                        <c:if test="${workClientAttachment.collectFlag != 1}">
+                                            <a href="javascript:void(0)" onclick="collectingAccessory(this,'${ctx}/projectAccessory/projectAccessory/saveCollectAccessory','${workClientAttachment.url}','${workClientAttachment.createBy.id}','${workClientAttachment.fileSize}')" class="op-btn layui-btn-warm" >&nbsp;收藏</a>
+                                        </c:if>
+                                    </div>
+                                </td>
+                            </tr>
+                        </c:forEach>
+                        </tbody>
+                    </table>
+                </div>
+            </div>
+
+            <div class="form-group layui-row page-end"></div>
+        </form:form>
+    </div>
+</div>
+</body>
+</html>

+ 459 - 0
src/main/webapp/webpage/modules/signatureManagement/businessSignature/BusinessSignatureList.jsp

@@ -0,0 +1,459 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+    <title>业务用章申请</title>
+    <meta name="decorator" content="default"/>
+    <script type="text/javascript" src="${ctxStatic}/layui/layuidown.js"></script>
+    <link rel='stylesheet' type="text/css" href="${ctxStatic}/layui/layuidown.css"/>
+    <%--<script src="${ctxStatic}/layer-v2.3/laydate/laydate.js"></script>--%>
+    <script type="text/javascript">
+        $(document).ready(function() {
+            layui.use(['dropdown', 'util', 'layer'], function () {
+                var form = layui.form;
+            })
+
+            //搜索框收放
+            $('#moresee').click(function(){
+                if($('#moresees').is(':visible'))
+                {
+                    $('#moresees').slideUp(0,resizeListWindow2);
+                    $('#moresee i').removeClass("glyphicon glyphicon-menu-up").addClass("glyphicon glyphicon-menu-down");
+                }else{
+                    $('#moresees').slideDown(0,resizeListWindow2);
+                    $('#moresee i').removeClass("glyphicon glyphicon-menu-down").addClass("glyphicon glyphicon-menu-up");
+                }
+            });
+            laydate.render({
+                elem: '#beginDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus', //响应事件。如果没有传入event,则按照默认的click
+                type : 'date'
+                , trigger: 'click'
+            });
+            laydate.render({
+                elem: '#endDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus', //响应事件。如果没有传入event,则按照默认的click
+                type : 'date'
+                , trigger: 'click'
+            });
+        });
+
+        function reset() {
+            $("#searchForm").resetForm();
+        }
+
+        function openDialog(title,url,width,height,target) {
+
+            if (navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)) {//如果是移动端,就使用自适应大小弹窗
+                width = 'auto';
+                height = 'auto';
+            } else {//如果是PC端,根据用户设置的width和height显示。
+
+            }
+
+            top.layer.open({
+                type: 2,
+                area: [width, height],
+                title: title,
+                maxmin: true, //开启最大化最小化按钮
+                content: url,
+                skin: 'three-btns',
+                btn: ['送审', '暂存', '关闭'],
+                btn1: function(index, layero){
+                    var body = top.layer.getChildFrame('body', index);
+                    var iframeWin = layero.find('iframe')[0]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
+                    var inputForm = body.find('#inputForm');
+                    var top_iframe;
+                    if(target){
+                        top_iframe = target;//如果指定了iframe,则在改frame中跳转
+                    }else{
+                        top_iframe = top.getActiveTab().attr("name");//获取当前active的tab的iframe
+                    }
+                    inputForm.attr("target",top_iframe);//表单提交成功后,从服务器返回的url在当前tab中展示
+                    if(iframeWin.contentWindow.doSubmit(1) ){
+                        // top.layer.close(index);//关闭对话框。
+                        setTimeout(function(){top.layer.close(index)}, 100);//延时0.1秒,对应360 7.1版本bug
+                    }
+                },
+                btn2:function(index,layero){
+                    var body = top.layer.getChildFrame('body', index);
+                    var iframeWin = layero.find('iframe')[0]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
+                    var inputForm = body.find('#inputForm');
+                    var top_iframe;
+                    if(target){
+                        top_iframe = target;//如果指定了iframe,则在改frame中跳转
+                    }else{
+                        top_iframe = top.getActiveTab().attr("name");//获取当前active的tab的iframe
+                    }
+                    inputForm.attr("target",top_iframe);//表单提交成功后,从服务器返回的url在当前tab中展示
+                    if(iframeWin.contentWindow.doSubmit(2) ){
+                        // top.layer.close(index);//关闭对话框。
+                        setTimeout(function(){top.layer.close(index)}, 100);//延时0.1秒,对应360 7.1版本bug
+                    }else {
+                        return false;
+                    }
+                },
+                btn3: function (index) {
+                }
+            });
+        }
+        //打开对话框(查看)
+        function openDialogReportView(title,url,id,width,height){
+
+
+            if(navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)){//如果是移动端,就使用自适应大小弹窗
+                width='auto';
+                height='auto';
+            }else{//如果是PC端,根据用户设置的width和height显示。
+
+            }
+            $.ajax({
+                async: false,
+                url: "${ctx}/ruralProject/ruralCostProjectMessage/getReportExist?id="+id,
+                dataType: "json",
+                success: function (data) {
+                    if(data.success){
+                        top.layer.open({
+                            type: 2,
+                            skin: 'one-btn',
+                            area: [width, height],
+                            title: title,
+                            maxmin: true, //开启最大化最小化按钮
+                            content: url ,
+                            btn: ['关闭'],
+                            cancel: function(index){
+                            }
+                        });
+                    }else{
+                        top.layer.msg("该业务用章申请信息已删除!", {icon: 0});
+                        window.location.reload();
+                    }
+                }
+            });
+
+        }
+        function openDialogre(title,url,width,height,target,buttons) {
+
+            if (navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)) {//如果是移动端,就使用自适应大小弹窗
+                width = 'auto';
+                height = 'auto';
+            } else {//如果是PC端,根据用户设置的width和height显示。
+
+            }
+            var split = buttons.split(",");
+            top.layer.open({
+                type: 2,
+                area: [width, height],
+                title: title,
+                maxmin: true, //开启最大化最小化按钮
+                skin: 'three-btns',
+                content: url,
+                btn: split,
+                btn1: function(index, layero){
+                    var body = top.layer.getChildFrame('body', index);
+                    var iframeWin = layero.find('iframe')[0]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
+                    var inputForm = body.find('#inputForm');
+                    var top_iframe;
+                    if(target){
+                        top_iframe = target;//如果指定了iframe,则在改frame中跳转
+                    }else{
+                        top_iframe = top.getActiveTab().attr("name");//获取当前active的tab的iframe
+                    }
+                    inputForm.attr("target",top_iframe);//表单提交成功后,从服务器返回的url在当前tab中展示
+                    if(iframeWin.contentWindow.doSubmit(1) ){
+                        // top.layer.close(index);//关闭对话框。
+                        setTimeout(function(){top.layer.close(index)}, 100);//延时0.1秒,对应360 7.1版本bug
+                    }
+                },
+                btn2:function(index,layero){
+                    if(split.length==2){return}
+                    var body = top.layer.getChildFrame('body', index);
+                    var iframeWin = layero.find('iframe')[0]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
+                    var inputForm = body.find('#inputForm');
+                    var top_iframe;
+                    if(target){
+                        top_iframe = target;//如果指定了iframe,则在改frame中跳转
+                    }else{
+                        top_iframe = top.getActiveTab().attr("name");//获取当前active的tab的iframe
+                    }
+                    inputForm.attr("target",top_iframe);//表单提交成功后,从服务器返回的url在当前tab中展示
+                    if(iframeWin.contentWindow.doSubmit(2) ){
+                        // top.layer.close(index);//关闭对话框。
+                        setTimeout(function(){top.layer.close(index)}, 100);//延时0.1秒,对应360 7.1版本bug
+                    }else {
+                        return false;
+                    }
+                },
+                btn3: function (index) {
+                }
+            });
+        }
+        function adminDelete(title,url,width,height,target,id) {
+            if (navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)) {//如果是移动端,就使用自适应大小弹窗
+                width = 'auto';
+                height = 'auto';
+            } else {//如果是PC端,根据用户设置的width和height显示。
+
+            }
+
+            top.layer.open({
+                type: 0,
+                title: title,
+                content: '确定删除这个申请吗?',
+                btn:["确定","取消"],
+                btn1: function (index){
+                    layer.close(index);
+                    $.ajax({
+                        async: false,
+                        url: url,
+                        dataType: "json",
+                        success: function (data) {
+                            if(data.success){
+                                $.ajax({
+                                    async: false,
+                                    url: "${ctx}/businessSignature/businessSignature/adminDelete?id="+id,
+                                    dataType: "json",
+                                    success: function (data) {
+                                        if(data.success){
+                                            top.layer.msg("该申请删除成功!", {icon: 0});
+                                            window.location.reload();
+                                        }else{
+                                            top.layer.msg("该申请删除失败!", {icon: 0});
+                                        }
+                                    }
+                                });
+                            }else{
+                            }
+                        }
+                    });
+                },
+                btn2:function (index) {
+                    layer.close(index);
+
+                }
+            });
+        }
+    </script>
+    <style>
+        body{
+            background-color:transparent;
+            filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#26FFFFFF, endColorstr=#26FFFFFF);
+            color:#ffffff;
+            background-color:rgba(255,255,255,0);
+            height:100%;
+        }
+    </style>
+</head>
+<body>
+<div class="wrapper wrapper-content">
+    <sys:message content="${message}"/>
+    <div class="layui-row">
+        <div class="full-width fl">
+            <div class="layui-row contentShadow shadowLR" id="queryDiv">
+                <form:form id="searchForm" modelAttribute="businessSignatureInfo" action="${ctx}/businessSignature/businessSignature/" method="post" class="form-inline">
+                    <input id="pageNo" name="pageNo" type="hidden" value="${page.pageNo}"/>
+                    <input id="pageSize" name="pageSize" type="hidden" value="${page.pageSize}"/>
+                    <input id="toflag" name="toflag" type="hidden" value="1"/>
+                    <table:sortColumn id="orderBy" name="orderBy" value="${page.orderBy}" callback="sortOrRefresh();"/><!-- 支持排序 -->
+                    <div class="commonQuery lw6">
+                        <div class="layui-item query athird">
+                            <label class="layui-form-label">印章名称:</label>
+                            <div class="layui-input-block">
+                                <form:input path="name" htmlEscape="false" maxlength="64"  class=" form-control  layui-input"/>
+                            </div>
+                        </div>
+                        <div class="layui-item query athird">
+                            <label class="layui-form-label">使用场景:</label>
+                            <div class="layui-input-block readOnlyFFF">
+                                <form:select placeholder="请选择" path="useType" class="form-control editable-select layui-input" id="attachmentProjectSort" value="${useType}">
+                                    <form:option value=""/>
+                                    <form:options items="${fns:getMainDictList('businessSignature')}" itemLabel="label" itemValue="value" htmlEscape="false"/>
+                                </form:select>
+                            </div>
+                        </div>
+                        <div class="layui-item athird">
+                            <div class="input-group">
+                                <a href="#" id="moresee"><i class="glyphicon glyphicon-menu-down"></i></a>
+                                <div class="layui-btn-group search-spacing">
+                                    <button id="searchQuery" class="layui-btn layui-btn-sm layui-bg-blue" onclick="search()">查询</button>
+                                    <button id="searchReset" class="layui-btn layui-btn-sm" onclick="resetSearch()">重置</button>
+                                </div>
+                            </div>
+                        </div>
+                        <div style="    clear:both;"></div>
+                    </div>
+                    <div id="moresees" style="clear:both;display:none;" class="lw6">
+
+                        <div class="layui-item query athird ">
+                            <label class="layui-form-label">申请人:</label>
+                            <div class="layui-input-block with-icon">
+                                <sys:inquireselectUserNotReadolny id="createBy" name="createBy.id" value="${electronicSignatureInfo.createBy.id}" labelName="createBy.name" labelValue="${electronicSignatureInfo.createBy.name}" cssStyle="background-color: #fff"
+                                                                  title="登记人" url="/sys/office/treeDataAll?type=3" cssClass="form-control layui-input" allowClear="true" notAllowSelectParent="true"/>
+                            </div>
+                        </div>
+                        <div class="layui-item query athird">
+                            <label class="layui-form-label">申请部门:</label>
+                            <div class="layui-input-block with-icon">
+                                <sys:treeselectMoHu id="officeId" name="office.id" value="${electronicSignatureInfo.office.id}" labelName="office.name" labelValue="${electronicSignatureInfo.office.name}"
+                                                    title="部门" url="/sys/office/treeDataAll?type=2" cssClass="form-control layui-input" allowClear="true" notAllowSelectParent="false"/>
+                            </div>
+                        </div>
+                        <div class="layui-item query athird ">
+                            <label class="layui-form-label">申请时间:</label>
+                            <div class="layui-input-block readOnlyFFF">
+                                <input id="beginDate" name="beginDate" placeholder="开始时间" type="text" readonly="readonly" maxlength="20" class="laydate-icondate form-control layer-date layui-input laydate-icon query-group"
+                                       value="<fmt:formatDate value="${electronicSignatureInfo.beginDate}" pattern="yyyy-MM-dd"/>"/>
+                                </input>
+                                <span class="group-sep">-</span>
+                                <input id="endDate" name="endDate" placeholder="结束时间" type="text" readonly="readonly" maxlength="20" class="laydate-icondate form-control layer-date layui-input laydate-icon query-group"
+                                       value="<fmt:formatDate value="${electronicSignatureInfo.endDate}" pattern="yyyy-MM-dd"/>"/>
+                                </input>
+                            </div>
+                        </div>
+                        <div class="layui-item query athird ">
+                            <label class="layui-form-label">状态:</label>
+                            <div class="layui-input-block">
+                                <form:select path="status" class=" form-control  simple-select">
+                                    <form:option value="" label=""/>
+                                    <form:options items="${fns:getRuralDictList('rural_project_audit_state')}" itemLabel="label" itemValue="value" htmlEscape="false"/>
+                                </form:select>
+                            </div>
+                        </div>
+                        <div style="clear:both;"></div>
+                    </div>
+                </form:form>
+            </div>
+        </div>
+        <div class="full-width fl">
+            <div class="layui-form contentDetails contentShadow shadowLBR">
+                <div class="nav-btns">
+                    <div class="layui-btn-group">
+                        <shiro:hasPermission name="businessSignature:businessSignature:add">
+                            <table:addRow url="${ctx}/businessSignature/businessSignature/form" title="业务用章申请"></table:addRow><!-- 增加按钮 -->
+                        </shiro:hasPermission>
+                        <button class="layui-btn layui-btn-sm" data-toggle="tooltip" data-placement="left" onclick="sortOrRefresh()" title="刷新"> 刷新</button>
+                    </div>
+                    <div style="clear: both;"></div>
+                </div>
+                <table class="oa-table layui-table" id="contentTable1"></table>
+
+                <!-- 分页代码 -->
+                <table:page page="${page}"></table:page>
+                <div style="clear: both;"></div>
+            </div>
+        </div>
+    </div>
+</div>
+
+<script>
+
+    layui.use('table', function(){
+        layui.table.render({
+            limit:${ page.pageSize }
+            ,id:"checkboxTable"
+            ,elem: '#contentTable1'
+            ,page: false
+            ,cols: [[
+                /*{checkbox: true, fixed: true},*/
+                {field:'index',align:'center', title: '序号',width:60}
+                /*,{field:'number',align:'center', title: '申请编号',  width:160}*/
+                ,{field:'name',align:'center', title: '印章名称',minWidth:200,templet:function(d){
+                        return "<a class=\"attention-info\" title=\"" + d.name + "\" href=\"javascript:void(0);\" onclick=\"openDialogView('查看申请', '${ctx}/businessSignature/businessSignature/view?id=" + d.id +"','95%', '95%')\">" + d.name + "</a>";
+                    }}
+
+                ,{field:'useType',align:'center', title: '使用场景',  width:200}
+                ,{field:'createName', align:'center',title: '申请人', width:100,templet:function(d){
+                        return "<span title=\"" + d.createName + "\">" + d.createName + "</span>";
+                    }}
+                ,{field:'createDate',align:'center', title: '申请日期',  width:100}
+                ,{align:'center', title: '状态',  width:100,templet:function(d){
+                        var st = getruralProjectState(d.status);
+                        if(st.action)
+                            var xml ="<span onclick=\"openDialogView('流程追踪', '${ctx}/businessSignature/businessSignature/getProcess?id=" + d.id + "','95%','95%')\" class=\"status-label status-label-" + st.label + "\" >" + st.status + "</span>";
+                        else
+                            var xml = "<span style=\"cursor:default;\" class=\"status-label status-label-" + st.label + "\" >" + st.status + "</span>";
+                        return xml;
+                    }}
+                ,{field:'op',align:'center',title:"操作",width:240,templet:function(d){
+                        ////对操作进行初始化
+                        var xml="<div class=\"layui-btn-group\">";
+                        if(d.canedit1 != undefined && d.canedit1 =="1")
+                        {
+                            xml+="<a href=\"#\" onclick=\"openDialogre('修改申请', '${ctx}/businessSignature/businessSignature/form?id=" + d.id +"','95%', '95%','','送审,暂存,关闭')\" class=\"layui-btn layui-btn-xs layui-bg-green\" > 修改</a>";
+                        }
+                        if(d.canedit2 != undefined && d.canedit2 =="1")
+                        {
+                            xml+="<a href=\"#\" onclick=\"openDialogre('调整申请', '${ctx}/businessSignature/businessSignature/modify?id=" + d.id + "','95%', '95%','','送审,关闭')\" class=\"layui-btn layui-btn-xs layui-bg-green\" > 修改</a>";
+                        }
+                        if(d.canrecall != undefined && d.canrecall =="1")
+                        {
+                            xml+="<a href=\"#\" onclick=\"openDialogre('调整申请', '${ctx}/businessSignature/businessSignature/form?id=" + d.id + "','95%', '95%','','送审,关闭')\" class=\"layui-btn layui-btn-xs layui-bg-green\" > 修改</a>";
+                        }
+                        if(d.candel != undefined && d.candel =="1")
+                        {
+                            xml+="<a href=\"${ctx}/businessSignature/businessSignature/delete?id=" + d.id + "\" onclick=\"return confirmx('确认要删除该电子用章申请吗?', this.href)\" class=\"layui-btn layui-btn-xs layui-bg-red\"> 删除</a>";
+                        }
+                        if(d.cancancel != undefined && d.cancancel =="1")
+                        {
+                            xml+="<a href=\"${ctx}/businessSignature/businessSignature/revoke?id=" + d.id + "&processInstanceId=" + d.procId + "&status="+d.status+"\" onclick=\"return confirmx('确认要撤回该电子用章申请审批吗?', this.href)\" class=\"layui-btn layui-btn-xs layui-bg-red\" > 撤回</a>";
+                        }
+
+                        /*if(d.deleteAdmin != undefined && d.deleteAdmin =="1")
+                        {
+                            xml+="<a href=\"#\" onclick=\"openDialogre('修改电子用章申请', '${ctx}/businessSignature/businessSignature/adminModify?id=" + d.id + "','95%', '95%','','提交,关闭')\" class=\"layui-btn layui-btn-xs layui-bg-green\" > 修改</a>";
+                            xml+="<a href=\"#\" onclick=\"adminDelete('管理员删除', '${ctx}/businessSignature/businessSignature/queryProjectIsUse?id=" + d.id +"','95%', '95%','','"+ d.id + "')\" class=\"layui-btn layui-btn-xs layui-bg-green\" > 删除</a>";
+
+                        }*/
+                        xml+="</div>"
+                        return xml;
+
+                    }}
+            ]]
+            ,data: [
+                <c:if test="${ not empty page.list}">
+                <c:forEach items="${page.list}" var="electronicSignatureInfo" varStatus="index">
+                <c:if test="${index.index != 0}">,</c:if>
+                {
+                    "index":"${index.index+1}"
+                    ,"id":"${electronicSignatureInfo.id}"
+                    ,"name":"<c:out value="${electronicSignatureInfo.name}" escapeXml="false"/>"
+                    ,"useType":"${fns:getMainDictLabels(electronicSignatureInfo.useType,',','businessSignature', '')}"
+                    ,"createDate":"<fmt:formatDate value="${electronicSignatureInfo.createDate}" pattern="yyyy-MM-dd"/>"
+                    ,"status":"${electronicSignatureInfo.status}"
+                    ,"createName":"<c:out value="${electronicSignatureInfo.createBy.name}" escapeXml="false"/>"
+                    <c:choose><c:when test="${flag == '1' or fns:getUser().id == electronicSignatureInfo.createBy.id}">
+                    <shiro:hasPermission name="businessSignature:businessSignature:del">,"candel":	<c:choose><c:when test="${(electronicSignatureInfo.status == 1 or electronicSignatureInfo.status == 3 or electronicSignatureInfo.status == 4) && fns:getUser().id == electronicSignatureInfo.createBy.id}">"1"</c:when><c:otherwise>"0"</c:otherwise></c:choose></shiro:hasPermission>
+                    <shiro:hasPermission name="businessSignature:businessSignature:edit">,"canedit1":	<c:choose><c:when test="${electronicSignatureInfo.status == 1 && fns:getUser().id == electronicSignatureInfo.createBy.id }">"1"</c:when><c:otherwise>"0"</c:otherwise></c:choose>
+                    ,"canedit2":<c:choose><c:when test="${electronicSignatureInfo.status == 4 && fns:getUser().id == electronicSignatureInfo.createBy.id}">"1"</c:when><c:otherwise>"0"</c:otherwise></c:choose>
+                    ,"canrecall":<c:choose><c:when test="${electronicSignatureInfo.status == 3 && fns:getUser().id == electronicSignatureInfo.createBy.id}">"1"</c:when><c:otherwise>"0"</c:otherwise></c:choose>
+                    </shiro:hasPermission>
+                    ,"cancancel":<c:choose><c:when test="${electronicSignatureInfo.status == 2 && fns:getUser().id == electronicSignatureInfo.createBy.id}">"1"</c:when><c:otherwise>"0"</c:otherwise></c:choose>
+
+                    </c:when>
+                    <c:otherwise>
+                    ,"candel":"0"
+                    ,"canedit1":"0"
+                    ,"canedit2":"0"
+                    ,"canrecall":"0"
+                    ,"cancancel":"0"
+                    /*,"deleteAdmin":"0"*/
+                    </c:otherwise>
+                    </c:choose>
+                }
+                </c:forEach>
+                </c:if>
+            ]
+        });
+    })
+
+    resizeListTable();
+    $("a").on("click",addLinkVisied);
+</script>
+<script>
+    resizeListWindow2();
+    $(window).resize(function(){
+        resizeListWindow2();
+    });
+</script>
+</body>
+</html>

+ 429 - 0
src/main/webapp/webpage/modules/signatureManagement/businessSignature/BusinessSignatureModify.jsp

@@ -0,0 +1,429 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+    <title>项目管理</title>
+    <meta name="decorator" content="default"/>
+    <script type="text/javascript" src="${ctxStatic}/helloweba_editable-select/jquery.editable-select.min.js"></script>
+    <script type="text/javascript" src="${ctxStatic}/iCheck/icheck.min.js"></script>
+    <script type="text/javascript" src="${ctxStatic}/layui/layuidown.js"></script>
+    <script src="${ctxStatic}/common/html/js/script.js"></script>
+    <link rel='stylesheet' type="text/css" href="${ctxStatic}/layui/layuidown.css"/>
+    <link rel='stylesheet' type="text/css" href="${ctxStatic}/helloweba_editable-select/jquery.editable-select.min.css"/>
+    <style>
+        #projectDesc-error{
+            left:0;
+            top:82px;
+        }
+        .layui-layer-dialog{
+            background: red;
+        }
+        td input{
+            margin-left:-10px !important;
+            height: 42px !important;
+        }
+        .disables {
+            pointer-events: none;
+        }
+        .notDisables {
+            pointer-events: all;
+        }
+        .forbidden{
+            background-color:#c2c2c2;
+        }
+
+        .notForbidden{
+            background-color:#3ca2e0;
+        }
+        .spanzj{
+            color: red;
+            font-size: 12px;
+            padding-left: 10px;
+        }
+    </style>
+    <script type="text/javascript">
+        var validateForm;
+        var isMasterClient = true;//是否是委托方
+        var clientCount = 0;
+        function doSubmit(i){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+            if(validateForm.form()){
+                if(i==2){
+                    $("#inputForm").attr("action","${ctx}/dailyOfficeWork/dailyOfficeWorkSignature/tstore");
+                }else{
+                    var flag = $("#flagFile").val();
+                    if(flag == 'false'){
+                        top.layer.msg('附件信息未上传完成,请等待!', {icon: 0});
+                        return;
+                    }
+                    var length = $("#file_attachment").find("tr").length ;
+                    if(length == 0){
+                        top.layer.msg("请上传签章附件", {icon: 0});
+                        return;
+                    }
+                    var flags=judgment();
+                    if (!flags){
+                        return flags;
+                    }
+                }
+                $("#inputForm").submit();
+                return true;
+            }else{
+                parent.layer.msg("信息未填写完整!", {icon: 5});
+            }
+            return false;
+        }
+        $(document).ready(function() {
+            layui.use(['form', 'layer'], function () {
+                var form = layui.form;
+            });
+
+            $("#attachment_btn").click(function () {
+                $("#attachment_file").click();
+            });
+            var radioVal ;
+            validateForm = $("#inputForm").validate({
+                submitHandler: function(form){
+                    loading('正在提交,请稍等...');
+                    form.submit();
+                },
+                errorContainer: "#messageBox",
+                errorPlacement: function(error, element) {
+                    $("#messageBox").text("输入有误,请先更正。");
+                    if (element.is(":checkbox")||element.is(":radio")||element.parent().is(".input-append")){
+                        error.appendTo(element.parent().parent());
+                    } else {
+                        error.insertAfter(element);
+                    }
+                }
+            });
+
+        });
+
+        function insertTitle(tValue){
+            $("#flagFile").val(false);
+            var files = $("#attachment_file")[0].files;
+            for(var i = 0;i<files.length;i++) {
+                var file = files[i];
+                var attachmentId = $("#id").val();
+                var attachmentFlag = "193";
+                var timestamp=new Date().getTime();
+
+                var storeAs = "businessSignature";
+                var uploadPath="http://gangwan-app.oss-cn-hangzhou.aliyuncs.com/"+storeAs;/*将这段字符串存到数据库即可*/
+                var divId = "_attachment";
+                $("#addFile"+divId).show();
+                multipartUploadWithSts(storeAs, file,attachmentId,attachmentFlag,uploadPath,divId,0);
+            }
+        }
+
+
+        function addFile() {
+            $("#attachment_file").click();
+        }
+
+        function addRow(list, idx, tpl, row){
+            bornTemplete(list, idx, tpl, row, idx);
+        }
+
+        function bornTemplete(list, idx, tpl, row, idx1){
+            $(list).append(Mustache.render(tpl, {
+                idx: idx, delBtn: true, row: row,
+                order:idx1 + 1
+            }));
+            $(list+idx).find("select").each(function(){
+                $(this).val($(this).attr("data-value"));
+            });
+            $(list+idx).find("input[type='checkbox'], input[type='radio']").each(function(){
+                var ss = $(this).attr("data-value").split(',');
+                for (var i=0; i<ss.length; i++){
+                    if($(this).val() == ss[i]){
+                        $(this).attr("checked","checked");
+                    }
+                }
+            });
+        }
+        function delRow(obj, prefix){
+            var id = $(prefix+"_id");
+            var delFlag = $(prefix+"_delFlag");
+            $(obj).parent().parent().remove();
+        }
+    </script>
+</head>
+<body>
+<div class="single-form">
+    <div class="container">
+        <sys:message content="${message}"/>
+        <form:form id="inputForm" modelAttribute="businessSignatureInfo" action="${ctx}/businessSignature/businessSignature/saveAudit" method="post" class="form-horizontal layui-form ">
+            <form:hidden path="id"/>
+            <form:hidden path="home"/>
+            <form:hidden path="act.taskId"/>
+            <form:hidden path="act.taskName"/>
+            <form:hidden id="taskDefKey" path="act.taskDefKey"/>
+            <form:hidden path="act.procInsId"/>
+            <form:hidden path="act.procDefId"/>
+            <form:hidden path="processInstanceId"/>
+            <form:hidden id="flag" path="act.flag"/>
+            <input type="hidden" id="flagFile" value="">
+
+            <div class="form-group layui-row">
+                <div class="form-group-label"><h2>业务用章申请基础信息</h2></div>
+                <div class="layui-item layui-col-sm6 lw7">
+                    <label class="layui-form-label double-line"><span class="require-item">*</span>业务用章名称:</label>
+                    <div class="layui-input-block">
+                        <form:input path="name" id="name" maxlength="255" htmlEscape="false" placeholder="请输入业务用章名称" class="form-control layui-input required"/>
+                    </div>
+                </div>
+                <%--<div class="layui-item layui-col-sm6 lw7">
+                    <label class="layui-form-label">签章编号:</label>
+                    <div class="layui-input-block">
+                        <div class="input-group">
+                            <form:input path="number" htmlEscape="false" readonly="true" class="form-control layui-input"/>
+                            &lt;%&ndash;<span class="input-group-btn">
+                                <label class="form-status"><c:choose><c:when test="${not empty dailyOfficeWork.projectStatus}">${fns:getDictLabel(dailyOfficeWork.projectStatus, 'audit_state', '')}</c:when><c:otherwise>新添</c:otherwise></c:choose></label>
+                             </span>&ndash;%&gt;
+                        </div>
+                    </div>
+                </div>--%>
+
+                <div class="layui-item layui-col-sm6 lw7">
+                    <label class="layui-form-label"><span class="require-item">*</span>使用场景:</label>
+                    <div class="layui-input-block readOnlyFFF">
+                        <form:select placeholder="请选择" path="useType" class="form-control judgment editable-select layui-input" id="useType" value="${businessSignatureInfo.useType}">
+                            <form:option value=""/>
+                            <form:options items="${fns:getMainDictList('businessSignature')}" itemLabel="label" itemValue="value" htmlEscape="false"/>
+                        </form:select>
+                    </div>
+                </div>
+
+
+
+
+                <div class="layui-item layui-col-sm6 lw7">
+                    <label class="layui-form-label">创建人:</label>
+                    <div class="layui-input-block">
+                        <form:input path="createBy.name" htmlEscape="false"  readonly="true"  class="form-control  layui-input"/>
+                        <form:hidden path="createBy.id" htmlEscape="false"   readonly="true"  class="form-control  layui-input"/>
+                    </div>
+                </div>
+                <div class="layui-item layui-col-sm6 lw7">
+                    <label class="layui-form-label">所属部门:</label>
+                    <div class="layui-input-block">
+                        <form:input path="office.name" htmlEscape="false" id="officeName" class="form-control layui-input" readonly="true"/>
+                    </div>
+                </div>
+                <div class="layui-item layui-col-sm6 lw7">
+                    <label class="layui-form-label">申请日期:</label>
+                    <div class="layui-input-block">
+                        <input id="createDate" name="createDate" htmlEscape="false"  value="<fmt:formatDate value="${businessSignatureInfo.createDate}" pattern="yyyy-MM-dd"/>" readonly="readonly"  class="form-control judgment layui-input"/>
+                    </div>
+                </div>
+
+                <div class="layui-item layui-col-sm12 lw7 with-textarea">
+                    <label class="layui-form-label ">备注:</label>
+                    <div class="layui-input-block">
+                        <form:textarea placeholder="请输入备注" path="remarks" htmlEscape="false" rows="4"  maxlength="255"  class="form-control "/>
+                    </div>
+                </div>
+            </div>
+
+            <div class="form-group layui-row">
+                <div class="form-group-label"><h2><span class="require-item">*</span>业务用章申请附件信息</h2></div>
+                <div class="layui-item nav-btns">
+                    <a id="attachment_btn" class="nav-btn nav-btn-add" title="添加附件"><i class="fa fa-plus"></i>&nbsp;添加附件</a>
+                    <a class="nav-btn nav-btn-export" title="下载业务用章承诺书模板"  onclick="window.location.href='${ctx}/businessSignature/businessSignature/downloadTemplate';"><i class="fa fa-download"></i>&nbsp;下载承诺书模板</a>
+                    <a class="nav-btn nav-btn-export" title="下载印章刻制申请表模板"  onclick="window.location.href='${ctx}/businessSignature/businessSignature/downloadApplicationTemplate';"><i class="fa fa-download"></i>&nbsp;下载申请表模板</a>
+                </div>
+                <div id="addFile_attachment" style="display: none" class="upload-progress">
+                    <span id="fileName_attachment"></span>
+                    <b><span id="baifenbi_attachment"></span></b>
+                    <div class="progress">
+                            <%--进度条--%>
+                        <div id="jindutiao_attachment" class="progress-bar" style="width: 0%" aria-valuenow="0">
+                        </div>
+                    </div>
+                </div>
+                <input id="attachment_file" type="file" name="attachment_file" multiple="multiple"
+                       style="display: none;" onChange="if(this.value)insertTitle(this.value);"/>
+                <span id="attachment_title"></span>
+                <div class="layui-item layui-col-xs12" style="padding:0 16px;">
+                    <table id="upTable" class="table table-bordered table-condensed details">
+                        <thead>
+                        <tr>
+                                <%-- <th>序号</th>--%>
+                            <th>文件</th>
+                            <th>上传人</th>
+                            <th>上传时间</th>
+                            <th width="200px">操作</th>
+                        </tr>
+                        </thead>
+                        <tbody id="file_attachment">
+                        <c:forEach items="${businessSignatureInfo.workAttachments}" var="workClientAttachment"
+                                   varStatus="status">
+                            <tr>
+                                    <%-- <td>${status.index + 1}</td>--%>
+                                <c:choose>
+                                    <c:when test="${businessSignatureInfo.uploadMode == 2}">
+                                        <c:choose>
+                                            <c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpg')
+                                                   or fn:containsIgnoreCase(workClientAttachment.attachmentName,'png')
+                                                   or fn:containsIgnoreCase(workClientAttachment.attachmentName,'gif')
+                                                   or fn:containsIgnoreCase(workClientAttachment.attachmentName,'bmp')
+                                                   or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpeg')}">
+                                                <td><img src="${workClientAttachment.temporaryUrl}" width="50" height="50" onclick="openDialogView('预览','${ctx}/sys/picturepreview/picturePreview?url=${workClientAttachment.temporaryUrl}','90%','90%')" alt="${workClientAttachment.attachmentName}">
+                                            </c:when>
+                                            <c:otherwise>
+                                                <c:choose>
+                                                    <c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'pdf')}">
+                                                        <td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.temporaryUrl}',1)">${workClientAttachment.attachmentName}</a></td>
+                                                    </c:when>
+                                                    <c:otherwise>
+                                                        <c:choose>
+                                                            <c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'rar')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'zip')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jar')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'7z')}">
+                                                                <td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.temporaryUrl}',3)">${workClientAttachment.attachmentName}</a></td>
+                                                            </c:when>
+                                                            <c:otherwise>
+                                                                <td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.temporaryUrl}',2)">${workClientAttachment.attachmentName}</a></td>
+                                                            </c:otherwise>
+                                                        </c:choose>
+                                                    </c:otherwise>
+                                                </c:choose>
+                                            </c:otherwise>
+                                        </c:choose>
+                                    </c:when>
+                                    <c:otherwise>
+                                        <c:choose>
+                                            <c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpg')
+                                             or fn:containsIgnoreCase(workClientAttachment.attachmentName,'png')
+                                             or fn:containsIgnoreCase(workClientAttachment.attachmentName,'gif')
+                                             or fn:containsIgnoreCase(workClientAttachment.attachmentName,'bmp')
+                                             or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpeg')}">
+                                                <td><img src="${workClientAttachment.url}" width="50" height="50" onclick="openDialogView('预览','${ctx}/sys/picturepreview/picturePreview?url=${workClientAttachment.url}','90%','90%')" alt="${workClientAttachment.attachmentName}">
+                                            </c:when>
+                                            <c:otherwise>
+                                                <c:choose>
+                                                    <c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'pdf')}">
+                                                        <td><a class="attention-info" href="javascript:void(0)"
+                                                               onclick="openPreview('${workClientAttachment.url}',1)">${workClientAttachment.attachmentName}</a>
+                                                        </td>
+                                                    </c:when>
+                                                    <c:otherwise>
+                                                        <c:choose>
+                                                            <c:when test="${businessSignatureInfo.uploadMode == 2}">
+                                                                <c:choose>
+                                                                    <c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpg')
+                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'png')
+                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'gif')
+                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'bmp')
+                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpeg')}">
+                                                                        <td><img src="${workClientAttachment.temporaryUrl}" width="50" height="50" onclick="openDialogView('预览','${ctx}/sys/picturepreview/picturePreview?url=${workClientAttachment.temporaryUrl}','90%','90%')" alt="${workClientAttachment.attachmentName}">
+                                                                    </c:when>
+                                                                    <c:otherwise>
+                                                                        <c:choose>
+                                                                            <c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'pdf')}">
+                                                                                <td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.temporaryUrl}',1)">${workClientAttachment.attachmentName}</a></td>
+                                                                            </c:when>
+                                                                            <c:otherwise>
+                                                                                <c:choose>
+                                                                                    <c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'rar')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'zip')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jar')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'7z')}">
+                                                                                        <td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.temporaryUrl}',3)">${workClientAttachment.attachmentName}</a></td>
+                                                                                    </c:when>
+                                                                                    <c:otherwise>
+                                                                                        <td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.temporaryUrl}',2)">${workClientAttachment.attachmentName}</a></td>
+                                                                                    </c:otherwise>
+                                                                                </c:choose>
+                                                                            </c:otherwise>
+                                                                        </c:choose>
+                                                                    </c:otherwise>
+                                                                </c:choose>
+                                                            </c:when>
+                                                            <c:otherwise>
+                                                                <c:choose>
+                                                                    <c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpg')
+                                                   or fn:containsIgnoreCase(workClientAttachment.attachmentName,'png')
+                                                   or fn:containsIgnoreCase(workClientAttachment.attachmentName,'gif')
+                                                   or fn:containsIgnoreCase(workClientAttachment.attachmentName,'bmp')
+                                                   or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpeg')}">
+                                                                        <td><img src="${workClientAttachment.url}" width="50" height="50" onclick="openDialogView('预览','${ctx}/sys/picturepreview/picturePreview?url=${workClientAttachment.url}','90%','90%')" alt="${workClientAttachment.attachmentName}">
+                                                                    </c:when>
+                                                                    <c:otherwise>
+                                                                        <c:choose>
+                                                                            <c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'pdf')}">
+                                                                                <td><a href="javascript:void(0)" onclick="openPreview('${workClientAttachment.url}',1)">${workClientAttachment.attachmentName}</a></td>
+                                                                            </c:when>
+                                                                            <c:otherwise>
+                                                                                <c:choose>
+                                                                                    <c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'rar')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'zip')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jar')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'7z')}">
+                                                                                        <td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.url}',3)">${workClientAttachment.attachmentName}</a></td>
+                                                                                    </c:when>
+                                                                                    <c:otherwise>
+                                                                                        <td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.url}',2)">${workClientAttachment.attachmentName}</a></td>
+                                                                                    </c:otherwise>
+                                                                                </c:choose>
+                                                                            </c:otherwise>
+                                                                        </c:choose>
+                                                                    </c:otherwise>
+                                                                </c:choose>
+                                                            </c:otherwise>
+                                                        </c:choose>
+                                                    </c:otherwise>
+                                                </c:choose>
+                                            </c:otherwise>
+                                        </c:choose>
+                                    </c:otherwise>
+                                </c:choose>
+
+
+
+                                <td>${workClientAttachment.createBy.name}</td>
+                                <td><fmt:formatDate value="${workClientAttachment.createDate}" type="both"/></td>
+                                <td class="op-td">
+                                    <div class="op-btn-box">
+
+                                            <%--附件下载删除--%>
+                                        <c:choose>
+                                            <c:when test="${businessSignatureInfo.uploadMode == 2}">
+                                                <c:choose>
+                                                    <c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'pdf')}">
+                                                        <a href="${workClientAttachment.temporaryUrl}" target="_blank" class="op-btn op-btn-download"><i class="fa fa-download"></i>&nbsp;下载</a>
+                                                    </c:when>
+                                                    <c:otherwise>
+                                                        <a href="${workClientAttachment.temporaryUrl}" class="op-btn op-btn-download"><i class="fa fa-download"></i>&nbsp;下载</a>
+                                                    </c:otherwise>
+                                                </c:choose>
+                                            </c:when>
+                                            <c:otherwise>
+                                                <a href="javascript:location.href='${ctx}/workfullmanage/workFullManage/downLoadAttach?file='+encodeURIComponent('${workClientAttachment.url}');" class="op-btn op-btn-download"><i class="fa fa-download"></i>&nbsp;下载</a>
+                                            </c:otherwise>
+                                        </c:choose>
+                                        <c:if test="${workClientAttachment.createBy.id eq fns:getUser().id}">
+                                            <a href="javascript:void(0)"
+                                               onclick="deleteFileFromAliyun(this,'${ctx}/sys/workattachment/deleteFileFromAliyun?url=${workClientAttachment.url}&id=${workClientAttachment.id}&type=2','addFile')"
+                                               class="op-btn op-btn-delete"><i class="fa fa-trash"></i>&nbsp;删除</a>
+                                        </c:if>
+                                        <c:if test="${workClientAttachment.collectFlag != 1}">
+                                            <a href="javascript:void(0)" onclick="collectingAccessory(this,'${ctx}/projectAccessory/projectAccessory/saveCollectAccessory','${workClientAttachment.url}','${workClientAttachment.createBy.id}','${workClientAttachment.fileSize}')" class="op-btn layui-btn-warm" >&nbsp;收藏</a>
+                                        </c:if>
+                                    </div>
+                                </td>
+                            </tr>
+                        </c:forEach>
+                        </tbody>
+                    </table>
+                </div>
+            </div>
+
+            <div class="form-group layui-row page-end"></div>
+        </form:form>
+    </div>
+</div>
+</body>
+</html>

+ 15 - 0
src/main/webapp/webpage/modules/signatureManagement/businessSignature/BusinessSignatureTask.jsp

@@ -0,0 +1,15 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>流程追踪</title>
+	<meta name="decorator" content="default"/>
+</head>
+<body class="gray-bg">
+<div class="container form layui-form">
+	<act:flowChart procInsId="${processInstanceId}"/>
+	<act:histoicFlow procInsId="${processInstanceId}"/>
+</div>
+</body>
+</html>
+

+ 296 - 0
src/main/webapp/webpage/modules/signatureManagement/businessSignature/BusinessSignatureView.jsp

@@ -0,0 +1,296 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+    <title>项目管理</title>
+    <meta name="decorator" content="default"/>
+    <script type="text/javascript" src="${ctxStatic}/helloweba_editable-select/jquery.editable-select.min.js"></script>
+    <script type="text/javascript" src="${ctxStatic}/iCheck/icheck.min.js"></script>
+    <script type="text/javascript" src="${ctxStatic}/layui/layuidown.js"></script>
+    <script src="${ctxStatic}/common/html/js/script.js"></script>
+    <link rel='stylesheet' type="text/css" href="${ctxStatic}/layui/layuidown.css"/>
+    <link rel='stylesheet' type="text/css" href="${ctxStatic}/helloweba_editable-select/jquery.editable-select.min.css"/>
+    <style>
+        #projectDesc-error{
+            left:0;
+            top:82px;
+        }
+        .layui-layer-dialog{
+            background: red;
+        }
+        td input{
+            margin-left:-10px !important;
+            height: 42px !important;
+        }
+        .disables {
+            pointer-events: none;
+        }
+        .notDisables {
+            pointer-events: all;
+        }
+        .forbidden{
+            background-color:#c2c2c2;
+        }
+
+        .notForbidden{
+            background-color:#3ca2e0;
+        }
+        .spanzj{
+            color: red;
+            font-size: 12px;
+            padding-left: 10px;
+        }
+    </style>
+    <script type="text/javascript">
+        var validateForm;
+        var isMasterClient = true;//是否是委托方
+        var clientCount = 0;
+        function doSubmit(i){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+            return false;
+        }
+        $(document).ready(function() {
+            layui.use(['form', 'layer'], function () {
+                var form = layui.form;
+            });
+
+            $("#attachment_btn").click(function () {
+                $("#attachment_file").click();
+            });
+            var radioVal ;
+            validateForm = $("#inputForm").validate({
+                submitHandler: function(form){
+                    loading('正在提交,请稍等...');
+                    form.submit();
+                },
+                errorContainer: "#messageBox",
+                errorPlacement: function(error, element) {
+                    $("#messageBox").text("输入有误,请先更正。");
+                    if (element.is(":checkbox")||element.is(":radio")||element.parent().is(".input-append")){
+                        error.appendTo(element.parent().parent());
+                    } else {
+                        error.insertAfter(element);
+                    }
+                }
+            });
+
+        });
+
+    </script>
+</head>
+<body>
+<div class="single-form">
+    <div class="container">
+        <sys:message content="${message}"/>
+        <form:form id="inputForm" modelAttribute="businessSignatureInfo" action="${ctx}/businessSignature/businessSignature/view" method="post" class="form-horizontal layui-form ">
+            <form:hidden path="id"/>
+
+            <div class="form-group layui-row">
+                <div class="form-group-label"><h2>业务用章申请基础信息</h2></div>
+                <div class="layui-item layui-col-sm6 lw7">
+                    <label class="layui-form-label double-line"><span class="require-item">*</span>业务用章名称:</label>
+                    <div class="layui-input-block">
+                        <form:input path="name" id="name" maxlength="255" readonly="true" htmlEscape="false" placeholder="请输入业务用章名称" class="form-control layui-input required"/>
+                    </div>
+                </div>
+                <%--<div class="layui-item layui-col-sm6 lw7">
+                    <label class="layui-form-label">签章编号:</label>
+                    <div class="layui-input-block">
+                        <div class="input-group">
+                            <form:input path="number" htmlEscape="false" readonly="true" class="form-control layui-input"/>
+                        </div>
+                    </div>
+                </div>--%>
+
+                <div class="layui-item layui-col-sm6 lw7">
+                    <label class="layui-form-label"><span class="require-item">*</span>使用场景:</label>
+                    <div class="layui-input-block">
+                        <input htmlEscape="false"  readonly="true" class="form-control layui-input" style="background-color: #f1f1f1" value="${businessSignatureInfo.useType}"/>
+                    </div>
+                </div>
+
+                <div class="layui-item layui-col-sm6 lw7">
+                    <label class="layui-form-label">创建人:</label>
+                    <div class="layui-input-block">
+                        <form:input path="createBy.name" htmlEscape="false"  readonly="true"  class="form-control  layui-input"/>
+                        <form:hidden path="createBy.id" htmlEscape="false"   readonly="true"  class="form-control  layui-input"/>
+                    </div>
+                </div>
+                <div class="layui-item layui-col-sm6 lw7">
+                    <label class="layui-form-label">所属部门:</label>
+                    <div class="layui-input-block">
+                        <form:input path="office.name" htmlEscape="false" id="officeName" class="form-control layui-input" readonly="true"/>
+                    </div>
+                </div>
+                <div class="layui-item layui-col-sm6 lw7">
+                    <label class="layui-form-label">申请日期:</label>
+                    <div class="layui-input-block">
+                        <input id="createDate" name="createDate" htmlEscape="false"  value="<fmt:formatDate value="${businessSignatureInfo.createDate}" pattern="yyyy-MM-dd"/>" readonly="readonly"  class="form-control judgment layui-input"/>
+                    </div>
+                </div>
+
+                <div class="layui-item layui-col-sm12 lw7 with-textarea">
+                    <label class="layui-form-label ">备注:</label>
+                    <div class="layui-input-block">
+                        <form:textarea placeholder="请输入备注" path="remarks" readonly="true" htmlEscape="false" rows="4"  maxlength="255"  class="form-control "/>
+                    </div>
+                </div>
+            </div>
+
+            <div class="form-group layui-row">
+                <div class="form-group-label"><h2>业务用章申请附件信息</h2></div>
+                <div class="layui-item layui-col-xs12" style="padding:0 16px;">
+                    <table id="listAttachment" class="table table-bordered table-condensed details">
+                        <thead>
+                        <tr>
+                                <%-- <th>序号</th>--%>
+                            <th>文件预览</th>
+                            <th>上传人</th>
+                            <th>上传时间</th>
+                            <th width="180px">操作</th>
+                        </tr>
+                        </thead>
+                        <tbody id="file_attachment">
+                        <c:forEach items="${businessSignatureInfo.workAttachments}" var = "workClientAttachment" varStatus="status">
+                            <tr>
+                                    <%-- <td>${status.index + 1}</td>--%>
+                                <c:choose>
+                                    <c:when test="${businessSignatureInfo.uploadMode == 2}">
+                                        <c:choose>
+                                            <c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpg')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'png')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'gif')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'bmp')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpeg')}">
+                                                <td><img src="${workClientAttachment.temporaryUrl}" width="50" height="50" onclick="openDialogView('预览','${ctx}/sys/picturepreview/picturePreview?url=${workClientAttachment.temporaryUrl}','90%','90%')" alt="${workClientAttachment.attachmentName}">
+                                            </c:when>
+                                            <c:otherwise>
+                                                <c:choose>
+                                                    <c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'pdf')}">
+                                                        <td><a class="attention-info" href="javascript:void(0)" onclick="preview('预览','${workClientAttachment.temporaryUrl}','90%','90%','1')">${workClientAttachment.attachmentName}</a></td>
+                                                    </c:when>
+                                                    <c:otherwise>
+                                                        <c:choose>
+                                                            <c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'rar')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'zip')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jar')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'7z')}">
+                                                                <td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.temporaryUrl}',3)">${workClientAttachment.attachmentName}</a></td>
+                                                            </c:when>
+                                                            <c:otherwise>
+                                                                <td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.temporaryUrl}',2)">${workClientAttachment.attachmentName}</a></td>
+                                                            </c:otherwise>
+                                                        </c:choose>
+                                                    </c:otherwise>
+                                                </c:choose>
+                                            </c:otherwise>
+                                        </c:choose>
+                                    </c:when>
+                                    <c:otherwise>
+                                        <c:choose>
+                                            <c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpg')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'png')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'gif')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'bmp')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpeg')}">
+                                                <td><img src="${workClientAttachment.url}" width="50" height="50" onclick="openDialogView('预览','${ctx}/sys/picturepreview/picturePreview?url=${workClientAttachment.url}','90%','90%')" alt="${workClientAttachment.attachmentName}">
+                                            </c:when>
+                                            <c:otherwise>
+                                                <c:choose>
+                                                    <c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'pdf')}">
+                                                        <td><a class="attention-info" href="javascript:void(0)" onclick="preview('预览','${workClientAttachment.url}','90%','90%','1')">${workClientAttachment.attachmentName}</a></td>
+                                                    </c:when>
+                                                    <c:otherwise>
+                                                        <c:choose>
+                                                            <c:when test="${businessSignatureInfo.uploadMode == 2}">
+                                                                <c:choose>
+                                                                    <c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpg')
+                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'png')
+                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'gif')
+                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'bmp')
+                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpeg')}">
+                                                                        <td><img src="${workClientAttachment.temporaryUrl}" width="50" height="50" onclick="openDialogView('预览','${ctx}/sys/picturepreview/picturePreview?url=${workClientAttachment.temporaryUrl}','90%','90%')" alt="${workClientAttachment.attachmentName}">
+                                                                    </c:when>
+                                                                    <c:otherwise>
+                                                                        <c:choose>
+                                                                            <c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'pdf')}">
+                                                                                <td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.temporaryUrl}',1)">${workClientAttachment.attachmentName}</a></td>
+                                                                            </c:when>
+                                                                            <c:otherwise>
+                                                                                <c:choose>
+                                                                                    <c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'rar')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'zip')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jar')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'7z')}">
+                                                                                        <td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.temporaryUrl}',3)">${workClientAttachment.attachmentName}</a></td>
+                                                                                    </c:when>
+                                                                                    <c:otherwise>
+                                                                                        <td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.temporaryUrl}',2)">${workClientAttachment.attachmentName}</a></td>
+                                                                                    </c:otherwise>
+                                                                                </c:choose>
+                                                                            </c:otherwise>
+                                                                        </c:choose>
+                                                                    </c:otherwise>
+                                                                </c:choose>
+                                                            </c:when>
+                                                            <c:otherwise>
+                                                                <c:choose>
+                                                                    <c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpg')
+                                                   or fn:containsIgnoreCase(workClientAttachment.attachmentName,'png')
+                                                   or fn:containsIgnoreCase(workClientAttachment.attachmentName,'gif')
+                                                   or fn:containsIgnoreCase(workClientAttachment.attachmentName,'bmp')
+                                                   or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpeg')}">
+                                                                        <td><img src="${workClientAttachment.url}" width="50" height="50" onclick="openDialogView('预览','${ctx}/sys/picturepreview/picturePreview?url=${workClientAttachment.url}','90%','90%')" alt="${workClientAttachment.attachmentName}">
+                                                                    </c:when>
+                                                                    <c:otherwise>
+                                                                        <c:choose>
+                                                                            <c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'pdf')}">
+                                                                                <td><a href="javascript:void(0)" onclick="openPreview('${workClientAttachment.url}',1)">${workClientAttachment.attachmentName}</a></td>
+                                                                            </c:when>
+                                                                            <c:otherwise>
+                                                                                <c:choose>
+                                                                                    <c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'rar')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'zip')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jar')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'7z')}">
+                                                                                        <td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.url}',3)">${workClientAttachment.attachmentName}</a></td>
+                                                                                    </c:when>
+                                                                                    <c:otherwise>
+                                                                                        <td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.url}',2)">${workClientAttachment.attachmentName}</a></td>
+                                                                                    </c:otherwise>
+                                                                                </c:choose>
+                                                                            </c:otherwise>
+                                                                        </c:choose>
+                                                                    </c:otherwise>
+                                                                </c:choose>
+                                                            </c:otherwise>
+                                                        </c:choose>
+                                                    </c:otherwise>
+                                                </c:choose>
+                                            </c:otherwise>
+                                        </c:choose>
+                                    </c:otherwise>
+                                </c:choose>
+
+                                <td>${workClientAttachment.createBy.name}</td>
+                                <td><fmt:formatDate value="${workClientAttachment.createDate}" type="both"/></td>
+                                <td class="op-td">
+                                    <div class="op-btn-box" >
+                                        <a href="javascript:location.href='${ctx}/workfullmanage/workFullManage/downLoadAttach?file='+encodeURIComponent('${workClientAttachment.url}');" class="op-btn op-btn-download"><i class="fa fa-download"></i>&nbsp;下载</a>
+                                            <%--													<c:if test="${workClientAttachment.createBy.id eq fns:getUser().id}">--%>
+                                            <%--														<a href="javascript:void(0)" onclick="deleteFileFromAliyun(this,'${ctx}/sys/workattachment/deleteFileFromAliyun?url=${workClientAttachment.url}&id=${workClientAttachment.id}&type=2','addFile_attachment','_attachment')" class="op-btn op-btn-delete" ><i class="fa fa-trash"></i>&nbsp;删除</a>--%>
+                                            <%--													</c:if>--%>
+                                    </div>
+                                </td>
+                            </tr>
+                        </c:forEach>
+                        </tbody>
+                    </table>
+                </div>
+            </div>
+
+            <div class="form-group layui-row page-end"></div>
+        </form:form>
+    </div>
+</div>
+</body>
+</html>

+ 342 - 0
src/main/webapp/webpage/modules/signatureManagement/electronicSignature/ElectronicSignatureAudit.jsp

@@ -0,0 +1,342 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>项目审批管理</title>
+	<meta name="decorator" content="default"/>
+	<script type="text/javascript" src="${ctxStatic}/helloweba_editable-select/jquery.editable-select.min.js"></script>
+	<script type="text/javascript" src="${ctxStatic}/iCheck/icheck.min.js"></script>
+	<script type="text/javascript" src="${ctxStatic}/layui/layuidown.js"></script>
+	<script src="${ctxStatic}/common/html/js/script.js"></script>
+	<link rel='stylesheet' type="text/css" href="${ctxStatic}/layui/layuidown.css"/>
+	<link rel='stylesheet' type="text/css" href="${ctxStatic}/helloweba_editable-select/jquery.editable-select.min.css"/>
+
+	<script type="text/javascript">
+		var validateForm;
+		function doSubmit(obj){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+            if(validateForm.form()){
+				var ss= document.getElementById("iframe").contentWindow.document.getElementById("opinion").value
+				$("#opinion").val(ss);
+                if(obj == 1) {
+                    $("#flag").val("yes");
+                }else {
+                    if(obj == 2){
+                        $("#flag").val("no1");
+					}else {
+                        $("#flag").val("no2");
+					}
+                }
+                $("#inputForm").submit();
+                return true;
+            }
+		  return false;
+		}
+		$(document).ready(function() {
+
+			layui.use(['form', 'layer'], function () {
+				var form = layui.form;
+			});
+
+			validateForm = $("#inputForm").validate({
+				submitHandler: function(form){
+					loading('正在提交,请稍等...');
+					form.submit();
+				},
+				errorContainer: "#messageBox",
+				errorPlacement: function(error, element) {
+					$("#messageBox").text("输入有误,请先更正。");
+					if (element.is(":checkbox")||element.is(":radio")||element.parent().is(".input-append")){
+						error.appendTo(element.parent().parent());
+					} else {
+						error.insertAfter(element);
+					}
+				}
+			});
+		});
+        function insertTitle(tValue){
+            var files = $("#attachment_file")[0].files;
+            for(var i = 0;i<files.length;i++) {
+            	var file = files[i];
+				var attachmentId = $("#id").val();
+				var attachmentFlag = "192";
+				console.log(file);
+				var timestamp=new Date().getTime();
+
+					var storeAs = "electronicSignature";
+				var uploadPath="http://gangwan-app.oss-cn-hangzhou.aliyuncs.com/"+storeAs;/*将这段字符串存到数据库即可*/
+				var divId = "_attachment";
+				$("#addFile"+divId).show();
+				multipartUploadWithSts(storeAs, file,attachmentId,attachmentFlag,uploadPath,divId,0);
+            }
+        }
+
+        function addFile() {
+            $("#attachment_file").click();
+        }
+
+        function addRow(list, idx, tpl, row){
+            bornTemplete(list, idx, tpl, row, idx);
+        }
+
+        function bornTemplete(list, idx, tpl, row, idx1){
+            $(list).append(Mustache.render(tpl, {
+                idx: idx, delBtn: true, row: row,
+                order:idx1 + 1
+            }));
+            $(list+idx).find("select").each(function(){
+                $(this).val($(this).attr("data-value"));
+            });
+            $(list+idx).find("input[type='checkbox'], input[type='radio']").each(function(){
+                var ss = $(this).attr("data-value").split(',');
+                for (var i=0; i<ss.length; i++){
+                    if($(this).val() == ss[i]){
+                        $(this).attr("checked","checked");
+                    }
+                }
+            });
+        }
+	</script>
+</head>
+<body >
+<div class="single-form">
+	<div class="container">
+		<form:form id="inputForm" modelAttribute="electronicSignatureInfo" enctype="multipart/form-data" action="${ctx}/electronicSignature/electronicSignature/saveAudit" method="post" class="form-horizontal layui-form">
+		<form:hidden path="id"/>
+		<form:hidden path="home"/>
+		<form:hidden path="act.taskId"/>
+		<form:hidden path="act.taskName"/>
+		<form:hidden id="taskDefKey" path="act.taskDefKey"/>
+		<form:hidden path="act.procInsId"/>
+		<form:hidden path="act.procDefId"/>
+		<form:hidden path="processInstanceId"/>
+		<form:hidden id="flag" path="act.flag"/>
+		<input type="hidden" id="opinion" name="act.comment" value="" maxlength="255">
+		<c:set var="status" value="${electronicSignatureInfo.act.status}" />
+
+
+
+			<div class="form-group layui-row first">
+				<div class="form-group-label"><h2>电子印章申请基础信息</h2></div>
+				<div class="layui-item layui-col-sm6 lw7">
+					<label class="layui-form-label">描述:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" style="background-color: #f1f1f1" value="${electronicSignatureInfo.name}"/>
+					</div>
+				</div>
+				<%--<div class="layui-item layui-col-sm6 lw7">
+					<label class="layui-form-label">签章编号:</label>
+					<div class="layui-input-block">
+						<div class="input-group">
+							<form:input path="number" htmlEscape="false"  readonly="true" class="form-control layui-input" cssStyle="background-color: #f1f1f1"/>
+						</div>
+					</div>
+				</div>--%>
+
+				<div class="layui-item layui-col-sm6 lw7">
+					<label class="layui-form-label"><span class="require-item">*</span>使用场景:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" style="background-color: #f1f1f1" value="${electronicSignatureInfo.useType}"/>
+					</div>
+				</div>
+
+				<div class="layui-item layui-col-sm6 lw7">
+					<label class="layui-form-label">创建人:</label>
+					<div class="layui-input-block">
+						<form:input path="createBy.name" htmlEscape="false"  readonly="true"  class="form-control  layui-input"/>
+						<form:hidden path="createBy.id" htmlEscape="false"   readonly="true"  class="form-control  layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6 lw7">
+					<label class="layui-form-label">所属部门:</label>
+					<div class="layui-input-block">
+						<form:input path="office.name" htmlEscape="false" id="officeName" class="form-control layui-input" readonly="true"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6 lw7">
+					<label class="layui-form-label">申请日期:</label>
+					<div class="layui-input-block">
+						<input id="createDate" name="createDate" htmlEscape="false"  value="<fmt:formatDate value="${electronicSignatureInfo.createDate}" pattern="yyyy-MM-dd"/>" readonly="readonly"  class="form-control judgment layui-input"/>
+					</div>
+				</div>
+
+
+				<div class="layui-item layui-col-sm12 lw7 with-textarea">
+					<label class="layui-form-label">备注:</label>
+					<div class="layui-input-block">
+						<textarea htmlEscape="false" rows="4" readonly="true" maxlength="1000"  style="background-color: #f1f1f1" class="form-control" >${electronicSignatureInfo.remarks}</textarea>
+					</div>
+				</div>
+			</div>
+
+
+			<div class="form-group layui-row">
+				<div class="form-group-label"><h2>电子印章申请附件信息</h2></div>
+				<div class="layui-item layui-col-xs12" style="padding:0 16px;">
+					<table id="listAttachment" class="table table-bordered table-condensed details">
+						<thead>
+						<tr>
+								<%-- <th>序号</th>--%>
+							<th>文件预览</th>
+							<th>上传人</th>
+							<th>上传时间</th>
+							<th width="180px">操作</th>
+						</tr>
+						</thead>
+						<tbody id="file_attachment">
+						<c:forEach items="${electronicSignatureInfo.workAttachments}" var = "workClientAttachment" varStatus="status">
+							<tr>
+									<%-- <td>${status.index + 1}</td>--%>
+								<c:choose>
+									<c:when test="${electronicSignatureInfo.uploadMode == 2}">
+										<c:choose>
+											<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpg')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'png')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'gif')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'bmp')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpeg')}">
+												<td><img src="${workClientAttachment.temporaryUrl}" width="50" height="50" onclick="openDialogView('预览','${ctx}/sys/picturepreview/picturePreview?url=${workClientAttachment.temporaryUrl}','90%','90%')" alt="${workClientAttachment.attachmentName}">
+											</c:when>
+											<c:otherwise>
+												<c:choose>
+													<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'pdf')}">
+														<td><a class="attention-info" href="javascript:void(0)" onclick="preview('预览','${workClientAttachment.temporaryUrl}','90%','90%','1')">${workClientAttachment.attachmentName}</a></td>
+													</c:when>
+													<c:otherwise>
+														<c:choose>
+															<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'rar')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'zip')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jar')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'7z')}">
+																<td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.temporaryUrl}',3)">${workClientAttachment.attachmentName}</a></td>
+															</c:when>
+															<c:otherwise>
+																<td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.temporaryUrl}',2)">${workClientAttachment.attachmentName}</a></td>
+															</c:otherwise>
+														</c:choose>
+													</c:otherwise>
+												</c:choose>
+											</c:otherwise>
+										</c:choose>
+									</c:when>
+									<c:otherwise>
+										<c:choose>
+											<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpg')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'png')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'gif')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'bmp')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpeg')}">
+												<td><img src="${workClientAttachment.url}" width="50" height="50" onclick="openDialogView('预览','${ctx}/sys/picturepreview/picturePreview?url=${workClientAttachment.url}','90%','90%')" alt="${workClientAttachment.attachmentName}">
+											</c:when>
+											<c:otherwise>
+												<c:choose>
+													<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'pdf')}">
+														<td><a class="attention-info" href="javascript:void(0)" onclick="preview('预览','${workClientAttachment.url}','90%','90%','1')">${workClientAttachment.attachmentName}</a></td>
+													</c:when>
+													<c:otherwise>
+														<c:choose>
+															<c:when test="${electronicSignatureInfo.uploadMode == 2}">
+																<c:choose>
+																	<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpg')
+                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'png')
+                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'gif')
+                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'bmp')
+                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpeg')}">
+																		<td><img src="${workClientAttachment.temporaryUrl}" width="50" height="50" onclick="openDialogView('预览','${ctx}/sys/picturepreview/picturePreview?url=${workClientAttachment.temporaryUrl}','90%','90%')" alt="${workClientAttachment.attachmentName}">
+																	</c:when>
+																	<c:otherwise>
+																		<c:choose>
+																			<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'pdf')}">
+																				<td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.temporaryUrl}',1)">${workClientAttachment.attachmentName}</a></td>
+																			</c:when>
+																			<c:otherwise>
+																				<c:choose>
+																					<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'rar')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'zip')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jar')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'7z')}">
+																						<td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.temporaryUrl}',3)">${workClientAttachment.attachmentName}</a></td>
+																					</c:when>
+																					<c:otherwise>
+																						<td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.temporaryUrl}',2)">${workClientAttachment.attachmentName}</a></td>
+																					</c:otherwise>
+																				</c:choose>
+																			</c:otherwise>
+																		</c:choose>
+																	</c:otherwise>
+																</c:choose>
+															</c:when>
+															<c:otherwise>
+																<c:choose>
+																	<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpg')
+                                                   or fn:containsIgnoreCase(workClientAttachment.attachmentName,'png')
+                                                   or fn:containsIgnoreCase(workClientAttachment.attachmentName,'gif')
+                                                   or fn:containsIgnoreCase(workClientAttachment.attachmentName,'bmp')
+                                                   or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpeg')}">
+																		<td><img src="${workClientAttachment.url}" width="50" height="50" onclick="openDialogView('预览','${ctx}/sys/picturepreview/picturePreview?url=${workClientAttachment.url}','90%','90%')" alt="${workClientAttachment.attachmentName}">
+																	</c:when>
+																	<c:otherwise>
+																		<c:choose>
+																			<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'pdf')}">
+																				<td><a href="javascript:void(0)" onclick="openPreview('${workClientAttachment.url}',1)">${workClientAttachment.attachmentName}</a></td>
+																			</c:when>
+																			<c:otherwise>
+																				<c:choose>
+																					<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'rar')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'zip')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jar')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'7z')}">
+																						<td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.url}',3)">${workClientAttachment.attachmentName}</a></td>
+																					</c:when>
+																					<c:otherwise>
+																						<td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.url}',2)">${workClientAttachment.attachmentName}</a></td>
+																					</c:otherwise>
+																				</c:choose>
+																			</c:otherwise>
+																		</c:choose>
+																	</c:otherwise>
+																</c:choose>
+															</c:otherwise>
+														</c:choose>
+													</c:otherwise>
+												</c:choose>
+											</c:otherwise>
+										</c:choose>
+									</c:otherwise>
+								</c:choose>
+
+								<td>${workClientAttachment.createBy.name}</td>
+								<td><fmt:formatDate value="${workClientAttachment.createDate}" type="both"/></td>
+								<td class="op-td">
+									<div class="op-btn-box" >
+										<a href="javascript:location.href='${ctx}/workfullmanage/workFullManage/downLoadAttach?file='+encodeURIComponent('${workClientAttachment.url}');" class="op-btn op-btn-download"><i class="fa fa-download"></i>&nbsp;下载</a>
+											<%--													<c:if test="${workClientAttachment.createBy.id eq fns:getUser().id}">--%>
+											<%--														<a href="javascript:void(0)" onclick="deleteFileFromAliyun(this,'${ctx}/sys/workattachment/deleteFileFromAliyun?url=${workClientAttachment.url}&id=${workClientAttachment.id}&type=2','addFile_attachment','_attachment')" class="op-btn op-btn-delete" ><i class="fa fa-trash"></i>&nbsp;删除</a>--%>
+											<%--													</c:if>--%>
+									</div>
+								</td>
+							</tr>
+						</c:forEach>
+						</tbody>
+					</table>
+				</div>
+			</div>
+
+
+
+	</form:form>
+		<div class="form-group-label">
+			<div style="float: right"> <a href="javascript:void(0)" style='background-color: #FFB800' onclick="openDialogre('个人模板列表', '${ctx}/auditTemplate/auditTemplate/templateList?identification=${signatureDailyOfficeWork}&name=${identificationName}','80%', '70%','','关闭')" class="nav-btn layui-btn layui-btn-sm" ><i class="fa fa-file-excel-o"></i> 审核意见模板列表</a></div>
+			<h2>审批意见</h2>
+		</div>
+		<iframe id="iframe" src="${ctx}/auditTemplate/auditTemplate/iframeView?identification=${electronicSignature}" name="listresult" frameborder="0" align="left" width="100%" height="300" scrolling="value"></iframe>
+			<div class="form-group layui-row">
+				<div class="form-group-label"><h2>${projectNotifyType}审批流程</h2></div>
+				<div class="layui-item layui-col-xs12 form-table-container" >
+					<act:flowChart procInsId="${processInstanceId}"/>
+					<act:histoicFlow procInsId="${processInstanceId}"/>
+				</div>
+			</div>
+	</div>
+</div>
+</body>
+</html>

+ 472 - 0
src/main/webapp/webpage/modules/signatureManagement/electronicSignature/ElectronicSignatureForm.jsp

@@ -0,0 +1,472 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+    <title>项目管理</title>
+    <meta name="decorator" content="default"/>
+    <script type="text/javascript" src="${ctxStatic}/helloweba_editable-select/jquery.editable-select.min.js"></script>
+    <script type="text/javascript" src="${ctxStatic}/iCheck/icheck.min.js"></script>
+    <script type="text/javascript" src="${ctxStatic}/layui/layuidown.js"></script>
+    <script src="${ctxStatic}/common/html/js/script.js"></script>
+    <link rel='stylesheet' type="text/css" href="${ctxStatic}/layui/layuidown.css"/>
+    <link rel='stylesheet' type="text/css" href="${ctxStatic}/helloweba_editable-select/jquery.editable-select.min.css"/>
+    <style>
+        #projectDesc-error{
+            left:0;
+            top:82px;
+        }
+        .layui-layer-dialog{
+            background: red;
+        }
+        td input{
+            margin-left:-10px !important;
+            height: 42px !important;
+        }
+        .disables {
+            pointer-events: none;
+        }
+        .notDisables {
+            pointer-events: all;
+        }
+        .forbidden{
+            background-color:#c2c2c2;
+        }
+
+        .notForbidden{
+            background-color:#3ca2e0;
+        }
+        .spanzj{
+            color: red;
+            font-size: 12px;
+            padding-left: 10px;
+        }
+    </style>
+    <script type="text/javascript">
+        var validateForm;
+        var isMasterClient = true;//是否是委托方
+        var clientCount = 0;
+        function doSubmit(i){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+            if(validateForm.form()){
+                if(i==2){
+                    $("#inputForm").attr("action","${ctx}/electronicSignature/electronicSignature/tstore");
+                }else{
+                    var flag = $("#flagFile").val();
+                    if(flag == 'false'){
+                        top.layer.msg('附件信息未上传完成,请等待!', {icon: 0});
+                        return;
+                    }
+                    var length = $("#file_attachment").find("tr").length ;
+                    if(length == 0){
+                        top.layer.msg("请上传申请附件", {icon: 0});
+                        return;
+                    }
+                    var flags=judgment();
+                    if (!flags){
+                        return flags;
+                    }
+                }
+                $("#inputForm").submit();
+                return true;
+            }else{
+                parent.layer.msg("信息未填写完整!", {icon: 5});
+            }
+            return false;
+        }
+        $(document).ready(function() {
+            layui.use(['layer', 'jquery', 'form'], function () {
+                var layer = layui.layer,
+                    $ = layui.jquery,
+                    form = layui.form;
+
+                //此处是根据select中的id或name或class进行区分的选中那个select下拉框
+                /*form.on('select(useType)', function (data) {
+                    var result=data.value;
+                    console.log(result)
+                    if(result=='1'){
+                        //审定单
+                        $("#d1").show();
+                        $("#d2").hide();
+                    }else if(result=='2'){
+                        //报告
+                        $("#d1").hide();
+                        $("#d2").show();
+                    }
+                })*/
+
+            });
+
+            $("#attachment_btn").click(function () {
+                $("#attachment_file").click();
+            });
+            var radioVal ;
+            validateForm = $("#inputForm").validate({
+                submitHandler: function(form){
+                    loading('正在提交,请稍等...');
+                    form.submit();
+                },
+                errorContainer: "#messageBox",
+                errorPlacement: function(error, element) {
+                    $("#messageBox").text("输入有误,请先更正。");
+                    if (element.is(":checkbox")||element.is(":radio")||element.parent().is(".input-append")){
+                        error.appendTo(element.parent().parent());
+                    } else {
+                        error.insertAfter(element);
+                    }
+                }
+            });
+            /*useType('${electronicSignatureInfo.useType}')*/
+        });
+
+
+        function insertTitle(tValue){
+            var files = $("#attachment_file")[0].files;
+            for(var i = 0;i<files.length;i++) {
+                var file = files[i];
+                var attachmentId = $("#id").val();
+                var attachmentFlag = "192";
+                console.log(file);
+                var timestamp=new Date().getTime();
+
+                var storeAs = "electronicSignature";
+                var uploadPath="http://gangwan-app.oss-cn-hangzhou.aliyuncs.com/"+storeAs;/*将这段字符串存到数据库即可*/
+                var divId = "_attachment";
+                $("#addFile"+divId).show();
+                multipartUploadWithSts(storeAs, file,attachmentId,attachmentFlag,uploadPath,divId,0);
+            }
+        }
+
+
+        function addFile() {
+            $("#attachment_file").click();
+        }
+
+        function addRow(list, idx, tpl, row){
+            bornTemplete(list, idx, tpl, row, idx);
+        }
+
+        function bornTemplete(list, idx, tpl, row, idx1){
+            $(list).append(Mustache.render(tpl, {
+                idx: idx, delBtn: true, row: row,
+                order:idx1 + 1
+            }));
+            $(list+idx).find("select").each(function(){
+                $(this).val($(this).attr("data-value"));
+            });
+            $(list+idx).find("input[type='checkbox'], input[type='radio']").each(function(){
+                var ss = $(this).attr("data-value").split(',');
+                for (var i=0; i<ss.length; i++){
+                    if($(this).val() == ss[i]){
+                        $(this).attr("checked","checked");
+                    }
+                }
+            });
+        }
+        function delRow(obj, prefix){
+            var id = $(prefix+"_id");
+            var delFlag = $(prefix+"_delFlag");
+            $(obj).parent().parent().remove();
+        }
+
+        function useType(othis){
+
+            if(othis=='1'){
+                //审定单
+                $("#d1").show();
+                $("#d2").hide();
+            }else if(othis=='2'){
+                //报告
+                $("#d1").hide();
+                $("#d2").show();
+            }
+
+        }
+    </script>
+</head>
+<body>
+<div class="single-form">
+    <div class="container">
+        <sys:message content="${message}"/>
+        <form:form id="inputForm" modelAttribute="electronicSignatureInfo" action="${ctx}/electronicSignature/electronicSignature/save" method="post" class="form-horizontal layui-form ">
+            <form:hidden path="id"/>
+
+            <div class="form-group layui-row">
+                <div class="form-group-label"><h2>电子印章申请基础信息</h2></div>
+                <div class="layui-item layui-col-sm6 lw7">
+                    <label class="layui-form-label"><span class="require-item">*</span>描述:</label>
+                    <div class="layui-input-block">
+                        <form:input path="name" id="name" maxlength="255" htmlEscape="false" placeholder="请输入描述" class="form-control layui-input required"/>
+                    </div>
+                </div>
+                <%--<div class="layui-item layui-col-sm6 lw7">
+                    <label class="layui-form-label">签章编号:</label>
+                    <div class="layui-input-block">
+                        <div class="input-group">
+                            <form:input path="number" htmlEscape="false" readonly="true" class="form-control layui-input"/>
+                            &lt;%&ndash;<span class="input-group-btn">
+                                <label class="form-status"><c:choose><c:when test="${not empty dailyOfficeWork.projectStatus}">${fns:getDictLabel(dailyOfficeWork.projectStatus, 'audit_state', '')}</c:when><c:otherwise>新添</c:otherwise></c:choose></label>
+                             </span>&ndash;%&gt;
+                        </div>
+                    </div>
+                </div>--%>
+
+                <div class="layui-item layui-col-sm6 lw7">
+                    <label class="layui-form-label"><span class="require-item">*</span>使用场景:</label>
+                    <div class="layui-input-block readOnlyFFF">
+                        <form:select placeholder="请选择" path="useType" lay-filter="useType" class="form-control judgment editable-select layui-input" id="useType" value="${electronicSignatureInfo.useType}">
+                            <form:option value=""/>
+                            <form:options items="${fns:getMainDictList('electronicSignature')}" itemLabel="label" itemValue="value" htmlEscape="false"/>
+                        </form:select>
+                    </div>
+                </div>
+
+                <%--<div id="d1" class="layui-item layui-col-sm6 lw7">
+                    <label class="layui-form-label"><span class="require-item">*</span>电子签章类型:</label>
+                    <div class="layui-input-block readOnlyFFF">
+                        <form:select placeholder="请选择" path="useType" lay-filter="useType" class="form-control judgment editable-select layui-input" id="useType" value="${electronicSignatureInfo.useType}">
+                            <form:option value=""/>
+                            <form:options items="${fns:getMainDictList('electronicSignature')}" itemLabel="label" itemValue="value" htmlEscape="false"/>
+                        </form:select>
+                    </div>
+                </div>
+
+                <div id="d2" class="layui-item layui-col-sm6 lw7">
+                    <label class="layui-form-label"><span class="require-item">*</span>电子签章类型:</label>
+                    <div class="layui-input-block readOnlyFFF">
+                        <form:select placeholder="请选择" path="useType" lay-filter="useType" class="form-control judgment editable-select layui-input" id="useType" value="${electronicSignatureInfo.useType}">
+                            <form:option value=""/>
+                            <form:options items="${fns:getMainDictList('electronicSignature')}" itemLabel="label" itemValue="value" htmlEscape="false"/>
+                        </form:select>
+                    </div>
+                </div>--%>
+
+
+
+
+                <div class="layui-item layui-col-sm6 lw7">
+                    <label class="layui-form-label">创建人:</label>
+                    <div class="layui-input-block">
+                        <form:input path="createBy.name" htmlEscape="false"  readonly="true"  class="form-control  layui-input"/>
+                        <form:hidden path="createBy.id" htmlEscape="false"   readonly="true"  class="form-control  layui-input"/>
+                    </div>
+                </div>
+                <div class="layui-item layui-col-sm6 lw7">
+                    <label class="layui-form-label">所属部门:</label>
+                    <div class="layui-input-block">
+                        <form:input path="office.name" htmlEscape="false" id="officeName" class="form-control layui-input" readonly="true"/>
+                    </div>
+                </div>
+                <div class="layui-item layui-col-sm6 lw7">
+                    <label class="layui-form-label">申请日期:</label>
+                    <div class="layui-input-block">
+                        <input id="createDate" name="createDate" htmlEscape="false"  value="<fmt:formatDate value="${electronicSignatureInfo.createDate}" pattern="yyyy-MM-dd"/>" readonly="readonly"  class="form-control judgment layui-input"/>
+                    </div>
+                </div>
+
+                <div class="layui-item layui-col-sm12 lw7 with-textarea">
+                    <label class="layui-form-label ">备注:</label>
+                    <div class="layui-input-block">
+                        <form:textarea placeholder="请输入备注" path="remarks" htmlEscape="false" rows="4"  maxlength="255"  class="form-control "/>
+                    </div>
+                </div>
+            </div>
+
+            <div class="form-group layui-row">
+                <div class="form-group-label"><h2><span class="require-item">*</span>电子印章申请附件信息</h2></div>
+                <div class="layui-item nav-btns">
+                    <a id="attachment_btn" class="nav-btn nav-btn-add" title="添加附件"><i class="fa fa-plus"></i>&nbsp;添加附件</a>
+                    <a class="nav-btn nav-btn-export" title="下载电子印章承诺书模板"  onclick="window.location.href='${ctx}/electronicSignature/electronicSignature/downloadTemplate';"><i class="fa fa-download"></i>&nbsp;下载模板</a>
+                </div>
+                <div id="addFile_attachment" style="display: none" class="upload-progress">
+                    <span id="fileName_attachment"></span>
+                    <b><span id="baifenbi_attachment"></span></b>
+                    <div class="progress">
+                            <%--进度条--%>
+                        <div id="jindutiao_attachment" class="progress-bar" style="width: 0%" aria-valuenow="0">
+                        </div>
+                    </div>
+                </div>
+                <input id="attachment_file" type="file" name="attachment_file" multiple="multiple"
+                       style="display: none;" onChange="if(this.value)insertTitle(this.value);"/>
+                <span id="attachment_title"></span>
+                <div class="layui-item layui-col-xs12" style="padding:0 16px;">
+                    <table id="upTable" class="table table-bordered table-condensed details">
+                        <thead>
+                        <tr>
+                                <%-- <th>序号</th>--%>
+                            <th>文件</th>
+                            <th>上传人</th>
+                            <th>上传时间</th>
+                            <th width="200px">操作</th>
+                        </tr>
+                        </thead>
+                        <tbody id="file_attachment">
+                        <c:forEach items="${electronicSignatureInfo.workAttachments}" var="workClientAttachment"
+                                   varStatus="status">
+                            <tr>
+                                    <%-- <td>${status.index + 1}</td>--%>
+                                <c:choose>
+                                    <c:when test="${electronicSignatureInfo.uploadMode == 2}">
+                                        <c:choose>
+                                            <c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpg')
+                                                   or fn:containsIgnoreCase(workClientAttachment.attachmentName,'png')
+                                                   or fn:containsIgnoreCase(workClientAttachment.attachmentName,'gif')
+                                                   or fn:containsIgnoreCase(workClientAttachment.attachmentName,'bmp')
+                                                   or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpeg')}">
+                                                <td><img src="${workClientAttachment.temporaryUrl}" width="50" height="50" onclick="openDialogView('预览','${ctx}/sys/picturepreview/picturePreview?url=${workClientAttachment.temporaryUrl}','90%','90%')" alt="${workClientAttachment.attachmentName}">
+                                            </c:when>
+                                            <c:otherwise>
+                                                <c:choose>
+                                                    <c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'pdf')}">
+                                                        <td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.temporaryUrl}',1)">${workClientAttachment.attachmentName}</a></td>
+                                                    </c:when>
+                                                    <c:otherwise>
+                                                        <c:choose>
+                                                            <c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'rar')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'zip')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jar')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'7z')}">
+                                                                <td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.temporaryUrl}',3)">${workClientAttachment.attachmentName}</a></td>
+                                                            </c:when>
+                                                            <c:otherwise>
+                                                                <td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.temporaryUrl}',2)">${workClientAttachment.attachmentName}</a></td>
+                                                            </c:otherwise>
+                                                        </c:choose>
+                                                    </c:otherwise>
+                                                </c:choose>
+                                            </c:otherwise>
+                                        </c:choose>
+                                    </c:when>
+                                    <c:otherwise>
+                                        <c:choose>
+                                            <c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpg')
+                                             or fn:containsIgnoreCase(workClientAttachment.attachmentName,'png')
+                                             or fn:containsIgnoreCase(workClientAttachment.attachmentName,'gif')
+                                             or fn:containsIgnoreCase(workClientAttachment.attachmentName,'bmp')
+                                             or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpeg')}">
+                                                <td><img src="${workClientAttachment.url}" width="50" height="50" onclick="openDialogView('预览','${ctx}/sys/picturepreview/picturePreview?url=${workClientAttachment.url}','90%','90%')" alt="${workClientAttachment.attachmentName}">
+                                            </c:when>
+                                            <c:otherwise>
+                                                <c:choose>
+                                                    <c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'pdf')}">
+                                                        <td><a class="attention-info" href="javascript:void(0)"
+                                                               onclick="openPreview('${workClientAttachment.url}',1)">${workClientAttachment.attachmentName}</a>
+                                                        </td>
+                                                    </c:when>
+                                                    <c:otherwise>
+                                                        <c:choose>
+                                                            <c:when test="${electronicSignatureInfo.uploadMode == 2}">
+                                                                <c:choose>
+                                                                    <c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpg')
+                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'png')
+                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'gif')
+                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'bmp')
+                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpeg')}">
+                                                                        <td><img src="${workClientAttachment.temporaryUrl}" width="50" height="50" onclick="openDialogView('预览','${ctx}/sys/picturepreview/picturePreview?url=${workClientAttachment.temporaryUrl}','90%','90%')" alt="${workClientAttachment.attachmentName}">
+                                                                    </c:when>
+                                                                    <c:otherwise>
+                                                                        <c:choose>
+                                                                            <c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'pdf')}">
+                                                                                <td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.temporaryUrl}',1)">${workClientAttachment.attachmentName}</a></td>
+                                                                            </c:when>
+                                                                            <c:otherwise>
+                                                                                <c:choose>
+                                                                                    <c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'rar')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'zip')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jar')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'7z')}">
+                                                                                        <td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.temporaryUrl}',3)">${workClientAttachment.attachmentName}</a></td>
+                                                                                    </c:when>
+                                                                                    <c:otherwise>
+                                                                                        <td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.temporaryUrl}',2)">${workClientAttachment.attachmentName}</a></td>
+                                                                                    </c:otherwise>
+                                                                                </c:choose>
+                                                                            </c:otherwise>
+                                                                        </c:choose>
+                                                                    </c:otherwise>
+                                                                </c:choose>
+                                                            </c:when>
+                                                            <c:otherwise>
+                                                                <c:choose>
+                                                                    <c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpg')
+                                                   or fn:containsIgnoreCase(workClientAttachment.attachmentName,'png')
+                                                   or fn:containsIgnoreCase(workClientAttachment.attachmentName,'gif')
+                                                   or fn:containsIgnoreCase(workClientAttachment.attachmentName,'bmp')
+                                                   or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpeg')}">
+                                                                        <td><img src="${workClientAttachment.url}" width="50" height="50" onclick="openDialogView('预览','${ctx}/sys/picturepreview/picturePreview?url=${workClientAttachment.url}','90%','90%')" alt="${workClientAttachment.attachmentName}">
+                                                                    </c:when>
+                                                                    <c:otherwise>
+                                                                        <c:choose>
+                                                                            <c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'pdf')}">
+                                                                                <td><a href="javascript:void(0)" onclick="openPreview('${workClientAttachment.url}',1)">${workClientAttachment.attachmentName}</a></td>
+                                                                            </c:when>
+                                                                            <c:otherwise>
+                                                                                <c:choose>
+                                                                                    <c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'rar')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'zip')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jar')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'7z')}">
+                                                                                        <td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.url}',3)">${workClientAttachment.attachmentName}</a></td>
+                                                                                    </c:when>
+                                                                                    <c:otherwise>
+                                                                                        <td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.url}',2)">${workClientAttachment.attachmentName}</a></td>
+                                                                                    </c:otherwise>
+                                                                                </c:choose>
+                                                                            </c:otherwise>
+                                                                        </c:choose>
+                                                                    </c:otherwise>
+                                                                </c:choose>
+                                                            </c:otherwise>
+                                                        </c:choose>
+                                                    </c:otherwise>
+                                                </c:choose>
+                                            </c:otherwise>
+                                        </c:choose>
+                                    </c:otherwise>
+                                </c:choose>
+
+
+
+                                <td>${workClientAttachment.createBy.name}</td>
+                                <td><fmt:formatDate value="${workClientAttachment.createDate}" type="both"/></td>
+                                <td class="op-td">
+                                    <div class="op-btn-box">
+
+                                            <%--附件下载删除--%>
+                                        <c:choose>
+                                            <c:when test="${electronicSignatureInfo.uploadMode == 2}">
+                                                <c:choose>
+                                                    <c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'pdf')}">
+                                                        <a href="${workClientAttachment.temporaryUrl}" target="_blank" class="op-btn op-btn-download"><i class="fa fa-download"></i>&nbsp;下载</a>
+                                                    </c:when>
+                                                    <c:otherwise>
+                                                        <a href="${workClientAttachment.temporaryUrl}" class="op-btn op-btn-download"><i class="fa fa-download"></i>&nbsp;下载</a>
+                                                    </c:otherwise>
+                                                </c:choose>
+                                            </c:when>
+                                            <c:otherwise>
+                                                <a href="javascript:location.href='${ctx}/workfullmanage/workFullManage/downLoadAttach?file='+encodeURIComponent('${workClientAttachment.url}');" class="op-btn op-btn-download"><i class="fa fa-download"></i>&nbsp;下载</a>
+                                            </c:otherwise>
+                                        </c:choose>
+                                        <c:if test="${workClientAttachment.createBy.id eq fns:getUser().id}">
+                                            <a href="javascript:void(0)"
+                                               onclick="deleteFileFromAliyun(this,'${ctx}/sys/workattachment/deleteFileFromAliyun?url=${workClientAttachment.url}&id=${workClientAttachment.id}&type=2','addFile')"
+                                               class="op-btn op-btn-delete"><i class="fa fa-trash"></i>&nbsp;删除</a>
+                                        </c:if>
+                                        <c:if test="${workClientAttachment.collectFlag != 1}">
+                                            <a href="javascript:void(0)" onclick="collectingAccessory(this,'${ctx}/projectAccessory/projectAccessory/saveCollectAccessory','${workClientAttachment.url}','${workClientAttachment.createBy.id}','${workClientAttachment.fileSize}')" class="op-btn layui-btn-warm" >&nbsp;收藏</a>
+                                        </c:if>
+                                    </div>
+                                </td>
+                            </tr>
+                        </c:forEach>
+                        </tbody>
+                    </table>
+                </div>
+            </div>
+
+            <div class="form-group layui-row page-end"></div>
+        </form:form>
+    </div>
+</div>
+</body>
+</html>

+ 459 - 0
src/main/webapp/webpage/modules/signatureManagement/electronicSignature/ElectronicSignatureList.jsp

@@ -0,0 +1,459 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+    <title>电子印章申请</title>
+    <meta name="decorator" content="default"/>
+    <script type="text/javascript" src="${ctxStatic}/layui/layuidown.js"></script>
+    <link rel='stylesheet' type="text/css" href="${ctxStatic}/layui/layuidown.css"/>
+    <%--<script src="${ctxStatic}/layer-v2.3/laydate/laydate.js"></script>--%>
+    <script type="text/javascript">
+        $(document).ready(function() {
+            layui.use(['dropdown', 'util', 'layer'], function () {
+                var form = layui.form;
+            })
+
+            //搜索框收放
+            $('#moresee').click(function(){
+                if($('#moresees').is(':visible'))
+                {
+                    $('#moresees').slideUp(0,resizeListWindow2);
+                    $('#moresee i').removeClass("glyphicon glyphicon-menu-up").addClass("glyphicon glyphicon-menu-down");
+                }else{
+                    $('#moresees').slideDown(0,resizeListWindow2);
+                    $('#moresee i').removeClass("glyphicon glyphicon-menu-down").addClass("glyphicon glyphicon-menu-up");
+                }
+            });
+            laydate.render({
+                elem: '#beginDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus', //响应事件。如果没有传入event,则按照默认的click
+                type : 'date'
+                , trigger: 'click'
+            });
+            laydate.render({
+                elem: '#endDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus', //响应事件。如果没有传入event,则按照默认的click
+                type : 'date'
+                , trigger: 'click'
+            });
+        });
+
+        function reset() {
+            $("#searchForm").resetForm();
+        }
+
+        function openDialog(title,url,width,height,target) {
+
+            if (navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)) {//如果是移动端,就使用自适应大小弹窗
+                width = 'auto';
+                height = 'auto';
+            } else {//如果是PC端,根据用户设置的width和height显示。
+
+            }
+
+            top.layer.open({
+                type: 2,
+                area: [width, height],
+                title: title,
+                maxmin: true, //开启最大化最小化按钮
+                content: url,
+                skin: 'three-btns',
+                btn: ['送审', '暂存', '关闭'],
+                btn1: function(index, layero){
+                    var body = top.layer.getChildFrame('body', index);
+                    var iframeWin = layero.find('iframe')[0]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
+                    var inputForm = body.find('#inputForm');
+                    var top_iframe;
+                    if(target){
+                        top_iframe = target;//如果指定了iframe,则在改frame中跳转
+                    }else{
+                        top_iframe = top.getActiveTab().attr("name");//获取当前active的tab的iframe
+                    }
+                    inputForm.attr("target",top_iframe);//表单提交成功后,从服务器返回的url在当前tab中展示
+                    if(iframeWin.contentWindow.doSubmit(1) ){
+                        // top.layer.close(index);//关闭对话框。
+                        setTimeout(function(){top.layer.close(index)}, 100);//延时0.1秒,对应360 7.1版本bug
+                    }
+                },
+                btn2:function(index,layero){
+                    var body = top.layer.getChildFrame('body', index);
+                    var iframeWin = layero.find('iframe')[0]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
+                    var inputForm = body.find('#inputForm');
+                    var top_iframe;
+                    if(target){
+                        top_iframe = target;//如果指定了iframe,则在改frame中跳转
+                    }else{
+                        top_iframe = top.getActiveTab().attr("name");//获取当前active的tab的iframe
+                    }
+                    inputForm.attr("target",top_iframe);//表单提交成功后,从服务器返回的url在当前tab中展示
+                    if(iframeWin.contentWindow.doSubmit(2) ){
+                        // top.layer.close(index);//关闭对话框。
+                        setTimeout(function(){top.layer.close(index)}, 100);//延时0.1秒,对应360 7.1版本bug
+                    }else {
+                        return false;
+                    }
+                },
+                btn3: function (index) {
+                }
+            });
+        }
+        //打开对话框(查看)
+        function openDialogReportView(title,url,id,width,height){
+
+
+            if(navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)){//如果是移动端,就使用自适应大小弹窗
+                width='auto';
+                height='auto';
+            }else{//如果是PC端,根据用户设置的width和height显示。
+
+            }
+            $.ajax({
+                async: false,
+                url: "${ctx}/ruralProject/ruralCostProjectMessage/getReportExist?id="+id,
+                dataType: "json",
+                success: function (data) {
+                    if(data.success){
+                        top.layer.open({
+                            type: 2,
+                            skin: 'one-btn',
+                            area: [width, height],
+                            title: title,
+                            maxmin: true, //开启最大化最小化按钮
+                            content: url ,
+                            btn: ['关闭'],
+                            cancel: function(index){
+                            }
+                        });
+                    }else{
+                        top.layer.msg("该电子印章申请信息已删除!", {icon: 0});
+                        window.location.reload();
+                    }
+                }
+            });
+
+        }
+        function openDialogre(title,url,width,height,target,buttons) {
+
+            if (navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)) {//如果是移动端,就使用自适应大小弹窗
+                width = 'auto';
+                height = 'auto';
+            } else {//如果是PC端,根据用户设置的width和height显示。
+
+            }
+            var split = buttons.split(",");
+            top.layer.open({
+                type: 2,
+                area: [width, height],
+                title: title,
+                maxmin: true, //开启最大化最小化按钮
+                skin: 'three-btns',
+                content: url,
+                btn: split,
+                btn1: function(index, layero){
+                    var body = top.layer.getChildFrame('body', index);
+                    var iframeWin = layero.find('iframe')[0]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
+                    var inputForm = body.find('#inputForm');
+                    var top_iframe;
+                    if(target){
+                        top_iframe = target;//如果指定了iframe,则在改frame中跳转
+                    }else{
+                        top_iframe = top.getActiveTab().attr("name");//获取当前active的tab的iframe
+                    }
+                    inputForm.attr("target",top_iframe);//表单提交成功后,从服务器返回的url在当前tab中展示
+                    if(iframeWin.contentWindow.doSubmit(1) ){
+                        // top.layer.close(index);//关闭对话框。
+                        setTimeout(function(){top.layer.close(index)}, 100);//延时0.1秒,对应360 7.1版本bug
+                    }
+                },
+                btn2:function(index,layero){
+                    if(split.length==2){return}
+                    var body = top.layer.getChildFrame('body', index);
+                    var iframeWin = layero.find('iframe')[0]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
+                    var inputForm = body.find('#inputForm');
+                    var top_iframe;
+                    if(target){
+                        top_iframe = target;//如果指定了iframe,则在改frame中跳转
+                    }else{
+                        top_iframe = top.getActiveTab().attr("name");//获取当前active的tab的iframe
+                    }
+                    inputForm.attr("target",top_iframe);//表单提交成功后,从服务器返回的url在当前tab中展示
+                    if(iframeWin.contentWindow.doSubmit(2) ){
+                        // top.layer.close(index);//关闭对话框。
+                        setTimeout(function(){top.layer.close(index)}, 100);//延时0.1秒,对应360 7.1版本bug
+                    }else {
+                        return false;
+                    }
+                },
+                btn3: function (index) {
+                }
+            });
+        }
+        function adminDelete(title,url,width,height,target,id) {
+            if (navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)) {//如果是移动端,就使用自适应大小弹窗
+                width = 'auto';
+                height = 'auto';
+            } else {//如果是PC端,根据用户设置的width和height显示。
+
+            }
+
+            top.layer.open({
+                type: 0,
+                title: title,
+                content: '确定删除这个申请吗?',
+                btn:["确定","取消"],
+                btn1: function (index){
+                    layer.close(index);
+                    $.ajax({
+                        async: false,
+                        url: url,
+                        dataType: "json",
+                        success: function (data) {
+                            if(data.success){
+                                $.ajax({
+                                    async: false,
+                                    url: "${ctx}/electronicSignature/electronicSignature/adminDelete?id="+id,
+                                    dataType: "json",
+                                    success: function (data) {
+                                        if(data.success){
+                                            top.layer.msg("该申请删除成功!", {icon: 0});
+                                            window.location.reload();
+                                        }else{
+                                            top.layer.msg("该申请删除失败!", {icon: 0});
+                                        }
+                                    }
+                                });
+                            }else{
+                            }
+                        }
+                    });
+                },
+                btn2:function (index) {
+                    layer.close(index);
+
+                }
+            });
+        }
+    </script>
+    <style>
+        body{
+            background-color:transparent;
+            filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#26FFFFFF, endColorstr=#26FFFFFF);
+            color:#ffffff;
+            background-color:rgba(255,255,255,0);
+            height:100%;
+        }
+    </style>
+</head>
+<body>
+<div class="wrapper wrapper-content">
+    <sys:message content="${message}"/>
+    <div class="layui-row">
+        <div class="full-width fl">
+            <div class="layui-row contentShadow shadowLR" id="queryDiv">
+                <form:form id="searchForm" modelAttribute="electronicSignatureInfo" action="${ctx}/electronicSignature/electronicSignature/" method="post" class="form-inline">
+                    <input id="pageNo" name="pageNo" type="hidden" value="${page.pageNo}"/>
+                    <input id="pageSize" name="pageSize" type="hidden" value="${page.pageSize}"/>
+                    <input id="toflag" name="toflag" type="hidden" value="1"/>
+                    <table:sortColumn id="orderBy" name="orderBy" value="${page.orderBy}" callback="sortOrRefresh();"/><!-- 支持排序 -->
+                    <div class="commonQuery lw6">
+                        <div class="layui-item query athird">
+                            <label class="layui-form-label">描述:</label>
+                            <div class="layui-input-block">
+                                <form:input path="name" htmlEscape="false" maxlength="64"  class=" form-control  layui-input"/>
+                            </div>
+                        </div>
+                        <div class="layui-item query athird">
+                            <label class="layui-form-label">使用场景:</label>
+                            <div class="layui-input-block readOnlyFFF">
+                                <form:select placeholder="请选择" path="useType" class="form-control editable-select layui-input" id="attachmentProjectSort" value="${useType}">
+                                    <form:option value=""/>
+                                    <form:options items="${fns:getMainDictList('electronicSignature')}" itemLabel="label" itemValue="value" htmlEscape="false"/>
+                                </form:select>
+                            </div>
+                        </div>
+                        <div class="layui-item athird">
+                            <div class="input-group">
+                                <a href="#" id="moresee"><i class="glyphicon glyphicon-menu-down"></i></a>
+                                <div class="layui-btn-group search-spacing">
+                                    <button id="searchQuery" class="layui-btn layui-btn-sm layui-bg-blue" onclick="search()">查询</button>
+                                    <button id="searchReset" class="layui-btn layui-btn-sm" onclick="resetSearch()">重置</button>
+                                </div>
+                            </div>
+                        </div>
+                        <div style="    clear:both;"></div>
+                    </div>
+                    <div id="moresees" style="clear:both;display:none;" class="lw6">
+
+                        <div class="layui-item query athird ">
+                            <label class="layui-form-label">申请人:</label>
+                            <div class="layui-input-block with-icon">
+                                <sys:inquireselectUserNotReadolny id="createBy" name="createBy.id" value="${electronicSignatureInfo.createBy.id}" labelName="createBy.name" labelValue="${electronicSignatureInfo.createBy.name}" cssStyle="background-color: #fff"
+                                                                  title="登记人" url="/sys/office/treeDataAll?type=3" cssClass="form-control layui-input" allowClear="true" notAllowSelectParent="true"/>
+                            </div>
+                        </div>
+                        <div class="layui-item query athird">
+                            <label class="layui-form-label">申请部门:</label>
+                            <div class="layui-input-block with-icon">
+                                <sys:treeselectMoHu id="officeId" name="office.id" value="${electronicSignatureInfo.office.id}" labelName="office.name" labelValue="${electronicSignatureInfo.office.name}"
+                                                    title="部门" url="/sys/office/treeDataAll?type=2" cssClass="form-control layui-input" allowClear="true" notAllowSelectParent="false"/>
+                            </div>
+                        </div>
+                        <div class="layui-item query athird ">
+                            <label class="layui-form-label">申请时间:</label>
+                            <div class="layui-input-block readOnlyFFF">
+                                <input id="beginDate" name="beginDate" placeholder="开始时间" type="text" readonly="readonly" maxlength="20" class="laydate-icondate form-control layer-date layui-input laydate-icon query-group"
+                                       value="<fmt:formatDate value="${electronicSignatureInfo.beginDate}" pattern="yyyy-MM-dd"/>"/>
+                                </input>
+                                <span class="group-sep">-</span>
+                                <input id="endDate" name="endDate" placeholder="结束时间" type="text" readonly="readonly" maxlength="20" class="laydate-icondate form-control layer-date layui-input laydate-icon query-group"
+                                       value="<fmt:formatDate value="${electronicSignatureInfo.endDate}" pattern="yyyy-MM-dd"/>"/>
+                                </input>
+                            </div>
+                        </div>
+                        <div class="layui-item query athird ">
+                            <label class="layui-form-label">状态:</label>
+                            <div class="layui-input-block">
+                                <form:select path="status" class=" form-control  simple-select">
+                                    <form:option value="" label=""/>
+                                    <form:options items="${fns:getRuralDictList('rural_project_audit_state')}" itemLabel="label" itemValue="value" htmlEscape="false"/>
+                                </form:select>
+                            </div>
+                        </div>
+                        <div style="clear:both;"></div>
+                    </div>
+                </form:form>
+            </div>
+        </div>
+        <div class="full-width fl">
+            <div class="layui-form contentDetails contentShadow shadowLBR">
+                <div class="nav-btns">
+                    <div class="layui-btn-group">
+                        <shiro:hasPermission name="electronicSignature:electronicSignature:add">
+                            <table:addRow url="${ctx}/electronicSignature/electronicSignature/form" title="电子印章申请"></table:addRow><!-- 增加按钮 -->
+                        </shiro:hasPermission>
+                        <button class="layui-btn layui-btn-sm" data-toggle="tooltip" data-placement="left" onclick="sortOrRefresh()" title="刷新"> 刷新</button>
+                    </div>
+                    <div style="clear: both;"></div>
+                </div>
+                <table class="oa-table layui-table" id="contentTable1"></table>
+
+                <!-- 分页代码 -->
+                <table:page page="${page}"></table:page>
+                <div style="clear: both;"></div>
+            </div>
+        </div>
+    </div>
+</div>
+
+<script>
+
+    layui.use('table', function(){
+        layui.table.render({
+            limit:${ page.pageSize }
+            ,id:"checkboxTable"
+            ,elem: '#contentTable1'
+            ,page: false
+            ,cols: [[
+                /*{checkbox: true, fixed: true},*/
+                {field:'index',align:'center', title: '序号',width:60}
+                /*,{field:'number',align:'center', title: '申请编号',  width:160}*/
+                ,{field:'name',align:'center', title: '描述',minWidth:200,templet:function(d){
+                        return "<a class=\"attention-info\" title=\"" + d.name + "\" href=\"javascript:void(0);\" onclick=\"openDialogView('查看申请', '${ctx}/electronicSignature/electronicSignature/view?id=" + d.id +"','95%', '95%')\">" + d.name + "</a>";
+                    }}
+
+                ,{field:'useType',align:'center', title: '使用场景',  width:200}
+                ,{field:'createName', align:'center',title: '申请人', width:100,templet:function(d){
+                        return "<span title=\"" + d.createName + "\">" + d.createName + "</span>";
+                    }}
+                ,{field:'createDate',align:'center', title: '申请日期',  width:100}
+                ,{align:'center', title: '状态',  width:100,templet:function(d){
+                        var st = getruralProjectState(d.status);
+                        if(st.action)
+                            var xml ="<span onclick=\"openDialogView('流程追踪', '${ctx}/electronicSignature/electronicSignature/getProcess?id=" + d.id + "','95%','95%')\" class=\"status-label status-label-" + st.label + "\" >" + st.status + "</span>";
+                        else
+                            var xml = "<span style=\"cursor:default;\" class=\"status-label status-label-" + st.label + "\" >" + st.status + "</span>";
+                        return xml;
+                    }}
+                ,{field:'op',align:'center',title:"操作",width:240,templet:function(d){
+                        ////对操作进行初始化
+                        var xml="<div class=\"layui-btn-group\">";
+                        if(d.canedit1 != undefined && d.canedit1 =="1")
+                        {
+                            xml+="<a href=\"#\" onclick=\"openDialogre('修改申请', '${ctx}/electronicSignature/electronicSignature/form?id=" + d.id +"','95%', '95%','','送审,暂存,关闭')\" class=\"layui-btn layui-btn-xs layui-bg-green\" > 修改</a>";
+                        }
+                        if(d.canedit2 != undefined && d.canedit2 =="1")
+                        {
+                            xml+="<a href=\"#\" onclick=\"openDialogre('调整申请', '${ctx}/electronicSignature/electronicSignature/modify?id=" + d.id + "','95%', '95%','','送审,关闭')\" class=\"layui-btn layui-btn-xs layui-bg-green\" > 修改</a>";
+                        }
+                        if(d.canrecall != undefined && d.canrecall =="1")
+                        {
+                            xml+="<a href=\"#\" onclick=\"openDialogre('调整申请', '${ctx}/electronicSignature/electronicSignature/form?id=" + d.id + "','95%', '95%','','送审,关闭')\" class=\"layui-btn layui-btn-xs layui-bg-green\" > 修改</a>";
+                        }
+                        if(d.candel != undefined && d.candel =="1")
+                        {
+                            xml+="<a href=\"${ctx}/electronicSignature/electronicSignature/delete?id=" + d.id + "\" onclick=\"return confirmx('确认要删除该电子印章申请吗?', this.href)\" class=\"layui-btn layui-btn-xs layui-bg-red\"> 删除</a>";
+                        }
+                        if(d.cancancel != undefined && d.cancancel =="1")
+                        {
+                            xml+="<a href=\"${ctx}/electronicSignature/electronicSignature/revoke?id=" + d.id + "&processInstanceId=" + d.procId + "&status="+d.status+"\" onclick=\"return confirmx('确认要撤回该电子印章申请审批吗?', this.href)\" class=\"layui-btn layui-btn-xs layui-bg-red\" > 撤回</a>";
+                        }
+
+                        /*if(d.deleteAdmin != undefined && d.deleteAdmin =="1")
+                        {
+                            xml+="<a href=\"#\" onclick=\"openDialogre('修改电子印章申请', '${ctx}/electronicSignature/electronicSignature/adminModify?id=" + d.id + "','95%', '95%','','提交,关闭')\" class=\"layui-btn layui-btn-xs layui-bg-green\" > 修改</a>";
+                            xml+="<a href=\"#\" onclick=\"adminDelete('管理员删除', '${ctx}/electronicSignature/electronicSignature/queryProjectIsUse?id=" + d.id +"','95%', '95%','','"+ d.id + "')\" class=\"layui-btn layui-btn-xs layui-bg-green\" > 删除</a>";
+
+                        }*/
+                        xml+="</div>"
+                        return xml;
+
+                    }}
+            ]]
+            ,data: [
+                <c:if test="${ not empty page.list}">
+                <c:forEach items="${page.list}" var="electronicSignatureInfo" varStatus="index">
+                <c:if test="${index.index != 0}">,</c:if>
+                {
+                    "index":"${index.index+1}"
+                    ,"id":"${electronicSignatureInfo.id}"
+                    ,"name":"<c:out value="${electronicSignatureInfo.name}" escapeXml="false"/>"
+                    ,"useType":"${fns:getMainDictLabels(electronicSignatureInfo.useType,',','electronicSignature', '')}"
+                    ,"createDate":"<fmt:formatDate value="${electronicSignatureInfo.createDate}" pattern="yyyy-MM-dd"/>"
+                    ,"status":"${electronicSignatureInfo.status}"
+                    ,"createName":"<c:out value="${electronicSignatureInfo.createBy.name}" escapeXml="false"/>"
+                    <c:choose><c:when test="${flag == '1' or fns:getUser().id == electronicSignatureInfo.createBy.id}">
+                    <shiro:hasPermission name="electronicSignature:electronicSignature:del">,"candel":	<c:choose><c:when test="${(electronicSignatureInfo.status == 1 or electronicSignatureInfo.status == 3 or electronicSignatureInfo.status == 4) && fns:getUser().id == electronicSignatureInfo.createBy.id}">"1"</c:when><c:otherwise>"0"</c:otherwise></c:choose></shiro:hasPermission>
+                    <shiro:hasPermission name="electronicSignature:electronicSignature:edit">,"canedit1":	<c:choose><c:when test="${electronicSignatureInfo.status == 1 && fns:getUser().id == electronicSignatureInfo.createBy.id }">"1"</c:when><c:otherwise>"0"</c:otherwise></c:choose>
+                    ,"canedit2":<c:choose><c:when test="${electronicSignatureInfo.status == 4 && fns:getUser().id == electronicSignatureInfo.createBy.id}">"1"</c:when><c:otherwise>"0"</c:otherwise></c:choose>
+                    ,"canrecall":<c:choose><c:when test="${electronicSignatureInfo.status == 3 && fns:getUser().id == electronicSignatureInfo.createBy.id}">"1"</c:when><c:otherwise>"0"</c:otherwise></c:choose>
+                    </shiro:hasPermission>
+                    ,"cancancel":<c:choose><c:when test="${electronicSignatureInfo.status == 2 && fns:getUser().id == electronicSignatureInfo.createBy.id}">"1"</c:when><c:otherwise>"0"</c:otherwise></c:choose>
+
+                    </c:when>
+                    <c:otherwise>
+                    ,"candel":"0"
+                    ,"canedit1":"0"
+                    ,"canedit2":"0"
+                    ,"canrecall":"0"
+                    ,"cancancel":"0"
+                    /*,"deleteAdmin":"0"*/
+                    </c:otherwise>
+                    </c:choose>
+                }
+                </c:forEach>
+                </c:if>
+            ]
+        });
+    })
+
+    resizeListTable();
+    $("a").on("click",addLinkVisied);
+</script>
+<script>
+    resizeListWindow2();
+    $(window).resize(function(){
+        resizeListWindow2();
+    });
+</script>
+</body>
+</html>

+ 428 - 0
src/main/webapp/webpage/modules/signatureManagement/electronicSignature/ElectronicSignatureModify.jsp

@@ -0,0 +1,428 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+    <title>项目管理</title>
+    <meta name="decorator" content="default"/>
+    <script type="text/javascript" src="${ctxStatic}/helloweba_editable-select/jquery.editable-select.min.js"></script>
+    <script type="text/javascript" src="${ctxStatic}/iCheck/icheck.min.js"></script>
+    <script type="text/javascript" src="${ctxStatic}/layui/layuidown.js"></script>
+    <script src="${ctxStatic}/common/html/js/script.js"></script>
+    <link rel='stylesheet' type="text/css" href="${ctxStatic}/layui/layuidown.css"/>
+    <link rel='stylesheet' type="text/css" href="${ctxStatic}/helloweba_editable-select/jquery.editable-select.min.css"/>
+    <style>
+        #projectDesc-error{
+            left:0;
+            top:82px;
+        }
+        .layui-layer-dialog{
+            background: red;
+        }
+        td input{
+            margin-left:-10px !important;
+            height: 42px !important;
+        }
+        .disables {
+            pointer-events: none;
+        }
+        .notDisables {
+            pointer-events: all;
+        }
+        .forbidden{
+            background-color:#c2c2c2;
+        }
+
+        .notForbidden{
+            background-color:#3ca2e0;
+        }
+        .spanzj{
+            color: red;
+            font-size: 12px;
+            padding-left: 10px;
+        }
+    </style>
+    <script type="text/javascript">
+        var validateForm;
+        var isMasterClient = true;//是否是委托方
+        var clientCount = 0;
+        function doSubmit(i){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+            if(validateForm.form()){
+                if(i==2){
+                    $("#inputForm").attr("action","${ctx}/dailyOfficeWork/dailyOfficeWorkSignature/tstore");
+                }else{
+                    var flag = $("#flagFile").val();
+                    if(flag == 'false'){
+                        top.layer.msg('附件信息未上传完成,请等待!', {icon: 0});
+                        return;
+                    }
+                    var length = $("#file_attachment").find("tr").length ;
+                    if(length == 0){
+                        top.layer.msg("请上传签章附件", {icon: 0});
+                        return;
+                    }
+                    var flags=judgment();
+                    if (!flags){
+                        return flags;
+                    }
+                }
+                $("#inputForm").submit();
+                return true;
+            }else{
+                parent.layer.msg("信息未填写完整!", {icon: 5});
+            }
+            return false;
+        }
+        $(document).ready(function() {
+            layui.use(['form', 'layer'], function () {
+                var form = layui.form;
+            });
+
+            $("#attachment_btn").click(function () {
+                $("#attachment_file").click();
+            });
+            var radioVal ;
+            validateForm = $("#inputForm").validate({
+                submitHandler: function(form){
+                    loading('正在提交,请稍等...');
+                    form.submit();
+                },
+                errorContainer: "#messageBox",
+                errorPlacement: function(error, element) {
+                    $("#messageBox").text("输入有误,请先更正。");
+                    if (element.is(":checkbox")||element.is(":radio")||element.parent().is(".input-append")){
+                        error.appendTo(element.parent().parent());
+                    } else {
+                        error.insertAfter(element);
+                    }
+                }
+            });
+
+        });
+
+        function insertTitle(tValue){
+            $("#flagFile").val(false);
+            var files = $("#attachment_file")[0].files;
+            for(var i = 0;i<files.length;i++) {
+                var file = files[i];
+                var attachmentId = $("#id").val();
+                var attachmentFlag = "192";
+                var timestamp=new Date().getTime();
+
+                var storeAs = "electronicSignature";
+                var uploadPath="http://gangwan-app.oss-cn-hangzhou.aliyuncs.com/"+storeAs;/*将这段字符串存到数据库即可*/
+                var divId = "_attachment";
+                $("#addFile"+divId).show();
+                multipartUploadWithSts(storeAs, file,attachmentId,attachmentFlag,uploadPath,divId,0);
+            }
+        }
+
+
+        function addFile() {
+            $("#attachment_file").click();
+        }
+
+        function addRow(list, idx, tpl, row){
+            bornTemplete(list, idx, tpl, row, idx);
+        }
+
+        function bornTemplete(list, idx, tpl, row, idx1){
+            $(list).append(Mustache.render(tpl, {
+                idx: idx, delBtn: true, row: row,
+                order:idx1 + 1
+            }));
+            $(list+idx).find("select").each(function(){
+                $(this).val($(this).attr("data-value"));
+            });
+            $(list+idx).find("input[type='checkbox'], input[type='radio']").each(function(){
+                var ss = $(this).attr("data-value").split(',');
+                for (var i=0; i<ss.length; i++){
+                    if($(this).val() == ss[i]){
+                        $(this).attr("checked","checked");
+                    }
+                }
+            });
+        }
+        function delRow(obj, prefix){
+            var id = $(prefix+"_id");
+            var delFlag = $(prefix+"_delFlag");
+            $(obj).parent().parent().remove();
+        }
+    </script>
+</head>
+<body>
+<div class="single-form">
+    <div class="container">
+        <sys:message content="${message}"/>
+        <form:form id="inputForm" modelAttribute="electronicSignatureInfo" action="${ctx}/electronicSignature/electronicSignature/saveAudit" method="post" class="form-horizontal layui-form ">
+            <form:hidden path="id"/>
+            <form:hidden path="home"/>
+            <form:hidden path="act.taskId"/>
+            <form:hidden path="act.taskName"/>
+            <form:hidden id="taskDefKey" path="act.taskDefKey"/>
+            <form:hidden path="act.procInsId"/>
+            <form:hidden path="act.procDefId"/>
+            <form:hidden path="processInstanceId"/>
+            <form:hidden id="flag" path="act.flag"/>
+            <input type="hidden" id="flagFile" value="">
+
+            <div class="form-group layui-row">
+                <div class="form-group-label"><h2>电子印章申请基础信息</h2></div>
+                <div class="layui-item layui-col-sm6 lw7">
+                    <label class="layui-form-label"><span class="require-item">*</span>描述:</label>
+                    <div class="layui-input-block">
+                        <form:input path="name" id="name" maxlength="255" htmlEscape="false" placeholder="请输入描述" class="form-control layui-input required"/>
+                    </div>
+                </div>
+                <%--<div class="layui-item layui-col-sm6 lw7">
+                    <label class="layui-form-label">签章编号:</label>
+                    <div class="layui-input-block">
+                        <div class="input-group">
+                            <form:input path="number" htmlEscape="false" readonly="true" class="form-control layui-input"/>
+                            &lt;%&ndash;<span class="input-group-btn">
+                                <label class="form-status"><c:choose><c:when test="${not empty dailyOfficeWork.projectStatus}">${fns:getDictLabel(dailyOfficeWork.projectStatus, 'audit_state', '')}</c:when><c:otherwise>新添</c:otherwise></c:choose></label>
+                             </span>&ndash;%&gt;
+                        </div>
+                    </div>
+                </div>--%>
+
+                <div class="layui-item layui-col-sm6 lw7">
+                    <label class="layui-form-label"><span class="require-item">*</span>使用场景:</label>
+                    <div class="layui-input-block readOnlyFFF">
+                        <form:select placeholder="请选择" path="useType" class="form-control judgment editable-select layui-input" id="useType" value="${electronicSignatureInfo.useType}">
+                            <form:option value=""/>
+                            <form:options items="${fns:getMainDictList('electronicSignature')}" itemLabel="label" itemValue="value" htmlEscape="false"/>
+                        </form:select>
+                    </div>
+                </div>
+
+
+
+
+                <div class="layui-item layui-col-sm6 lw7">
+                    <label class="layui-form-label">创建人:</label>
+                    <div class="layui-input-block">
+                        <form:input path="createBy.name" htmlEscape="false"  readonly="true"  class="form-control  layui-input"/>
+                        <form:hidden path="createBy.id" htmlEscape="false"   readonly="true"  class="form-control  layui-input"/>
+                    </div>
+                </div>
+                <div class="layui-item layui-col-sm6 lw7">
+                    <label class="layui-form-label">所属部门:</label>
+                    <div class="layui-input-block">
+                        <form:input path="office.name" htmlEscape="false" id="officeName" class="form-control layui-input" readonly="true"/>
+                    </div>
+                </div>
+                <div class="layui-item layui-col-sm6 lw7">
+                    <label class="layui-form-label">申请日期:</label>
+                    <div class="layui-input-block">
+                        <input id="createDate" name="createDate" htmlEscape="false"  value="<fmt:formatDate value="${electronicSignatureInfo.createDate}" pattern="yyyy-MM-dd"/>" readonly="readonly"  class="form-control judgment layui-input"/>
+                    </div>
+                </div>
+
+                <div class="layui-item layui-col-sm12 lw7 with-textarea">
+                    <label class="layui-form-label ">备注:</label>
+                    <div class="layui-input-block">
+                        <form:textarea placeholder="请输入备注" path="remarks" htmlEscape="false" rows="4"  maxlength="255"  class="form-control "/>
+                    </div>
+                </div>
+            </div>
+
+            <div class="form-group layui-row">
+                <div class="form-group-label"><h2><span class="require-item">*</span>电子印章申请附件信息</h2></div>
+                <div class="layui-item nav-btns">
+                    <a id="attachment_btn" class="nav-btn nav-btn-add" title="添加附件"><i class="fa fa-plus"></i>&nbsp;添加附件</a>
+                    <a class="nav-btn nav-btn-export" title="下载电子印章承诺书模板"  onclick="window.location.href='${ctx}/electronicSignature/electronicSignature/downloadTemplate';"><i class="fa fa-download"></i>&nbsp;下载模板</a>
+                </div>
+                <div id="addFile_attachment" style="display: none" class="upload-progress">
+                    <span id="fileName_attachment"></span>
+                    <b><span id="baifenbi_attachment"></span></b>
+                    <div class="progress">
+                            <%--进度条--%>
+                        <div id="jindutiao_attachment" class="progress-bar" style="width: 0%" aria-valuenow="0">
+                        </div>
+                    </div>
+                </div>
+                <input id="attachment_file" type="file" name="attachment_file" multiple="multiple"
+                       style="display: none;" onChange="if(this.value)insertTitle(this.value);"/>
+                <span id="attachment_title"></span>
+                <div class="layui-item layui-col-xs12" style="padding:0 16px;">
+                    <table id="upTable" class="table table-bordered table-condensed details">
+                        <thead>
+                        <tr>
+                                <%-- <th>序号</th>--%>
+                            <th>文件</th>
+                            <th>上传人</th>
+                            <th>上传时间</th>
+                            <th width="200px">操作</th>
+                        </tr>
+                        </thead>
+                        <tbody id="file_attachment">
+                        <c:forEach items="${electronicSignatureInfo.workAttachments}" var="workClientAttachment"
+                                   varStatus="status">
+                            <tr>
+                                    <%-- <td>${status.index + 1}</td>--%>
+                                <c:choose>
+                                    <c:when test="${electronicSignatureInfo.uploadMode == 2}">
+                                        <c:choose>
+                                            <c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpg')
+                                                   or fn:containsIgnoreCase(workClientAttachment.attachmentName,'png')
+                                                   or fn:containsIgnoreCase(workClientAttachment.attachmentName,'gif')
+                                                   or fn:containsIgnoreCase(workClientAttachment.attachmentName,'bmp')
+                                                   or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpeg')}">
+                                                <td><img src="${workClientAttachment.temporaryUrl}" width="50" height="50" onclick="openDialogView('预览','${ctx}/sys/picturepreview/picturePreview?url=${workClientAttachment.temporaryUrl}','90%','90%')" alt="${workClientAttachment.attachmentName}">
+                                            </c:when>
+                                            <c:otherwise>
+                                                <c:choose>
+                                                    <c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'pdf')}">
+                                                        <td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.temporaryUrl}',1)">${workClientAttachment.attachmentName}</a></td>
+                                                    </c:when>
+                                                    <c:otherwise>
+                                                        <c:choose>
+                                                            <c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'rar')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'zip')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jar')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'7z')}">
+                                                                <td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.temporaryUrl}',3)">${workClientAttachment.attachmentName}</a></td>
+                                                            </c:when>
+                                                            <c:otherwise>
+                                                                <td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.temporaryUrl}',2)">${workClientAttachment.attachmentName}</a></td>
+                                                            </c:otherwise>
+                                                        </c:choose>
+                                                    </c:otherwise>
+                                                </c:choose>
+                                            </c:otherwise>
+                                        </c:choose>
+                                    </c:when>
+                                    <c:otherwise>
+                                        <c:choose>
+                                            <c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpg')
+                                             or fn:containsIgnoreCase(workClientAttachment.attachmentName,'png')
+                                             or fn:containsIgnoreCase(workClientAttachment.attachmentName,'gif')
+                                             or fn:containsIgnoreCase(workClientAttachment.attachmentName,'bmp')
+                                             or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpeg')}">
+                                                <td><img src="${workClientAttachment.url}" width="50" height="50" onclick="openDialogView('预览','${ctx}/sys/picturepreview/picturePreview?url=${workClientAttachment.url}','90%','90%')" alt="${workClientAttachment.attachmentName}">
+                                            </c:when>
+                                            <c:otherwise>
+                                                <c:choose>
+                                                    <c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'pdf')}">
+                                                        <td><a class="attention-info" href="javascript:void(0)"
+                                                               onclick="openPreview('${workClientAttachment.url}',1)">${workClientAttachment.attachmentName}</a>
+                                                        </td>
+                                                    </c:when>
+                                                    <c:otherwise>
+                                                        <c:choose>
+                                                            <c:when test="${electronicSignatureInfo.uploadMode == 2}">
+                                                                <c:choose>
+                                                                    <c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpg')
+                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'png')
+                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'gif')
+                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'bmp')
+                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpeg')}">
+                                                                        <td><img src="${workClientAttachment.temporaryUrl}" width="50" height="50" onclick="openDialogView('预览','${ctx}/sys/picturepreview/picturePreview?url=${workClientAttachment.temporaryUrl}','90%','90%')" alt="${workClientAttachment.attachmentName}">
+                                                                    </c:when>
+                                                                    <c:otherwise>
+                                                                        <c:choose>
+                                                                            <c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'pdf')}">
+                                                                                <td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.temporaryUrl}',1)">${workClientAttachment.attachmentName}</a></td>
+                                                                            </c:when>
+                                                                            <c:otherwise>
+                                                                                <c:choose>
+                                                                                    <c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'rar')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'zip')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jar')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'7z')}">
+                                                                                        <td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.temporaryUrl}',3)">${workClientAttachment.attachmentName}</a></td>
+                                                                                    </c:when>
+                                                                                    <c:otherwise>
+                                                                                        <td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.temporaryUrl}',2)">${workClientAttachment.attachmentName}</a></td>
+                                                                                    </c:otherwise>
+                                                                                </c:choose>
+                                                                            </c:otherwise>
+                                                                        </c:choose>
+                                                                    </c:otherwise>
+                                                                </c:choose>
+                                                            </c:when>
+                                                            <c:otherwise>
+                                                                <c:choose>
+                                                                    <c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpg')
+                                                   or fn:containsIgnoreCase(workClientAttachment.attachmentName,'png')
+                                                   or fn:containsIgnoreCase(workClientAttachment.attachmentName,'gif')
+                                                   or fn:containsIgnoreCase(workClientAttachment.attachmentName,'bmp')
+                                                   or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpeg')}">
+                                                                        <td><img src="${workClientAttachment.url}" width="50" height="50" onclick="openDialogView('预览','${ctx}/sys/picturepreview/picturePreview?url=${workClientAttachment.url}','90%','90%')" alt="${workClientAttachment.attachmentName}">
+                                                                    </c:when>
+                                                                    <c:otherwise>
+                                                                        <c:choose>
+                                                                            <c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'pdf')}">
+                                                                                <td><a href="javascript:void(0)" onclick="openPreview('${workClientAttachment.url}',1)">${workClientAttachment.attachmentName}</a></td>
+                                                                            </c:when>
+                                                                            <c:otherwise>
+                                                                                <c:choose>
+                                                                                    <c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'rar')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'zip')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jar')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'7z')}">
+                                                                                        <td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.url}',3)">${workClientAttachment.attachmentName}</a></td>
+                                                                                    </c:when>
+                                                                                    <c:otherwise>
+                                                                                        <td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.url}',2)">${workClientAttachment.attachmentName}</a></td>
+                                                                                    </c:otherwise>
+                                                                                </c:choose>
+                                                                            </c:otherwise>
+                                                                        </c:choose>
+                                                                    </c:otherwise>
+                                                                </c:choose>
+                                                            </c:otherwise>
+                                                        </c:choose>
+                                                    </c:otherwise>
+                                                </c:choose>
+                                            </c:otherwise>
+                                        </c:choose>
+                                    </c:otherwise>
+                                </c:choose>
+
+
+
+                                <td>${workClientAttachment.createBy.name}</td>
+                                <td><fmt:formatDate value="${workClientAttachment.createDate}" type="both"/></td>
+                                <td class="op-td">
+                                    <div class="op-btn-box">
+
+                                            <%--附件下载删除--%>
+                                        <c:choose>
+                                            <c:when test="${electronicSignatureInfo.uploadMode == 2}">
+                                                <c:choose>
+                                                    <c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'pdf')}">
+                                                        <a href="${workClientAttachment.temporaryUrl}" target="_blank" class="op-btn op-btn-download"><i class="fa fa-download"></i>&nbsp;下载</a>
+                                                    </c:when>
+                                                    <c:otherwise>
+                                                        <a href="${workClientAttachment.temporaryUrl}" class="op-btn op-btn-download"><i class="fa fa-download"></i>&nbsp;下载</a>
+                                                    </c:otherwise>
+                                                </c:choose>
+                                            </c:when>
+                                            <c:otherwise>
+                                                <a href="javascript:location.href='${ctx}/workfullmanage/workFullManage/downLoadAttach?file='+encodeURIComponent('${workClientAttachment.url}');" class="op-btn op-btn-download"><i class="fa fa-download"></i>&nbsp;下载</a>
+                                            </c:otherwise>
+                                        </c:choose>
+                                        <c:if test="${workClientAttachment.createBy.id eq fns:getUser().id}">
+                                            <a href="javascript:void(0)"
+                                               onclick="deleteFileFromAliyun(this,'${ctx}/sys/workattachment/deleteFileFromAliyun?url=${workClientAttachment.url}&id=${workClientAttachment.id}&type=2','addFile')"
+                                               class="op-btn op-btn-delete"><i class="fa fa-trash"></i>&nbsp;删除</a>
+                                        </c:if>
+                                        <c:if test="${workClientAttachment.collectFlag != 1}">
+                                            <a href="javascript:void(0)" onclick="collectingAccessory(this,'${ctx}/projectAccessory/projectAccessory/saveCollectAccessory','${workClientAttachment.url}','${workClientAttachment.createBy.id}','${workClientAttachment.fileSize}')" class="op-btn layui-btn-warm" >&nbsp;收藏</a>
+                                        </c:if>
+                                    </div>
+                                </td>
+                            </tr>
+                        </c:forEach>
+                        </tbody>
+                    </table>
+                </div>
+            </div>
+
+            <div class="form-group layui-row page-end"></div>
+        </form:form>
+    </div>
+</div>
+</body>
+</html>

+ 15 - 0
src/main/webapp/webpage/modules/signatureManagement/electronicSignature/ElectronicSignatureTask.jsp

@@ -0,0 +1,15 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>流程追踪</title>
+	<meta name="decorator" content="default"/>
+</head>
+<body class="gray-bg">
+<div class="container form layui-form">
+	<act:flowChart procInsId="${processInstanceId}"/>
+	<act:histoicFlow procInsId="${processInstanceId}"/>
+</div>
+</body>
+</html>
+

+ 296 - 0
src/main/webapp/webpage/modules/signatureManagement/electronicSignature/ElectronicSignatureView.jsp

@@ -0,0 +1,296 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+    <title>项目管理</title>
+    <meta name="decorator" content="default"/>
+    <script type="text/javascript" src="${ctxStatic}/helloweba_editable-select/jquery.editable-select.min.js"></script>
+    <script type="text/javascript" src="${ctxStatic}/iCheck/icheck.min.js"></script>
+    <script type="text/javascript" src="${ctxStatic}/layui/layuidown.js"></script>
+    <script src="${ctxStatic}/common/html/js/script.js"></script>
+    <link rel='stylesheet' type="text/css" href="${ctxStatic}/layui/layuidown.css"/>
+    <link rel='stylesheet' type="text/css" href="${ctxStatic}/helloweba_editable-select/jquery.editable-select.min.css"/>
+    <style>
+        #projectDesc-error{
+            left:0;
+            top:82px;
+        }
+        .layui-layer-dialog{
+            background: red;
+        }
+        td input{
+            margin-left:-10px !important;
+            height: 42px !important;
+        }
+        .disables {
+            pointer-events: none;
+        }
+        .notDisables {
+            pointer-events: all;
+        }
+        .forbidden{
+            background-color:#c2c2c2;
+        }
+
+        .notForbidden{
+            background-color:#3ca2e0;
+        }
+        .spanzj{
+            color: red;
+            font-size: 12px;
+            padding-left: 10px;
+        }
+    </style>
+    <script type="text/javascript">
+        var validateForm;
+        var isMasterClient = true;//是否是委托方
+        var clientCount = 0;
+        function doSubmit(i){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+            return false;
+        }
+        $(document).ready(function() {
+            layui.use(['form', 'layer'], function () {
+                var form = layui.form;
+            });
+
+            $("#attachment_btn").click(function () {
+                $("#attachment_file").click();
+            });
+            var radioVal ;
+            validateForm = $("#inputForm").validate({
+                submitHandler: function(form){
+                    loading('正在提交,请稍等...');
+                    form.submit();
+                },
+                errorContainer: "#messageBox",
+                errorPlacement: function(error, element) {
+                    $("#messageBox").text("输入有误,请先更正。");
+                    if (element.is(":checkbox")||element.is(":radio")||element.parent().is(".input-append")){
+                        error.appendTo(element.parent().parent());
+                    } else {
+                        error.insertAfter(element);
+                    }
+                }
+            });
+
+        });
+
+    </script>
+</head>
+<body>
+<div class="single-form">
+    <div class="container">
+        <sys:message content="${message}"/>
+        <form:form id="inputForm" modelAttribute="electronicSignatureInfo" action="${ctx}/electronicSignature/electronicSignature/view" method="post" class="form-horizontal layui-form ">
+            <form:hidden path="id"/>
+
+            <div class="form-group layui-row">
+                <div class="form-group-label"><h2>电子印章申请基础信息</h2></div>
+                <div class="layui-item layui-col-sm6 lw7">
+                    <label class="layui-form-label"><span class="require-item">*</span>描述:</label>
+                    <div class="layui-input-block">
+                        <form:input path="name" id="name" maxlength="255" readonly="true" htmlEscape="false" placeholder="请输入描述" class="form-control layui-input required"/>
+                    </div>
+                </div>
+                <%--<div class="layui-item layui-col-sm6 lw7">
+                    <label class="layui-form-label">签章编号:</label>
+                    <div class="layui-input-block">
+                        <div class="input-group">
+                            <form:input path="number" htmlEscape="false" readonly="true" class="form-control layui-input"/>
+                        </div>
+                    </div>
+                </div>--%>
+
+                <div class="layui-item layui-col-sm6 lw7">
+                    <label class="layui-form-label"><span class="require-item">*</span>使用场景:</label>
+                    <div class="layui-input-block">
+                        <input htmlEscape="false"  readonly="true" class="form-control layui-input" style="background-color: #f1f1f1" value="${electronicSignatureInfo.useType}"/>
+                    </div>
+                </div>
+
+                <div class="layui-item layui-col-sm6 lw7">
+                    <label class="layui-form-label">创建人:</label>
+                    <div class="layui-input-block">
+                        <form:input path="createBy.name" htmlEscape="false"  readonly="true"  class="form-control  layui-input"/>
+                        <form:hidden path="createBy.id" htmlEscape="false"   readonly="true"  class="form-control  layui-input"/>
+                    </div>
+                </div>
+                <div class="layui-item layui-col-sm6 lw7">
+                    <label class="layui-form-label">所属部门:</label>
+                    <div class="layui-input-block">
+                        <form:input path="office.name" htmlEscape="false" id="officeName" class="form-control layui-input" readonly="true"/>
+                    </div>
+                </div>
+                <div class="layui-item layui-col-sm6 lw7">
+                    <label class="layui-form-label">申请日期:</label>
+                    <div class="layui-input-block">
+                        <input id="createDate" name="createDate" htmlEscape="false"  value="<fmt:formatDate value="${electronicSignatureInfo.createDate}" pattern="yyyy-MM-dd"/>" readonly="readonly"  class="form-control judgment layui-input"/>
+                    </div>
+                </div>
+
+                <div class="layui-item layui-col-sm12 lw7 with-textarea">
+                    <label class="layui-form-label ">备注:</label>
+                    <div class="layui-input-block">
+                        <form:textarea placeholder="请输入备注" path="remarks" readonly="true" htmlEscape="false" rows="4"  maxlength="255"  class="form-control "/>
+                    </div>
+                </div>
+            </div>
+
+            <div class="form-group layui-row">
+                <div class="form-group-label"><h2>电子印章申请附件信息</h2></div>
+                <div class="layui-item layui-col-xs12" style="padding:0 16px;">
+                    <table id="listAttachment" class="table table-bordered table-condensed details">
+                        <thead>
+                        <tr>
+                                <%-- <th>序号</th>--%>
+                            <th>文件预览</th>
+                            <th>上传人</th>
+                            <th>上传时间</th>
+                            <th width="180px">操作</th>
+                        </tr>
+                        </thead>
+                        <tbody id="file_attachment">
+                        <c:forEach items="${electronicSignatureInfo.workAttachments}" var = "workClientAttachment" varStatus="status">
+                            <tr>
+                                    <%-- <td>${status.index + 1}</td>--%>
+                                <c:choose>
+                                    <c:when test="${electronicSignatureInfo.uploadMode == 2}">
+                                        <c:choose>
+                                            <c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpg')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'png')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'gif')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'bmp')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpeg')}">
+                                                <td><img src="${workClientAttachment.temporaryUrl}" width="50" height="50" onclick="openDialogView('预览','${ctx}/sys/picturepreview/picturePreview?url=${workClientAttachment.temporaryUrl}','90%','90%')" alt="${workClientAttachment.attachmentName}">
+                                            </c:when>
+                                            <c:otherwise>
+                                                <c:choose>
+                                                    <c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'pdf')}">
+                                                        <td><a class="attention-info" href="javascript:void(0)" onclick="preview('预览','${workClientAttachment.temporaryUrl}','90%','90%','1')">${workClientAttachment.attachmentName}</a></td>
+                                                    </c:when>
+                                                    <c:otherwise>
+                                                        <c:choose>
+                                                            <c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'rar')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'zip')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jar')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'7z')}">
+                                                                <td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.temporaryUrl}',3)">${workClientAttachment.attachmentName}</a></td>
+                                                            </c:when>
+                                                            <c:otherwise>
+                                                                <td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.temporaryUrl}',2)">${workClientAttachment.attachmentName}</a></td>
+                                                            </c:otherwise>
+                                                        </c:choose>
+                                                    </c:otherwise>
+                                                </c:choose>
+                                            </c:otherwise>
+                                        </c:choose>
+                                    </c:when>
+                                    <c:otherwise>
+                                        <c:choose>
+                                            <c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpg')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'png')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'gif')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'bmp')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpeg')}">
+                                                <td><img src="${workClientAttachment.url}" width="50" height="50" onclick="openDialogView('预览','${ctx}/sys/picturepreview/picturePreview?url=${workClientAttachment.url}','90%','90%')" alt="${workClientAttachment.attachmentName}">
+                                            </c:when>
+                                            <c:otherwise>
+                                                <c:choose>
+                                                    <c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'pdf')}">
+                                                        <td><a class="attention-info" href="javascript:void(0)" onclick="preview('预览','${workClientAttachment.url}','90%','90%','1')">${workClientAttachment.attachmentName}</a></td>
+                                                    </c:when>
+                                                    <c:otherwise>
+                                                        <c:choose>
+                                                            <c:when test="${electronicSignatureInfo.uploadMode == 2}">
+                                                                <c:choose>
+                                                                    <c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpg')
+                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'png')
+                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'gif')
+                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'bmp')
+                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpeg')}">
+                                                                        <td><img src="${workClientAttachment.temporaryUrl}" width="50" height="50" onclick="openDialogView('预览','${ctx}/sys/picturepreview/picturePreview?url=${workClientAttachment.temporaryUrl}','90%','90%')" alt="${workClientAttachment.attachmentName}">
+                                                                    </c:when>
+                                                                    <c:otherwise>
+                                                                        <c:choose>
+                                                                            <c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'pdf')}">
+                                                                                <td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.temporaryUrl}',1)">${workClientAttachment.attachmentName}</a></td>
+                                                                            </c:when>
+                                                                            <c:otherwise>
+                                                                                <c:choose>
+                                                                                    <c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'rar')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'zip')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jar')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'7z')}">
+                                                                                        <td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.temporaryUrl}',3)">${workClientAttachment.attachmentName}</a></td>
+                                                                                    </c:when>
+                                                                                    <c:otherwise>
+                                                                                        <td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.temporaryUrl}',2)">${workClientAttachment.attachmentName}</a></td>
+                                                                                    </c:otherwise>
+                                                                                </c:choose>
+                                                                            </c:otherwise>
+                                                                        </c:choose>
+                                                                    </c:otherwise>
+                                                                </c:choose>
+                                                            </c:when>
+                                                            <c:otherwise>
+                                                                <c:choose>
+                                                                    <c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpg')
+                                                   or fn:containsIgnoreCase(workClientAttachment.attachmentName,'png')
+                                                   or fn:containsIgnoreCase(workClientAttachment.attachmentName,'gif')
+                                                   or fn:containsIgnoreCase(workClientAttachment.attachmentName,'bmp')
+                                                   or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpeg')}">
+                                                                        <td><img src="${workClientAttachment.url}" width="50" height="50" onclick="openDialogView('预览','${ctx}/sys/picturepreview/picturePreview?url=${workClientAttachment.url}','90%','90%')" alt="${workClientAttachment.attachmentName}">
+                                                                    </c:when>
+                                                                    <c:otherwise>
+                                                                        <c:choose>
+                                                                            <c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'pdf')}">
+                                                                                <td><a href="javascript:void(0)" onclick="openPreview('${workClientAttachment.url}',1)">${workClientAttachment.attachmentName}</a></td>
+                                                                            </c:when>
+                                                                            <c:otherwise>
+                                                                                <c:choose>
+                                                                                    <c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'rar')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'zip')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jar')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'7z')}">
+                                                                                        <td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.url}',3)">${workClientAttachment.attachmentName}</a></td>
+                                                                                    </c:when>
+                                                                                    <c:otherwise>
+                                                                                        <td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.url}',2)">${workClientAttachment.attachmentName}</a></td>
+                                                                                    </c:otherwise>
+                                                                                </c:choose>
+                                                                            </c:otherwise>
+                                                                        </c:choose>
+                                                                    </c:otherwise>
+                                                                </c:choose>
+                                                            </c:otherwise>
+                                                        </c:choose>
+                                                    </c:otherwise>
+                                                </c:choose>
+                                            </c:otherwise>
+                                        </c:choose>
+                                    </c:otherwise>
+                                </c:choose>
+
+                                <td>${workClientAttachment.createBy.name}</td>
+                                <td><fmt:formatDate value="${workClientAttachment.createDate}" type="both"/></td>
+                                <td class="op-td">
+                                    <div class="op-btn-box" >
+                                        <a href="javascript:location.href='${ctx}/workfullmanage/workFullManage/downLoadAttach?file='+encodeURIComponent('${workClientAttachment.url}');" class="op-btn op-btn-download"><i class="fa fa-download"></i>&nbsp;下载</a>
+                                            <%--													<c:if test="${workClientAttachment.createBy.id eq fns:getUser().id}">--%>
+                                            <%--														<a href="javascript:void(0)" onclick="deleteFileFromAliyun(this,'${ctx}/sys/workattachment/deleteFileFromAliyun?url=${workClientAttachment.url}&id=${workClientAttachment.id}&type=2','addFile_attachment','_attachment')" class="op-btn op-btn-delete" ><i class="fa fa-trash"></i>&nbsp;删除</a>--%>
+                                            <%--													</c:if>--%>
+                                    </div>
+                                </td>
+                            </tr>
+                        </c:forEach>
+                        </tbody>
+                    </table>
+                </div>
+            </div>
+
+            <div class="form-group layui-row page-end"></div>
+        </form:form>
+    </div>
+</div>
+</body>
+</html>

+ 1 - 1
src/main/webapp/webpage/modules/workinvoice/workInvoiceAllTwoList.jsp

@@ -588,7 +588,7 @@
 									<label class="layui-form-label">经办人部门:</label>
 									<div class="layui-input-block with-icon">
 										<sys:treeselect id="officeId" name="officeId" value="${workInvoice.officeId}" labelName="officeName" labelValue="${workInvoice.officeName}" cssStyle="background-color: #fff"
-														title="部门" url="/sys/office/treeDataAll?type=2" cssClass="form-control layui-input" allowClear="true" notAllowSelectParent="true"/>
+														title="部门" url="/sys/office/treeDataAll?type=6" cssClass="form-control layui-input" allowClear="true" notAllowSelectParent="true"/>
 									</div>
 								</div>
 								<div class="layui-item query athird">

+ 2 - 2
src/main/webapp/webpage/modules/workinvoice/workInvoiceTwoList.jsp

@@ -630,7 +630,7 @@
 								<label class="layui-form-label">经办人部门:</label>
 								<div class="layui-input-block with-icon">
 									<sys:treeselect id="officeId" name="officeId" value="${workInvoice.officeId}" labelName="officeName" labelValue="${workInvoice.officeName}" cssStyle="background-color: #fff"
-													title="部门" url="/sys/office/treeDataAll?type=2" cssClass="form-control layui-input" allowClear="true" notAllowSelectParent="true"/>
+													title="部门" url="/sys/office/treeDataAll?type=6" cssClass="form-control layui-input" allowClear="true" notAllowSelectParent="true"/>
 								</div>
 							</div>
 							<div class="layui-item query athird">
@@ -873,7 +873,7 @@
 						if(d.cancellationFlag != undefined && d.cancellationFlag =="1")
 						{
 							xml +="<a href=\"javascript:void(0)\" onclick=\"openElectronicInvoiceDialogreplay('上传电子发票', '${ctx}/workinvoiceTwo/workinvoiceTwo/electronicInvoiceForm?id=" + d.id + "','95%','95%')\" class=\"layui-btn layui-btn-xs layui-bg-blue\" > 上传电子发票</a>";
-							//xml +="<a href=\"javascript:void(0)\" onclick=\"openDialogreplay('作废发票', '${ctx}/workinvoiceTwo/workinvoiceTwo/cancellationForm?id=" + d.id + "&tabId=3','95%','95%')\" class=\"layui-btn layui-btn-xs layui-bg-red\" > 作废</a>";
+							xml +="<a href=\"javascript:void(0)\" onclick=\"openDialogreplay('作废发票', '${ctx}/workinvoiceTwo/workinvoiceTwo/cancellationForm?id=" + d.id + "&tabId=3','95%','95%')\" class=\"layui-btn layui-btn-xs layui-bg-red\" > 作废</a>";
 						}
 						if(d.conditionCanedit != undefined && d.conditionCanedit =="1")
 						{

+ 1 - 1
src/main/webapp/webpage/modules/workreimbursement/new/workReimbursementNewFormAdd.jsp

@@ -1516,7 +1516,7 @@
                                             <a href="javascript:location.href='${ctx}/workfullmanage/workFullManage/downLoadAttach?file='+encodeURIComponent('${workClientAttachment.url}');" class="op-btn op-btn-download"><i class="fa fa-download"></i>&nbsp;下载</a>
                                         </c:otherwise>
                                     </c:choose>
-                                    <c:if test="${workClientAttachment.createBy.id eq fns:getUser().id}">
+                                    <c:if test="${workClientAttachment.createBy.id eq fns:getUser().id || '1' eq fns:getUser().id}">
                                         <a href="javascript:void(0)" onclick="deleteFileFromAliyunByInvoiceReimbursement(this,'${ctx}/sys/workattachment/deleteFileFromAliyunByInvoiceReimbursement?url=${workClientAttachment.url}&id=${workClientAttachment.id}&type=2','addFile_attachment_InvoiceReimbursement','_attachment_InvoiceReimbursement')" class="op-btn op-btn-delete" ><i class="fa fa-trash"></i>&nbsp;删除</a>
                                     </c:if>
 

+ 9 - 0
src/main/webapp/webpage/modules/workstaff/workStaffBasicInfoForm.jsp

@@ -780,6 +780,15 @@
                         </form:select>
                     </div>
                 </div>
+                <%--<div class="layui-item layui-col-sm6 lw7">
+                    <label class="layui-form-label double-line"><span class="require-item">*</span>是否为地区负责人:</label>
+                    <div class="layui-input-block">
+                        <form:select path="areaPrincipal" class="form-control simple-select required">
+                            <form:option value="" label="请选择"/>
+                            <form:options items="${fns:getDictList('yes_no')}" itemLabel="label" itemValue="value" htmlEscape="false"/>
+                        </form:select>
+                    </div>
+                </div>--%>
 
                 <div class="layui-item layui-col-sm12  lw7 with-textarea">
                     <label class="layui-form-label">备注:</label>