Jelajahi Sumber

电子印章-地区负责人申请

sangwenwei 1 tahun lalu
induk
melakukan
91faca76d7

+ 242 - 0
src/main/java/com/jeeplus/modules/signatureManagement/electronicSignature/controller/DistrictDirectorApplicationController.java

@@ -0,0 +1,242 @@
+package com.jeeplus.modules.signatureManagement.electronicSignature.controller;
+
+import com.google.common.base.Strings;
+import com.google.common.collect.Maps;
+import com.jeeplus.common.config.Global;
+import com.jeeplus.common.utils.MyBeanUtils;
+import com.jeeplus.common.utils.StringUtils;
+import com.jeeplus.common.web.BaseController;
+import com.jeeplus.modules.act.entity.Act;
+import com.jeeplus.modules.act.service.ActTaskService;
+import com.jeeplus.modules.signatureManagement.electronicSignature.entity.DistrictDirectorApplication;
+import com.jeeplus.modules.signatureManagement.electronicSignature.entity.ElectronicSignatureInfo;
+import com.jeeplus.modules.signatureManagement.electronicSignature.service.DistrictDirectorApplicationService;
+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.utils.UserUtils;
+import com.jeeplus.modules.test.entity.act.ActTest;
+import com.jeeplus.modules.workclientinfo.entity.WorkClientInfo;
+import com.jeeplus.modules.workcontractinfo.entity.WorkCntractBorrow;
+import org.activiti.engine.runtime.ProcessInstance;
+import org.activiti.engine.task.Task;
+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.bind.annotation.ResponseBody;
+import org.springframework.web.servlet.mvc.support.RedirectAttributes;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 地区负责人申请controller
+ */
+@Controller
+@RequestMapping(value = "${adminPath}/districtDirectorApplication/districtDirectorApplication")
+public class DistrictDirectorApplicationController extends BaseController {
+
+    @Autowired
+    private ActTaskService actTaskService;
+
+    @Autowired
+    private DistrictDirectorApplicationService directorApplicationService;
+
+    @Autowired
+    private HttpServletRequest request;
+
+    @Autowired
+    private OfficeService officeService;
+
+
+    @ModelAttribute
+    public DistrictDirectorApplication get(@RequestParam(required=false) String id) {
+        DistrictDirectorApplication entity = null;
+        if (StringUtils.isNotBlank(id)){
+            entity = directorApplicationService.get(id);
+        }
+        if (entity == null){
+            entity = new DistrictDirectorApplication();
+        }
+        return entity;
+    }
+
+
+
+    @RequestMapping(value = "form")
+    public String form(DistrictDirectorApplication directorApplication, Model model){
+        if (directorApplication!=null&&StringUtils.isNotBlank(directorApplication.getId())) {
+            directorApplication = directorApplicationService.get(directorApplication.getId());
+        }else {
+            directorApplication.setCreateBy(UserUtils.getUser());
+            directorApplication.setOffice(UserUtils.getSelectOffice());
+            directorApplication.setCreateDate(new Date());
+        }
+        String view = "directorApplicationForm";
+        String tabId = request.getParameter("tabId");
+        if ("1".equals(tabId)){
+            view = "directorApplicationView";
+        }else if ("3".equals(tabId)){
+            ProcessInstance procIns = actTaskService.getProcIns(directorApplication.getProcessInstanceId());
+            if (procIns != null){
+                Task currentTaskInfo = actTaskService.getCurrentTaskInfo(procIns);
+                Act act = new Act();
+                act.setTaskId(currentTaskInfo.getId());
+                act.setTaskName(currentTaskInfo.getName());
+                act.setTaskDefKey(currentTaskInfo.getTaskDefinitionKey());
+                act.setProcDefId(currentTaskInfo.getProcessDefinitionId());
+                act.setProcInsId(currentTaskInfo.getProcessInstanceId());
+                act.setTask(currentTaskInfo);
+                directorApplication.setAct(act);
+                view = "directorApplicationModify";
+            }
+        }
+        // 环节编号
+        String taskDefKey = directorApplication.getAct().getTaskDefKey();
+        if (StringUtils.isNotBlank(taskDefKey) && "dqsqgly".equals(taskDefKey)){
+            view = "directorApplicationAudit";
+        }else if (StringUtils.isNotBlank(taskDefKey) && !taskDefKey.equals("modifyApply")){
+            view = "directorApplicationAudit";
+        }
+        model.addAttribute("directorApplication",directorApplication);
+        return "modules/signatureManagement/electronicSignature/"+view;
+    }
+
+
+    @RequestMapping(value = "save")
+    public String save(DistrictDirectorApplication directorApplication, Model model, RedirectAttributes attributes)throws Exception{
+        if (!beanValidator(model, directorApplication)){
+            return form(directorApplication, model);
+        }
+
+        User user = directorApplication.getCreateBy();
+        String State = directorApplication.getStatus();
+        if(user!=null && !UserUtils.getUser().getId().equals(user.getId()) && StringUtils.isNotBlank(user.getId())){
+            addMessage(attributes, "您不是申请人,无法修改");
+            return "redirect:"+ Global.getAdminPath()+"/electronicSignature/electronicSignature/?repage";
+        }
+        //启动流程
+        directorApplication.setStatus("2");
+        String processInstanceId ="";
+        if (user!=null && StringUtils.isNotBlank(user.getId()) && StringUtils.isNotBlank(State) && "3".equals(State)){
+            processInstanceId = directorApplicationService.get(directorApplication.getId()).getProcessInstanceId();
+        }
+        try{
+            Map<String, Object> variables = Maps.newHashMap();
+            directorApplication.setCompanyId(UserUtils.getSelectCompany().getId());
+            directorApplication.setOfficeId(UserUtils.getSelectOffice().getId());
+            directorApplicationService.saveBranch(directorApplication, variables,processInstanceId);
+
+        }catch (Exception e){
+            addMessage(attributes, "提交失败!");
+            addMessage(attributes, "系统内部错误");
+            logger.error("Exception e:"+e);
+        }
+
+        return "redirect:"+Global.getAdminPath()+"/electronicSignature/electronicSignature/?repage";
+
+    }
+
+
+    @RequestMapping(value = "store")
+    public String store(DistrictDirectorApplication directorApplication, Model model, RedirectAttributes redirectAttributes) throws Exception{
+
+        if (!beanValidator(model, directorApplication)){
+            return form(directorApplication, model);
+        }
+        User user = directorApplication.getCreateBy();
+        String submitter = "";
+        if(user != null){
+            submitter = user.getId();
+        }
+        String sta = directorApplication.getStatus();
+        if(!UserUtils.getUser().getId().equals(submitter) && !Strings.isNullOrEmpty(submitter) && sta != null){
+            addMessage(redirectAttributes, "您不是申请人,无法修改");
+            return "redirect:"+Global.getAdminPath()+"/districtDirectorApplication/districtDirectorApplication/?repage";
+        }
+        if(!directorApplication.getIsNewRecord()){//编辑表单保存
+            DistrictDirectorApplication t = directorApplicationService.get(directorApplication.getId());//从数据库取出记录的值
+            MyBeanUtils.copyBeanNotNull2Bean(directorApplication, t);//将编辑表单中的非NULL值覆盖数据库记录中的值
+            directorApplicationService.save(t);//保存
+        }else{//新增表单保存
+
+            directorApplication.setCompanyId(UserUtils.getSelectCompany().getId());
+            directorApplication.setOfficeId(UserUtils.getSelectOffice().getId());
+            directorApplication.setStatus("1");
+            directorApplicationService.save(directorApplication);//保存
+        }
+        addMessage(redirectAttributes, "保存成功");
+        return "redirect:"+Global.getAdminPath()+"/electronicSignature/electronicSignature/?repage";
+    }
+
+
+    /**
+     * 工单执行(完成任务)
+     * @param
+     * @param model
+     * @return
+     */
+    @RequestMapping(value = "saveAudit")
+    public String saveAudit(DistrictDirectorApplication directorApplication, Model model,
+                            RedirectAttributes redirectAttributes) {
+        try{
+            // 对不同环节的业务逻辑进行操作
+            String taskDefKey = directorApplication.getAct().getTaskDefKey();
+            List<User> users = null;
+            //所属部门
+            Office office = officeService.get(directorApplication.getOffice().getId());
+            if ("dqsqgly".equals(taskDefKey)){
+                users = UserUtils.getByProssType(directorApplication.getProcessInstanceId(), 1);
+                if (users == null)
+                    users = UserUtils.getByRoleActivityEnname("dqsqgly", 2, office.getId(), "5", directorApplication.getCreateBy());
+
+            }else if ("modifyApply".equals(taskDefKey)){
+                users = UserUtils.getByProssType(directorApplication.getProcessInstanceId(), 1);
+            }
+            String flag = directorApplication.getAct().getFlag();
+            if ("yes".equals(flag) && (users==null || users.size()==0)){
+                addMessage(redirectAttributes, "审批失败,审批人为空,请联系管理员!");
+            }else {
+                String str = "";
+                str = directorApplicationService.auditSaveBranch(directorApplication,users);
+                addMessage(redirectAttributes, str);
+            }
+        }catch (Exception e){
+            addMessage(redirectAttributes, "审批失败:");
+            logger.error("Exception e:"+e);
+        }
+
+        if (StringUtils.isNotBlank(directorApplication.getHome()) && "home".equals(directorApplication.getHome())){
+            return "redirect:" + Global.getAdminPath() + "/home/?repage";
+        }else if (StringUtils.isNotBlank(directorApplication.getHome()) && "notifyList".equals(directorApplication.getHome())){
+            return "redirect:" + Global.getAdminPath() + "/workprojectnotify/workProjectNotify/list/?repage";
+        }else {
+            return "redirect:"+Global.getAdminPath()+"/electronicSignature/electronicSignature/?repage";
+        }
+    }
+
+    /**
+     * 校验地区是否被选择
+     * @param directorApplication
+     * @return
+     */
+    @ResponseBody
+    @RequestMapping("checkArea")
+    public String  checkArea(DistrictDirectorApplication directorApplication){
+        List<DistrictDirectorApplication> directorApplications = directorApplicationService.findByArea(directorApplication);
+        if(directorApplications != null && directorApplications.size()>0){
+            return "false";
+        }
+        return "true";
+    }
+
+
+
+
+
+}

+ 16 - 0
src/main/java/com/jeeplus/modules/signatureManagement/electronicSignature/dao/DistrictDirectorApplicationDao.java

@@ -0,0 +1,16 @@
+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.DistrictDirectorApplication;
+import com.jeeplus.modules.test.entity.act.ActTest;
+
+import java.util.List;
+
+@MyBatisDao
+public interface DistrictDirectorApplicationDao extends CrudDao<DistrictDirectorApplication> {
+
+    void updateProcessInstanceId(DistrictDirectorApplication districtDirectorApplication);
+
+    List<DistrictDirectorApplication> findByArea(DistrictDirectorApplication directorApplication);
+}

+ 110 - 0
src/main/java/com/jeeplus/modules/signatureManagement/electronicSignature/entity/DistrictDirectorApplication.java

@@ -0,0 +1,110 @@
+package com.jeeplus.modules.signatureManagement.electronicSignature.entity;
+
+import com.jeeplus.common.persistence.ActEntity;
+import com.jeeplus.modules.sys.entity.Area;
+import com.jeeplus.modules.sys.entity.Office;
+import org.activiti.engine.runtime.ProcessInstance;
+
+import java.util.Date;
+
+/**
+ * 地区负责人申请
+ */
+public class DistrictDirectorApplication extends ActEntity<DistrictDirectorApplication> {
+
+
+
+    private Office company;		// 公司ID
+    private Office office;   //部门
+    private String status;   //流程状态
+    private String processInstanceId;   //流程id
+    private String home;
+    private Area area; //地区
+    private String areaId;
+
+    private String officeId;
+    private String companyId;
+
+    // 运行中的流程实例
+    private ProcessInstance processInstance;
+
+    public String getAreaId() {
+        return areaId;
+    }
+
+    public void setAreaId(String areaId) {
+        this.areaId = areaId;
+    }
+
+    public ProcessInstance getProcessInstance() {
+        return processInstance;
+    }
+
+    public void setProcessInstance(ProcessInstance processInstance) {
+        this.processInstance = processInstance;
+    }
+
+    public String getOfficeId() {
+        return officeId;
+    }
+
+    public void setOfficeId(String officeId) {
+        this.officeId = officeId;
+    }
+
+    public String getCompanyId() {
+        return companyId;
+    }
+
+    public void setCompanyId(String companyId) {
+        this.companyId = companyId;
+    }
+
+    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 String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
+    public String getProcessInstanceId() {
+        return processInstanceId;
+    }
+
+    public void setProcessInstanceId(String processInstanceId) {
+        this.processInstanceId = processInstanceId;
+    }
+
+    public String getHome() {
+        return home;
+    }
+
+    public void setHome(String home) {
+        this.home = home;
+    }
+
+    public Area getArea() {
+        return area;
+    }
+
+    public void setArea(Area area) {
+        this.area = area;
+    }
+}

+ 502 - 0
src/main/java/com/jeeplus/modules/signatureManagement/electronicSignature/service/DistrictDirectorApplicationService.java

@@ -0,0 +1,502 @@
+package com.jeeplus.modules.signatureManagement.electronicSignature.service;
+
+import com.google.common.collect.Maps;
+import com.jeeplus.common.service.CrudService;
+import com.jeeplus.common.utils.StringUtils;
+import com.jeeplus.modules.act.service.ActTaskService;
+import com.jeeplus.modules.serialnum.service.SerialNumTplService;
+import com.jeeplus.modules.signatureManagement.electronicSignature.dao.DistrictDirectorApplicationDao;
+import com.jeeplus.modules.signatureManagement.electronicSignature.entity.DistrictDirectorApplication;
+import com.jeeplus.modules.sys.dao.AreaDao;
+import com.jeeplus.modules.sys.entity.Area;
+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.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.workprojectnotify.entity.WorkProjectNotify;
+import com.jeeplus.modules.workprojectnotify.service.WorkProjectNotifyService;
+import com.jeeplus.modules.workprojectnotify.util.UtilNotify;
+import org.activiti.engine.RuntimeService;
+import org.activiti.engine.runtime.ProcessInstance;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+@Service
+@Transactional(readOnly = true)
+public class DistrictDirectorApplicationService extends CrudService<DistrictDirectorApplicationDao, DistrictDirectorApplication> {
+
+    @Autowired
+    private DistrictDirectorApplicationDao directorApplicationDao;
+
+    @Autowired
+    private ActTaskService actTaskService;
+    @Autowired
+    private RuntimeService runtimeService;
+
+    @Autowired
+    private OfficeService officeService;
+
+    @Autowired
+    protected SerialNumTplService serialNumTplService;
+
+    @Autowired
+    protected WorkActivityProcessService workActivityProcessService;
+
+    @Autowired
+    protected WorkProjectNotifyService workProjectNotifyService;
+
+    @Autowired
+    protected WorkActivityMenuService workActivityMenuService;
+
+    @Autowired
+    private ActivityService activityService;
+
+    @Autowired
+    private WorkActivityProcessDao workActivityProcessDao;
+
+    @Autowired
+    private AreaDao areaDao;
+
+    private static byte[] SYN_BYTE = new byte[0];
+
+
+    public DistrictDirectorApplication get(String id){
+        DistrictDirectorApplication directorApplication = new DistrictDirectorApplication();
+        directorApplication=super.get(id);
+        return directorApplication;
+    }
+
+    @Transactional(readOnly = false)
+    public  void save(DistrictDirectorApplication directorApplication){
+        super.save(directorApplication);
+    }
+
+    @Transactional(readOnly = false)
+    public String saveBranch(DistrictDirectorApplication directorApplication, Map<String, Object> variables, String processInstanceId) {
+
+        String officeId = UserUtils.getUser().getOffice().getId();
+        Office office = officeService.get(officeId);
+        directorApplication.setOfficeId(officeId);
+        String companyId = UserUtils.getUser().getCompany().getId();
+        directorApplication.setCompanyId(companyId);
+        Area area = directorApplication.getArea();
+        area = areaDao.get(area.getId());
+        directorApplication.setArea(area);
+        super.save(directorApplication);
+        String str = "";
+        String title = "地区负责人申请-"+directorApplication.getCreateBy().getName()+"-负责地区:"+area.getName()+"待审批";
+        str = "地区负责人申请-"+directorApplication.getCreateBy().getName()+"-负责地区:"+area.getName()+"待审批";
+
+        // 启动流程
+        String businessKey = directorApplication.getId().toString();
+        WorkActivityMenu workActivityMenu = workActivityMenuService.findByParentAndOffice("ggh3125f1f194c82bdea00005c750905",officeService.get(directorApplication.getOfficeId()));
+        // 启动流程
+        String processType = workActivityMenu.getProcessType();
+        StringBuffer buffer = new StringBuffer();
+        Activity activity = new Activity();
+        WorkProjectNotify workProjectNotify = UtilNotify
+                .saveNotify(directorApplication.getId(),
+                        null,
+                        directorApplication.getCompanyId(),
+                        title,
+                        str,
+                        "261", //对应之后的判断
+                        "0",
+                        "待审批",
+                        ""  //通知角色
+                );
+        long s6=System.currentTimeMillis();
+        List<User> users = new ArrayList<>();
+        //List<User> bmzrs = UserUtils.getByRoleActivityEnname("bmzr",2,office.getId(),"5",workInvoice.getCreateBy());
+        //List<User> fpglys = UserUtils.getByRoleActivityEnname("fpgly",3,office.getId(),"5",workInvoice.getCreateBy());
+        //地区申请管理员
+        List<User> dqsqgly = UserUtils.getByRoleActivityEnname("dqsqglyclkv",3,office.getId(),"5",directorApplication.getCreateBy());
+        long s7=System.currentTimeMillis();
+        if (StringUtils.isNotBlank(workActivityMenu.getId())) {
+            workProjectNotify.setNotifyRole("");
+            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(),"5",directorApplication.getCreateBy());
+                    if (enusers.size()==0){
+                        directorApplication.setStatus("1");//暂存
+                        this.save(directorApplication);
+                        return "流程审批人不能为空,角色"+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 (activity != null && StringUtils.isNotBlank(activity.getId())) {
+                //角色审批
+                if (StringUtils.isNotBlank(activity.getRole().getEnname())) {
+                    users = UserUtils.getByRoleActivityEnnames(activity.getRole().getEnname(),office.getId(),"5",directorApplication.getCreateBy());
+                }
+                //人员审批
+                if (StringUtils.isNotBlank(activity.getUser().getId())) {
+                    users.add(activity.getUser());
+                }
+            }
+            workProjectNotify.setId("");
+        } else {
+            if (dqsqgly.size()==0 ){
+                directorApplication.setStatus("1");//暂存
+                this.save(directorApplication);
+            }
+            if (dqsqgly.size()==0){
+                return "流程审批人不能为空,请联系管理员!";
+            }
+            variables.put("dqsqglyCount",dqsqgly.size());
+            variables.put("dqsqglyList",dqsqgly);
+            processType = "districtDirectorApplication";
+            users.addAll(dqsqgly);
+        }
+        for (User user : users){
+            workProjectNotify.setUser(user);
+            workProjectNotify.setId("");
+            workProjectNotifyService
+                    .save(workProjectNotify);
+            Map<String,Object> extras = new HashMap<>();
+            extras.put("type","7002");
+            extras.put("id",workProjectNotify.getId());
+            extras.put("procDefKey","261");
+            UserUtils.pushInfoToApp(title,str,extras,user.getId());
+            UserUtils.pushIm(user.getId(),str);
+        }
+        variables.put("type", processType);
+        variables.put("busId", businessKey);
+        variables.put("title", "地区负责人申请-"+directorApplication.getCreateBy().getName()+"-负责地区:"+area.getName()+"待审批");//设置标题;
+        long s8=System.currentTimeMillis();
+        ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(processType, businessKey, variables);
+        directorApplication.setProcessInstance(processInstance);
+        long s9=System.currentTimeMillis();
+        if (StringUtils.isNotBlank(processInstanceId)) {
+            workActivityProcessService.updateProcessInstanceId(processInstance.getId(),processInstanceId);
+            workActivityProcessService.deleteProcessInstanceId(processInstanceId);
+            workActivityProcessService.deleteProcessIdAuditUsers(processInstanceId);
+        }
+        long s10=System.currentTimeMillis();
+        // 更新流程实例ID
+        directorApplication.setProcessInstanceId(processInstance.getId());
+        directorApplicationDao.updateProcessInstanceId(directorApplication);
+        //通知添加流程实例ID
+        workProjectNotify.setProcessInstanceId(processInstance.getId());
+        workProjectNotify.setWapBeginDate(new Date());
+        workProjectNotifyService.save(workProjectNotify);
+        List<Activity> list = workActivityMenu.getActivities();
+        long s11=System.currentTimeMillis();
+        if (list != null && list.size() != 0) {
+            workActivityProcessService.saveList(list, processInstance.getId());
+        } else {
+            WorkActivityProcess workActivityProcess = new WorkActivityProcess();
+            workActivityProcess.setProcessKey("districtDirectorApplication");
+            workActivityProcess.setCount(1);
+            workActivityProcess.setProcessInstanceId(processInstance.getId());
+            workActivityProcess.setIsApproval("0");
+            workActivityProcessService.save(workActivityProcess);
+				/*workActivityProcess.setCount(2);
+				workActivityProcess.setId("");
+				workActivityProcessService.save(workActivityProcess);*/
+            workActivityProcessService.insertAuditsByType(dqsqgly,processInstance.getId(),1,1);
+            //workActivityProcessService.insertAuditsByType(fpglys,processInstance.getId(),2,0);
+        }
+        return "";
+    }
+
+    @Transactional(readOnly = false)
+    public String auditSaveBranch(DistrictDirectorApplication directorApplication, List<User> auditUsers) {
+        String userName = UserUtils.get(directorApplication.getCreateBy().getId()).getName();
+        Office office = officeService.get(directorApplication.getOfficeId());
+        String str =  "地区负责人申请";
+        String title = "地区负责人申请";
+        // 对不同环节的业务逻辑进行操作
+        String taskDefKey = directorApplication.getAct().getTaskDefKey();
+        if (!"modifyApply".equals(taskDefKey)) {
+            actTaskService.claim(directorApplication.getAct().getTaskId(), UserUtils.getUser().getId());
+        }else {
+            directorApplication.getAct().setFlag("yes");
+        }
+        String comment = "";
+        if (directorApplication.getStatus().equals("4")){
+            comment = ("yes".equals(directorApplication.getAct().getFlag())?"[重新申请] ":"[已撤销] ");
+        }else {
+            comment = ("yes".equals(directorApplication.getAct().getFlag())?"[同意] ":"[驳回] ")+directorApplication.getAct().getComment();
+        }
+        //yes 的时候状态为审核通过 否则为未通过
+        directorApplication.setStatus(("yes".equals(directorApplication.getAct().getFlag()) ? "2" : "4"));
+        Map<String, Object> vars = Maps.newHashMap();
+        //业务逻辑对应的条件表达式
+        String exp = "";
+        String taskCount = "";
+        String notifyRole = "";
+        int key = 0;
+        String enname = "";
+        List<Activity> activitieList = activityService.getByProcessInstanceId(directorApplication.getProcessInstanceId());
+        WorkActivityMenu workActivityMenu = new WorkActivityMenu();
+        if (activitieList != null && activitieList.size() != 0) {
+            workActivityMenu.setProcessType(activitieList.get(0).getProcessKey());
+            workActivityMenu.setActivities(activitieList);
+        }
+
+        WorkActivityProcess workActivityProcess = new WorkActivityProcess();
+        WorkActivityProcess selectProcess = new WorkActivityProcess();
+        selectProcess.setProcessInstanceId(directorApplication.getProcessInstanceId());
+        List<WorkActivityProcess> workActivityProcesses = workActivityProcessService.findList(selectProcess);
+        List<Activity> activities = workActivityMenu.getActivities();
+        if (StringUtils.isNotBlank(workActivityMenu.getProcessType()) && !workActivityMenu.getProcessType().equals("districtDirectorApplication")) {
+            key = 1;
+            for (int i = 0; i < workActivityProcesses.size(); i++) {
+                WorkActivityProcess activityProcess = workActivityProcesses.get(i);
+                if (taskDefKey.equals(activityProcess.getActivityTask()) && !taskDefKey.equals("modifyApply")) {
+                    taskCount = activityProcess.getCount()+"";
+                    workActivityProcess = activityProcess;
+                    if (!workActivityProcess.getIsApproval().equals("0")) {
+                        workActivityProcess.setId("");
+                    }
+                    exp = "pass";
+                    if (!"yes".equals(directorApplication.getAct().getFlag())) {
+                        directorApplication.setStatus("4");
+                        workActivityProcess.setIsApproval("2");
+                        String returnBack = "-1";
+                        for (Activity activity : activities) {
+                            if (activity.getCount() == activityProcess.getCount()) {
+                                notifyRole = activity.getName();
+                                returnBack = activity.getReturnBack();
+                                break;
+                            }
+                        }
+                        if (returnBack.equals("0")) {
+                            workActivityProcess.setId("");
+                        }
+
+                    } else {
+                        workActivityProcess.setIsApproval("1");
+                    }
+                }else if(taskDefKey.equals("modifyApply")){
+                    notifyRole = "调整申请";
+                    taskCount = "0";
+                    exp = "pass";
+                    workActivityProcess.setId("");
+                    workActivityProcess.setCount(0);
+                    if (!"yes".equals(directorApplication.getAct().getFlag())) {
+                        directorApplication.setStatus("3");
+                        workActivityProcess.setIsApproval("2");
+                    } else {
+                        workActivityProcess.setIsApproval("1");
+                    }
+                    break;
+                }
+            }
+        } else {
+            workActivityMenu.setProcessType("districtDirectorApplication");
+            for (int i = 0; i < workActivityProcesses.size(); i++) {
+                WorkActivityProcess activityProcess = workActivityProcesses.get(i);
+                String count = activityProcess.getCount() + "";
+                workActivityProcess = activityProcess;
+                if (!workActivityProcess.getIsApproval().equals("0")) {
+                    workActivityProcess.setId("");
+                }
+                // 审核环节
+                if ("dqsqgly".equals(taskDefKey) && count.contains("1")) {
+                    taskCount = "1";
+                    exp = "pass";
+                    if ("yes".equals(directorApplication.getAct().getFlag())) {
+                        notifyRole = "地区负责人申请-"+directorApplication.getCreateBy().getName()+"-负责地区:"+directorApplication.getArea().getName()+"审核完成";
+                        workActivityProcess.setIsApproval("1");
+                    } else {
+                        notifyRole = "地区负责人申请-"+directorApplication.getCreateBy().getName()+"-负责地区:"+directorApplication.getArea().getName()+"调整申请";
+                        workActivityProcess.setIsApproval("2");
+                    }
+                    break;
+                } else if ("modifyApply".equals(taskDefKey)&& count.contains("0")) {
+                    notifyRole = "地区申请管理员审批";
+                    taskCount = "0";
+                    exp = "pass";
+                    workActivityProcess.setCount(0);
+                    enname ="dqsqgly";
+                    if (!"yes".equals(directorApplication.getAct().getFlag())) {
+                        directorApplication.setStatus("3");
+                    }
+                    break;
+                } else if ("apply_end".equals(taskDefKey)) {
+                }
+
+            }
+        }
+        Boolean state = null;
+
+        WorkProjectNotify nowWorkProjectNotify = workProjectNotifyService.processingInfo(directorApplication.getProcessInstanceId());
+
+        if("yes".equals(directorApplication.getAct().getFlag())){
+            // 设置意见
+            directorApplication.getAct().setComment(("yes".equals(directorApplication.getAct().getFlag()) ? "[同意] " : "[驳回] ") + directorApplication.getAct().getComment());
+            directorApplication.preUpdate();
+
+            // 提交流程任务
+            vars.put(exp, "yes".equals(directorApplication.getAct().getFlag()) ? true : false);
+            vars.put("passs", true);
+            workActivityProcessService.updateProcess(workActivityProcess,workActivityMenu,key,taskCount,directorApplication.getProcessInstanceId(),taskDefKey,"modifyApply",directorApplication.getAct().getFlag(),comment, activities);
+            // 提交流程任务
+            actTaskService.complete(directorApplication.getAct().getTaskId(), directorApplication.getAct().getProcInsId(), directorApplication.getAct().getComment(), vars);
+            state = actTaskService.isProcessEnd(directorApplication.getAct().getProcInsId());
+        }else{
+            //将流程图中尚未走到的task的流程追踪信息逻辑删除,添加一条"撤销"流程追踪信息
+            WorkActivityProcess process = new WorkActivityProcess();
+            process.setProcessInstanceId(directorApplication.getProcessInstanceId());
+            process.setIsApproval("0");
+            WorkActivityProcess workActivityProcess1 = new WorkActivityProcess();
+            workActivityProcess1.setProcessInstanceId(directorApplication.getProcessInstanceId());
+            List<WorkActivityProcess> processList = workActivityProcessService.findList(workActivityProcess1);
+            WorkProjectNotify notify = new WorkProjectNotify();
+            notify.setNotifyId(directorApplication.getId());
+            List<User> userList = workProjectNotifyService.readByNotifyId(notify);
+            if (userList!=null && userList.size()!=0) {
+                for (User u : userList) {
+                    User user = UserUtils.get(u.getId());
+                    UserUtils.pushIm(u.getId(),"地区负责申请人:"+ user.getName()+" 请求被驳回!");
+
+                }
+            }
+            if(processList!=null && processList.size()>0){
+                for (int i =0;i<processList.size();i++) {
+                    WorkActivityProcess p = processList.get(i);
+                    if(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);
+                state = true;
+            }
+            try {
+                //结束该流程,设为"撤销"状态
+                actTaskService.endProcessInstance(directorApplication.getProcessInstanceId(),"地区负责人申请-"+directorApplication.getCreateBy().getName()+"-负责地区:"+directorApplication.getArea().getName()+"驳回操作");
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+
+        List<User> users = new ArrayList<>();
+        List<User> userList = new ArrayList<>();
+        if (!state) {
+            str =  "地区负责人申请-"+directorApplication.getCreateBy().getName()+"-负责地区:"+directorApplication.getArea().getName()+"申请成功" ;
+            title = "地区负责人申请-"+directorApplication.getCreateBy().getName()+"-负责地区:"+directorApplication.getArea().getName()+"申请成功";
+            users.add(directorApplication.getCreateBy());
+            if ("yes".equals(directorApplication.getAct().getFlag())) {
+                directorApplication.setStatus("5");
+                WorkProjectNotify notify = new WorkProjectNotify();
+                notify.setNotifyId(directorApplication.getId());
+                userList = workProjectNotifyService.readByNotifyId(notify);
+                workProjectNotifyService
+                        .save(UtilNotify
+                                .saveNewNotify(directorApplication.getId(),
+                                        directorApplication.getCreateBy(),
+                                        directorApplication.getCompanyId(),
+                                        title,
+                                        str,
+                                        "261",
+                                        "0",
+                                        "待通知",
+                                        notifyRole,
+                                        directorApplication.getProcessInstanceId(),new Date()));
+
+            } else {
+                WorkProjectNotify notify = new WorkProjectNotify();
+                notify.setNotifyId(directorApplication.getId());
+                userList = workProjectNotifyService.readByNotifyId(notify);
+                if (StringUtils.isNotBlank(directorApplication.getStatus()) && !directorApplication.getStatus().equals("3")){
+                    directorApplication.setStatus("4");
+                    workProjectNotifyService
+                            .save(UtilNotify
+                                    .saveNewNotify(directorApplication.getId(),
+                                            directorApplication.getCreateBy(),
+                                            directorApplication.getCompanyId(),
+                                            title,
+                                            str,
+                                            "261",
+                                            "0",
+                                            "待通知",
+                                            notifyRole,
+                                            directorApplication.getProcessInstanceId(),new Date()));
+                }
+            }
+            workActivityProcessService.deleteProcessIdAuditUsers(directorApplication.getProcessInstanceId());
+        }else{
+            if(StringUtils.isNotBlank(directorApplication.getAct().getComment())){
+                str =  "地区负责人申请被驳回,驳回意见:" + directorApplication.getAct().getComment();
+                title = "地区申请人申请被驳回,驳回意见:" + directorApplication.getAct().getComment();
+            }else{
+                str =  "地区负责人申请-"+directorApplication.getCreateBy().getName()+"-负责地区:"+directorApplication.getArea().getName()+"被驳回";
+                title = "地区负责人申请-"+directorApplication.getCreateBy().getName()+"-负责地区:"+directorApplication.getArea().getName()+"被驳回";
+            }
+            users.add(directorApplication.getCreateBy());
+
+            directorApplication.setStatus("4");
+            WorkProjectNotify notify = new WorkProjectNotify();
+            notify.setNotifyId(directorApplication.getId());
+            userList = workProjectNotifyService.readByNotifyId(notify);
+            workProjectNotifyService
+                    .save(UtilNotify
+                            .saveNewNotify(directorApplication.getId(),
+                                    directorApplication.getCreateBy(),
+                                    directorApplication.getCompanyId(),
+                                    title,
+                                    str,
+                                    "261",
+                                    "0",
+                                    "待通知",
+                                    notifyRole,
+                                    directorApplication.getProcessInstanceId(),new Date()));
+        }
+        //对数据进行处理
+        if(null != nowWorkProjectNotify){
+            workProjectNotifyService.updateWpaData(nowWorkProjectNotify);
+        }
+        if (users!=null && users.size()!=0) {
+            for (User u : users) {
+                UserUtils.pushIm(u.getId(),str);
+            }
+        }
+        if (userList!=null && userList.size()!=0) {
+            for (User u : userList) {
+                UserUtils.pushMeIm(u.getId());
+            }
+        }
+        dao.update(directorApplication);
+        return "保存审核意见成功!";
+
+    }
+
+    public List<DistrictDirectorApplication> findByArea(DistrictDirectorApplication directorApplication) {
+        directorApplication.setCreateBy(UserUtils.getUser());
+        return directorApplicationDao.findByArea(directorApplication);
+    }
+}

+ 31 - 26
src/main/java/com/jeeplus/modules/workprojectnotify/web/WorkProjectNotifyController.java

@@ -85,7 +85,9 @@ import com.jeeplus.modules.signature.projectReportSignatureWork.entity.ProjectRe
 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.DistrictDirectorApplication;
 import com.jeeplus.modules.signatureManagement.electronicSignature.entity.ElectronicSignatureInfo;
+import com.jeeplus.modules.signatureManagement.electronicSignature.service.DistrictDirectorApplicationService;
 import com.jeeplus.modules.signatureManagement.electronicSignature.service.ElectronicSignatureService;
 import com.jeeplus.modules.statement.entity.StatementCompanyComprehensiveInfo;
 import com.jeeplus.modules.statement.service.StatementCompanyComprehensiveService;
@@ -570,6 +572,9 @@ public class WorkProjectNotifyController extends BaseController {
 	@Autowired
 	private ProjectReportSignatureWorkService projectReportSignatureService;
 
+	@Autowired
+	private DistrictDirectorApplicationService directorApplicationService;
+
 	@ModelAttribute
 	public WorkProjectNotify get(@RequestParam(required=false) String id) {
 		WorkProjectNotify entity = null;
@@ -1201,10 +1206,10 @@ public class WorkProjectNotifyController extends BaseController {
 				WorkSingleWage workSingleWage = workSingleWageService.get(workProjectNotify.getNotifyId());
 				if (workSingleWage != null)
 					processInstanceId = workSingleWage.getProcessInstanceId();
-			}else if ("261".equals(workProjectNotify.getType())) {//流程测试
-				ActTest actTest = actTestService.get(workProjectNotify.getNotifyId());
-				if (actTest != null)
-					processInstanceId = actTest.getProcessInstanceId();
+			}else if ("261".equals(workProjectNotify.getType())) {//地区负责人申请
+				DistrictDirectorApplication directorApplication = directorApplicationService.get(workProjectNotify.getNotifyId());
+				if (directorApplication != null)
+					processInstanceId = directorApplication.getProcessInstanceId();
 			}
 			workProjectNotify.setProcessInstanceId(processInstanceId);
 			workProjectNotify.setUser(workProjectNotify.getUser()!=null?UserUtils.get(workProjectNotify.getUser().getId()):new User());
@@ -7912,17 +7917,17 @@ public class WorkProjectNotifyController extends BaseController {
 						return "modules/statement/companyReportDataView";
 					}
 				}
-				else if ("261".equals(workProjectNotify.getType())) {//流程测试
-					ActTest actTest = actTestService.get(workProjectNotify.getNotifyId());
-					actTest.setHome("home");
-					actTest.setAct(getByAct(actTest.getProcessInstanceId()));
-					model.addAttribute("actTest", actTest);
+				else if ("261".equals(workProjectNotify.getType())) {//地区负责人申请
+					DistrictDirectorApplication directorApplication = directorApplicationService.get(workProjectNotify.getNotifyId());
+					directorApplication.setHome("home");
+					directorApplication.setAct(getByAct(directorApplication.getProcessInstanceId()));
+					model.addAttribute("districtDirectorApplication", directorApplication);
 					if (workProjectNotify.getRemarks().contains("待通知") || "view".equals(workProjectNotify.getView())) {
-						return "modules/test/act/actTestView";
+						return "modules/signatureManagement/electronicSignature/directorApplicationView";
 					}else if (workProjectNotify.getRemarks().contains("待审批") && !"1".equals(workProjectNotify.getStatus())) {
-						return "modules/test/act/actTestAudit";
+						return "modules/signatureManagement/electronicSignature/directorApplicationAudit";
 					} else if (workProjectNotify.getRemarks().contains("重新申请") && !"1".equals(workProjectNotify.getStatus())) {
-						return "modules/test/act/actTestModify";
+						return "modules/signatureManagement/electronicSignature/directorApplicationModify";
 					}
 				}
 			}
@@ -8503,14 +8508,14 @@ public class WorkProjectNotifyController extends BaseController {
 					model.addAttribute("workContractSignature", workContractSignature);
 					return "modules/workcontractsignature/workContractSignatureView";
 				}
-				else if(workProjectNotify.getType().equals("261")){	//流程测试
-					ActTest actTest = actTestService.get(workProjectNotify.getNotifyId());
-					actTest.setAct(getByAct(actTest.getProcessInstanceId()));
-					if ( actTest.getAct()!=null){
-						String taskDefKey = actTest.getAct().getTaskDefKey();
-					}
-					model.addAttribute("actTest",actTest);
-					return "modules/test/act/actTestView";
+				else if(workProjectNotify.getType().equals("261")){	//地区负责人申请
+					DistrictDirectorApplication directorApplication = directorApplicationService.get(workProjectNotify.getNotifyId());
+					directorApplication.setAct(getByAct(directorApplication.getProcessInstanceId()));
+					if ( directorApplication.getAct()!=null){
+						String taskDefKey = directorApplication.getAct().getTaskDefKey();
+					}
+					model.addAttribute("districtDirectorApplication",directorApplication);
+					return "modules/signatureManagement/electronicSignature/directorApplicationView";
 				}
 			}
 		}
@@ -8936,18 +8941,18 @@ public class WorkProjectNotifyController extends BaseController {
 				map.put("code",0);
 				map.put("msg","咨询成果信息删除失败,只有“暂存”、“驳回”、“撤回”状态的咨询成果信息才能删除");
 			}
-		}else if (workProjectNotify.getType().equals("261")) {    //测试删除
-		ActTest actTest = actTestService.get(workProjectNotify.getNotifyId());
-		int status = Integer.parseInt(actTest.getStatus());
+		}else if (workProjectNotify.getType().equals("261")) {    //地区负责人申请删除
+		DistrictDirectorApplication directorApplication = directorApplicationService.get(workProjectNotify.getNotifyId());
+		int status = Integer.parseInt(directorApplication.getStatus());
 		if(status== ProjectStatusEnum.TSTORE.getValue()||status== ProjectStatusEnum.REJECTED.getValue()||status== ProjectStatusEnum.RECALL.getValue()){
 			//删除流程待办信息
 			workProjectNotifyService.deleteByNotifyId(workProjectNotify);
 			//删除流程表信息
-			workProjectNotifyService.deleteActivityProcess(actTest.getProcessInstanceId());
+			workProjectNotifyService.deleteActivityProcess(directorApplication.getProcessInstanceId());
 			//删除流程人员表信息
-			workProjectNotifyService.deleteActivityProcessUser(actTest.getProcessInstanceId());
+			workProjectNotifyService.deleteActivityProcessUser(directorApplication.getProcessInstanceId());
 			//删除发票信息
-			actTestService.delete(actTest);
+			directorApplicationService.delete(directorApplication);
 			map.put("code",1);
 			map.put("msg","信息删除成功");
 		}else{

+ 103 - 0
src/main/resources/mappings/modules/signatureManagement/electronicSignature/DistrictDirectorApplicationDao.xml

@@ -0,0 +1,103 @@
+<?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.DistrictDirectorApplicationDao">
+
+    <sql id="districtColumns">
+		a.id AS "id",
+		a.create_by as "createBy.id",
+		a.create_date as "createDate",
+		a.update_by as "updateBy.id",
+		a.update_date as "updateDate",
+		a.remarks as "remarks",
+		a.del_flag as "delFlag",
+		a.process_instance_id as "processInstanceId",
+		a.office_id as "office.id",
+		a.office_id as "officeId",
+		a.area_id as "area.id",
+		a.company_id as "companyId",
+		area.name AS "area.name",
+		su.name as "createBy.name",
+		so.name as "office.name",
+		a.status as "status"
+	</sql>
+
+
+    <sql id="districtJoins">
+		LEFT JOIN sys_area area ON area.id = a.area_id
+		left join sys_user su on su.id = a.create_by
+		left join sys_office so on so.id = su.office_id
+	</sql>
+
+
+    <select id="get" resultType="com.jeeplus.modules.signatureManagement.electronicSignature.entity.DistrictDirectorApplication" >
+        SELECT
+        <include refid="districtColumns"/>
+        FROM district_director_application a
+        <include refid="districtJoins"/>
+        WHERE a.id = #{id}
+    </select>
+
+    <insert id="insert">
+		INSERT INTO district_director_application(
+			id,
+			create_by,
+			create_date,
+			update_by,
+			update_date,
+			remarks,
+			del_flag,
+			process_instance_id,
+			office_id,
+			company_id,
+			area_id,
+			status
+		) VALUES (
+			#{id},
+			#{createBy.id},
+			#{createDate},
+			#{updateBy.id},
+			#{updateDate},
+			#{remarks},
+			#{delFlag},
+			#{processInstanceId},
+			#{officeId},
+			#{companyId},
+            #{area.id},
+			#{status}
+		)
+	</insert>
+
+    <update id="update">
+		UPDATE district_director_application SET
+			update_by = #{updateBy.id},
+			update_date = #{updateDate},
+			remarks = #{remarks},
+			process_instance_id = #{processInstanceId},
+			office_id = #{officeId},
+			company_id = #{companyId},
+			area_id = #{area.id},
+			status = #{status}
+		WHERE id = #{id}
+	</update>
+
+
+    <update id="updateProcessInstanceId">
+		UPDATE district_director_application SET
+			process_instance_id = #{processInstanceId}
+		WHERE id = #{id}
+	</update>
+
+	<select id="findByArea" resultType="districtDirectorApplication">
+		select a.id
+		from district_director_application a
+		where a.status = '2' and a.del_flag = '0' and a.create_by = #{createBy.id} and a.area_id = #{areaId}
+	</select>
+
+	<update id="delete">
+		DELETE FROM district_director_application
+		WHERE id = #{id}
+	</update>
+
+
+
+</mapper>

+ 54 - 1
src/main/webapp/webpage/modules/signatureManagement/electronicSignature/ElectronicSignatureList.jsp

@@ -233,6 +233,58 @@
                 }
             });
         }
+        function openDialogDis(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: false, //开启最大化最小化按钮
+                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(3) ){
+                        // top.layer.close(index);//关闭对话框。
+                        setTimeout(function(){top.layer.close(index)}, 100);//延时0.1秒,对应360 7.1版本bug
+                    }
+                },
+                btn3: function(index){
+                }
+            });
+
+        }
     </script>
     <style>
         body{
@@ -330,8 +382,9 @@
                     <div class="layui-btn-group">
                         <shiro:hasPermission name="electronicSignature:electronicSignature:add">
                             <table:addRow url="${ctx}/electronicSignature/electronicSignature/form" title="电子印章申请"></table:addRow><!-- 增加按钮 -->
-                        </shiro:hasPermission>
+                        </shiro:hasPermission>f
                         <button class="layui-btn layui-btn-sm" data-toggle="tooltip" data-placement="left" onclick="sortOrRefresh()" title="刷新"> 刷新</button>
+                        <button class="layui-btn layui-btn-sm layui-bg-blue" title="地区负责人申请" onclick="openDialogDis('地区负责人申请','${ctx}/districtDirectorApplication/districtDirectorApplication/form','95%','95%')">&nbsp;地区负责人申请</button>
                     </div>
                     <div style="clear: both;"></div>
                 </div>

+ 168 - 0
src/main/webapp/webpage/modules/signatureManagement/electronicSignature/directorApplicationAudit.jsp

@@ -0,0 +1,168 @@
+<%@ 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/layui.js"></script>
+	<link rel='stylesheet' type="text/css" href="${ctxStatic}/layui/css/layui.css"/>
+	<script src="${ctxStatic}/common/html/js/script.js"></script>
+	<style>
+		#contractTypeDoc-error{
+			top:80px;
+			left:0;
+		}
+		/*超过5个汉字,调整label的长度,以下是配套的*/
+		.layui-item .layui-form-label{
+			width:90px;
+		}
+		.form-group .layui-item .layui-input-block,
+		.query .layui-input-block {
+			margin-left: 116px;
+		}
+		#workInvoiceProjectRelationList td{
+			padding-left: 0px;
+			padding-right: 0px;
+		}
+	</style>
+	<script type="text/javascript">
+        var validateForm;
+        function doSubmit(obj){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+            if(validateForm.form()){
+				if(obj == 1) {
+					$("#flag").val("yes");
+				}else {
+					$("#flag").val("no");
+				}
+				$("#inputForm").submit();
+				return true;
+            }else {
+                parent.layer.msg("信息未填写完整!", {icon: 5});
+            }
+            return false;
+        }
+        $(document).ready(function() {
+			layui.use(['form', 'layer'], function () {
+				var form = layui.form;
+			});
+			$("#area").on("change",function(){
+						var area = $("#area").val()
+						$.ajax({
+							url:"${ctx}/districtDirectorApplication/districtDirectorApplication/checkArea",
+							type:"post",
+							data:{"area":area,},
+							success:function(data){
+								if(data==="false"){
+									$("#ph").html("该地区已被选择");
+								}else {
+									$("#ph").html('');
+								}
+							}
+						});
+					}
+			)
+			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){
+						top.layer.close(index)
+						document.getElementById('iframe').contentWindow.location.reload();
+					}
+				});
+			}
+
+            validateForm = $("#inputForm").validate({
+                submitHandler: function(form){
+                    loading('正在提交,请稍等...');
+                    form.submit();
+                },
+
+            });
+
+        });
+
+	</script>
+</head>
+<body>
+<div class="single-form">
+	<div class="container">
+		<form:form id="inputForm" modelAttribute="districtDirectorApplication" action="${ctx}/districtDirectorApplication/districtDirectorApplication/saveAudit" method="post" class="form-horizontal">
+			<form:hidden path="id"/>
+			<form:hidden path="home"/>
+			<form:hidden path="act.taskId"/>
+			<form:hidden path="act.taskName"/>
+			<form:hidden path="act.taskDefKey"/>
+			<form:hidden path="act.procInsId"/>
+			<form:hidden path="act.procDefId"/>
+			<form:hidden id="flag" path="act.flag"/>
+			<c:set var="status" value="${districtDirectorApplication.act.status}" />
+			<div class="form-group layui-row first lw8">
+				<div class="form-group-label"><h2>基础信息</h2></div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>负责地区:</label>
+					<div class="layui-input-block with-icon">
+						<sys:treeselect id="area" name="area.id" disabled="disabled" value="${districtDirectorApplication.area.id}" labelName="area.name"
+										labelValue="${districtDirectorApplication.area.name}"
+										cssStyle="background-color:#fff"
+										title="区域" url="/sys/area/treeData" cssClass="form-control required layui-input"
+										allowClear="true" notAllowSelectParent="false"/>
+						<span id="ph" style="color:#cc5965"></span>
+					</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="${districtDirectorApplication.createDate}" pattern="yyyy-MM-dd"/>" readonly="readonly"  class="form-control judgment layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm12  with-textarea">
+					<label class="layui-form-label">备注:</label>
+					<div class="layui-input-block">
+						<form:textarea placeholder="请输入备注" readonly="true" path="remarks" htmlEscape="false" rows="4" maxlength="255" class="form-control "/>
+					</div>
+				</div>
+			</div>
+			<div class="form-group layui-row page-end"></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=${identification}&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=${identification}" 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="${districtDirectorApplication.act.procInsId}"/>
+				<act:histoicFlow procInsId="${districtDirectorApplication.act.procInsId}" />
+			</div>
+		</div>
+	</div>
+</div>
+</body>
+</html>

+ 106 - 0
src/main/webapp/webpage/modules/signatureManagement/electronicSignature/directorApplicationForm.jsp

@@ -0,0 +1,106 @@
+<%@ 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">
+        var validateForm;
+        function doSubmit(obj){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+            if(validateForm.form()){
+				$("#inputForm").attr("action","${ctx}/districtDirectorApplication/districtDirectorApplication/save");
+				$("#inputForm").submit();
+				return true;
+            }else {
+                parent.layer.msg("信息未填写完整!", {icon: 5});
+            }
+            return false;
+        }
+        $(document).ready(function() {
+            validateForm = $("#inputForm").validate({
+                submitHandler: function(form){
+                    loading('正在提交,请稍等...');
+                    form.submit();
+                },
+
+            });
+
+        });
+
+		function setAreaValue(area){
+			console.log('area',area)
+			// $("#area").on("change",function(){
+			//
+			// 		}
+			// )
+			$.ajax({
+				url:"${ctx}/districtDirectorApplication/districtDirectorApplication/checkArea",
+				type:"post",
+				data:{"areaId":area.id,},
+				success:function(data){
+					if(data==="false"){
+						$("#ph").html("该地区已被选择");
+						$("#areaId").val('')
+						$("#areaName").val('')
+						return false;
+					}else {
+						$("#ph").html('');
+					}
+				}
+			});
+		}
+
+
+
+	</script>
+</head>
+<body>
+<div class="single-form">
+	<div class="container">
+		<form:form id="inputForm" modelAttribute="districtDirectorApplication" action="${ctx}/districtDirectorApplication/districtDirectorApplication/save" method="post" class="form-horizontal">
+			<form:hidden path="id"/>
+			<div class="form-group layui-row first lw8">
+				<div class="form-group-label"><h2>基础信息</h2></div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>负责地区:</label>
+					<div class="layui-input-block with-icon">
+						<sys:treeselectStaffArea id="area" name="area.id" value="${districtDirectorApplication.area.id}" labelName="area.name"
+										labelValue="${districtDirectorApplication.area.name}"
+										cssStyle="background-color:#fff"
+										title="区域" url="/sys/area/treeData" cssClass="form-control required layui-input"
+										allowClear="true" notAllowSelectParent="false"/>
+						<span id="ph" style="color:#cc5965"></span>
+					</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="${districtDirectorApplication.createDate}" pattern="yyyy-MM-dd"/>" readonly="readonly"  class="form-control judgment layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm12  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 page-end"></div>
+		</form:form>
+	</div>
+</div>
+</body>
+</html>

+ 129 - 0
src/main/webapp/webpage/modules/signatureManagement/electronicSignature/directorApplicationView.jsp

@@ -0,0 +1,129 @@
+<%@ 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">
+        var validateForm;
+        function doSubmit(obj){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+            if(validateForm.form()){
+				$("#inputForm").attr("action","${ctx}/districtDirectorApplication/districtDirectorApplication/save");
+                $("#inputForm").submit();
+                return true;
+            }else {
+                parent.layer.msg("信息未填写完整!", {icon: 5});
+            }
+            return false;
+        }
+        $(document).ready(function() {
+
+			$("#area").on("change",function(){
+						var area = $("#area").val()
+						$.ajax({
+							url:"${ctx}/districtDirectorApplication/districtDirectorApplication/checkArea",
+							type:"post",
+							data:{"area":area,},
+							success:function(data){
+								if(data==="false"){
+									$("#ph").html("该地区已被选择");
+								}else {
+									$("#ph").html('');
+								}
+							}
+						});
+					}
+			)
+			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){
+						top.layer.close(index)
+						document.getElementById('iframe').contentWindow.location.reload();
+					}
+				});
+			}
+
+            validateForm = $("#inputForm").validate({
+                submitHandler: function(form){
+                    loading('正在提交,请稍等...');
+                    form.submit();
+                },
+
+            });
+
+        });
+
+	</script>
+</head>
+<body>
+<div class="single-form">
+	<div class="container">
+		<form:form id="inputForm" modelAttribute="districtDirectorApplication" action="${ctx}/districtDirectorApplication/districtDirectorApplication/save" method="post" class="form-horizontal">
+			<form:hidden path="id"/>
+			<form:hidden path="home"/>
+			<form:hidden path="act.taskId"/>
+			<form:hidden path="act.taskName"/>
+			<form:hidden path="act.taskDefKey"/>
+			<form:hidden path="act.procInsId"/>
+			<form:hidden path="act.procDefId"/>
+			<form:hidden id="flag" path="act.flag"/>
+			<c:set var="status" value="${districtDirectorApplication.act.status}" />
+			<div class="form-group layui-row first lw8">
+				<div class="form-group-label"><h2>基础信息</h2></div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>负责地区:</label>
+					<div class="layui-input-block with-icon">
+						<sys:treeselect id="area" name="area.id" disabled="disabled" value="${districtDirectorApplication.area.id}" labelName="area.name"
+										labelValue="${districtDirectorApplication.area.name}"
+										cssStyle="background-color:#fff"
+										title="区域" url="/sys/area/treeData" cssClass="form-control required layui-input"
+										allowClear="true" notAllowSelectParent="false"/>
+						<span id="ph" style="color:#cc5965"></span>
+					</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="${districtDirectorApplication.createDate}" pattern="yyyy-MM-dd"/>" readonly="readonly"  class="form-control judgment layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm12  with-textarea">
+					<label class="layui-form-label">备注:</label>
+					<div class="layui-input-block">
+						<form:textarea placeholder="请输入备注" readonly="true" path="remarks" htmlEscape="false" rows="4" maxlength="255" class="form-control "/>
+					</div>
+				</div>
+			</div>
+			<div class="form-group layui-row page-end"></div>
+		</form:form>
+
+	</div>
+</div>
+</body>
+</html>