Forráskód Böngészése

归档批次管理0.1

[user3] 4 éve
szülő
commit
9d88b497c4
28 módosított fájl, 5002 hozzáadás és 507 törlés
  1. 4 2
      src/main/java/com/jeeplus/common/service/CrudService.java
  2. 17 0
      src/main/java/com/jeeplus/modules/projectFilingBatch/dao/ProjectFilingBatchDao.java
  3. 9 0
      src/main/java/com/jeeplus/modules/projectFilingBatch/dao/ProjectFilingbatchRelationDao.java
  4. 130 0
      src/main/java/com/jeeplus/modules/projectFilingBatch/entity/ProjectFilingBatch.java
  5. 57 0
      src/main/java/com/jeeplus/modules/projectFilingBatch/entity/ProjectFilingbatchRelation.java
  6. 25 0
      src/main/java/com/jeeplus/modules/projectFilingBatch/enums/AlterStatusEnum.java
  7. 29 0
      src/main/java/com/jeeplus/modules/projectFilingBatch/enums/ProjectStatusEnum.java
  8. 694 0
      src/main/java/com/jeeplus/modules/projectFilingBatch/service/ProjectFilingBatchService.java
  9. 233 0
      src/main/java/com/jeeplus/modules/projectFilingBatch/utils/ImportExcelUtil.java
  10. 390 0
      src/main/java/com/jeeplus/modules/projectFilingBatch/utils/RuralProjectReportedUtil.java
  11. 335 0
      src/main/java/com/jeeplus/modules/projectFilingBatch/web/ProjectFilingBatchController.java
  12. 11 0
      src/main/java/com/jeeplus/modules/ruralprojectrecords/dao/RuralProjectRecordsDao.java
  13. 31 0
      src/main/java/com/jeeplus/modules/ruralprojectrecords/service/RuralProjectRecordsService.java
  14. 0 1
      src/main/java/com/jeeplus/modules/ruralprojectrecords/web/RuralProjectRecordsController.java
  15. 220 257
      src/main/java/com/jeeplus/modules/workprojectnotify/web/WorkProjectNotifyController.java
  16. 119 0
      src/main/resources/mappings/modules/projectGuidang/ProjectFilingBatchDao.xml
  17. 37 0
      src/main/resources/mappings/modules/projectGuidang/ProjectFilingbatchRelationDao.xml
  18. 0 246
      src/main/resources/mappings/modules/projectrecord/ProjectImplementEarlyDao.xml
  19. 61 0
      src/main/resources/mappings/modules/ruralprojectrecords/RuralProjectRecordsDao.xml
  20. 1 1
      src/main/webapp/WEB-INF/tags/sys/gridselectClientLink.tag
  21. 125 0
      src/main/webapp/webpage/modules/projectFilingBatch/projectChoiceLink.jsp
  22. 644 0
      src/main/webapp/webpage/modules/projectFilingBatch/projectFilingBachAuditre.jsp
  23. 15 0
      src/main/webapp/webpage/modules/projectFilingBatch/projectFilingBacthTask.jsp
  24. 238 0
      src/main/webapp/webpage/modules/projectFilingBatch/projectFilingBatchApply.jsp
  25. 238 0
      src/main/webapp/webpage/modules/projectFilingBatch/projectFilingBatchAudit.jsp
  26. 711 0
      src/main/webapp/webpage/modules/projectFilingBatch/projectFilingBatchForm.jsp
  27. 342 0
      src/main/webapp/webpage/modules/projectFilingBatch/projectFilingBatchList.jsp
  28. 286 0
      src/main/webapp/webpage/modules/projectFilingBatch/projectFilingBatchView.jsp

+ 4 - 2
src/main/java/com/jeeplus/common/service/CrudService.java

@@ -6,6 +6,7 @@ package com.jeeplus.common.service;
 import java.util.Collection;
 import java.util.List;
 
+import com.jeeplus.common.utils.IdGen;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -73,6 +74,7 @@ public abstract class CrudService<D extends CrudDao<T>, T extends DataEntity<T>>
 	@Transactional(readOnly = false)
 	public void save(T entity) {
 		if (entity.getIsNewRecord()){
+			entity.setId(IdGen.uuid());
 			entity.preInsert();
 			dao.insert(entity);
 		}else{
@@ -93,7 +95,7 @@ public abstract class CrudService<D extends CrudDao<T>, T extends DataEntity<T>>
 	
 	/**
 	 * 删除全部数据
-	 * @param entity
+	 * @param
 	 */
 	@Transactional(readOnly = false)
 	public void deleteAll(Collection<T> entitys) {
@@ -105,7 +107,7 @@ public abstract class CrudService<D extends CrudDao<T>, T extends DataEntity<T>>
 	
 	/**
 	 * 获取单条数据
-	 * @param id
+	 * @param
 	 * @return
 	 */
 	public T findUniqueByProperty(String propertyName, Object value){

+ 17 - 0
src/main/java/com/jeeplus/modules/projectFilingBatch/dao/ProjectFilingBatchDao.java

@@ -0,0 +1,17 @@
+package com.jeeplus.modules.projectFilingBatch.dao;
+
+import com.jeeplus.common.persistence.CrudDao;
+import com.jeeplus.common.persistence.annotation.MyBatisDao;
+import com.jeeplus.modules.projectFilingBatch.entity.ProjectFilingBatch;
+import com.jeeplus.modules.ruralprojectrecords.entity.RuralProjectRecords;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+@MyBatisDao
+public interface ProjectFilingBatchDao extends CrudDao<ProjectFilingBatch> {
+
+    List<ProjectFilingBatch> findProjectIdByFiling(@Param("id") String id);
+
+    void updateProcessIdAndStatus(ProjectFilingBatch projectFilingBatch);
+}

+ 9 - 0
src/main/java/com/jeeplus/modules/projectFilingBatch/dao/ProjectFilingbatchRelationDao.java

@@ -0,0 +1,9 @@
+package com.jeeplus.modules.projectFilingBatch.dao;
+
+import com.jeeplus.common.persistence.CrudDao;
+import com.jeeplus.common.persistence.annotation.MyBatisDao;
+import com.jeeplus.modules.projectFilingBatch.entity.ProjectFilingbatchRelation;
+@MyBatisDao
+public interface ProjectFilingbatchRelationDao extends CrudDao<ProjectFilingbatchRelation> {
+    Integer deleteByprojectId(ProjectFilingbatchRelation relation);
+}

+ 130 - 0
src/main/java/com/jeeplus/modules/projectFilingBatch/entity/ProjectFilingBatch.java

@@ -0,0 +1,130 @@
+package com.jeeplus.modules.projectFilingBatch.entity;
+
+import com.google.common.collect.Lists;
+import com.jeeplus.common.persistence.DataEntity;
+import com.jeeplus.modules.act.entity.Act;
+import com.jeeplus.modules.ruralprojectrecords.entity.RuralProjectRecords;
+import com.jeeplus.modules.sys.entity.Office;
+
+import javax.validation.constraints.NotNull;
+import java.util.List;
+
+/**
+ * 项目归档管理
+ * @author: 程铄
+ * @create: 2021-03-16 10:01
+ */
+public class ProjectFilingBatch extends DataEntity<ProjectFilingBatch> {
+    public static final String SERIAL_BIZCODE ="1";
+    public static final String SERIAL_COST_BIZCODE ="1004";
+    private static final long serialVersionUID = 1L;
+    @NotNull(message = "归档编号不能为空")
+    private String filingBatch ;//档次批号
+    private String processinstanceId;// 审批流程id
+    private Integer filingStatus;//归档审批状态
+    private String projectId; //项目id
+    private Integer status=null;//归档状态
+    private Integer boxNum=null; //盒号
+    private Integer reBoxNum=null;//确认盒号
+    private String number;//报告号
+    private List<RuralProjectRecords> project= Lists.newArrayList();;
+    private Office office;
+    private String home;
+    private Act act;//工作流对象
+
+    public String getProcessinstanceId() {
+        return processinstanceId;
+    }
+
+    public void setProcessinstanceId(String processinstanceId) {
+        this.processinstanceId = processinstanceId;
+    }
+
+    public String getNumber() {
+        return number;
+    }
+
+    public void setNumber(String number) {
+        this.number = number;
+    }
+
+    public Integer getFilingStatus() {
+        return filingStatus;
+    }
+
+    public void setFilingStatus(Integer filingStatus) {
+        this.filingStatus = filingStatus;
+    }
+
+    public String getProjectId() {
+        return projectId;
+    }
+
+    public void setProjectId(String projectId) {
+        this.projectId = projectId;
+    }
+
+    public List<RuralProjectRecords> getProject() {
+        return project;
+    }
+
+    public void setProject(List<RuralProjectRecords> project) {
+        this.project = project;
+    }
+
+    public Integer getStatus() {
+        return status;
+    }
+
+    public void setStatus(Integer status) {
+        this.status = status;
+    }
+
+    public String getFilingBatch() {
+        return filingBatch;
+    }
+
+    public void setFilingBatch(String filingBatch) {
+        this.filingBatch = filingBatch;
+    }
+
+    public Integer getBoxNum() {
+        return boxNum;
+    }
+
+    public void setBoxNum(Integer boxNum) {
+        this.boxNum = boxNum;
+    }
+
+    public Integer getReBoxNum() {
+        return reBoxNum;
+    }
+
+    public void setReBoxNum(Integer reBoxNum) {
+        this.reBoxNum = reBoxNum;
+    }
+
+    public Office getOffice() {
+        return office;
+    }
+
+    public void setOffice(Office office) {
+        this.office = office;
+    }
+
+    public String getHome() {
+        return home;
+    }
+
+    public void setHome(String home) {
+        this.home = home;
+    }
+
+    public Act getAct() {
+        return act;
+    }
+
+    public void setAct(Act act) {
+        this.act = act;
+    }
+}

+ 57 - 0
src/main/java/com/jeeplus/modules/projectFilingBatch/entity/ProjectFilingbatchRelation.java

@@ -0,0 +1,57 @@
+package com.jeeplus.modules.projectFilingBatch.entity;
+
+import com.jeeplus.common.persistence.DataEntity;
+
+import javax.validation.constraints.NotNull;
+
+public class ProjectFilingbatchRelation extends DataEntity<ProjectFilingbatchRelation> {
+    public static final String SERIAL_BIZCODE ="1";
+    public static final String SERIAL_COST_BIZCODE ="1004";
+    private static final long serialVersionUID = 1L;
+    @NotNull(message = "归档编号不能为空")
+    private String filingBatch ;//档次批号
+    private String projectId; //项目id
+    private Integer status;//归档状态
+    private Integer boxNum; //盒号
+    private Integer reBoxNum;//确认盒号
+
+    public String getFilingBatch() {
+        return filingBatch;
+    }
+
+    public void setFilingBatch(String filingBatch) {
+        this.filingBatch = filingBatch;
+    }
+
+    public String getProjectId() {
+        return projectId;
+    }
+
+    public void setProjectId(String projectId) {
+        this.projectId = projectId;
+    }
+
+    public Integer getStatus() {
+        return status;
+    }
+
+    public void setStatus(Integer status) {
+        this.status = status;
+    }
+
+    public Integer getBoxNum() {
+        return boxNum;
+    }
+
+    public void setBoxNum(Integer boxNum) {
+        this.boxNum = boxNum;
+    }
+
+    public Integer getReBoxNum() {
+        return reBoxNum;
+    }
+
+    public void setReBoxNum(Integer reBoxNum) {
+        this.reBoxNum = reBoxNum;
+    }
+}

+ 25 - 0
src/main/java/com/jeeplus/modules/projectFilingBatch/enums/AlterStatusEnum.java

@@ -0,0 +1,25 @@
+package com.jeeplus.modules.projectFilingBatch.enums;
+
+public enum AlterStatusEnum {
+    TSTORE(1,"暂存"),
+    IN_APRL(2,"变更中"),
+    REJECTED(4,"驳回"),
+    RECALL(3,"撤回"),
+    SIGNED(5,"已变更");
+
+    private int value;
+    private String desc;
+
+    AlterStatusEnum(int val, String desc) {
+        this.value = val;
+        this.desc = desc;
+    }
+
+    public int getValue() {
+        return value;
+    }
+
+    public String getDesc() {
+        return desc;
+    }
+}

+ 29 - 0
src/main/java/com/jeeplus/modules/projectFilingBatch/enums/ProjectStatusEnum.java

@@ -0,0 +1,29 @@
+package com.jeeplus.modules.projectFilingBatch.enums;
+
+public enum ProjectStatusEnum {
+    TSTORE(1,"暂存"),
+    IN_APRL(2,"审批中"),
+    REJECTED(4,"已驳回"),
+    RECALL(3,"已撤回"),
+    SIGNED(5,"已签"),
+    INVALIDING(6,"作废中"),
+    INVALID(7,"已作废"),
+    ON_CHANGE(8,"变更中"),
+    DONE(9,"已完成");
+
+    private int value;
+    private String desc;
+
+    ProjectStatusEnum(int val, String desc) {
+        this.value = val;
+        this.desc = desc;
+    }
+
+    public int getValue() {
+        return value;
+    }
+
+    public String getDesc() {
+        return desc;
+    }
+}

+ 694 - 0
src/main/java/com/jeeplus/modules/projectFilingBatch/service/ProjectFilingBatchService.java

@@ -0,0 +1,694 @@
+package com.jeeplus.modules.projectFilingBatch.service;
+
+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.projectFilingBatch.dao.ProjectFilingBatchDao;
+import com.jeeplus.modules.projectFilingBatch.dao.ProjectFilingbatchRelationDao;
+import com.jeeplus.modules.projectFilingBatch.entity.ProjectFilingBatch;
+import com.jeeplus.modules.projectFilingBatch.entity.ProjectFilingbatchRelation;
+import com.jeeplus.modules.projectcontentinfo.entity.Projectcontentinfo;
+import com.jeeplus.modules.ruralprojectrecords.dao.RuralProjectRecordsDao;
+import com.jeeplus.modules.ruralprojectrecords.entity.RuralProjectRecords;
+import com.jeeplus.modules.ruralprojectrecords.enums.ProjectStatusEnum;
+import com.jeeplus.modules.ruralprojectrecords.service.RuralProjectRecordsService;
+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.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.security.access.method.P;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Service
+@Transactional(readOnly = true)
+public class ProjectFilingBatchService extends CrudService<ProjectFilingBatchDao, ProjectFilingBatch> {
+    @Autowired
+    private ProjectFilingBatchDao projectFilingBatchDao;
+    @Autowired
+    private RuralProjectRecordsDao ruralProjectRecordsDao;
+    @Autowired
+    private ProjectFilingbatchRelationDao projectFilingbatchRelationDao;
+    @Autowired
+    private WorkActivityProcessDao workActivityProcessDao;
+    @Autowired
+    private IdentityService identityService;
+    @Autowired
+    private WorkActivityMenuService workActivityMenuService;
+    @Autowired
+    private WorkProjectNotifyService workProjectNotifyService;
+    @Autowired
+    private WorkActivityProcessService workActivityProcessService;
+    @Autowired
+    private RuntimeService runtimeService;
+    @Autowired
+    private OfficeService officeService;
+    @Autowired
+    private ActTaskService actTaskService;
+    @Autowired
+    private ActivityService activityService;
+    @Override
+    public ProjectFilingBatch get(String id) {
+        return super.get(id);
+    }
+    private static byte[] SYN_BYTE = new byte[0];
+    @Override
+    public Page<ProjectFilingBatch> findPage(Page<ProjectFilingBatch> page, ProjectFilingBatch projectFilingBatch) {
+        //设置数据权限
+        if(!UserUtils.getUser().isAdmin()) {
+            String dataScopeSql = dataScopeFilterOR(projectFilingBatch.getCurrentUser(), "o", "u", "s", MenuStatusEnum.WORK_RECORDS.getValue());
+            if(StringUtils.isBlank(dataScopeSql)){
+                dataScopeSql = dataScopeFilterOR(projectFilingBatch.getCurrentUser(), "o", "u", "s", MenuStatusEnum.OVERALL_WORK_RECORDS.getValue());
+            }
+            projectFilingBatch.getSqlMap().put("dsf", dataScopeSql);
+        }
+        int count = dao.queryCount(projectFilingBatch);
+        page.setCount(count);
+        page.setCountFlag(false);
+        projectFilingBatch.setPage(page);
+        List<ProjectFilingBatch> projectGuidangList = findList(projectFilingBatch);
+        for (ProjectFilingBatch guidang:projectGuidangList){
+            User user=UserUtils.get(guidang.getCreateBy().getId());
+            guidang.setCreateBy(user);
+        }
+        page.setList(projectGuidangList);
+        return page;
+    }
+    public List<ProjectFilingBatch> findProjectIdByFiling(String id){
+        return projectFilingBatchDao.findProjectIdByFiling(id);
+    }
+
+    /**
+     * 送审归档批次
+     * @param projectFilingBatch
+     * @param projectStatus
+     * @throws Exception
+     */
+    @Transactional(readOnly = false)
+    public void saveProject(String[] proId,ProjectFilingBatch projectFilingBatch, ProjectStatusEnum projectStatus) throws Exception {
+        long t1 = System.currentTimeMillis();
+        Integer oldStatus = projectFilingBatch.getFilingStatus();
+        projectFilingBatch.setFilingStatus(projectStatus.getValue());
+        User createBy = projectFilingBatch.getCreateBy();
+        if(createBy != null){
+            createBy = UserUtils.get(createBy.getId());
+        }else {
+            createBy = UserUtils.getUser();
+        }
+        Office office=new Office();
+        office.setId(createBy.getOffice().getId());
+        projectFilingBatch.setOffice(office);
+        //归档批次表添加操作
+        if(projectFilingBatch.getFilingStatus()== ProjectStatusEnum.INVALID.getValue()){
+            projectFilingBatch.setId(IdGen.uuid());
+            dao.insert(projectFilingBatch);
+        }else if (projectFilingBatch.getFilingStatus()== ProjectStatusEnum.RECALL.getValue()) {
+            //获取归档批次的项目信息
+            List<ProjectFilingBatch> filingBatches=this.findProjectIdByFiling(projectFilingBatch.getId());
+            for (ProjectFilingBatch filingBatch:filingBatches){
+                RuralProjectRecords ruralProjectRecords = ruralProjectRecordsDao.get(filingBatch.getProjectId());
+                ProjectFilingbatchRelation filingbatchRelation=new ProjectFilingbatchRelation();
+                filingbatchRelation.setFilingBatch(filingBatch.getFilingBatch());
+                filingbatchRelation.setProjectId(ruralProjectRecords.getId());
+                projectFilingbatchRelationDao.deleteByprojectId(filingbatchRelation);
+            }
+            dao.update(projectFilingBatch);
+        }else{
+            super.save(projectFilingBatch);
+        }
+        //获取前端选择的项目信息
+        //保存要归档的项目
+        for (int i=0;i<proId.length;i++){
+            String id=proId[i].split("/")[0];
+            ProjectFilingbatchRelation filingbatchRelation=new ProjectFilingbatchRelation();
+            filingbatchRelation.setFilingBatch(projectFilingBatch.getFilingBatch());
+            filingbatchRelation.setProjectId(id);
+            filingbatchRelation.preInsert();
+            projectFilingbatchRelationDao.insert(filingbatchRelation);
+        }
+
+        long t4 = System.currentTimeMillis();
+        //启动审批流程
+        if (projectFilingBatch.getFilingStatus()== ProjectStatusEnum.IN_APRL.getValue()&&(oldStatus==null|| ProjectStatusEnum.REJECTED.getValue()!=oldStatus)) {
+            this.startAudit(projectFilingBatch,projectFilingBatch.getProcessinstanceId());
+        }
+        logger.info("保存项目耗时:{}ms;启动流程耗时:{}ms",t4-t1,System.currentTimeMillis()-t4);
+    }
+    /**
+     * 启动审批流程
+     *
+     * @param projectFilingBatch
+     */
+    private void startAudit(ProjectFilingBatch projectFilingBatch, String processInstanceId) throws Exception {
+        try {
+            Map<String, Object> variables = new HashMap<String, Object>();
+            identityService.setAuthenticatedUserId(projectFilingBatch.getCurrentUser().getId());
+            Office office = projectFilingBatch.getOffice();
+            office = officeService.get(office.getId());
+            String contentStr = "归档项目批次【"+ projectFilingBatch.getFilingBatch()+"】待审批,归档批次编号:"+projectFilingBatch.getId();
+            String titleStr = "归档项目批次【"+ projectFilingBatch.getFilingBatch()+"】待审批";
+            String businessKey = projectFilingBatch.getId();
+            Activity activity = new Activity();
+            WorkActivityMenu workActivityMenu = workActivityMenuService.findByParentAndOffice("7854872f45b84acd893010e66a3db2c8", office);
+            String processType = workActivityMenu.getProcessType();
+            StringBuffer buffer = new StringBuffer();
+            WorkProjectNotify workProjectNotify = UtilNotify
+                    .saveNotify(projectFilingBatch.getId(),
+                            projectFilingBatch.getCreateBy(),
+                            office.getParent().getId(),
+                            titleStr,
+                            contentStr,
+                            "100",
+                            "0",
+                            "待审批",
+                            ""
+                    );
+            List<User> users = new ArrayList<>();
+            //线下归档员
+            List<User> xxxmgdys = UserUtils.getByRoleActivityEnname("xxgdydyhu",3,office.getId(),"10",projectFilingBatch.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",projectFilingBatch.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 (activity != null && StringUtils.isNotBlank(activity.getId())) {
+                    //角色审批
+                    if (StringUtils.isNotBlank(activity.getRole().getEnname())) {
+                        users = UserUtils.getByRoleActivityEnnames(activity.getRole().getEnname(),office.getId(),"4",projectFilingBatch.getCreateBy());
+                    }
+                    //人员审批
+                    if (StringUtils.isNotBlank(activity.getUser().getId())) {
+                        users.add(activity.getUser());
+                    }
+                }
+                workProjectNotify.setId("");
+            }else{
+                if (xxxmgdys==null||xxxmgdys.size()==0){
+                    throw new Exception("流程审批人不能为空,角色部门负责人下无用户,请联系管理员!");
+                }
+                processType = "projectFilingBatch";
+                variables.put("applyUserId", projectFilingBatch.getCreateBy().getId());
+                variables.put("bggdglycount",xxxmgdys.size());
+                variables.put("bggdglyList",xxxmgdys);
+                users.addAll(xxxmgdys);
+            }
+            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","39");
+                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", "归档批次号:" + projectFilingBatch.getFilingBatch());//设置标题;
+            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);
+                workActivityProcessService.insertAuditsByType(xxxmgdys,processInstance.getId(),1,1);
+            }
+            projectFilingBatch.setProcessinstanceId(processInstance.getId());
+            projectFilingBatch.setFilingStatus(ProjectStatusEnum.IN_APRL.getValue());
+            dao.updateProcessIdAndStatus(projectFilingBatch);
+            //通知添加流程实例ID
+            workProjectNotify.setProcessInstanceId(processInstance.getId());
+            workProjectNotifyService.save(workProjectNotify);
+        }catch (Exception e){
+            logger.error("启动审批流程异常:",e);
+            throw e;
+        }
+    }
+    @Transactional(readOnly = false)
+    public void cancelProcess(ProjectFilingBatch projectFilingBatch) throws Exception {
+        WorkActivityProcess process = new WorkActivityProcess();
+        process.setProcessInstanceId(projectFilingBatch.getProcessinstanceId());
+        process.setIsApproval("0");
+        //List<WorkActivityProcess> processList1 = workActivityProcessService.findByProcInsId(process);
+        WorkActivityProcess workActivityProcess = new WorkActivityProcess();
+        workActivityProcess.setProcessInstanceId(projectFilingBatch.getProcessinstanceId());
+        List<WorkActivityProcess> processList = workActivityProcessService.findList(workActivityProcess);
+        WorkProjectNotify notify = new WorkProjectNotify();
+        notify.setNotifyId(projectFilingBatch.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() +",项目归档批次审批:"+projectFilingBatch.getFilingBatch() +" 强制撤销!");
+            }
+        }
+        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.setIsApproval("-1");
+                    p.setDelFlag("1");
+                    workActivityProcessDao.updateDelFlagAndIsApproval(p);
+                }
+            }
+            WorkActivityProcess pro = new WorkActivityProcess();
+            pro.setId("");
+            pro.setDelFlag("0");
+            pro.preInsert();
+            pro.setRemarks("[强制撤销]");
+            pro.setProcessKey(processList.get(0).getProcessKey());
+            pro.setIsApproval("1");
+            pro.setProcessInstanceId(processList.get(0).getProcessInstanceId());
+            pro.setCount(0);
+            workActivityProcessDao.insert(pro);
+
+            //结束该流程,设为"撤销"状态月
+            ProjectFilingBatch filingBatch = new ProjectFilingBatch();
+            filingBatch.setId(projectFilingBatch.getId());
+            filingBatch.setFilingStatus(ProjectStatusEnum.RECALL.getValue());
+            filingBatch.preUpdate();
+            dao.updateProcessIdAndStatus(filingBatch);
+            actTaskService.endProcessInstance(projectFilingBatch.getProcessinstanceId(), "项目归档批次-撤回");
+        }
+    }
+    @Transactional(readOnly = false)
+    public Integer updateByid(ProjectFilingbatchRelation filingbatchRelation){
+        return projectFilingbatchRelationDao.update(filingbatchRelation);
+    }
+    /**
+     * 获取归档批次中的项目信息
+     * @param projectFilingBatch
+     */
+    public void queryInfo(ProjectFilingBatch projectFilingBatch){
+        //获取详细信息
+        List<RuralProjectRecords> ruralProjectRecordsList = new ArrayList<>();
+        List<ProjectFilingBatch> projectFilingBatches = dao.findProjectIdByFiling(projectFilingBatch.getId());
+        for (ProjectFilingBatch filingBatch : projectFilingBatches) {
+            RuralProjectRecords ruralProjectRecords = ruralProjectRecordsDao.get(filingBatch.getProjectId());
+            ruralProjectRecords.setProjectReportNumber(filingBatch.getNumber());
+            ruralProjectRecordsList.add(ruralProjectRecords);
+        }
+        //获取归档人
+        projectFilingBatch.setCreateBy(UserUtils.get(projectFilingBatch.getCreateBy().getId()));
+        //项目信息
+        projectFilingBatch.setProject(ruralProjectRecordsList);
+    }
+    @Transactional(readOnly = false)
+    public String auditSave(ProjectFilingBatch projectFilingBatch, List<User> auditUsers) throws Exception {
+        this.queryInfo(projectFilingBatch);
+        int filingStatus = projectFilingBatch.getFilingStatus();
+        String taskDefKey = projectFilingBatch.getAct().getTaskDefKey();
+        if (!"modifyApply".equals(taskDefKey) && !taskDefKey.contains("audit") ) {
+            actTaskService.claim(projectFilingBatch.getAct().getTaskId(), UserUtils.getUser().getId());
+        }else {
+            projectFilingBatch.getAct().setFlag("yes");
+            List<ProjectFilingBatch> projectFilingBatches = dao.findProjectIdByFiling(projectFilingBatch.getId());
+            String [] proId=new String[projectFilingBatches.size()];
+            for (int i=0;i<proId.length;i++) {
+                proId[i]=projectFilingBatches.get(i).getProjectId();
+            }
+            saveProject(proId,projectFilingBatch, ProjectStatusEnum.IN_APRL);
+        }
+
+        String comment = "";
+        if ( filingStatus == ProjectStatusEnum.REJECTED.getValue()) {
+            comment = ("yes".equals(projectFilingBatch.getAct().getFlag())?"[重新申请] ":"[已撤销] ");
+        }else {
+            comment = ("yes".equals(projectFilingBatch.getAct().getFlag())?"[同意] ":"[驳回] ");
+        }
+
+        if (!"yes".equals(projectFilingBatch.getAct().getFlag())) {
+            projectFilingBatch.setFilingStatus(ProjectStatusEnum.REJECTED.getValue());
+        }
+
+        User createUser = UserUtils.get(projectFilingBatch.getCreateBy().getId());
+
+        Map<String, Object> vars = Maps.newHashMap();
+        String notifyRole = "";
+        //业务逻辑对应的条件表达式
+        User user = null;
+        List<Activity> activitieList = activityService.getByProcessInstanceId(projectFilingBatch.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(projectFilingBatch.getProcessinstanceId());
+        List<WorkActivityProcess> workActivityProcesses = workActivityProcessService.findList(selectProcess);
+        List<Activity> activities = workActivityMenu.getActivities();
+        String  taskCount = "1";
+        String enname = "";
+        User uuser=projectFilingBatch.getCreateBy();
+        Office office = projectFilingBatch.getCreateBy().getOffice();
+        office = officeService.get(office.getId());
+        projectFilingBatch.setOffice(office);
+        String notifyStr = "归档批次号:"+projectFilingBatch.getFilingBatch();
+        String str = notifyStr+",创建人:"+projectFilingBatch.getCreateBy().getName()+",所属部门:"+projectFilingBatch.getOffice().getName();
+        String titleStr = "归档批次名称:"+ projectFilingBatch.getFilingBatch();
+        int key = 0;
+        if (StringUtils.isNotBlank(workActivityMenu.getProcessType()) && !workActivityMenu.getProcessType().equals("projectFilingBatch")) {
+            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(projectFilingBatch.getAct().getFlag())) {
+                        projectFilingBatch.setFilingStatus(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(projectFilingBatch.getAct().getFlag())) {
+                        notifyRole = "归档批次调整";
+                        projectFilingBatch.setFilingStatus(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("projectFilingBatch");
+            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 ("xxgdydyhu".equals(taskDefKey) && "1".equals(count)) {
+                    taskCount = count;
+                    if ("yes".equals(projectFilingBatch.getAct().getFlag())) {
+                        workActivityProcess.setIsApproval("1");
+                        vars.put("pass", true);
+                        vars.put("passs", true);
+                        notifyRole = "审批通过";
+                    } else {
+                        workActivityProcess.setIsApproval("2");
+                        vars.put("pass", false);
+                        vars.put("passs", false);
+                        user = createUser;
+                        notifyRole = "归档批次调整";
+                    }
+                    break;
+                } else if ("modifyApply".equals(taskDefKey) && "0".equals(count)) {
+                    notifyRole = "线下项目归档管理员审批";
+                    taskCount = "0";
+                    enname = "xxgdydyhu";
+                    workActivityProcess.setCount(0);
+                    if("yes".equals(projectFilingBatch.getAct().getFlag())){
+                        workActivityProcess.setIsApproval("1");
+                        vars.put("pass",true);
+                        vars.put("passs",true);
+                    }else{
+                        workActivityProcess.setIsApproval("2");
+                        projectFilingBatch.setFilingStatus(ProjectStatusEnum.RECALL.getValue());
+                        vars.put("pass",false);
+                        vars.put("passs",false);
+                    }
+                    break;
+                }
+            }
+        }
+        workActivityProcessService.updateProcess(workActivityProcess,workActivityMenu,key,taskCount,projectFilingBatch.getProcessinstanceId(),taskDefKey,"modifyApply",projectFilingBatch.getAct().getFlag(),comment, activities);
+        // 设置意见
+        projectFilingBatch.getAct().setComment(comment);
+        projectFilingBatch.preUpdate();
+        //判断是否是审核通过
+        if("yes".equals(projectFilingBatch.getAct().getFlag())){
+            actTaskService.complete(projectFilingBatch.getAct().getTaskId(), projectFilingBatch.getAct().getProcInsId(), projectFilingBatch.getAct().getComment(), vars);
+        }else{
+            //不通过需要查询审核组角色id
+            List<Act> list2 = actTaskService.toMyStartedList(projectFilingBatch.getProcessinstanceId());
+            // 提交流程任务
+            //如果是驳回,并且审核角色为多个,需要对每个角色的审核流都进行处理
+            for (Act actInfo: list2) {
+                actTaskService.complete(actInfo.getTask().getId(), actInfo.getProcInsId(), projectFilingBatch.getAct().getComment(), vars);
+            }
+        }
+        //actTaskService.complete(projectRecords.getAct().getTaskId(), projectRecords.getAct().getProcInsId(), projectRecords.getAct().getComment(), vars);
+        boolean state = actTaskService.isProcessEnd(projectFilingBatch.getAct().getProcInsId());
+        List<User> users = new ArrayList<>();
+        List<User> userList = new ArrayList<>();
+        if(!state) {
+            users.add(projectFilingBatch.getCreateBy());
+            //审核完成提示框
+            String title = "归档批次号【"+projectFilingBatch.getFilingBatch()+"】归档成功";
+            String content = "归档批次号【"+projectFilingBatch.getFilingBatch()+"】归档成功,归档批次编号:"+projectFilingBatch.getId();
+            if ("yes".equals(projectFilingBatch.getAct().getFlag())) {
+                projectFilingBatch.setFilingStatus(ProjectStatusEnum.SIGNED.getValue());
+                WorkProjectNotify notify = new WorkProjectNotify();
+                notify.setNotifyId(projectFilingBatch.getId());
+                userList = workProjectNotifyService.readByNotifyId(notify);
+                users.add(projectFilingBatch.getCreateBy());
+                workProjectNotifyService
+                        .save(UtilNotify
+                                .saveNotify(projectFilingBatch.getId(),
+                                        projectFilingBatch.getCreateBy(),
+                                        office.getParent().getId(),
+                                        title,
+                                        content,
+                                        "100",
+                                        "0",
+                                        "待通知",
+                                        notifyRole));
+            } else {
+                WorkProjectNotify notify = new WorkProjectNotify();
+                notify.setNotifyId(projectFilingBatch.getId());
+                userList = workProjectNotifyService.readByNotifyId(notify);
+                users.add(projectFilingBatch.getCreateBy());
+                if (projectFilingBatch.getFilingStatus()!= ProjectStatusEnum.RECALL.getValue()){
+                    projectFilingBatch.setFilingStatus(ProjectStatusEnum.REJECTED.getValue());
+                    workProjectNotifyService
+                            .save(UtilNotify
+                                    .saveNotify(projectFilingBatch.getId(),
+                                            projectFilingBatch.getCreateBy(),
+                                            office.getParent().getId(),
+                                            titleStr,
+                                            notifyStr,
+                                            "100",
+                                            "0",
+                                            "待通知",
+                                            notifyRole));
+                }
+            }
+            workActivityProcessService.deleteProcessIdAuditUsers(projectFilingBatch.getProcessinstanceId());
+        }else{
+            if (StringUtils.isNotBlank(workActivityMenu.getProcessType()) && !workActivityMenu.getProcessType().equals("projectFilingBatch")) {
+                WorkProjectNotify notify = new WorkProjectNotify();
+                notify.setNotifyId(projectFilingBatch.getId());
+                userList = workProjectNotifyService.readByNotifyId(notify);
+                WorkProjectNotify workProjectNotify = UtilNotify
+                        .saveNotify(projectFilingBatch.getId(),
+                                new User(),
+                                office.getParent().getId(),
+                                titleStr,
+                                str,
+                                "100",
+                                "0",
+                                "待审批",
+                                notifyRole);
+                String count = taskDefKey.replace("audit","").replace("task","");
+                List<WorkProjectNotify> workProjectNotifys = activityService.getByFlagAndTaskDefKeyList(
+                        activities,
+                        workProjectNotify,
+                        taskDefKey,
+                        projectFilingBatch.getAct().getFlag(),
+                        count,
+                        projectFilingBatch.getCreateBy(),
+                        projectFilingBatch.getOffice().getId(),
+                        "4");
+                for (WorkProjectNotify workProjectNotify1:workProjectNotifys){
+                    users.add(workProjectNotify1.getUser());
+                    workProjectNotify1.setId("");
+                    workProjectNotify1.setIsNewRecord(false);
+                    workProjectNotifyService.save(workProjectNotify1);
+                }
+            }else {
+                if (!"yes".equals(projectFilingBatch.getAct().getFlag())) {//驳回待办提醒
+                    str = "归档批次号【"+ projectFilingBatch.getFilingBatch()+"】归档申请被驳回,请选择重新申请或作废";
+                    titleStr = "归档批次号【"+ projectFilingBatch.getFilingBatch()+"】归档申请被驳回";
+                    WorkProjectNotify notify = new WorkProjectNotify();
+                    notify.setNotifyId(projectFilingBatch.getId());
+                    userList = workProjectNotifyService.readByNotifyId(notify);
+                    users.add(user);
+                    WorkProjectNotify workProjectNotify = UtilNotify
+                            .saveNotify(projectFilingBatch.getId(),
+                                    user,
+                                    office.getParent().getId(),
+                                    titleStr,
+                                    str,
+                                    "100",
+                                    "0",
+                                    "重新申请",
+                                    notifyRole);
+                    workProjectNotifyService.save(workProjectNotify);
+                } else {
+                    if (StringUtils.isNotBlank(enname)) {//驳回重新申请待办信息
+                        str = "归档批次号【"+ projectFilingBatch.getFilingBatch()+"】重新归档,待审批,项目编号:"+projectFilingBatch.getId();
+                        titleStr = "归档批次号【"+ projectFilingBatch.getFilingBatch()+"】重新归档,待审批";
+                        WorkProjectNotify notify = new WorkProjectNotify();
+                        notify.setNotifyId(projectFilingBatch.getId());
+                        userList = workProjectNotifyService.readByNotifyId(notify);
+                        WorkProjectNotify workProjectNotify = UtilNotify
+                                .saveNotify(projectFilingBatch.getId(),
+                                        new User(),
+                                        office.getParent().getId(),
+                                        titleStr,
+                                        str,
+                                        "100",
+                                        "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","39");
+                            extras.put("id",workProjectNotify.getId());
+                            UserUtils.pushInfoToApp(titleStr,str,extras,user1.getId());
+                        }
+                    }else {
+                        WorkProjectNotify notify = new WorkProjectNotify();
+                        notify.setNotifyId(projectFilingBatch.getId());
+                        userList = workProjectNotifyService.readByNotifyId(notify);
+                        users.add(projectFilingBatch.getCreateBy());
+                        workProjectNotifyService
+                                .save(UtilNotify
+                                        .saveNotify(projectFilingBatch.getId(),
+                                                projectFilingBatch.getCreateBy(),
+                                                office.getParent().getId(),
+                                                titleStr,
+                                                str,
+                                                "100",
+                                                "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());
+            }
+        }
+//        if(ProjectStatusEnum.SIGNED.getValue()==projectFilingBatch.getFilingStatus()){
+//            Projectcontentinfo projectcontentinfo = new Projectcontentinfo();
+//            projectcontentinfo.setProjectOnRural(projectRecords);
+//            projectcontentinfo.setCompanyId(projectRecords.getCompany().getId());
+//            projectcontentinfo.setOfficeId(projectRecords.getOffice().getId());
+//            projectcontentinfo.setSort(30);
+//            projectcontentinfo.setParentIds("0,");
+//            projectcontentinfo.setParent(new Projectcontentinfo("0"));
+//            projectcontentinfo.setName(projectRecords.getProjectId());
+//            projectcontentinfo.preInsert();
+//            projectcontentinfoDao.insertOnRural(projectcontentinfo);
+//        }
+        int i=dao.update(projectFilingBatch);
+        return "保存审核意见成功!";
+    }
+
+}

+ 233 - 0
src/main/java/com/jeeplus/modules/projectFilingBatch/utils/ImportExcelUtil.java

@@ -0,0 +1,233 @@
+package com.jeeplus.modules.projectFilingBatch.utils;
+
+import com.alibaba.fastjson.JSON;
+import com.google.common.collect.Lists;
+import com.jeeplus.common.utils.StringUtils;
+import org.apache.log4j.Logger;
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.text.DecimalFormat;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+/**
+ * @author: 大猫
+ * @create: 2021-01-18 13:54
+ **/
+public class ImportExcelUtil {
+
+    private static Logger log = Logger.getLogger(ImportExcelUtil.class);
+
+    private final static String excel2003L = ".xls"; // 2003- 版本的excel
+    private final static String excel2007U = ".xlsx"; // 2007+ 版本的excel
+
+    private static Map<String,String> map = new LinkedHashMap();
+
+    /**
+     * 将流中的Excel数据转成List<Map>
+     *
+     * @param in
+     *            输入流
+     * @param fileName
+     *            文件名(判断Excel版本)
+     * @param mapping
+     *            字段名称映射
+     * @param sheetIndex
+     *            工作表编号
+     * @return
+     * @throws Exception
+     */
+    public static List<Map<String, Object>> parseExcel(InputStream in, String fileName,
+                                                       Map<String, String> mapping,Integer sheetIndex) throws Exception {
+        // 根据文件名来创建Excel工作薄
+        Workbook work = getWorkbook(in, fileName);
+        if (null == work) {
+            throw new Exception("创建Excel工作薄为空!");
+        }
+        Sheet sheet = null;
+        Row row = null;
+        Cell cell = null;
+        // 返回数据
+        List<Map<String, Object>> ls = Lists.newArrayList();
+
+        // 遍历Excel中的sheet
+        sheet = work.getSheet("审定信息");
+
+        if(null == sheet){
+            return null;
+        }
+
+        // 取第二行标题
+        row = sheet.getRow(1);
+        String title[] = null;
+        if (row != null) {
+            title = new String[row.getLastCellNum()];
+
+            for (int y = row.getFirstCellNum(); y < row.getLastCellNum(); y++) {
+                cell = row.getCell(y);
+                title[y] = (String) getCellValue(cell);
+                map.put((String)getCellValue(cell),"");
+            }
+
+        }
+        log.info(JSON.toJSONString(title));
+
+        // 遍历当前sheet中的所有行
+        for (int j = 2; j < sheet.getLastRowNum() + 1; j++) {
+            row = sheet.getRow(j);
+            Map<String, Object> m = new HashMap<String, Object>();
+            // 遍历所有的列
+            for (int y = row.getFirstCellNum(); y < row.getLastCellNum(); y++) {
+                cell = row.getCell(y);
+                if (cell != null && cell.getCellType() != Cell.CELL_TYPE_BLANK){
+                    String key = title[y];
+                    if(StringUtils.isNotBlank(mapping.get(key))){
+                        if(null == cell){
+                            m.put(mapping.get(key), "");
+                        }else{
+                            m.put(mapping.get(key), getCellValue(cell));
+                        }
+                    }
+                }
+            }
+            ls.add(m);
+        }
+        Iterator<Map<String,Object>> it = ls.iterator();
+        while(it.hasNext()){
+            Map<String,Object> x = it.next();
+            if(x.size() == 0){
+                it.remove();
+            }
+        }
+        return ls;
+    }
+
+    /**
+     * 描述:根据文件后缀,自适应上传文件的版本
+     *
+     * @param inStr
+     *            ,fileName
+     * @return
+     * @throws Exception
+     */
+    public static Workbook getWorkbook(InputStream inStr, String fileName) throws Exception {
+        Workbook wb = null;
+        String fileType = fileName.substring(fileName.lastIndexOf("."));
+        if (excel2003L.equals(fileType)) {
+            wb = new HSSFWorkbook(inStr); // 2003-
+        } else if (excel2007U.equals(fileType)) {
+            wb = new XSSFWorkbook(inStr); // 2007+
+        } else {
+            throw new Exception("解析的文件格式有误!");
+        }
+        return wb;
+    }
+
+    /**
+     * 描述:对表格中数值进行格式化
+     *
+     * @param cell
+     * @return
+     */
+    public static Object getCellValue(Cell cell) {
+        Object value = null;
+        DecimalFormat df = new DecimalFormat("0"); // 格式化number String字符
+        SimpleDateFormat sdf = new SimpleDateFormat("yyy-MM-dd"); // 日期格式化
+        DecimalFormat df2 = new DecimalFormat("0"); // 格式化数字
+
+        switch (cell.getCellType()) {
+            case Cell.CELL_TYPE_STRING:
+                value = cell.getRichStringCellValue().getString();
+                break;
+            case Cell.CELL_TYPE_NUMERIC:
+                if ("General".equals(cell.getCellStyle().getDataFormatString())) {
+                    value = df.format(cell.getNumericCellValue());
+                } else if ("m/d/yy".equals(cell.getCellStyle().getDataFormatString())) {
+                    value = sdf.format(cell.getDateCellValue());
+                } else {
+                    value = df2.format(cell.getNumericCellValue());
+                }
+                break;
+            case Cell.CELL_TYPE_BOOLEAN:
+                value = cell.getBooleanCellValue();
+                break;
+            case Cell.CELL_TYPE_BLANK:
+                value = "";
+                break;
+            default:
+                break;
+        }
+        return value;
+    }
+
+    public static void main(String[] args) throws Exception {
+        File file = new File("D:\\studn.xls");
+        FileInputStream fis = new FileInputStream(file);
+        Map<String, String> m = new HashMap<String, String>();
+        m.put("id", "id");
+        m.put("姓名", "name");
+        m.put("年龄", "age");
+        List<Map<String, Object>> ls = parseExcel(fis, file.getName(), m,0);
+        System.out.println(JSON.toJSONString(ls));
+    }
+
+    public static Map<String,String> mapInfo() {
+        Map map = new LinkedHashMap();
+        map.put("项目定义号","projectId");
+        map.put("项目名称","projectName");
+        map.put("单体工程wbs编号","wbsNum");
+        map.put("工程编号","programmeId");
+        map.put("工程名称","programmeName");
+        map.put("审计项目类型","auditItemsType");
+        map.put("电压等级","voltageLevel");
+        map.put("现场联系人","onSiteContact");
+        map.put("联系电话","contactNumber");
+        map.put("实际开工时间","actualStartTime");
+        map.put("实际竣工时间","actualEndTime");
+        map.put("施工单位名称","constructionUnit");
+        map.put("合同编号","contractId");
+        map.put("合同金额","contractSum");
+        map.put("计划开工时间","planStartTime");
+        map.put("计划竣工时间","planEndTime");
+        map.put("结算折扣率","settleDiscountRate");
+        map.put("土建结算送审金额(元)下浮后金额","civilSubmitSum");
+        map.put("安装结算送审金额(元)下浮后金额","installSubmitSum");
+        map.put("施工费送审金额小计(元)下浮后金额","buildSubmitSum");
+        map.put("甲供材送审金额(元)结算书中的物资金额","materialSubmitSum");
+        map.put("土建结算审定金额(元)下浮后金额","civilAuthorizeSum");
+        map.put("安装结算审定金额(元)下浮后金额","installAuthorizeSum");
+        map.put("施工费审定金额小计(元)下浮后金额","buildAuthorizeSum");
+        map.put("甲供材审定金额(元)","materialAuthorizeSum");
+        map.put("施工费核减金额(元)","buildDiscountSum");
+        map.put("施工费核减率(%)","buildDiscountRate");
+        map.put("施工单位诚信扣款(元)","creditDeduction");
+        map.put("建议结算款(元)","suggestedSettlement");
+        map.put("是否查看现场(必填),填是或者否","hasViewScene");
+        map.put("审计费(元)","auditFee");
+        map.put("审计部下发意见文号","optionNum");
+        map.put("事务所审计报告号(必填)","officeReportNo");
+        map.put("事务所名称","officeName");
+        map.put("事务所审计人员","officeAuditor");
+        map.put("打包时间","packTime");
+        map.put("审计应结束时间","planAuditTime");
+        map.put("审计方式","auditType");
+        map.put("备注","remarks");
+        map.put("审计专职","auditProfessional");
+        map.put("提交送审日期","submitApprovalTime");
+        map.put("送审人","submitApprovalMan");
+        map.put("送审部门","submitApprovalDepartment");
+        map.put("二级单位","secondaryUnit");
+        map.put("一级单位","firstLevelUnit");
+        map.put("送审单ID(勿动)","submissionFormId");
+        return map;
+    }
+
+}

+ 390 - 0
src/main/java/com/jeeplus/modules/projectFilingBatch/utils/RuralProjectReportedUtil.java

@@ -0,0 +1,390 @@
+package com.jeeplus.modules.projectFilingBatch.utils;
+
+import com.google.common.collect.Lists;
+import com.jeeplus.common.utils.StringUtils;
+import com.jeeplus.modules.ruralprojectrecords.entity.ReportedConsultant;
+import com.jeeplus.modules.ruralprojectrecords.entity.RuralProjectRecordsReported;
+import com.jeeplus.modules.sys.entity.MainDictDetail;
+import com.jeeplus.modules.sys.entity.User;
+import com.jeeplus.modules.sys.utils.DictUtils;
+import com.jeeplus.modules.sys.utils.UserUtils;
+import org.apache.cxf.endpoint.Client;
+import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;
+
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+/**
+ * @author: 大猫
+ * @create: 2020-12-18 10:42
+ **/
+public class RuralProjectReportedUtil {
+
+    /**
+     * 项目上报数据处理(转map)
+     * @param reported
+     * @return
+     */
+    public static Map<String ,String> reportedDataManage(RuralProjectRecordsReported reported){
+        Map<String,String> map = new LinkedHashMap<>();
+        //业务系统项目主键,consulting_project表rowguid字段
+        map.put("Project_Guid",reported.getId());
+        //咨询企业组织机构代码
+        map.put("JiGou_Guid","");
+        //咨询企业唯一标识,省站系统可以查询到
+        map.put("DanWei_Guid","46bc2ef1-5590-461a-8877-fc6c658c9cd1");
+        //项目名称,consulting_project表projectname字段
+        map.put("ProjectName",reported.getProjectName());
+        //项目档案编号,consulting_project表danganno字段
+        map.put("ProjectCode",reported.getProjectRecordId());
+        //工程用途,直接手填
+
+        List<MainDictDetail> PorjectUseList = DictUtils.getMainDictList("PorjectUse");
+        for (MainDictDetail info: PorjectUseList) {
+            if(info.getValue().equals(reported.getPorjectUse())) {
+                map.put("PorjectUse",info.getLabel());
+                break;
+            }
+        }
+        //工程结构,直接手填
+        List<MainDictDetail> PorjectStructList = DictUtils.getMainDictList("PorjectStruct");
+        for (MainDictDetail info: PorjectStructList) {
+            if(info.getValue().equals(reported.getPorjectStruct())) {
+                map.put("PorjectStruct",info.getLabel());
+                break;
+            }
+        }
+        //地上层数,直接手填
+        map.put("FloorUp",reported.getFloorUp().toString());
+        //地下层数,直接手填
+        map.put("FloorDown",reported.getFloorDown().toString());
+        //省份
+        map.put("SuoZaiDi_Sheng",reported.getProvince());
+        //地市
+        map.put("SuoZaiDi_Shi",reported.getCity());
+        //区县
+        map.put("SuoZaiDi_Xian",reported.getCounty());
+        //咨询项目类型,直接手填
+        List<MainDictDetail> ProjectTypeList = DictUtils.getMainDictList("ProjectType");
+        for (MainDictDetail info: ProjectTypeList) {
+            if(info.getValue().equals(reported.getProjectType())) {
+                map.put("ProjectType",info.getLabel());
+                break;
+            }
+        }
+
+        //建筑面积(m2),直接手填
+        map.put("GCGM_Value",reported.getGCGMValue().toString());
+        //计量单位,直接手填
+
+        List<MainDictDetail> GCGMUnitList = DictUtils.getMainDictList("GCGM_Unit");
+        for (MainDictDetail info: GCGMUnitList) {
+            if(info.getValue().equals(reported.getGCGMUnit())) {
+                map.put("GCGM_Unit",info.getLabel());
+                break;
+            }
+        }
+        //投资性质,直接手填
+        List<MainDictDetail> touZiXZList = DictUtils.getMainDictList("TouZiXZ");
+        for (MainDictDetail info: touZiXZList) {
+            if(info.getValue().equals(reported.getTouZiXZ())) {
+                map.put("TouZiXZ",info.getLabel());
+                break;
+            }
+        }
+
+        //咨询标的额(万元)
+        map.put("ZiXunBDE",reported.getZiXunBDE().toString());
+        //其中土建造价(万元)
+        map.put("ZiXunBDE_TJ",reported.getZiXunBDETJ().toString());
+        //其中安装造价(万元)
+        map.put("ZiXunBDE_AZ",reported.getZiXunBDEAZ().toString());
+        //合同估算价(万元)
+        map.put("HeTongJia",reported.getHeTongJia().toString());
+        //送审价(万元)
+        map.put("SongShenJia",reported.getSongShenJia().toString());
+        //审定价(万元)
+        map.put("ShenDingJia",reported.getShenDingJia().toString());
+        //审核增减额(万元)
+        map.put("JingHeJianE",reported.getJingHeJianE().toString());
+        //审核增减率(%)
+        map.put("JingHeJianLv",reported.getJingHeJianLv().toString());
+        //咨询营业收入(万元)
+        map.put("ZiXunShouRu",reported.getZiXunShouRu());
+        //项目合同编号,consulting表contractno字段
+        map.put("ZiXunHTBH",reported.getZiXunHTBH());
+        //报告签发日期,consulting_report表issuredate字段
+        map.put("BaoGaoShuQianFaDate",reported.getBaoGaoShuQianFaDate());
+        //报告号,consulting_report表reportno字段
+        map.put("DangABH",reported.getDangABH());
+        //造价师姓名,直接手填
+        User user = UserUtils.get(reported.getXmFZR());
+        map.put("ProjectFZR",user.getName());
+        //造价师注册证号,直接手填
+        map.put("ZJSZhuCeZH",reported.getZaoJiaShiZhengHao());
+
+        //咨询员
+        List<ReportedConsultant> reportedConsultantList = reported.getReportedConsultantList();
+
+        Iterator iterator = reportedConsultantList.iterator();
+        while (iterator.hasNext()) {
+            ReportedConsultant data = (ReportedConsultant) iterator.next();
+            if (null == data.getId()){
+                iterator.remove();
+            }
+        }
+        //获取填写的咨询员数量
+        Integer count = reportedConsultantList.size();
+        for (int i = 1;i<=count; i++){
+            User ziXunYuaUser = UserUtils.get(reportedConsultantList.get(i-1).getZixunyuan());
+            map.put("ZiXunYuan_"+i,ziXunYuaUser.getName());
+            map.put("ZhuCe_ZiGe_ZH"+i,reportedConsultantList.get(i-1).getZhucezigezhID());
+            map.put("WorkNR_"+i,reportedConsultantList.get(i-1).getWordnr());
+        }
+        //如果咨询员人数小于20人,则进行补齐
+        if(count<20){
+            for (int i = count+1;i<=20; i++){
+                map.put("ZiXunYuan_"+i,"");
+                map.put("ZhuCe_ZiGe_ZH"+i,"");
+                map.put("WorkNR_"+i,"");
+            }
+        }
+
+        //委托单位名称,consulting_project表clientname字段
+        map.put("WeiTuoDW",reported.getWeiTuoDW());
+        //委托单位联系电话
+        map.put("LianXiDH",reported.getLianXiDH());
+        //报告签发日期,consulting_report表issuredate字段
+        map.put("ReportDate",reported.getBaoGaoShuQianFaDate());
+        //上报日期,当天
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+        String date = sdf.format(new Date());
+        map.put("UpdateDate",date);
+        //钢材用量
+        map.put("GCYL",reported.getGCYL().toString());
+        //水泥用量
+        map.put("SNYL",reported.getSNYL().toString());
+        //预拌砼用量
+        map.put("YBTYL",reported.getYBTYL().toString());
+        //人工工日用量
+        map.put("RGGRYL",reported.getRGGRYL().toString());
+        //状态,默认0
+        map.put("Status","0");
+        //合同类型
+        List<MainDictDetail> HeTongLeiXingList = DictUtils.getMainDictList("HeTongLeiXing");
+        for (MainDictDetail info: HeTongLeiXingList) {
+            if(info.getValue().equals(reported.getHeTongLeiXing())) {
+                map.put("HeTongLeiXing",info.getLabel());
+                break;
+            }
+        }
+
+        //土建
+        List<MainDictDetail> civilList = DictUtils.getMainDictList("civil_project");
+        String civilStr = getValue(civilList,reported.getTJProjectList());
+        //装饰
+        List<MainDictDetail> zsList = DictUtils.getMainDictList("decorate_project");
+        String zsStr = getValue(zsList,reported.getZSProjectList());
+
+        String tjzsStr = "";
+        //判断土建和装饰是否已选择值
+        if(StringUtils.isNotBlank(civilStr) && StringUtils.isNotBlank(zsStr)){
+            tjzsStr = civilStr+";"+zsStr;
+        }else if(StringUtils.isBlank(civilStr) && StringUtils.isNotBlank(zsStr)){
+            tjzsStr = zsStr;
+        }else if(StringUtils.isNotBlank(civilStr) && StringUtils.isBlank(zsStr)){
+            tjzsStr = civilStr;
+        }
+        //包含内容土建,包含内容装饰
+        map.put("ZxxmNr_TuJianAndZhuangShi",tjzsStr);
+
+        //安装
+        List<MainDictDetail> azList = DictUtils.getMainDictList("install_project");
+        String azStr = getValue(azList,reported.getAZProjectList());
+        //包含内容安装
+        map.put("ZxxmNr_AnZhuang",azStr);
+
+        //市政
+        List<MainDictDetail> szList = DictUtils.getMainDictList("services_project");
+        String szStr = getValue(szList,reported.getSZProjectList());
+        //包含内容市政
+        map.put("ZxxmNr_ShiZheng",szStr);
+
+        //园林
+        List<MainDictDetail> fgList = DictUtils.getMainDictList("park_project");
+        String fgStr = getValue(fgList,reported.getFGYLProjectList());
+        //包含内容仿古园林
+        map.put("ZxxmNr_FangGuYuanLin",fgStr);
+        //其它包含内容
+        map.put("GCTZ11",reported.getQTProjec());
+        return map;
+    }
+
+    /**
+     * 处理多选框内容
+     * @param detailList
+     * @param xmNrList
+     * @return
+     */
+    public static String getValue(List<MainDictDetail> detailList,List<String> xmNrList){
+        List<String> result = Lists.newArrayList();
+        if(xmNrList != null){
+            for (String xmNr: xmNrList) {
+                for (MainDictDetail detail: detailList) {
+                    if(xmNr.equals(detail.getValue())){
+                        result.add(detail.getLabel());
+                    }
+                }
+            }
+            String str = StringUtils.join(result.toArray(), ";");
+            return str;
+        }
+        return "";
+    }
+
+    public static String client(String xml) {
+        try {
+
+            JaxWsDynamicClientFactory factroy = JaxWsDynamicClientFactory.newInstance();
+            //DynamicClientFactory factroy = DynamicClientFactory.newInstance();
+            Client client = factroy.createClient("http://www.jszj.com.cn/SOA12345/UploadExpenseToConstract.asmx?wsdl");
+            Object[] results = client.invoke("InsertZjzxProject", xml);
+            System.out.println("client方式:" + results[0]);
+            return results[0].toString();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+    public static void main(String[] args) {
+        try {
+            String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
+                    "<Data>\n" +
+                    "    <DataBody>\n" +
+                    "        <DATA>\n" +
+                    "            <ZiXunXM>\n" +
+                    "                <List>\n" +
+                    "                    <Row>\n" +
+                    "                        <Project_Guid>0f462eaebc9048c98567965dbdf727fa</Project_Guid>\n" +
+                    "                        <JiGou_Guid/>\n" +
+                    "                        <DanWei_Guid>46bc2ef1-5590-461a-8877-fc6c658c9cd1</DanWei_Guid>\n" +
+                    "                        <ProjectName>测试项目1204-03</ProjectName>\n" +
+                    "                        <ProjectCode>2020-咨询-0193</ProjectCode>\n" +
+                    "                        <PorjectUse>电力工程</PorjectUse>\n" +
+                    "                        <PorjectStruct>其他</PorjectStruct>\n" +
+                    "                        <FloorUp>0</FloorUp>\n" +
+                    "                        <FloorDown>0</FloorDown>\n" +
+                    "                        <SuoZaiDi_Sheng>江苏省</SuoZaiDi_Sheng>\n" +
+                    "                        <SuoZaiDi_Shi>苏州</SuoZaiDi_Shi>\n" +
+                    "                        <SuoZaiDi_Xian>太仓</SuoZaiDi_Xian>\n" +
+                    "                        <ProjectType>工程结算审核</ProjectType>\n" +
+                    "                        <GCGM_Value>1000.0</GCGM_Value>\n" +
+                    "                        <GCGM_Unit>项</GCGM_Unit>\n" +
+                    "                        <TouZiXZ>国有投资</TouZiXZ>\n" +
+                    "                        <ZiXunBDE>560.0</ZiXunBDE>\n" +
+                    "                        <ZiXunBDE_TJ>200.0</ZiXunBDE_TJ>\n" +
+                    "                        <ZiXunBDE_AZ>230.0</ZiXunBDE_AZ>\n" +
+                    "                        <HeTongJia>5000.0</HeTongJia>\n" +
+                    "                        <SongShenJia>4000.0</SongShenJia>\n" +
+                    "                        <ShenDingJia>5000.0</ShenDingJia>\n" +
+                    "                        <JingHeJianE>1000.0</JingHeJianE>\n" +
+                    "                        <JingHeJianLv>25.0</JingHeJianLv>\n" +
+                    "                        <ZiXunShouRu>14</ZiXunShouRu>\n" +
+                    "                        <ZiXunHTBH>2020兴光/工程咨询0005</ZiXunHTBH>\n" +
+                    "                        <BaoGaoShuQianFaDate>2020-12-18</BaoGaoShuQianFaDate>\n" +
+                    "                        <DangABH>苏兴咨字【2020】0092</DangABH>\n" +
+                    "                        <ProjectFZR>市场主任</ProjectFZR>\n" +
+                    "                        <ZJSZhuCeZH>KZ157310</ZJSZhuCeZH>\n" +
+                    "                        <ZiXunYuan_1>市场</ZiXunYuan_1>\n" +
+                    "                        <ZhuCe_ZiGe_ZH1>ZS12357</ZhuCe_ZiGe_ZH1>\n" +
+                    "                        <WorkNR_1>审核</WorkNR_1>\n" +
+                    "                        <ZiXunYuan_2/>\n" +
+                    "                        <ZhuCe_ZiGe_ZH2/>\n" +
+                    "                        <WorkNR_2/>\n" +
+                    "                        <ZiXunYuan_3/>\n" +
+                    "                        <ZhuCe_ZiGe_ZH3/>\n" +
+                    "                        <WorkNR_3/>\n" +
+                    "                        <ZiXunYuan_4/>\n" +
+                    "                        <ZhuCe_ZiGe_ZH4/>\n" +
+                    "                        <WorkNR_4/>\n" +
+                    "                        <ZiXunYuan_5/>\n" +
+                    "                        <ZhuCe_ZiGe_ZH5/>\n" +
+                    "                        <WorkNR_5/>\n" +
+                    "                        <ZiXunYuan_6/>\n" +
+                    "                        <ZhuCe_ZiGe_ZH6/>\n" +
+                    "                        <WorkNR_6/>\n" +
+                    "                        <ZiXunYuan_7/>\n" +
+                    "                        <ZhuCe_ZiGe_ZH7/>\n" +
+                    "                        <WorkNR_7/>\n" +
+                    "                        <ZiXunYuan_8/>\n" +
+                    "                        <ZhuCe_ZiGe_ZH8/>\n" +
+                    "                        <WorkNR_8/>\n" +
+                    "                        <ZiXunYuan_9/>\n" +
+                    "                        <ZhuCe_ZiGe_ZH9/>\n" +
+                    "                        <WorkNR_9/>\n" +
+                    "                        <ZiXunYuan_10/>\n" +
+                    "                        <ZhuCe_ZiGe_ZH10/>\n" +
+                    "                        <WorkNR_10/>\n" +
+                    "                        <ZiXunYuan_11/>\n" +
+                    "                        <ZhuCe_ZiGe_ZH11/>\n" +
+                    "                        <WorkNR_11/>\n" +
+                    "                        <ZiXunYuan_12/>\n" +
+                    "                        <ZhuCe_ZiGe_ZH12/>\n" +
+                    "                        <WorkNR_12/>\n" +
+                    "                        <ZiXunYuan_13/>\n" +
+                    "                        <ZhuCe_ZiGe_ZH13/>\n" +
+                    "                        <WorkNR_13/>\n" +
+                    "                        <ZiXunYuan_14/>\n" +
+                    "                        <ZhuCe_ZiGe_ZH14/>\n" +
+                    "                        <WorkNR_14/>\n" +
+                    "                        <ZiXunYuan_15/>\n" +
+                    "                        <ZhuCe_ZiGe_ZH15/>\n" +
+                    "                        <WorkNR_15/>\n" +
+                    "                        <ZiXunYuan_16/>\n" +
+                    "                        <ZhuCe_ZiGe_ZH16/>\n" +
+                    "                        <WorkNR_16/>\n" +
+                    "                        <ZiXunYuan_17/>\n" +
+                    "                        <ZhuCe_ZiGe_ZH17/>\n" +
+                    "                        <WorkNR_17/>\n" +
+                    "                        <ZiXunYuan_18/>\n" +
+                    "                        <ZhuCe_ZiGe_ZH18/>\n" +
+                    "                        <WorkNR_18/>\n" +
+                    "                        <ZiXunYuan_19/>\n" +
+                    "                        <ZhuCe_ZiGe_ZH19/>\n" +
+                    "                        <WorkNR_19/>\n" +
+                    "                        <ZiXunYuan_20/>\n" +
+                    "                        <ZhuCe_ZiGe_ZH20/>\n" +
+                    "                        <WorkNR_20/>\n" +
+                    "                        <WeiTuoDW>委托施工1125-01</WeiTuoDW>\n" +
+                    "                        <LianXiDH>025-8805213</LianXiDH>\n" +
+                    "                        <ReportDate>2020-12-18</ReportDate>\n" +
+                    "                        <UpdateDate>2020-12-18</UpdateDate>\n" +
+                    "                        <GCYL>0.0</GCYL>\n" +
+                    "                        <SNYL>0.0</SNYL>\n" +
+                    "                        <YBTYL>0.0</YBTYL>\n" +
+                    "                        <RGGRYL>1100.0</RGGRYL>\n" +
+                    "                        <Status>0</Status>\n" +
+                    "                        <HeTongLeiXing>造价咨询合同</HeTongLeiXing>\n" +
+                    "                        <ZxxmNr_TuJianAndZhuangShi>主体结构工程;外墙饰面(不含幕墙);门窗工程</ZxxmNr_TuJianAndZhuangShi>\n" +
+                    "                        <ZxxmNr_AnZhuang>通讯与智能化工程</ZxxmNr_AnZhuang>\n" +
+                    "                        <ZxxmNr_ShiZheng>防洪堤挡土墙</ZxxmNr_ShiZheng>\n" +
+                    "                        <ZxxmNr_FangGuYuanLin/>\n" +
+                    "                        <GCTZ11>其他专业工程咨询项目造价包含内容说明</GCTZ11>\n" +
+                    "                    </Row>\n" +
+                    "                </List>\n" +
+                    "            </ZiXunXM>\n" +
+                    "        </DATA>\n" +
+                    "    </DataBody>\n" +
+                    "</Data>\n";
+            JaxWsDynamicClientFactory factroy = JaxWsDynamicClientFactory.newInstance();
+            //DynamicClientFactory factroy = DynamicClientFactory.newInstance();
+            Client client = factroy.createClient("http://www.jszj.com.cn/SOA12345/UploadExpenseToConstract.asmx?wsdl");
+            Object[] results = client.invoke("InsertZjzxProject", xml);
+            System.out.println("client方式:" + results[0]);
+            System.out.println(results[0]);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+}

+ 335 - 0
src/main/java/com/jeeplus/modules/projectFilingBatch/web/ProjectFilingBatchController.java

@@ -0,0 +1,335 @@
+package com.jeeplus.modules.projectFilingBatch.web;
+
+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.web.BaseController;
+import com.jeeplus.modules.act.entity.Act;
+import com.jeeplus.modules.act.service.ActTaskService;
+import com.jeeplus.modules.projectFilingBatch.entity.ProjectFilingBatch;
+import com.jeeplus.modules.projectFilingBatch.entity.ProjectFilingbatchRelation;
+import com.jeeplus.modules.projectFilingBatch.service.ProjectFilingBatchService;
+import com.jeeplus.modules.projectrecord.entity.ProjectRecords;
+import com.jeeplus.modules.ruralprojectrecords.entity.RuralProjectRecords;
+import com.jeeplus.modules.ruralprojectrecords.enums.ProjectStatusEnum;
+import com.jeeplus.modules.ruralprojectrecords.service.RuralProjectRecordsService;
+import com.jeeplus.modules.sys.entity.User;
+import com.jeeplus.modules.sys.utils.UserUtils;
+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.bind.annotation.ResponseBody;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.servlet.mvc.support.RedirectAttributes;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import java.util.*;
+
+@Controller
+@RequestMapping(value = "${adminPath}/projectFilingBatch/projectFilingBatchInfo")
+public class ProjectFilingBatchController extends BaseController {
+    @Autowired
+    private ProjectFilingBatchService projectFilingBatchService;
+    @Autowired
+    private RuralProjectRecordsService ruralProjectRecordsService;
+    @Autowired
+    private ActTaskService actTaskService;
+    @ModelAttribute
+    public ProjectFilingBatch get(@RequestParam(required = false) String id) {
+        ProjectFilingBatch entity = null;
+        if (StringUtils.isNotBlank(id)) {
+            entity = projectFilingBatchService.get(id);
+        }
+        if (entity == null) {
+            entity = new ProjectFilingBatch();
+        }
+        return entity;
+    }
+
+    @RequestMapping(value = "getProcess")
+    public String getProcess(ProjectFilingBatch projectFilingBatch, Model model, HttpServletRequest request) {
+//       projectFilingBatch=projectFilingBatchService.get(projectFilingBatch.getId());
+        model.addAttribute("processInstanceId", projectFilingBatch.getProcessinstanceId());
+        return "modules/projectFilingBatch/projectFilingBacthTask";
+    }
+
+    @RequiresPermissions("projectFilingBatch:projectFilingBatchInfo:list")
+    @RequestMapping(value = {"list", ""})
+    public String list(ProjectFilingBatch projectGuidang, HttpServletRequest request, HttpServletResponse response, Model model) {
+        if (UserUtils.isManager()) {
+            model.addAttribute("flag", "1");
+        }
+        //获取列表数据
+        Page<ProjectFilingBatch> page = projectFilingBatchService.findPage(new Page<ProjectFilingBatch>(request, response), projectGuidang);
+        model.addAttribute("page", page);
+        return "modules/projectFilingBatch/projectFilingBatchList";
+    }
+
+
+    /**
+     * 查看
+     *
+     * @param projectFilingBatch
+     * @param model
+     * @return
+     */
+    @RequiresPermissions(value = {"projectFilingBatch:projectFilingBatchInfo:view"})
+    @RequestMapping(value = "view")
+    public String view(ProjectFilingBatch projectFilingBatch, Model model) {
+        if (projectFilingBatch != null && StringUtils.isNotBlank(projectFilingBatch.getId())) {
+            List<RuralProjectRecords> ruralProjectRecordsList = new ArrayList<>();
+            //获取详细信息
+            projectFilingBatch = projectFilingBatchService.get(projectFilingBatch.getId());
+            List<ProjectFilingBatch> projectFilingBatches = projectFilingBatchService.findProjectIdByFiling(projectFilingBatch.getId());
+            for (ProjectFilingBatch filingBatch : projectFilingBatches) {
+                RuralProjectRecords ruralProjectRecords = ruralProjectRecordsService.get(filingBatch.getProjectId());
+                ruralProjectRecords.setProjectReportNumber(filingBatch.getNumber());
+                ruralProjectRecordsList.add(ruralProjectRecords);
+            }
+            //获取归档人
+            projectFilingBatch.setCreateBy(UserUtils.get(projectFilingBatch.getCreateBy().getId()));
+            //项目信息
+            projectFilingBatch.setProject(ruralProjectRecordsList);
+        }
+        model.addAttribute("projectFilingBatch", projectFilingBatch);
+        return "modules/projectFilingBatch/projectFilingBatchView";
+    }
+
+    /**
+     * 添加
+     *
+     * @param projectFilingBatch
+     * @param model
+     * @return
+     */
+    @RequiresPermissions(value = {"projectFilingBatch:projectFilingBatchInfo:add", "projectFilingBatch:projectFilingBatchInfo:edit"}, logical = Logical.OR)
+    @RequestMapping(value = "form")
+    public String form(ProjectFilingBatch projectFilingBatch, Model model) {
+        //判断实体类是否为空
+        if (projectFilingBatch.getId() != null && StringUtils.isNotBlank(projectFilingBatch.getId())) {
+            //获取详细信息
+            projectFilingBatch = projectFilingBatchService.get(projectFilingBatch.getId());
+            List<RuralProjectRecords> ruralProjectRecordsList = new ArrayList<>();
+            //获取详细信息
+            projectFilingBatch = projectFilingBatchService.get(projectFilingBatch.getId());
+            List<ProjectFilingBatch> projectFilingBatches = projectFilingBatchService.findProjectIdByFiling(projectFilingBatch.getId());
+            for (ProjectFilingBatch filingBatch : projectFilingBatches) {
+                RuralProjectRecords ruralProjectRecords = ruralProjectRecordsService.get(filingBatch.getProjectId());
+                ruralProjectRecords.setProjectReportNumber(filingBatch.getNumber());
+                ruralProjectRecordsList.add(ruralProjectRecords);
+            }
+            //获取归档人
+            projectFilingBatch.setCreateBy(UserUtils.get(projectFilingBatch.getCreateBy().getId()));
+            //项目信息
+            projectFilingBatch.setProject(ruralProjectRecordsList);
+        } else {
+            //获取归档人
+            projectFilingBatch.setCreateBy(UserUtils.getUser());
+            projectFilingBatch.setCreateDate(new Date());
+        }
+
+        model.addAttribute("projectFilingBatch", projectFilingBatch);
+        return "modules/projectFilingBatch/projectFilingBatchForm";
+    }
+
+    @RequiresPermissions(value={"ruralProject:ruralProjectRecords:edit"},logical=Logical.OR)
+    @RequestMapping(value = "modify")
+    public String modify(ProjectFilingBatch projectFilingBatch, Model model, RedirectAttributes redirectAttributes) {
+        projectFilingBatch=projectFilingBatchService.get(projectFilingBatch.getId());
+        ProcessInstance processInstance = actTaskService.getProcIns(projectFilingBatch.getProcessinstanceId());
+        if (processInstance!=null) {
+            Task taskInfok = actTaskService.getCurrentTaskInfo(processInstance);
+            Act act = new Act();
+            act.setTaskId(taskInfok.getId());
+            act.setTaskName(taskInfok.getName());
+            act.setTaskDefKey(taskInfok.getTaskDefinitionKey());
+            act.setProcDefId(taskInfok.getProcessDefinitionId());
+            act.setProcInsId(taskInfok.getProcessInstanceId());
+            act.setTask(taskInfok);
+            projectFilingBatch.setAct(act);
+        }
+        projectFilingBatchService.queryInfo(projectFilingBatch);
+        model.addAttribute("projectFilingBatch", projectFilingBatch);
+        return "modules/projectFilingBatch/projectFilingBatchApply";
+    }
+    /**
+     * 归档批次--添加项目选项
+     *
+     * @param projectRecords
+     * @param request
+     * @param response
+     * @param model
+     * @return
+     */
+    @RequestMapping(value = "finishListShow")
+    public String finishListShow(RuralProjectRecords projectRecords, String url, String fieldLabels, String fieldKeys, String searchLabel, String searchKey, String searchLabel1, String searchKey1, HttpServletRequest request, HttpServletResponse response, Model model) {
+        //获取项目信息
+        Page<RuralProjectRecords> page = ruralProjectRecordsService.projectFind(new Page<RuralProjectRecords>(request, response), projectRecords);
+        try {
+            fieldLabels = URLDecoder.decode(fieldLabels, "UTF-8");
+            fieldKeys = URLDecoder.decode(fieldKeys, "UTF-8");
+            searchLabel = URLDecoder.decode(searchLabel, "UTF-8");
+            searchKey = URLDecoder.decode(searchKey, "UTF-8");
+        } catch (UnsupportedEncodingException e) {
+            e.printStackTrace();
+        }
+        model.addAttribute("labelNames", fieldLabels.split("\\|"));
+        model.addAttribute("labelValues", fieldKeys.split("\\|"));
+        model.addAttribute("fieldLabels", fieldLabels);
+        model.addAttribute("fieldKeys", fieldKeys);
+        model.addAttribute("url", url);
+        model.addAttribute("searchLabel", searchLabel);
+        model.addAttribute("searchKey", searchKey);
+        model.addAttribute("obj", projectRecords);
+        model.addAttribute("page", page);
+        return "modules/projectFilingBatch/projectChoiceLink";
+    }
+
+    @ResponseBody
+    @RequestMapping(value = "getProjectById")
+    public RuralProjectRecords getProjectById(@RequestParam("projectId") String projectId) {
+        RuralProjectRecords projectRecords = ruralProjectRecordsService.findUseableByProjectId(projectId);
+        return projectRecords;
+    }
+
+    /**
+     * 送审归档批次项目
+     */
+    @RequiresPermissions(value = {"projectFilingBatch:projectFilingBatchInfo:add", "projectFilingBatch:projectFilingBatchInfo:edit"}, logical = Logical.OR)
+    @RequestMapping(value = "save")
+    public String save(ProjectFilingBatch projectFilingBatch, Model model, RedirectAttributes redirectAttributes,@RequestParam("proId")String[] proId) throws Exception {
+        if (!beanValidator(model, projectFilingBatch)){
+            return form(projectFilingBatch, model);
+        }
+        try{
+            if (projectFilingBatch.getId()!=null && StringUtils.isNotBlank(projectFilingBatch.getId())) {//编辑表单保存
+                ProjectFilingBatch t = projectFilingBatchService.get(projectFilingBatch.getId());//从数据库取出记录的值
+                if (t.getFilingStatus() == 3 ||t.getFilingStatus()==1){
+                    MyBeanUtils.copyBeanNotNull2Bean(projectFilingBatch, t);//将编辑表单中的非NULL值覆盖数据库记录中的值
+                    projectFilingBatchService.saveProject(proId,t, ProjectStatusEnum.IN_APRL);//保存
+                }else if(t.getFilingStatus() == 2){
+                    addMessage(redirectAttributes, "归档批次已送审,无法暂存");
+                    return "redirect:"+Global.getAdminPath()+"/projectFilingBatch/projectFilingBatchInfo/?repage";
+                }else if(t.getFilingStatus() == 5){
+                    addMessage(redirectAttributes, "项目归档批次已归档,无法暂存");
+                    return "redirect:"+Global.getAdminPath()+"/projectFilingBatch/projectFilingBatchInfo/?repage";
+                }
+            } else {//新增表单保存
+                projectFilingBatch.setFilingStatus(1);
+                projectFilingBatchService.saveProject(proId,projectFilingBatch, ProjectStatusEnum.IN_APRL);//保存
+            }
+            addMessage(redirectAttributes, "归档送审成功");
+        }catch (Exception e){
+            logger.error("送审项目异常",e);
+            addMessage(redirectAttributes, "归档送审异常:"+e.getMessage());
+        }
+        return "redirect:" + Global.getAdminPath() + "/projectFilingBatch/projectFilingBatchInfo/?repage";
+    }
+
+    /**
+     * 撤回
+     * @param request
+     * @param redirectAttributes
+     * @return
+     */
+    @RequestMapping(value = "revoke")
+    public String revoke(HttpServletRequest request, RedirectAttributes redirectAttributes) {
+        HashMap<String, String> requestMap = findRequestMap(request);
+        String processInstanceId = requestMap.get("processInstanceId");
+        String id = requestMap.get("id");
+        //获取项目状态
+        Integer filingStatus= Integer.parseInt(requestMap.get("filingStatus"));
+        try {
+            ProjectFilingBatch projectFilingBatch = projectFilingBatchService.get(id);
+            if(!projectFilingBatch.getFilingStatus().equals(filingStatus) ){
+                addMessage(redirectAttributes, "项目归档批次不是送审状态,无法撤回");
+                return "redirect:"+Global.getAdminPath()+"/projectFilingBatch/projectFilingBatchInfo/?repage";
+            }
+            projectFilingBatchService.cancelProcess(projectFilingBatch);
+            addMessage(redirectAttributes, "撤回该项目归档批次成功");
+        }catch (Exception e){
+            logger.info(e.getMessage());
+            addMessage(redirectAttributes, "撤回该项目归档批次失败");
+        }
+        return "redirect:" + Global.getAdminPath() + "/projectFilingBatch/projectFilingBatchInfo/?repage";
+    }
+
+
+    /**
+     * 线下归档员进行归档审批——项目审批
+     * 修改
+     * @param status
+     * @param proId
+     * @return
+     */
+    @ResponseBody
+    @RequestMapping(value = "updateProjectPass")
+    public String updateProjectPass(@RequestParam("status") Integer status,@RequestParam("proId") String proId,@RequestParam("boxNum") Integer boxNum,@RequestParam("reboxNum") Integer reboxNum) {
+        ProjectFilingbatchRelation filingbatchRelation=new ProjectFilingbatchRelation();
+        filingbatchRelation.setProjectId(proId);
+        filingbatchRelation.setStatus(status);
+        filingbatchRelation.setBoxNum(boxNum);
+        filingbatchRelation.setReBoxNum(reboxNum);
+        projectFilingBatchService.updateByid(filingbatchRelation);
+        return "success";
+    }
+    /**
+     * 审批
+     * @param projectFilingBatch
+     * @param model
+     * @param redirectAttributes
+     * @return
+     */
+    @RequestMapping("saveAudit")
+    public String saveAudit(ProjectFilingBatch projectFilingBatch, Model model,
+                            RedirectAttributes redirectAttributes,Integer saveAuditFlag)  {
+        String home = projectFilingBatch.getHome();
+        try {
+            String taskDefKey = projectFilingBatch.getAct().getTaskDefKey();
+            //当状态为未通过时,重新修改数据
+            if ("modifyApply".equals(taskDefKey)) {
+                projectFilingBatch.getAct().setComment("重新申请");
+            }
+            List<User> users = UserUtils.getByProssType(projectFilingBatch.getProcessinstanceId(),1);
+            String flag = projectFilingBatch.getAct().getFlag();
+            if ("yes".equals(flag) && (users==null || users.size()==0)){
+                addMessage(redirectAttributes, "审批失败,审批人为空,请联系管理员!");
+            }else {
+                ProjectFilingBatch t = projectFilingBatchService.get(projectFilingBatch.getId());//从数据库取出记录的值
+                if(null != saveAuditFlag){
+                    if(1 == saveAuditFlag && t.getFilingStatus() != 4 && t.getFilingStatus() != 5){
+                        addMessage(redirectAttributes, "归档批次已送审,请勿重复送审");
+                        return "redirect:"+Global.getAdminPath()+"/projectFilingBatch/projectFilingBatchInfo/?repage";
+                    }
+                }
+                if(t.getFilingStatus() == 5){
+                    addMessage(redirectAttributes, "归档批次归档完成,无法再次送审");
+                    return "redirect:"+Global.getAdminPath()+"/projectFilingBatch/projectFilingBatchInfo/?repage";
+                }
+
+                String str = projectFilingBatchService.auditSave(projectFilingBatch,users);
+                addMessage(redirectAttributes, str);
+            }
+        }catch (Exception e){
+            addMessage(redirectAttributes, "归档批次归档流程审批失败");
+        }
+
+        if (StringUtils.isNotBlank(home) && "home".equals(home)){
+            return "redirect:" + Global.getAdminPath() + "/home/?repage";
+        }else {
+            return "redirect:" + Global.getAdminPath() + "/projectFilingBatch/projectFilingBatchInfo/?repage";
+        }
+    }
+
+}

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

@@ -116,4 +116,15 @@ public interface RuralProjectRecordsDao extends CrudDao<RuralProjectRecords> {
      * @return
      */
     List<RuralProjectRecords> projectPlanFindList(RuralProjectRecords records);
+
+    /**
+     * 兴光项目管理——归档批次管理 --项目查询page
+     * @return
+     */
+    int projectFindListCount(RuralProjectRecords projectRecords);
+    /**
+     * 兴光项目管理——归档批次管理 --项目查询
+     * @return
+     */
+    List<RuralProjectRecords> projectFindList(RuralProjectRecords projectRecords);
 }

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

@@ -1442,4 +1442,35 @@ public class RuralProjectRecordsService extends CrudService<RuralProjectRecordsD
 			dao.updateProjectReportedState(idList);
 		}
 	}
+	/**
+	 * 查找项目
+	 * @param projectRecords
+	 */
+	public Page<RuralProjectRecords> projectFind(Page<RuralProjectRecords> page, RuralProjectRecords projectRecords) {
+		//设置数据权限
+		if(!UserUtils.getUser().isAdmin()) {
+			String dataScopeSql = dataScopeFilterOR(projectRecords.getCurrentUser(), "o", "u", "s", MenuStatusEnum.WORK_RECORDS.getValue());
+			if(StringUtils.isBlank(dataScopeSql)){
+				dataScopeSql = dataScopeFilterOR(projectRecords.getCurrentUser(), "o", "u", "s", MenuStatusEnum.OVERALL_WORK_RECORDS.getValue());
+			}
+			projectRecords.getSqlMap().put("dsf", dataScopeSql);
+		}
+		projectRecords.setCreateBy(UserUtils.getUser());
+		int count = dao.projectFindListCount(projectRecords);
+		page.setCount(count);
+		page.setCountFlag(false);
+		projectRecords.setPage(page);
+		List<RuralProjectRecords> recordsList = dao.projectFindList(projectRecords);
+		//查询负责人信息
+		for (RuralProjectRecords records : recordsList) {
+
+			this.queryContractInfos(records);
+			List<User> users = workProjectUserDao.queryProjectUsers(records.getId(), "1");
+			records.setProjectLeaders(users);
+			records.setLeaderNameStr(Collections3.extractToString(users, "name", ","));
+			records.setLeaderIds(Collections3.extractToString(users, "id", ","));
+		}
+		page.setList(recordsList);
+		return page;
+	}
 }

+ 0 - 1
src/main/java/com/jeeplus/modules/ruralprojectrecords/web/RuralProjectRecordsController.java

@@ -305,7 +305,6 @@ public class RuralProjectRecordsController extends BaseController {
             act.setTask(taskInfok);
             projectRecords.setAct(act);
         }
-
         projectRecordsService.queryProjectDetail(projectRecords);
         model.addAttribute("projectRecords", projectRecords);
         return "modules/ruralprojectrecords/ruralProjectRecordsModify";

+ 220 - 257
src/main/java/com/jeeplus/modules/workprojectnotify/web/WorkProjectNotifyController.java

@@ -40,6 +40,8 @@ import com.jeeplus.modules.projectAccessory.entity.ProjectAccessoryRelationInfo;
 import com.jeeplus.modules.projectAccessory.entity.ProjectTemplateInfo;
 import com.jeeplus.modules.projectAccessory.service.ProjectAccessoryRelationService;
 import com.jeeplus.modules.projectAccessory.service.ProjectTemplateService;
+import com.jeeplus.modules.projectFilingBatch.entity.ProjectFilingBatch;
+import com.jeeplus.modules.projectFilingBatch.service.ProjectFilingBatchService;
 import com.jeeplus.modules.projectcontentinfo.entity.ProjectContentData;
 import com.jeeplus.modules.projectcontentinfo.entity.ProjectReportData;
 import com.jeeplus.modules.projectcontentinfo.entity.ProjectReportRecord;
@@ -60,14 +62,14 @@ import com.jeeplus.modules.ruralprojectrecords.entity.RuralProjectRecords;
 import com.jeeplus.modules.ruralprojectrecords.entity.RuralProjectRecordsAlter;
 import com.jeeplus.modules.ruralprojectrecords.entity.RuralProjectRecordsReported;
 import com.jeeplus.modules.ruralprojectrecords.enums.ProjectStatusEnum;
-import com.jeeplus.modules.ruralprojectrecords.service.*;
+import com.jeeplus.modules.ruralprojectrecords.service.RuralProjectMessageService;
+import com.jeeplus.modules.ruralprojectrecords.service.RuralProjectRecordsAlterService;
+import com.jeeplus.modules.ruralprojectrecords.service.RuralProjectRecordsDownMessageService;
+import com.jeeplus.modules.ruralprojectrecords.service.RuralProjectRecordsService;
 import com.jeeplus.modules.serialnum.service.SerialNumTplService;
-import com.jeeplus.modules.sys.dao.RoleDao;
 import com.jeeplus.modules.sys.entity.*;
 import com.jeeplus.modules.sys.service.CompanyService;
 import com.jeeplus.modules.sys.service.OfficeService;
-import com.jeeplus.modules.sys.service.RoleService;
-import com.jeeplus.modules.sys.service.UserService;
 import com.jeeplus.modules.sys.utils.DictUtils;
 import com.jeeplus.modules.sys.utils.UserUtils;
 import com.jeeplus.modules.sysuseroffice.entity.Useroffice;
@@ -357,12 +359,12 @@ public class WorkProjectNotifyController extends BaseController {
 	protected HistoryService historyService;
 	@Autowired
 	protected WorkInvoiceDetailService workInvoiceDetailService;
-    @Autowired
-    private ProjectRecordsService projectRecordsService;
-    @Autowired
-    private RuralProjectRecordsService ruralProjectRecordsService;
 	@Autowired
-	private RuralPeojectRecordChooseCheckService ruralPeojectRecordChooseCheckService;
+	private ProjectRecordsService projectRecordsService;
+	@Autowired
+	private ProjectFilingBatchService projectFilingBatchService;
+	@Autowired
+	private RuralProjectRecordsService ruralProjectRecordsService;
 	@Autowired
 	private ProjectRecordsAlterService projectRecordsAlterService;
 	@Autowired
@@ -383,24 +385,24 @@ public class WorkProjectNotifyController extends BaseController {
 	private ProjectReportRecordService projectReportRecordService;
 	@Autowired
 	private RuralProjectRecordsDownMessageService ruralProjectRecordsDownMessageService;
-    @Autowired
-    private WorkReceiptsSettleService workReceiptsSettleService;
+	@Autowired
+	private WorkReceiptsSettleService workReceiptsSettleService;
 	@Autowired
 	private WorkReceiptsReviseService workReceiptsReviseService;
-    @Autowired
-    private WorkIncomingMessageService workIncomingMessageService;
-    @Autowired
-    private WorkAdministrativeAtampService workAdministrativeAtampService;
-    @Autowired
-    private WorkDailyRoutineDetailService workDailyRoutineDetailService;
-    @Autowired
-    private WorkDailyRoutineService workDailyRoutineService;
+	@Autowired
+	private WorkIncomingMessageService workIncomingMessageService;
+	@Autowired
+	private WorkAdministrativeAtampService workAdministrativeAtampService;
+	@Autowired
+	private WorkDailyRoutineDetailService workDailyRoutineDetailService;
+	@Autowired
+	private WorkDailyRoutineService workDailyRoutineService;
 	@Autowired
 	private WorkBorrowBackService workBorrowBackService;
 	@Autowired
 	private WorkStockContractService workStockContractService;
-    @Autowired
-    private WorkSendMessageService workSendMessageService;
+	@Autowired
+	private WorkSendMessageService workSendMessageService;
 	@Autowired
 	private WorkStockService workStockService;
 	@Autowired
@@ -415,8 +417,8 @@ public class WorkProjectNotifyController extends BaseController {
 	private WorkOfficeChangeService workOfficeChangeService;
 	@Autowired
 	private WorkOfficeChangeUserService workOfficeChangeUserService;
-    @Autowired
-    private WorkStaffBasicInfoService workStaffBasicInfoService;
+	@Autowired
+	private WorkStaffBasicInfoService workStaffBasicInfoService;
 	@Autowired
 	private WorkChangeJobService workChangeJobService;
 	@Autowired
@@ -451,12 +453,6 @@ public class WorkProjectNotifyController extends BaseController {
 	private HistoicFlowUtil histoicFlowUtil;
 	@Autowired
 	private ProjectAccessoryRelationService projectAccessoryRelationService;
-	@Autowired
-	private UserService userService;
-	@Autowired
-	private RoleDao roleDao;
-	@Autowired
-	private RoleService roleService;
 
 	@ModelAttribute
 	public WorkProjectNotify get(@RequestParam(required=false) String id) {
@@ -657,7 +653,7 @@ public class WorkProjectNotifyController extends BaseController {
 			else if(workProjectNotify.getType().equals("23")){//询价与核价
 				WorkAskCheckPrice workAskCheckPrice =workAskCheckPriceService.get(workProjectNotify.getNotifyId());
 				if (workAskCheckPrice != null)
-				processInstanceId = workAskCheckPrice.getProcessInstanceId();
+					processInstanceId = workAskCheckPrice.getProcessInstanceId();
 			}else if(workProjectNotify.getType().equals("24")){
 				Leave oaLeave = leaveService.get(workProjectNotify.getNotifyId());
 				if (oaLeave != null)
@@ -665,11 +661,11 @@ public class WorkProjectNotifyController extends BaseController {
 			}else if(workProjectNotify.getType().equals("25")){
 				WorkOvertimeForm workOvertimeForm = workOvertimeFormService.get(workProjectNotify.getNotifyId());
 				if (workOvertimeForm != null)
-				processInstanceId = workOvertimeForm.getProcessInstanceId();
+					processInstanceId = workOvertimeForm.getProcessInstanceId();
 			}else if(workProjectNotify.getType().equals("26")){
 				OaEvection oaEvection = oaEvectionService.get(workProjectNotify.getNotifyId());
 				if (oaEvection != null)
-				processInstanceId = oaEvection.getProcessInstanceId();
+					processInstanceId = oaEvection.getProcessInstanceId();
 			}else if(workProjectNotify.getType().equals("27")){
 				WorkSealForm workSealForm = workSealFormService.get(workProjectNotify.getNotifyId());
 				if (workSealForm != null)
@@ -690,41 +686,41 @@ public class WorkProjectNotifyController extends BaseController {
 			else if(workProjectNotify.getType().equals("31")){
 				WorkFullRecord workFullRecord = workFullRecordService.gett(workProjectNotify.getNotifyId());
 				if (workFullRecord != null)
-				processInstanceId = workFullRecord.getProcessInstanceId();
+					processInstanceId = workFullRecord.getProcessInstanceId();
 			}else if("32".equals(workProjectNotify.getType())){
 				OaAll oaAll = oaAllService.get(workProjectNotify.getNotifyId());
 				if (oaAll != null)
-				processInstanceId = oaAll.getProcessInstanceId();
+					processInstanceId = oaAll.getProcessInstanceId();
 			}else if("33".equals(workProjectNotify.getType())){
 				WorkPettyCash workPettyCash = workPettyCashService.get(workProjectNotify.getNotifyId());
 				processInstanceId = workPettyCash.getProcessInstanceId();
 			}else if("34".equals(workProjectNotify.getType())){
 				WorkPayment workPayment = workPaymentService.get(workProjectNotify.getNotifyId());
 				if (workPayment != null)
-				processInstanceId = workPayment.getProcessInstanceId();
+					processInstanceId = workPayment.getProcessInstanceId();
 			}else if("37".equals(workProjectNotify.getType())){
 				WorkReimbur workReimbur = workReimburService.get(workProjectNotify.getNotifyId());
 				if (workReimbur != null)
-				processInstanceId = workReimbur.getProcessInstanceId();
+					processInstanceId = workReimbur.getProcessInstanceId();
 			}else if("35".equals(workProjectNotify.getType())){ //采购
 				OaBuy oaBuy = oaBuyService.get(workProjectNotify.getNotifyId());
 				if (oaBuy != null)
-				processInstanceId = oaBuy.getProcessInstanceId();
+					processInstanceId = oaBuy.getProcessInstanceId();
 			}
 			else if("36".equals(workProjectNotify.getType())){  //绩效自评
 				OaPerformance oaPerformance = oaPerformanceService.get(workProjectNotify.getNotifyId());
 				if (oaPerformance != null)
-				processInstanceId = oaPerformance.getProcessInstanceId();
+					processInstanceId = oaPerformance.getProcessInstanceId();
 			}
 			else if("38".equals(workProjectNotify.getType())){ //案例
 				CaseInfo caseInfo = caseInfoService.get(workProjectNotify.getNotifyId());
 				if (caseInfo != null)
-				processInstanceId = caseInfo.getProcessInstanceId();
+					processInstanceId = caseInfo.getProcessInstanceId();
 			}
 			else if("40".equals(workProjectNotify.getType())){ //退票
 				WorkInvoiceDetail workInvoiceDetail = workInvoiceDetailService.get(workProjectNotify.getNotifyId());
 				if (workInvoiceDetail != null)
-				processInstanceId = workInvoiceDetail.getProcessInstanceId();
+					processInstanceId = workInvoiceDetail.getProcessInstanceId();
 			}
 			else if("39".equals(workProjectNotify.getType())){ //退票
 				ProjectRecords projectRecords = projectRecordsService.get(workProjectNotify.getNotifyId());
@@ -745,62 +741,62 @@ public class WorkProjectNotifyController extends BaseController {
 			else if("41".equals(workProjectNotify.getType())){ //退票
 				ProjectRecordsAlter projectRecordsAlter = projectRecordsAlterService.get(workProjectNotify.getNotifyId());
 				if (projectRecordsAlter != null)
-				processInstanceId = projectRecordsAlter.getProcessInstanceId();
+					processInstanceId = projectRecordsAlter.getProcessInstanceId();
 			}else if(workProjectNotify.getType().equals("45")){	//工作内容报告
 				ProjectReportData projectReportData = projectReportDataService.get(workProjectNotify.getNotifyId());
 				if (projectReportData != null)
-				processInstanceId = projectReportData.getProcessInstanceId();
+					processInstanceId = projectReportData.getProcessInstanceId();
 			}else if(workProjectNotify.getType().equals("92")){	//工作内容报告
 				ProjectReportData projectReportData = projectReportDataService.get(workProjectNotify.getNotifyId());
 				if (projectReportData != null)
-				processInstanceId = projectReportData.getProcessInstanceId();
+					processInstanceId = projectReportData.getProcessInstanceId();
 			}
 			else if(workProjectNotify.getType().equals("46")){	//工作内容报告变更
 				ProjectReportData projectReportData = projectReportChangeService.get(workProjectNotify.getNotifyId());
 				if (projectReportData != null)
-				processInstanceId = projectReportData.getProcessInstanceId();
+					processInstanceId = projectReportData.getProcessInstanceId();
 			}
 			else if(workProjectNotify.getType().equals("47")){	//工作内容报告作废
 				ProjectReportData projectReportData = projectReportDataService.get(workProjectNotify.getNotifyId());
 				if (projectReportData != null)
-				processInstanceId = projectReportData.getInvalidProcessInstanceId();
+					processInstanceId = projectReportData.getInvalidProcessInstanceId();
 			}else if(workProjectNotify.getType().equals("51")){	//工作内容报告归档
 				ProjectReportRecord projectReportRecord = projectReportRecordService.get(workProjectNotify.getNotifyId());
 				if (projectReportRecord != null)
-				processInstanceId = projectReportRecord.getProcessInstanceId();
+					processInstanceId = projectReportRecord.getProcessInstanceId();
 			}else if(workProjectNotify.getType().equals("65")){	//工作内容报告归档
 				ProjectReportRecord projectReportRecord = ruralProjectRecordsDownMessageService.get(workProjectNotify.getNotifyId());
 				if (projectReportRecord != null)
-				processInstanceId = projectReportRecord.getProcessInstanceId();
+					processInstanceId = projectReportRecord.getProcessInstanceId();
 			}else if("52".equals(workProjectNotify.getType())){	//收入结算
-                WorkReceiptsSettle workReceiptsSettle = workReceiptsSettleService.get(workProjectNotify.getNotifyId());
+				WorkReceiptsSettle workReceiptsSettle = workReceiptsSettleService.get(workProjectNotify.getNotifyId());
 				if (workReceiptsSettle != null)
-                processInstanceId = workReceiptsSettle.getProcessInstanceId();
+					processInstanceId = workReceiptsSettle.getProcessInstanceId();
 			}else if("55".equals(workProjectNotify.getType())){	//收文
-                WorkIncomingMessage workIncomingMessage = workIncomingMessageService.get(workProjectNotify.getNotifyId());
+				WorkIncomingMessage workIncomingMessage = workIncomingMessageService.get(workProjectNotify.getNotifyId());
 				if (workIncomingMessage != null)
-                processInstanceId = workIncomingMessage.getProcessInstanceId();
+					processInstanceId = workIncomingMessage.getProcessInstanceId();
 			}else if("56".equals(workProjectNotify.getType())){	//行政盖章
-                WorkAdministrativeAtamp workAdministrativeAtamp = workAdministrativeAtampService.get(workProjectNotify.getNotifyId());
+				WorkAdministrativeAtamp workAdministrativeAtamp = workAdministrativeAtampService.get(workProjectNotify.getNotifyId());
 				if (workAdministrativeAtamp != null)
-                processInstanceId = workAdministrativeAtamp.getProcessInstanceId();
+					processInstanceId = workAdministrativeAtamp.getProcessInstanceId();
 			}else if("59".equals(workProjectNotify.getType())){	//借用管理
 				WorkBorrowMangement workBorrowMangement = workBorrowMangementService.get(workProjectNotify.getNotifyId());
 				if (workBorrowMangement != null)
-				processInstanceId = workBorrowMangement.getProcessInstanceId();
+					processInstanceId = workBorrowMangement.getProcessInstanceId();
 			}else if("62".equals(workProjectNotify.getType())){	//发文管理
-                WorkSendMessage workSendMessage = workSendMessageService.get(workProjectNotify.getNotifyId());
-                if(workSendMessage!=null && StringUtils.isNotBlank(workSendMessage.getId())){
-                    workSendMessageService.queryDetails(workSendMessage);
+				WorkSendMessage workSendMessage = workSendMessageService.get(workProjectNotify.getNotifyId());
+				if(workSendMessage!=null && StringUtils.isNotBlank(workSendMessage.getId())){
+					workSendMessageService.queryDetails(workSendMessage);
 					processInstanceId = workSendMessage.getProcessInstanceId();
 				}
 			}else if("89".equals(workProjectNotify.getType())){	//发文管理
-                OaNotify oaNotify = oaNotifyService.get(workProjectNotify.getNotifyId());
-                if(oaNotify!=null && StringUtils.isNotBlank(oaNotify.getId())){
-                    oaNotifyService.queryDetails(oaNotify);
-                    processInstanceId = oaNotify.getProcessInstanceId();
-                }
-            } else if("95".equals(workProjectNotify.getType())){	//项目上报信息
+				OaNotify oaNotify = oaNotifyService.get(workProjectNotify.getNotifyId());
+				if(oaNotify!=null && StringUtils.isNotBlank(oaNotify.getId())){
+					oaNotifyService.queryDetails(oaNotify);
+					processInstanceId = oaNotify.getProcessInstanceId();
+				}
+			} else if("95".equals(workProjectNotify.getType())){	//项目上报信息
 				RuralProjectRecordsReported reported = ruralProjectMessageService.getRuralProjectRecordsReported(workProjectNotify.getNotifyId());
 				if(reported!=null && StringUtils.isNotBlank(reported.getId())){
 					processInstanceId = reported.getProcessInstanceId();
@@ -808,11 +804,11 @@ public class WorkProjectNotifyController extends BaseController {
 			}else if("60".equals(workProjectNotify.getType())){	//归还借用管理
 				WorkBorrowBack workBorrowBack = workBorrowBackService.get(workProjectNotify.getNotifyId());
 				if (workBorrowBack != null)
-				processInstanceId = workBorrowBack.getProcessInstanceId();
+					processInstanceId = workBorrowBack.getProcessInstanceId();
 			}else if("64".equals(workProjectNotify.getType())){	//领用管理
 				WorkItemCollar workItemCollar = workItemCollarService.get(workProjectNotify.getNotifyId());
 				if (workItemCollar != null)
-				processInstanceId = workItemCollar.getProcessInstanceId();
+					processInstanceId = workItemCollar.getProcessInstanceId();
 			}else if(workProjectNotify.getType().equals("42")){	//合同归档
 				WorkContractRecord workContractRecord = workContractRecordService.get(workProjectNotify.getNotifyId());
 				if(workContractRecord!=null){
@@ -1220,7 +1216,7 @@ public class WorkProjectNotifyController extends BaseController {
 						//return "redirect:"+Global.getAdminPath()+"/workpayment/workPayment/workPaymentTodoList";
 						return "modules/workpayment/workPaymentAudit";
 					}
-				} else if ("37".equals(workProjectNotify.getType())) {
+				} else if ("37".equals(workProjectNotify.getType())) {//归档批次管理
 					WorkReimbur workReimbur = workReimburService.get(workProjectNotify.getNotifyId());
 					workReimbur.setAct(getByAct(workReimbur.getProcessInstanceId()));
 					workReimbur.setHome("home");
@@ -1350,56 +1346,6 @@ public class WorkProjectNotifyController extends BaseController {
 						}
 					}
 
-				} else if (workProjectNotify.getType().equals("140")) {    //项目检查
-					boolean flag = false;
-					//通过通知信息id获取项目登记对象
-					RuralProjectRecords ruralProjectRecords = ruralPeojectRecordChooseCheckService.get(workProjectNotify.getNotifyId());
-
-					if (ruralProjectRecords != null && StringUtils.isNotBlank(ruralProjectRecords.getId())) {
-						ruralProjectRecordsService.queryProjectDetail(ruralProjectRecords);
-						ProjectPlanInfo projectPlanInfo = new ProjectPlanInfo();
-						projectPlanInfo.setProjectId(ruralProjectRecords.getId());
-						//获取项目计划信息
-						List<ProjectPlanInfo> projectPlanList = projectPlanService.getProjectPlanList(projectPlanInfo);
-						//项目计划附件信息
-						List<WorkClientAttachment> projectPlanAttachment = projectPlanService.getWorkAttachment(ruralProjectRecords.getId());
-						ruralProjectRecords.setProjectPlanList(projectPlanList);
-						ruralProjectRecords.setWorkAttachments(projectPlanAttachment);
-					}
-					ruralProjectRecords.setAct(getByAct(ruralProjectRecords.getCheckProcessInstanceId()));
-					ruralProjectRecords.setHome("home");
-					model.addAttribute("processInstanceId", ruralProjectRecords.getCheckProcessInstanceId());
-					model.addAttribute("projectRecords", ruralProjectRecords);
-					if (workProjectNotify.getRemarks().contains("待通知") || "view".equals(workProjectNotify.getView())) {
-						//处理项目类别
-						List<MainDictDetail> mainDictList = DictUtils.getMainDictList("attachment_project_sort");
-						for (MainDictDetail info: mainDictList) {
-							if(ruralProjectRecords.getAttachmentProjectSort().equals(info.getValue())){
-								ruralProjectRecords.setAttachmentProjectSort(info.getLabel());
-								break;
-							}
-						}
-						return "modules/ruralprojectrecords/ruralProjectRecordsView";
-					}else if (workProjectNotify.getRemarks().contains("待审批") && !"1".equals(workProjectNotify.getStatus())) {
-						//处理项目类别
-						List<MainDictDetail> mainDictList = DictUtils.getMainDictList("attachment_project_sort");
-						for (MainDictDetail info: mainDictList) {
-							if(ruralProjectRecords.getAttachmentProjectSort().equals(info.getValue())){
-								ruralProjectRecords.setAttachmentProjectSort(info.getLabel());
-								break;
-							}
-						}
-						//查询总审人员信息
-						List<User> auditUserList = userService.getAuditUserList();
-						ruralProjectRecords.setBzshbUserList(auditUserList);
-						return "modules/ruralprojectrecords/check/ruralProjectRecordsAudit";
-					} else if (workProjectNotify.getRemarks().contains("重新申请") && !"1".equals(workProjectNotify.getStatus())) {
-						return "modules/ruralprojectrecords/ruralProjectRecordsModify";
-					} else {
-						return "modules/ruralprojectrecords/ruralProjectRecordsView";
-					}
-
-
 				} else if (workProjectNotify.getType().equals("139")) {    //项目登记
 					ProjectFollowReport followReport = projectImplementEarlyService.getFollowById(workProjectNotify.getNotifyId());
 					ProjectRecords records = projectRecordsService.getQueryProjectUsers(followReport.getProjectId());
@@ -1783,15 +1729,15 @@ public class WorkProjectNotifyController extends BaseController {
 					projectReportData.setAct(act);
 					Projectcontentinfo projectcontentinfo = projectcontentinfoService.getByInfoId(projectReportData.getId());
 					projectcontentinfo.setProjectReportData(projectReportData);
-                    List<MainDictDetail> achievementTypes = DictUtils.getMainDictList("achievement_type");
-                    if(null != achievementTypes){
-                        for (MainDictDetail achievementType:achievementTypes) {
-                            if(achievementType.getValue().equals(projectReportData.getAchievementType())){
-                                projectReportData.setAchievementType(achievementType.getLabel());
-                                break;
-                            }
-                        }
-                    }
+					List<MainDictDetail> achievementTypes = DictUtils.getMainDictList("achievement_type");
+					if(null != achievementTypes){
+						for (MainDictDetail achievementType:achievementTypes) {
+							if(achievementType.getValue().equals(projectReportData.getAchievementType())){
+								projectReportData.setAchievementType(achievementType.getLabel());
+								break;
+							}
+						}
+					}
 
 					//根据条件查询附件必填项
 					//判断项目类别是否为打包项目(1:打包项目,0:非打包项目)
@@ -1844,8 +1790,8 @@ public class WorkProjectNotifyController extends BaseController {
 						}
 					}
 
-                    projectcontentinfo.setHome("home");
-                    model.addAttribute("processInstanceId",projectReportData.getProcessInstanceId());
+					projectcontentinfo.setHome("home");
+					model.addAttribute("processInstanceId",projectReportData.getProcessInstanceId());
 					model.addAttribute("projectId", projectcontentinfo.getProject().getId());
 					model.addAttribute("id", projectcontentinfo.getId());
 					model.addAttribute("projectcontentinfo", projectcontentinfo);
@@ -1984,6 +1930,7 @@ public class WorkProjectNotifyController extends BaseController {
 					projectReportRecord.setAct(act);
 					projectReportRecord.setHome("home");
 
+
 					WorkContractInfo projectContractInfo = ruralProjectMessageService.getProjectContractInfo(ruralProjectRecords.getWorkContractInfo().getId());
 					ruralProjectRecords.setWorkContractInfo(projectContractInfo);
 					MyBeanUtils.copyBeanNotNull2Bean(ruralProjectRecords,projectReportRecord.getReport().getProject());//将编辑表单中的非NULL值覆盖数据库记录中的值
@@ -1992,7 +1939,7 @@ public class WorkProjectNotifyController extends BaseController {
 							model.addAttribute("workClientInfoName", projectContractInfo.getWorkClientInfoList().get(0).getName());
 						}
 					}
-					
+
 					//根据条件查询附件必填项
 					//判断项目类别是否为打包项目(1:打包项目,0:非打包项目)
 					Integer projectSort = projectAccessoryRelationService.decideAttachmentProjectSort(ruralProjectRecords.getAttachmentProjectSort());
@@ -2116,20 +2063,20 @@ public class WorkProjectNotifyController extends BaseController {
 					Act act = getByAct(workIncomingMessage.getProcessInstanceId());
 					workIncomingMessage.setAct(act);
 					workIncomingMessage.setHome("home");
-                    if(StringUtils.isNotBlank(workIncomingMessage.getDailyId())&&!"NoN".equals(workIncomingMessage.getDailyId())){
-                        WorkDailyRoutineDetail routineDetail = new WorkDailyRoutineDetail();
-                        routineDetail.setWorkDailyRoutine(new WorkDailyRoutine(workIncomingMessage.getDailyId()));
-                        List<WorkDailyRoutineDetail> list = workDailyRoutineDetailService.findList(routineDetail);
-                        if(list!=null&&list.size()>0){
-                            for (WorkDailyRoutineDetail detail : list) {
-                                if("未完成".equals(detail.getStatus())){
-                                    workIncomingMessage.setDailyFlag(false);
-                                    break;
-                                }
-                            }
-                        }
-                        workIncomingMessage.setDetailList(list);
-                    }
+					if(StringUtils.isNotBlank(workIncomingMessage.getDailyId())&&!"NoN".equals(workIncomingMessage.getDailyId())){
+						WorkDailyRoutineDetail routineDetail = new WorkDailyRoutineDetail();
+						routineDetail.setWorkDailyRoutine(new WorkDailyRoutine(workIncomingMessage.getDailyId()));
+						List<WorkDailyRoutineDetail> list = workDailyRoutineDetailService.findList(routineDetail);
+						if(list!=null&&list.size()>0){
+							for (WorkDailyRoutineDetail detail : list) {
+								if("未完成".equals(detail.getStatus())){
+									workIncomingMessage.setDailyFlag(false);
+									break;
+								}
+							}
+						}
+						workIncomingMessage.setDetailList(list);
+					}
 					model.addAttribute("workIncomingMessage", workIncomingMessage);
 					if (workProjectNotify.getRemarks().contains("待通知") || "view".equals(workProjectNotify.getView())) {
 						return "modules/workincomingmessage/workIncomingMessageView";
@@ -2232,24 +2179,24 @@ public class WorkProjectNotifyController extends BaseController {
 						}
 					}
 				}else if ("89".equals(workProjectNotify.getType())) {    //发文管理
-                    OaNotify oaNotify = oaNotifyService.get(workProjectNotify.getNotifyId());
-                    if (StringUtils.isNotBlank(oaNotify.getId())) {
-                        oaNotifyService.queryDetails(oaNotify);
-                    }
-                    Act act = getByAct(oaNotify.getProcessInstanceId());
-                    oaNotify.setAct(act);
-                    oaNotify.setHome("home");
-                    model.addAttribute("oaNotify", oaNotify);
+					OaNotify oaNotify = oaNotifyService.get(workProjectNotify.getNotifyId());
+					if (StringUtils.isNotBlank(oaNotify.getId())) {
+						oaNotifyService.queryDetails(oaNotify);
+					}
+					Act act = getByAct(oaNotify.getProcessInstanceId());
+					oaNotify.setAct(act);
+					oaNotify.setHome("home");
+					model.addAttribute("oaNotify", oaNotify);
 					if (workProjectNotify.getRemarks().contains("待通知") || "view".equals(workProjectNotify.getView())) {
 						return "modules/oa/oaNotifyView";
 					}else if (workProjectNotify.getRemarks().contains("待审批") && !"1".equals(workProjectNotify.getStatus())) {
-                        return "modules/oa/oaNotifyAudit";
-                    } else if (workProjectNotify.getRemarks().contains("重新申请") && !"1".equals(workProjectNotify.getStatus())) {
-                        return "modules/oa/oaNotifyModifyApply";
-                    } else {
+						return "modules/oa/oaNotifyAudit";
+					} else if (workProjectNotify.getRemarks().contains("重新申请") && !"1".equals(workProjectNotify.getStatus())) {
+						return "modules/oa/oaNotifyModifyApply";
+					} else {
 						return "modules/oa/oaNotifyView";
-                    }
-                } else if ("60".equals(workProjectNotify.getType())) {    //归还借用管理
+					}
+				} else if ("60".equals(workProjectNotify.getType())) {    //归还借用管理
 					WorkBorrowBack workBorrowBack = workBorrowBackService.get(workProjectNotify.getNotifyId());
 					WorkBorrowMangement mangement = workBorrowMangementService.get(workBorrowBack.getBorrowMangementId());
 					workBorrowBack.setWorkBorrowMangement(mangement);
@@ -2381,16 +2328,6 @@ public class WorkProjectNotifyController extends BaseController {
 						if (StringUtils.isNotBlank(workStaffBasicInfo.getId())) {
 							workStaffBasicInfoService.queryDetails(workStaffBasicInfo);
 						}
-						workStaffBasicInfo.setRoleId(roleService.getRoleIdByUserId(workStaffBasicInfo.getUserId()));
-						List<Role> roleList = roleDao.getByOfficeId(workStaffBasicInfo.getOffice().getId());
-						if(roleList.size()>0){
-							for (Role role: roleList) {
-								if(role.getId().equals(workStaffBasicInfo.getRoleId())){
-									workStaffBasicInfo.setRoleName(role.getName());
-									break;
-								}
-							}
-						}
 						workStaffBasicInfo.setHome("home");
 						model.addAttribute("workStaffBasicInfo", workStaffBasicInfo);
 						String view = "modules/workstaff/workStaffAchiveInfoForm";
@@ -2418,7 +2355,7 @@ public class WorkProjectNotifyController extends BaseController {
 						model.addAttribute("workStaffBasicInfo", workStaffBasicInfo);
 						return "modules/workstaff/workStaffBasicDetailAudit";
 					}
-					} else if ("70".equals(workProjectNotify.getType())) {    //部门调转
+				} else if ("70".equals(workProjectNotify.getType())) {    //部门调转
 					WorkChangeJob workChangeJob = workChangeJobService.get(workProjectNotify.getNotifyId());
 					Act act = getByAct(workChangeJob.getProcessInstanceId());
 					workChangeJob.setAct(act);
@@ -2700,6 +2637,32 @@ public class WorkProjectNotifyController extends BaseController {
 					}else if (workProjectNotify.getRemarks().contains("待审批") && !"1".equals(workProjectNotify.getStatus())) {
 						return "modules/workrepay/workRepayAudit";
 					}
+				}else if ("100".equals(workProjectNotify.getType())) {//项目归档批次
+					ProjectFilingBatch projectFilingBatch = projectFilingBatchService.get(workProjectNotify.getNotifyId());
+					//获取详细信息
+					List<RuralProjectRecords> ruralProjectRecordsList = new ArrayList<>();
+					List<ProjectFilingBatch> projectFilingBatches = projectFilingBatchService.findProjectIdByFiling(projectFilingBatch.getId());
+					for (ProjectFilingBatch filingBatch : projectFilingBatches) {
+						RuralProjectRecords ruralProjectRecords = ruralProjectRecordsService.get(filingBatch.getProjectId());
+						ruralProjectRecords.setProjectReportNumber(filingBatch.getNumber());
+						ruralProjectRecordsList.add(ruralProjectRecords);
+					}
+					//获取归档人
+					projectFilingBatch.setCreateBy(UserUtils.get(projectFilingBatch.getCreateBy().getId()));
+					//项目信息
+					projectFilingBatch.setProject(ruralProjectRecordsList);
+					projectFilingBatch.setAct(getByAct(projectFilingBatch.getProcessinstanceId()));
+					projectFilingBatch.setHome("home");
+					model.addAttribute("projectFilingBatch", projectFilingBatch);
+					if (workProjectNotify.getRemarks().contains("待通知") || "view".equals(workProjectNotify.getView())) {
+						return "modules/projectFilingBatch/projectFilingBatchView";
+					} else if (workProjectNotify.getRemarks().contains("待审批") && !"1".equals(workProjectNotify.getStatus())) {
+						return "modules/projectFilingBatch/projectFilingBatchAudit";
+					} else if (workProjectNotify.getRemarks().contains("重新申请") && !"1".equals(workProjectNotify.getStatus())) {
+						return "modules/projectFilingBatch/projectFilingBatchApply";
+					} else {
+						return "modules/projectFilingBatch/projectFilingBatchView";
+					}
 				}
 			}
 		}
@@ -2861,11 +2824,11 @@ public class WorkProjectNotifyController extends BaseController {
 				else if("39".equals(workProjectNotify.getType())){ //项目登记
 					boolean flag = false;
 					ProjectRecords projectRecords = projectRecordsService.get(workProjectNotify.getNotifyId());
-                    if (projectRecords!=null&&StringUtils.isNotBlank(projectRecords.getId())) {
-                        projectRecordsService.queryProjectDetail(projectRecords);
-                        flag = true;
-                    }
-                    if (flag){
+					if (projectRecords!=null&&StringUtils.isNotBlank(projectRecords.getId())) {
+						projectRecordsService.queryProjectDetail(projectRecords);
+						flag = true;
+					}
+					if (flag){
 						projectRecords.setAct(getByAct(projectRecords.getProcessInstanceId()));
 						model.addAttribute("projectRecords",projectRecords);
 						return "modules/projectrecord/projectRecordsView";
@@ -2899,11 +2862,11 @@ public class WorkProjectNotifyController extends BaseController {
 				else if("41".equals(workProjectNotify.getType())){ //项目变更
 					boolean flag = false;
 					ProjectRecordsAlter projectRecordsAlter = projectRecordsAlterService.get(workProjectNotify.getNotifyId());
-                    if (projectRecordsAlter!=null&&StringUtils.isNotBlank(projectRecordsAlter.getId())) {
-                        projectRecordsAlterService.queryProjectAlterDetail(projectRecordsAlter);
-                        flag = true;
-                    }
-                    if (flag){
+					if (projectRecordsAlter!=null&&StringUtils.isNotBlank(projectRecordsAlter.getId())) {
+						projectRecordsAlterService.queryProjectAlterDetail(projectRecordsAlter);
+						flag = true;
+					}
+					if (flag){
 						ProjectRecords projectRecords = null;
 						if (projectRecordsAlter.getAlterBeforeRecords()!=null&&StringUtils.isNotBlank(projectRecordsAlter.getAlterBeforeRecords().getId())){
 							projectRecords = projectRecordsService.get(projectRecordsAlter.getAlterBeforeRecords().getId());
@@ -2972,61 +2935,61 @@ public class WorkProjectNotifyController extends BaseController {
 					model.addAttribute("projectReportRecord", projectReportRecord);
 					return "modules/projectcontentinfo/reportRecordView";
 				}else if("52".equals(workProjectNotify.getType())){	//收入结算
-                    WorkReceiptsSettle workReceiptsSettle = workReceiptsSettleService.get(workProjectNotify.getNotifyId());
-                    model.addAttribute("workReceiptsSettle", workReceiptsSettle);
-                    return "modules/workreceiptssettle/workReceiptsSettleView";
-                }else if("55".equals(workProjectNotify.getType())){	//收文
-                    WorkIncomingMessage workIncomingMessage = workIncomingMessageService.get(workProjectNotify.getNotifyId());
-                    if(StringUtils.isNotBlank(workIncomingMessage.getDailyId())&&!"NoN".equals(workIncomingMessage.getDailyId())){
-                        WorkDailyRoutineDetail routineDetail = new WorkDailyRoutineDetail();
-                        routineDetail.setWorkDailyRoutine(new WorkDailyRoutine(workIncomingMessage.getDailyId()));
-                        List<WorkDailyRoutineDetail> list = workDailyRoutineDetailService.findList(routineDetail);
-                        if(list!=null&&list.size()>0){
-                            for (WorkDailyRoutineDetail detail : list) {
-                                if("未完成".equals(detail.getStatus())){
-                                    workIncomingMessage.setDailyFlag(false);
-                                    break;
-                                }
-                            }
-                        }
-                        workIncomingMessage.setDetailList(list);
-                    }
-                    model.addAttribute("workIncomingMessage", workIncomingMessage);
-                    return "modules/workincomingmessage/workIncomingMessageView";
-                }else if("56".equals(workProjectNotify.getType())){	//行政盖章
-                    WorkAdministrativeAtamp workAdministrativeAtamp = workAdministrativeAtampService.get(workProjectNotify.getNotifyId());
-                    model.addAttribute("workAdministrativeAtamp", workAdministrativeAtamp);
-                    return "modules/workadministrativeatamp/workAdministrativeAtampView";
-                }else if("58".equals(workProjectNotify.getType())){	//日常事务
-                        WorkDailyRoutine workDailyRoutine = workDailyRoutineService.get(workProjectNotify.getNotifyId());
-                        if(StringUtils.isNotBlank(workDailyRoutine.getId())){
-                            workDailyRoutineService.queryDetails(workDailyRoutine);
-                        }
-                        model.addAttribute("workDailyRoutine", workDailyRoutine);
-                        return "modules/workdailyroutine/workDailyRoutineView";
-                }else if("59".equals(workProjectNotify.getType())){	//借用管理
+					WorkReceiptsSettle workReceiptsSettle = workReceiptsSettleService.get(workProjectNotify.getNotifyId());
+					model.addAttribute("workReceiptsSettle", workReceiptsSettle);
+					return "modules/workreceiptssettle/workReceiptsSettleView";
+				}else if("55".equals(workProjectNotify.getType())){	//收文
+					WorkIncomingMessage workIncomingMessage = workIncomingMessageService.get(workProjectNotify.getNotifyId());
+					if(StringUtils.isNotBlank(workIncomingMessage.getDailyId())&&!"NoN".equals(workIncomingMessage.getDailyId())){
+						WorkDailyRoutineDetail routineDetail = new WorkDailyRoutineDetail();
+						routineDetail.setWorkDailyRoutine(new WorkDailyRoutine(workIncomingMessage.getDailyId()));
+						List<WorkDailyRoutineDetail> list = workDailyRoutineDetailService.findList(routineDetail);
+						if(list!=null&&list.size()>0){
+							for (WorkDailyRoutineDetail detail : list) {
+								if("未完成".equals(detail.getStatus())){
+									workIncomingMessage.setDailyFlag(false);
+									break;
+								}
+							}
+						}
+						workIncomingMessage.setDetailList(list);
+					}
+					model.addAttribute("workIncomingMessage", workIncomingMessage);
+					return "modules/workincomingmessage/workIncomingMessageView";
+				}else if("56".equals(workProjectNotify.getType())){	//行政盖章
+					WorkAdministrativeAtamp workAdministrativeAtamp = workAdministrativeAtampService.get(workProjectNotify.getNotifyId());
+					model.addAttribute("workAdministrativeAtamp", workAdministrativeAtamp);
+					return "modules/workadministrativeatamp/workAdministrativeAtampView";
+				}else if("58".equals(workProjectNotify.getType())){	//日常事务
+					WorkDailyRoutine workDailyRoutine = workDailyRoutineService.get(workProjectNotify.getNotifyId());
+					if(StringUtils.isNotBlank(workDailyRoutine.getId())){
+						workDailyRoutineService.queryDetails(workDailyRoutine);
+					}
+					model.addAttribute("workDailyRoutine", workDailyRoutine);
+					return "modules/workdailyroutine/workDailyRoutineView";
+				}else if("59".equals(workProjectNotify.getType())){	//借用管理
 					WorkBorrowMangement workBorrowMangement = workBorrowMangementService.get(workProjectNotify.getNotifyId());
 					model.addAttribute("workBorrowMangement", workBorrowMangement);
 					return "modules/workborrowmangement/workBorrowMangementView";
 				}else if("62".equals(workProjectNotify.getType())){	//发文管理
-                    WorkSendMessage workSendMessage = workSendMessageService.get(workProjectNotify.getNotifyId());
-                    if(StringUtils.isNotBlank(workSendMessage.getId())){
-                        workSendMessageService.queryDetails(workSendMessage);
-                    }
-                    model.addAttribute("workSendMessage", workSendMessage);
-                    return "modules/worksendmessage/workSendMessageView";
+					WorkSendMessage workSendMessage = workSendMessageService.get(workProjectNotify.getNotifyId());
+					if(StringUtils.isNotBlank(workSendMessage.getId())){
+						workSendMessageService.queryDetails(workSendMessage);
+					}
+					model.addAttribute("workSendMessage", workSendMessage);
+					return "modules/worksendmessage/workSendMessageView";
 				}else if("89".equals(workProjectNotify.getType())){	//发文管理
-                    OaNotify oaNotify = oaNotifyService.get(workProjectNotify.getNotifyId());
-                    if(StringUtils.isNotBlank(oaNotify.getId())){
-                        oaNotifyService.queryDetails(oaNotify);
-                    }
-                    model.addAttribute("oaNotify", oaNotify);
-                    return "modules/oa/oaNotifyView";
-                }else if("95".equals(workProjectNotify.getType())){	//项目上报信息
+					OaNotify oaNotify = oaNotifyService.get(workProjectNotify.getNotifyId());
+					if(StringUtils.isNotBlank(oaNotify.getId())){
+						oaNotifyService.queryDetails(oaNotify);
+					}
+					model.addAttribute("oaNotify", oaNotify);
+					return "modules/oa/oaNotifyView";
+				}else if("95".equals(workProjectNotify.getType())){	//项目上报信息
 					RuralProjectRecordsReported reported = ruralProjectMessageService.getRuralProjectRecordsReported(workProjectNotify.getNotifyId());
 					model.addAttribute("ruralProjectRecordsReported", reported);
-                    return "modules/ruralprojectrecords/ruralporjectmessage/reportedView";
-                }else if("60".equals(workProjectNotify.getType())){	//归还借用管理
+					return "modules/ruralprojectrecords/ruralporjectmessage/reportedView";
+				}else if("60".equals(workProjectNotify.getType())){	//归还借用管理
 					WorkBorrowBack workBorrowBack = workBorrowBackService.get(workProjectNotify.getNotifyId());
 					WorkBorrowMangement mangement=workBorrowMangementService.get(workBorrowBack.getBorrowMangementId());
 					workBorrowBack.setWorkBorrowMangement(mangement);
@@ -3152,20 +3115,20 @@ public class WorkProjectNotifyController extends BaseController {
 					model.addAttribute("workOfficeChange",workOfficeChange);
 					return "modules/workofficechange/workOfficeChangeView";
 				}else if("69".equals(workProjectNotify.getType())){	//日常事务
-                    WorkStaffBasicInfo select = new WorkStaffBasicInfo();
-                    select.setAchiveId(workProjectNotify.getNotifyId());
-                    WorkStaffBasicInfo workStaffBasicInfo= workStaffBasicInfoService.getAchive(select);
-                    if(StringUtils.isNotBlank(workStaffBasicInfo.getId())) {
-                        workStaffBasicInfoService.queryDetails(workStaffBasicInfo);
-                    }
-                    workStaffBasicInfo.setHome("home");
-                    model.addAttribute("workStaffBasicInfo", workStaffBasicInfo);
-                    String view = "modules/workstaff/workStaffAchiveInfoForm";
-                    if(UserUtils.getUser().getId().equals(workStaffBasicInfo.getUserId())){
-                        view = "modules/workstaff/workStaffBasicDetailForm";
-                    }
-                    return view;
-                }else if("86".equals(workProjectNotify.getType())){	//日常事务
+					WorkStaffBasicInfo select = new WorkStaffBasicInfo();
+					select.setAchiveId(workProjectNotify.getNotifyId());
+					WorkStaffBasicInfo workStaffBasicInfo= workStaffBasicInfoService.getAchive(select);
+					if(StringUtils.isNotBlank(workStaffBasicInfo.getId())) {
+						workStaffBasicInfoService.queryDetails(workStaffBasicInfo);
+					}
+					workStaffBasicInfo.setHome("home");
+					model.addAttribute("workStaffBasicInfo", workStaffBasicInfo);
+					String view = "modules/workstaff/workStaffAchiveInfoForm";
+					if(UserUtils.getUser().getId().equals(workStaffBasicInfo.getUserId())){
+						view = "modules/workstaff/workStaffBasicDetailForm";
+					}
+					return view;
+				}else if("86".equals(workProjectNotify.getType())){	//日常事务
 					WorkStaffBasicInfo select = new WorkStaffBasicInfo();
 					select.setAchiveId(workProjectNotify.getNotifyId());
 					WorkStaffBasicInfo workStaffBasicInfo= workStaffBasicInfoService.getAchive(select);
@@ -3362,25 +3325,25 @@ public class WorkProjectNotifyController extends BaseController {
 	/**
 	 * 导出excel文件
 	 */
-    @RequestMapping(value = "export", method=RequestMethod.POST)
-    public String exportFile(WorkProjectNotify workProjectNotify, HttpServletRequest request, HttpServletResponse response, RedirectAttributes redirectAttributes) {
+	@RequestMapping(value = "export", method=RequestMethod.POST)
+	public String exportFile(WorkProjectNotify workProjectNotify, HttpServletRequest request, HttpServletResponse response, RedirectAttributes redirectAttributes) {
 		try {
-            String fileName = "通知"+DateUtils.getDate("yyyyMMddHHmmss")+".xlsx";
-            Page<WorkProjectNotify> page = workProjectNotifyService.findPage(new Page<WorkProjectNotify>(request, response, -1), workProjectNotify);
-    		new ExportExcel("通知", WorkProjectNotify.class).setDataList(page.getList()).write(response, fileName).dispose();
-    		return null;
+			String fileName = "通知"+DateUtils.getDate("yyyyMMddHHmmss")+".xlsx";
+			Page<WorkProjectNotify> page = workProjectNotifyService.findPage(new Page<WorkProjectNotify>(request, response, -1), workProjectNotify);
+			new ExportExcel("通知", WorkProjectNotify.class).setDataList(page.getList()).write(response, fileName).dispose();
+			return null;
 		} catch (Exception e) {
 			addMessage(redirectAttributes, "导出通知记录失败!失败信息:"+e.getMessage());
 		}
 		return "redirect:"+Global.getAdminPath()+"/workprojectnotify/workProjectNotify/?repage";
-    }
+	}
 
 	/**
 	 * 导入Excel数据
 
 	 */
-    @RequestMapping(value = "import", method=RequestMethod.POST)
-    public String importFile(MultipartFile file, RedirectAttributes redirectAttributes) {
+	@RequestMapping(value = "import", method=RequestMethod.POST)
+	public String importFile(MultipartFile file, RedirectAttributes redirectAttributes) {
 		try {
 			int successNum = 0;
 			int failureNum = 0;
@@ -3405,23 +3368,23 @@ public class WorkProjectNotifyController extends BaseController {
 			addMessage(redirectAttributes, "导入通知失败!失败信息:"+e.getMessage());
 		}
 		return "redirect:"+Global.getAdminPath()+"/workprojectnotify/workProjectNotify/?repage";
-    }
+	}
 
 	/**
 	 * 下载导入通知数据模板
 	 */
-    @RequestMapping(value = "import/template")
-    public String importFileTemplate(HttpServletResponse response, RedirectAttributes redirectAttributes) {
+	@RequestMapping(value = "import/template")
+	public String importFileTemplate(HttpServletResponse response, RedirectAttributes redirectAttributes) {
 		try {
-            String fileName = "通知数据导入模板.xlsx";
-    		List<WorkProjectNotify> list = Lists.newArrayList();
-    		new ExportExcel("通知数据", WorkProjectNotify.class, 1).setDataList(list).write(response, fileName).dispose();
-    		return null;
+			String fileName = "通知数据导入模板.xlsx";
+			List<WorkProjectNotify> list = Lists.newArrayList();
+			new ExportExcel("通知数据", WorkProjectNotify.class, 1).setDataList(list).write(response, fileName).dispose();
+			return null;
 		} catch (Exception e) {
 			addMessage(redirectAttributes, "导入模板下载失败!失败信息:"+e.getMessage());
 		}
 		return "redirect:"+Global.getAdminPath()+"/workprojectnotify/workProjectNotify/?repage";
-    }
+	}
 
 	/**
 	 * 获取通知数据
@@ -3657,4 +3620,4 @@ public class WorkProjectNotifyController extends BaseController {
 	}
 
 
-}
+}

+ 119 - 0
src/main/resources/mappings/modules/projectGuidang/ProjectFilingBatchDao.xml

@@ -0,0 +1,119 @@
+<?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.projectFilingBatch.dao.ProjectFilingBatchDao">
+	<sql id="projectFilingBatchColumns">
+		distinct 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.del_flag AS "delFlag",
+		a.filing_batch AS "filingBatch",
+		a.process_instance_id AS "processinstanceId",
+		a.filing_status AS "filingStatus"
+	</sql>
+	<sql id="filingBatchRelationColumns">
+		distinct 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.del_flag AS "delFlag",
+		a.filing_batch AS "filingBatch",
+		a.process_instance_id AS "processinstanceId",
+		a.filing_status AS "filingStatus",
+		g.project_id AS "projectId",
+		g.status AS "status",
+		g.box_num AS "boxNum",
+		g.re_box_num AS "reBoxNum",
+		d.number AS "number"
+	</sql>
+	<insert id="insert">
+		insert into project_filingbatch
+		(id,create_by,create_date,update_by,update_date,del_flag,filing_batch,process_instance_id,filing_status)
+		VALUES
+		(#{id},#{createBy.id},#{createDate},#{updateBy.id},#{updateDate},#{delFlag},#{filingBatch},#{processinstanceId},#{filingStatus})
+	</insert>
+	<update id="update">
+		update project_filingbatch
+		<set>
+			<if test="updateBy!=null and updateBy.id!=null and updateBy.id!=''">
+				update_by = #{updateBy.id},
+			</if>
+			<if test="updateDate!=null">
+				update_date = #{updateDate},
+			</if>
+			<if test="updateDate!=null">
+				del_flag=#{delFlag},
+			</if>
+			<if test="updateDate!=null">
+				filing_batch=#{filingBatch},
+			</if>
+			<if test="updateDate!=null">
+				process_instance_id=#{processinstanceId},
+			</if>
+			<if test="updateDate!=null">
+				filing_status=#{filingStatus}
+			</if>
+		</set>
+		where id =#{id}
+	</update>
+	<update id="updateProcessIdAndStatus">
+		UPDATE  project_filingbatch SET
+			  process_instance_id = #{processinstanceId},
+			  filing_status = #{filingStatus}
+		WHERE id = #{id}
+	</update>
+	<select id="queryCount" resultType="int">
+		SELECT count(DISTINCT a.id) FROM project_filingbatch a
+		LEFT JOIN project_flingbatch_relation g on(a.filing_batch=g.filing_batch)
+		<where>
+			<if test="filingBatch!=null and filingBatch!=''">
+				and a.filing_batch like concat('%',#{filingBatch},'%')
+			</if>
+			<if test="filingStatus!=null">
+				and a.filing_status = #{filingStatus}
+			</if>
+			<if test="sqlMap.dsf !=null and sqlMap.dsf!=''">
+				 AND a.del_flag='0'
+			</if>
+		</where>
+	</select>
+	<select id="findList" resultType="projectFilingBatch" >
+		SELECT <include refid="projectFilingBatchColumns"/>  FROM project_filingbatch a
+		LEFT JOIN project_flingbatch_relation g on(a.filing_batch=g.filing_batch)
+		LEFT JOIN rural_project_records r on(g.project_id=r.id)
+		<where>
+			<if test="filingBatch!=null and filingBatch!=''">
+				and a.filing_batch like concat('%',#{filingBatch},'%')
+			</if>
+			<if test="filingStatus!=null">
+				and a.filing_status = #{filingStatus}
+			</if>
+<!--			<if test="sqlMap.dsf !=null and sqlMap.dsf!=''">-->
+<!--				AND g.del_flag='0'-->
+<!--			</if>-->
+			AND a.del_flag='0' and r.project_type in(1,2)
+		</where>
+		order by a.create_date desc
+	</select>
+	<select id="get"  resultType="com.jeeplus.modules.projectFilingBatch.entity.ProjectFilingBatch">
+		SELECT
+		<include refid="projectFilingBatchColumns"/>
+		FROM project_filingbatch a
+		LEFT JOIN project_flingbatch_relation g on(a.filing_batch=g.filing_batch)
+		LEFT JOIN rural_project_records r on(g.project_id=r.project_id)
+		WHERE a.id = #{id}
+		order by a.create_date desc
+	</select>
+	<select id="findProjectIdByFiling" resultType="com.jeeplus.modules.projectFilingBatch.entity.ProjectFilingBatch">
+		SELECT
+		<include refid="filingBatchRelationColumns"/>
+		FROM project_filingbatch a
+		LEFT JOIN project_flingbatch_relation g on(a.filing_batch=g.filing_batch)
+		LEFT JOIN rural_project_records r on(g.project_id=r.id)
+		LEFT JOIN project_report_data d on(d.project_id=r.id)
+		WHERE a.id = #{id}
+		order by a.create_date desc
+	</select>
+</mapper>

+ 37 - 0
src/main/resources/mappings/modules/projectGuidang/ProjectFilingbatchRelationDao.xml

@@ -0,0 +1,37 @@
+<?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.projectFilingBatch.dao.ProjectFilingbatchRelationDao">
+	<insert id="insert">
+		insert into project_flingbatch_relation
+			(id,create_by,create_date,update_by,update_date,filing_batch,project_id,status,box_num,re_box_num)
+		VALUES
+			(#{id},#{createBy.id},#{createDate},#{updateBy.id},#{updateDate},#{filingBatch},#{projectId},#{status},#{boxNum},#{reBoxNum})
+	</insert>
+	<delete id="deleteByprojectId">
+		DELETE FROM project_flingbatch_relation WHERE filing_batch=#{filingBatch} and project_id=#{projectId}
+	</delete>
+	<update id="update">
+		update project_flingbatch_relation
+		<set>
+			<if test="updateBy!=null and updateBy.id!=null and updateBy.id!=''">
+				update_by = #{updateBy.id},
+			</if>
+			<if test="updateDate!=null">
+				update_date = #{updateDate},
+			</if>
+			<if test="filingBatch!=null">
+				filing_batch=#{filingBatch},
+			</if>
+			<if test="status!=null">
+				`status`=#{status},
+			</if>
+			<if test="boxNum!=null">
+				box_num=#{boxNum},
+			</if>
+			<if test="reBoxNum!=null">
+				re_box_num=#{reBoxNum}
+			</if>
+		</set>
+		where project_id=#{projectId}
+	</update>
+</mapper>

+ 0 - 246
src/main/resources/mappings/modules/projectrecord/ProjectImplementEarlyDao.xml

@@ -1,246 +0,0 @@
-<?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.projectrecord.dao.ProjectImplementEarlyDao">
-
-	<sql id="projectRecordsColumns">
-		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.del_flag AS "delFlag",
-		a.contract_id AS "workContractInfo.id",
-		a.project_id AS "projectId",
-		a.project_name AS "projectName",
-		a.scale_type AS "scaleType",
-		a.scale_unit AS "scaleUnit",
-		a.scale_quantity AS "scaleQuantity",
-		a.area_id AS "area.id",
-		a.project_site AS "projectSite",
-		a.project_desc AS "projectDesc",
-		a.remarks AS "remarks",
-		a.status AS "projectStatus",
-		a.process_instance_id AS "processInstanceId",
-		a.company_id AS "company.id",
-		a.office_id AS "office.id",
-		a.alter_process_id AS "alterProcessId",
-		area.name AS "area.name",
-		a.province,
-		a.city,
-		a.area_name AS "county",
-		a.project_structure AS "projectStructure",
-		a.on_ground_num AS "onGroundNum",
-		a.under_ground_num AS "underGroundNum",
-		a.building_scale AS "buildingScale",
-		a.measuring_unit AS "measuringUnit",
-		a.project_use AS "projectUse",
-		a.install_fees AS "installFees",
-		a.building_fees AS "buildingFees",
-		a.building_percent AS "buildingPercent",
-		a.install_percent AS "installPercent",
-		a.unit_fees AS "unitFees",
-		a.building_unit_fees AS "buildingUnitFees",
-		a.install_unit_fees AS "installUnitFees",
-		a.total_fees AS "totalFees",
-		a.type_id As "projectTypeId"
-	</sql>
-	
-	<sql id="projectRecordsJoins">
-		LEFT JOIN sys_area area ON area.id = a.area_id
-	</sql>
-	
-	<select id="getProjectRecodesList" resultType="ProjectImplementEarly" >
-		SELECT
-			<include refid="projectRecordsColumns"/>
-		,
-		wci.name AS "workContractInfo.name",
-		wct.id AS "workContractInfo.client.id",
-		wct.name AS "workContractInfo.client.name",
-		o.top_company AS "office.name",
-		dsu.name as "projectRegistrant",
-		pci.id as projectContentId
-		FROM rural_project_records a
-		<include refid="projectRecordsJoins"/>
-		LEFT JOIN work_project_user w on a.id = w.project_id
-		LEFT JOIN project_content_info pci on pci.project_id = a.id
-		LEFT JOIN sys_user su on w.user_id = su.id
-		LEFT JOIN sys_user dsu on a.create_by = dsu.id
-        LEFT JOIN work_project_user w1 on a.id = w1.project_id
-		LEFT JOIN work_contract_info wci on a.contract_id = wci.id
-		LEFT JOIN work_client_info wct on wci.client_id = wct.id
-        LEFT JOIN sys_office o ON o.id = a.office_id
-		<where>
-			a.status = 5
-            AND a.del_flag = 0
-			<if test="projectId != null and projectId != ''">
-				AND a.project_id like concat('%',#{projectId},'%')
-			</if>
-			<if test="projectName != null and projectName != ''">
-				AND a.project_name like concat(concat('%',#{projectName}),'%')
-			</if>
-			<if test="scaleType != null and scaleType != ''">
-				AND a.scale_type = #{scaleType}
-			</if>
-			<if test="scaleUnit != null and scaleUnit != ''">
-				AND a.scale_unit = #{scaleUnit}
-			</if>
-			<if test="scaleQuantity != null and scaleQuantity != ''">
-				AND a.scale_quantity = #{scaleQuantity}
-			</if>
-			<if test="projectSite != null and projectSite != ''">
-				AND a.project_site LIKE concat('%',#{projectSite},'%')
-			</if>
-			<if test="remarks != null and remarks != ''">
-				AND a.remarks LIKE concat('%',#{remarks},'%')
-			</if>
-			<if test="projectDesc != null and projectDesc != ''">
-				AND a.project_desc LIKE concat('%',#{projectDesc},'%')
-			</if>
-			<if test="area != null and area.id != null and area.id != ''">
-				AND a.area_id = #{area.id}
-			</if>
-			<if test="workContractInfo !=null and workContractInfo.name !=null and workContractInfo.name !=''">
-				AND wci.name like concat(concat('%',#{workContractInfo.name}),'%')
-			</if>
-			<if test="workContractInfo !=null and workContractInfo.contractNum !=null and workContractInfo.contractNum !=''">
-				AND wci.contract_num like concat(concat('%',#{workContractInfo.contractNum}),'%')
-			</if>
-			<if test="workContractInfo !=null and workContractInfo.contractPrice !=null and workContractInfo.contractPrice !=''">
-				AND wci.contract_price = #{workContractInfo.contractPrice}
-			</if>
-			<if test="workContractInfo !=null and workContractInfo.contractType !=null and workContractInfo.contractType !=''">
-				AND wci.contract_type = #{workContractInfo.contractType}
-			</if>
-			<if test="workContractInfo!=null and workContractInfo.client !=null and workContractInfo.client.name !=null and workContractInfo.client.name !=''">
-				AND wct.name like concat(concat('%',#{workContractInfo.client.name}),'%')
-			</if>
-			<if test="leaderNameStr !=null and leaderNameStr !=''">
-				AND su.name like concat(concat('%',#{leaderNameStr}),'%') AND w.is_master = '1' AND w.del_flag='0'
-			</if>
-			<if test="beginDate !=null">
-				AND a.create_date >= #{beginDate}
-			</if>
-			<if test="endDate !=null">
-				AND a.create_date &lt; #{endDate}
-			</if>
-			<if test="projectType !=null and projectType !=''">
-				and project_type= #{projectType}
-			</if>
-            <if test="sqlMap.dsf !=null and sqlMap.dsf!=''">
-               AND ((w1.user_id = #{currentUser.id} AND w1.del_flag='0' AND a.company_id = #{currentUser.company.id} )${sqlMap.dsf} )
-            </if>
-		</where>
-            GROUP BY a.id
-		<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="getProjectRecodesCount" resultType="int" >
-        SELECT count(DISTINCT a.id)
-        FROM rural_project_records a
-        <if test="leaderNameStr !=null and leaderNameStr !=''">
-            LEFT JOIN work_project_user w on a.id = w.project_id
-            LEFT JOIN sys_user su on w.user_id = su.id
-        </if>
-        LEFT JOIN work_project_user w1 on a.id = w1.project_id
-        <if test="workContractInfo !=null">
-            LEFT JOIN work_contract_info wci on a.contract_id = wci.id
-        </if>
-        <if test="workContractInfo!=null and workContractInfo.client !=null and workContractInfo.client.name !=null and workContractInfo.client.name !=''">
-            LEFT JOIN work_client_info wct on wci.client_id = wct.id
-        </if>
-        <where>
-			a.status = 5
-            AND a.del_flag = 0
-			<if test="projectId != null and projectId != ''">
-				AND a.project_id like concat('%',#{projectId},'%')
-			</if>
-			<if test="projectName != null and projectName != ''">
-				AND a.project_name like concat(concat('%',#{projectName}),'%')
-			</if>
-			<if test="scaleType != null and scaleType != ''">
-				AND a.scale_type = #{scaleType}
-			</if>
-			<if test="scaleUnit != null and scaleUnit != ''">
-				AND a.scale_unit = #{scaleUnit}
-			</if>
-			<if test="scaleQuantity != null and scaleQuantity != ''">
-				AND a.scale_quantity = #{scaleQuantity}
-			</if>
-			<if test="projectSite != null and projectSite != ''">
-				AND a.project_site LIKE concat('%',#{projectSite},'%')
-			</if>
-			<if test="remarks != null and remarks != ''">
-				AND a.remarks LIKE concat('%',#{remarks},'%')
-			</if>
-			<if test="projectDesc != null and projectDesc != ''">
-				AND a.project_desc LIKE concat('%',#{projectDesc},'%')
-			</if>
-			<if test="area != null and area.id != null and area.id != ''">
-				AND a.area_id = #{area.id}
-			</if>
-			<if test="workContractInfo !=null and workContractInfo.name !=null and workContractInfo.name !=''">
-				AND wci.name like concat(concat('%',#{workContractInfo.name}),'%')
-			</if>
-			<if test="workContractInfo !=null and workContractInfo.contractNum !=null and workContractInfo.contractNum !=''">
-				AND wci.contract_num like concat(concat('%',#{workContractInfo.contractNum}),'%')
-			</if>
-			<if test="workContractInfo !=null and workContractInfo.contractPrice !=null and workContractInfo.contractPrice !=''">
-				AND wci.contract_price = #{workContractInfo.contractPrice}
-			</if>
-			<if test="workContractInfo !=null and workContractInfo.contractType !=null and workContractInfo.contractType !=''">
-				AND wci.contract_type = #{workContractInfo.contractType}
-			</if>
-			<if test="workContractInfo!=null and workContractInfo.client !=null and workContractInfo.client.name !=null and workContractInfo.client.name !=''">
-				AND wct.name like concat(concat('%',#{workContractInfo.client.name}),'%')
-			</if>
-			<if test="leaderNameStr !=null and leaderNameStr !=''">
-				AND su.name like concat(concat('%',#{leaderNameStr}),'%') AND w.is_master = '1' AND w.del_flag='0'
-			</if>
-			<if test="beginDate !=null">
-				AND a.create_date >= #{beginDate}
-			</if>
-			<if test="endDate !=null">
-				AND a.create_date &lt; #{endDate}
-			</if>
-			<if test="projectType !=null and projectType !=''">
-				and project_type= #{projectType}
-			</if>
-            <if test="sqlMap.dsf !=null and sqlMap.dsf!=''">
-                AND ((w1.user_id = #{currentUser.id} AND w1.del_flag='0' AND a.company_id = #{currentUser.company.id})${sqlMap.dsf} )
-            </if>
-        </where>
-    </select>
-
-	<insert id="saveProjectAndAttachmentContact">
-		insert into project_attachment_info (project_id, attachment_id)
-		values
-  		(#{projectId}, #{attachmentId})
-	</insert>
-
-	<insert id="saveProjectContrntAndReport">
-		insert into project_content_report (content_id, report_id)
-		values
-  		(#{contentId}, #{reportId})
-	</insert>
-
-	<select id="getProjectContrntAndReport" resultType="java.lang.Integer">
-		select count(1) as count from project_content_report where content_id = #{contentId} and report_id = #{reportId}
-	</select>
-
-	<insert id="saveProjectContrntAndBasedId">
-		insert into project_content_based_relation (content_id, based_id)
-		values
-  		(#{contentId}, #{basedId})
-	</insert>
-
-	<delete id="delProjectContrntAndBasedId">
-		delete from project_content_based_relation where content_id = #{contentId} and based_id = #{basedId}
-	</delete>
-</mapper>

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

@@ -62,8 +62,10 @@
 			<include refid="projectRecordsColumns"/>
         ,su.name AS "createBy.name"
         ,o.top_company AS "office.name"
+		,prd.number AS "projectReportNumber"
         FROM rural_project_records a
         <include refid="projectRecordsJoins"/>
+		left join project_report_data prd on prd.project_id = a.id
         LEFT JOIN sys_user su ON su.id = a.create_by
         LEFT JOIN sys_office o ON o.id = a.office_id
 		WHERE a.id = #{id}
@@ -590,7 +592,9 @@
     <select id="findUseableByProjectId" resultType="RuralProjectRecords">
         select
         <include refid="projectRecordsColumns"/>
+        ,prd.number AS "projectReportNumber"
         FROM rural_project_records a
+		left join project_report_data prd on prd.project_id = a.id
         <include refid="projectRecordsJoins"/>
         WHERE a.project_id = #{projectId} and a.status != 7
     </select>
@@ -1349,4 +1353,61 @@
 			</if>
 		</where>
 	</select>
+	<select id="projectFindListCount" resultType="int">
+		SELECT
+		count(DISTINCT a.id)
+		FROM rural_project_records a
+		left join work_contract_info wci on a.contract_id = wci.id
+		left join project_report_data prd on prd.project_id = a.id
+		left join rural_project_report_record prr on prr.report_id = prd.id
+		left join sys_user u on u.id = a.create_by
+		left join sys_office o on o.id = a.office_id
+		LEFT JOIN sys_area area ON area.id = a.area_id
+		LEFT JOIN work_project_user w1 on a.id = w1.project_id
+		left join sys_user su on su.id = w1.user_id
+		left join sys_office so on so.id = su.office_id
+		<where>
+			and a.del_flag = 0 and project_type in (1,2)
+			and a.id not in (select project_id	FROM project_flingbatch_relation r left join project_filingbatch f on f.filing_batch=r.filing_batch	where f.filing_status in(2,3,5) )
+# 		    and a.id not in (select project_id	FROM project_flingbatch_relation where status in(2,3,5) )
+			<if test="projectName != null and projectName != ''">
+				AND a.project_name like concat(concat('%',#{projectName}),'%')
+			</if>
+		</where>
+	</select>
+	<select id="projectFindList" resultType="com.jeeplus.modules.ruralprojectrecords.entity.RuralProjectRecords">
+		SELECT
+		<include refid="projectRecordsColumns"/>
+		,ifnull(prr.status,0) as projectReportRecordStatus
+		,ifnull(a.reported_state,0) as reportedState
+		,prr.process_instance_id as prrProcessInstanceId
+		,a.project_type as "projectType"
+		,prd.number as"projectReportNumber"
+		FROM rural_project_records a
+		left join work_contract_info wci on a.contract_id = wci.id
+		left join project_report_data prd on prd.project_id = a.id
+		left join rural_project_report_record prr on prr.report_id = prd.id
+		left join sys_user u on u.id = a.create_by
+		left join sys_office o on o.id = a.office_id
+		LEFT JOIN sys_area area ON area.id = a.area_id
+		LEFT JOIN work_project_user w1 on a.id = w1.project_id
+		left join sys_user su on su.id = w1.user_id
+		left join sys_office so on so.id = su.office_id
+		<where>
+			<if test="projectName != null and projectName != ''">
+				AND a.project_name like concat(concat('%',#{projectName}),'%')
+			</if>
+			and a.del_flag = 0 and project_type in (1,2)
+			and a.id not in (select project_id	FROM project_flingbatch_relation r left join project_filingbatch f on f.filing_batch=r.filing_batch	where f.filing_status in(2,3,5) )
+# 			and a.id not in (select project_id	FROM project_flingbatch_relation where status in(2,3,5) )
+			<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>
+		</where>
+	</select>
 </mapper>

+ 1 - 1
src/main/webapp/WEB-INF/tags/sys/gridselectClientLink.tag

@@ -52,7 +52,7 @@ function searchGrid${id}(){
 		<%--<input id="${id}Name"  name="${labelName }" ${allowInput?'':'readonly="readonly"'}  type="text" value="${labelValue}" data-msg-required="${dataMsgRequired}"
 		class="${cssClass}" style="${cssStyle}"/>--%>
        		 <span class="input-group-btn">
-	       		 <a href=javascript:void(0); style="font-size:14px;" onclick="searchGrid${id}($('#${id}Id').val(),'${id}')" id="${id}Button"  class="nav-btn nav-btn-add"><i class="fa fa-search-plus"></i> 添加施工方信息</a>
+	       		 <a href=javascript:void(0); style="font-size:14px;" onclick="searchGrid${id}($('#${id}Id').val(),'${id}')" id="${id}Button"  class="nav-btn nav-btn-add"><i class="fa fa-search-plus"></i> 添加项目信息</a>
        		 </span>
        		
     </div>

+ 125 - 0
src/main/webapp/webpage/modules/projectFilingBatch/projectChoiceLink.jsp

@@ -0,0 +1,125 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<meta name="decorator" content="default"/>
+	<script type="text/javascript">
+		$(document).ready(function() {
+			    $('#contentTable thead tr th input.i-checks').on('ifChecked', function(event){ //ifCreated 事件应该在插件初始化之前绑定 
+			    	  $('#contentTable tbody tr td input.i-checks').iCheck('check');
+			    	});
+			    $('#contentTable thead tr th input.i-checks').on('ifUnchecked', function(event){ //ifCreated 事件应该在插件初始化之前绑定 
+			    	  $('#contentTable tbody tr td input.i-checks').iCheck('uncheck');
+			    	});
+		});
+
+		function getSelectedItem(){
+			var size = $("#contentTable tbody tr td input.i-checks:checked").size();
+			  if(size == 0 ){
+					top.layer.alert('请至少选择一条数据!', {icon: 0, title:'警告'});
+					return "-1";
+				  }
+			/*  if(size > 1 ){
+					top.layer.alert('只能选择一条数据!', {icon: 0, title:'警告'});
+					return "-1";
+				  }*/
+            var arr=new Array();
+            $("#contentTable tbody tr td input.i-checks:checkbox:checked").each(function () {
+                var id =  $(this).attr("id");
+                var label = $(this).parent().parent().parent().find(".codelabel").html();
+                var label1 = $(this).parent().parent().parent().find(".codelabel1").html();
+                var label2 = $(this).parent().parent().parent().find(".codelabel2").html();
+                var label3 = $(this).parent().parent().parent().find(".codelabel3").html();
+                var label4 = $(this).parent().parent().parent().find(".codelabel4").html();
+                var label5 = $(this).parent().parent().parent().find(".codelabel5").html();
+				var label6 = $(this).parent().parent().parent().find(".codelabel6").html();
+                var data=  {'clientId':{'id':label,'name':label4,'uscCode':label5},'id':id,'name':label1,'linkPhone':label2,'linkMobile':label3,'createName':label6};
+                arr.push(data);
+			})
+            return arr;
+
+}
+		function page(n,s){
+			if(n) $("#pageNo").val(n);
+			if(s) $("#pageSize").val(s);
+			$("#searchForm").attr("action","${url}");
+			$("#searchForm").submit();
+	    	return false;
+	    }
+	</script>
+</head>
+<body>
+<div class="wrapper wrapper-content">
+	<div class="layui-row">
+		<div class="full-width fl">
+			<div class="layui-row" id="queryDiv">
+				<form:form id="searchForm" modelAttribute="obj" action="${ctx}/projectFilingBatch/projectFilingBatchInfo/finishListShow" method="post" class="form-inline">
+					<input type="hidden" name="url" value="${url}"/>
+					<input type="hidden" name="fieldLabels" value="${fieldLabels}"/>
+					<input type="hidden" name="fieldKeys" value="${fieldKeys}"/>
+					<input type="hidden" name="searchLabel" value="${searchLabel}"/>
+					<input type="hidden" name="searchKey" value="${searchKey}"/>
+					<input id="pageNo" name="pageNo" type="hidden" value="${page.pageNo}"/>
+					<input id="pageSize" name="pageSize" type="hidden" value="${page.pageSize}"/>
+					<table:sortColumn id="orderBy" name="orderBy" value="${page.orderBy}" callback="sortOrRefresh();"/><!-- 支持排序 -->
+
+					<div class="commonQuery">
+						<div class="layui-item query athird lw9">
+							<span class="layui-form-label">项目名称:</span>
+							<div class="layui-input-block">
+								<input name="projectName" htmlEscape="false" maxlength="50" class=" form-control layui-input"/>
+							</div>
+						</div>
+						<div class="layui-item athird fr">
+							<div class="input-group">
+								<button id="searchReset" class="fixed-btn searchReset fr" style="margin-right: 0px;" onclick="resetSearch()">重置</button>
+								<button id="searchQuery" class="fixed-btn searchQuery fr" onclick="search()">查询</button>
+							</div>
+						</div>
+						<div style="    clear:both;"></div>
+					</div>
+				</form:form>
+			</div>
+		</div>
+		<div class="full-width fl">
+			<div class="layui-item layui-col-xs12 form-table-container">
+				<table id="contentTable" class="table details table-bordered table-condensed">
+					<thead>
+					<tr>
+						<th width="25%"><input type="checkbox" class="i-checks"></th>
+						<th width="25%">归档项目编号</th>
+						<th width="25%">归档项目名称</th>
+						<th width="25%">报告号</th>
+					</tr>
+				</thead>
+				<tbody>
+				<c:choose>
+				<c:when test="${not empty page.list}">
+				<c:forEach items="${page.list}" var="obj">
+						<tr>
+							<td> <input type="checkbox" id="${obj.projectId}" class="i-checks"></td>
+							<td title="${obj.projectId}" class="codelabel">${obj.projectId}</td>
+							<td title="${obj.projectName}" class="codelabel4">${obj.projectName}</td>
+							<td title="${obj.projectReportNumber}" class="codelabel5">${obj.projectReportNumber}</td>
+						</tr>
+					</c:forEach>
+				</c:when>
+					<c:otherwise>
+						<tr>
+							<td colspan="15" align="center">
+								暂无数据
+							</td>
+						</tr>
+					</c:otherwise>
+				</c:choose>
+
+				</tbody>
+			</table>
+			<table:page page="${page}"></table:page>
+		</div>
+	</div>
+	<div class="form-group layui-row page-end"></div>
+	</div>
+</div>
+</body>
+</html>

+ 644 - 0
src/main/webapp/webpage/modules/projectFilingBatch/projectFilingBachAuditre.jsp

@@ -0,0 +1,644 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<%
+    String param = request.getParameter("param");
+
+%>
+<html>
+<head>
+    <title>客户信息管理</title>
+    <meta name="decorator" content="default"/>
+    <script src="${ctxStatic}/layer-v2.3/layui/xmSelect.js" charset="utf-8"></script>
+    <%--<style type="text/css">--%>
+    <%--.btn-file{--%>
+    <%--margin-top:8px;--%>
+    <%--}--%>
+    <%--.btn-default:hover, .btn-default:focus, .btn-default:active, .btn-default.active, .open .dropdown-toggle.btn-default {--%>
+    <%--background-color:#fff;--%>
+    <%--color: #110F0F;--%>
+    <%--}--%>
+    <%--.btn-default{--%>
+    <%--background-color:#fff;--%>
+    <%--color: #110F0F;--%>
+    <%--}--%>
+    <%--</style>--%>
+    <link href="${ctxStatic}/bootstrap-select-1.12.4/css/bootstrap-select.min.css" rel="stylesheet" />
+    <style>
+        #companyType-error{
+            left:0;
+            top:40px;
+        }
+        #clientType-error{
+            left:0;
+            top:40px;
+        }
+        #companyIndustry-error{
+            left:0;
+            top:40px;
+        }
+    </style>
+    <script src="${ctxStatic}/bootstrap-select-1.12.4/js/bootstrap-select.min.js"></script>
+    <script type="text/javascript">
+        var validateForm;
+        var exitName = true;
+        function doSubmit(){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+            if(validateForm.form()){
+                var jobTypeStr = $("#jobTypeStr").val();
+                if (jobTypeStr == null || "" == jobTypeStr) {
+                    parent.layer.msg("请选择联系人类型!", {icon: 5});
+                    return false;
+                }
+                var telephone = $("#telephone").val();
+                if(!/(^1[3|4|5|7|8|9]\d{9}$)|(^09\d{8}$)/.test(telephone) && !/^([0-9]{3,4}-)?[0-9]{7,8}$/.test(telephone)){
+                    parent.layer.msg("公司电话有误,请重新填写!", {icon: 5});
+                    return false;
+                }
+
+                var tableObj = document.getElementById('contentTable').rows[1];
+                var  contentTableLength = $("table#contentTable tr:visible").length;
+                if (tableObj == null || contentTableLength == 1) {
+                    parent.layer.msg("请填写联系人信息!", {icon: 5});
+                    return false;
+                }
+
+
+                if(!exitName){
+                    return false;
+                }
+                $("#inputForm").submit();
+                return true;
+            }else {
+                parent.layer.msg("信息未填写完整!", {icon: 5});
+            }
+
+            return false;
+        }
+        $(document).ready(function() {
+            contentDetailTypeShow();
+            checkContentKeyUp('unitIntroduction',500);
+            $.validator.messages["orUnicode"] = true;
+            $.validator.methods["orUnicode"] = function( value, element ) {
+                return this.optional( element ) || /^[a-z0-9A-Z\-]*$/.test( value );
+            }
+            $.validator.messages["fax"] = true;
+            $.validator.methods["fax"] = function( value, element ) {
+                return this.optional( element ) || /^[0-9\-]*$/.test( value );
+            }
+            $.validator.messages["telephone"] = true;
+            $.validator.methods["telephone"] = function( value, element ) {
+                return this.optional( element ) || /^[0-9\-]*$/.test( value );
+            }
+            $.validator.messages["ourBank"] = true;
+            $.validator.methods["ourBank"] = function( value, element ) {
+                return this.optional( element ) || /^[\u4e00-\u9fa5]*$/.test( value );
+            }
+            $.validator.messages["taxId"] = true;
+            $.validator.methods["taxId"] = function( value, element ) {
+                return this.optional( element ) || /^[a-z0-9A-Z]*$/.test( value );
+            }
+
+            jQuery.validator.addMethod("isUscCode", function(value, element) {
+                if (this.optional(element)){
+                    return true;
+                }
+                var uscCode = /^((\w{15})|(\w{18})|(\w{20}))$/;
+                return uscCode.test(value);
+            }, "请填写正确的统一社会信用代码");
+
+            validateForm = $("#inputForm").validate({
+                rules:{
+                    orUnicode:{
+                        orUnicode:true
+                    },
+                    zipCode:{
+                        digits:true
+                    },
+                    email:{
+                        email:true
+                    },
+                    fax:{
+                        fax:true
+                    },
+                    telephone:{
+                        telephone:true
+                    },
+                    taxId:{
+                        taxId:true
+                    }
+                    <%--uscCode:{remote: "${ctx}/workclientinfo/workClientInfo/checkUscCode?oldUscCode=" + encodeURIComponent($("#oldUscCode").val())}--%>
+                },
+                messages:{
+                    orUnicode:{
+                        orUnicode:"仅允许输入数字、大写拉丁字母、符号“-”"
+                    },
+                    zipCode:{
+                        required:"必须输入数字"
+                    },
+                    email:{
+                        email:"请输入合法的邮箱地址"
+                    },
+                    fax:{
+                        fax:"仅允许输入数字、符号“-”"
+                    },
+                    telephone:{
+                        telephone:"仅允许输入数字、符号“-”"
+                    },
+                    taxId:{
+                        taxId:"仅允许输入数字、大写拉丁字母"
+                    }
+                    // uscCode:{remote:"重复的统一社会信用代码"}
+                },
+                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);
+                    }
+                }
+            });
+            $("#attachment_btn").click(function () {
+                $("#attachment_file").click();
+            });
+            $('input[name="hasUscc"]').on('ifChecked', function(event){
+                disUscc(event.target.defaultValue);
+            });
+            disUscc($('input[name="hasUscc"]:checked').val());
+            if($("#uscCode").val()!=null&&$("#uscCode").val()!='') {
+                $("#inputForm").validate().element($("#uscCode"));
+            }
+            // $("#name").blur(function(){
+            //     checkName();
+            // })
+            $("#name").on("change",function(){
+                    var id = $("#id").val();
+                    var name = $("#name").val();
+                    var uscCode = $("#uscCode").val();
+                    $.ajax({
+                        url:"${ctx}/workclientinfo/workClientInfo/checkClient",
+                        type:"post",
+                        data:{"id":id,
+                            "name":name,
+                            "uscCode":uscCode},
+                        success:function(data){
+                            if(data==="false"){
+                                exitName=false
+                                $("#ph").html("该客户已存在");
+                            }else {
+                                exitName=true
+                                $("#ph").html('');
+                            }
+                        }
+                    });
+                }
+            )
+            <%--var arr="${workClientInfo.clientType}".split(',');--%>
+            // $('#clientType').selectpicker('val',arr);
+
+            /*新增代码传送统一社会信用代码*/
+            $("#uscCode").on("change",function(){
+                    var id = $("#id").val();
+                    var name = $("#name").val();
+                    var uscCode= $("#uscCode").val();
+
+                    $.ajax({
+                        url:"${ctx}/workclientinfo/workClientInfo/checkClientUscCode",
+                        type:"post",
+                        data:{"id":id,
+                            "name":name,
+                            "uscCode":uscCode},
+                        success:function(data){
+                            if(data.code==="false"){
+                                exitName=false
+                                $("#uscPh").html("该客户已存在");
+                                console.log(data);
+
+                                layer.confirm('该客户信息已存在是否进行信息修改?', {
+                                    btn: ['确定', '取消'] //可以无限个按钮
+
+                                }, function(index, layero){
+                                    /*var linkType=${linkType};
+                                console.log("---------"+linkType);*/
+                                    var typeId=data.workClientInfo.id;
+                                    window.location.href="${ctx}/workclientinfo/workClientInfo/formTwo?id="+typeId+"&param=1";
+
+                                }, function(index){
+                                    return "false";
+                                });
+
+                            }else {
+                                exitName=true
+                                $("#uscPh").html('');
+                            }
+                        }
+                    });
+                }
+            )
+
+            dismissDiv();
+
+        });
+
+        function testOurBank(value){
+            if(!/^[\u4e00-\u9fa5]*$/.test( value )){
+                parent.layer.msg("开户银行必须输入汉字",{icon:6});
+            }
+        }
+
+        /**
+         * 只允许输入数字
+         * @param value
+         */
+        function testBankNumber(value){
+            if(!/^\d*$/.test( value )){
+                parent.layer.msg("开户帐号必须输入数字",{icon:6});
+            }
+        }
+        function addRow(list, idx, tpl, row){
+            var idx1 = $("#workClientBankList tr").length;
+            if(list == '#workClientBankList'){
+                bornTemplete(list, idx, tpl, row, idx1);
+            }
+            var idx2 = $("#workClientLinkmanList tr").length;
+            if(list == '#workClientLinkmanList'){
+                bornTemplete(list, idx, tpl, row, idx2);
+            }
+        }
+        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");
+            if (id.val() == ""){
+                $(obj).parent().parent().remove();
+            }else if(delFlag.val() == "0"){
+                delFlag.val("1");
+                $(obj).html("&divide;").attr("title", "撤回删除");
+                $(obj).parent().parent().addClass("error");
+                $(obj).parent().parent().addClass("hide");
+            }else if(delFlag.val() == "1"){
+                delFlag.val("0");
+                $(obj).html("&times;").attr("title", "删除");
+                $(obj).parent().parent().removeClass("error");
+            }
+
+        }
+        function urlRedict(file,attach){
+            parent.layer.confirm('确定删除吗?', {
+                btn: ['确认', '取消'] //可以无限个按钮
+            }, function(index, layero){
+                var index1 = parent.layer.load(0, {shade: false});
+                $.post("${ctx}/workfullmanage/workFullManage/deleteFile",
+                    {"file":file,"attach":attach},
+                    function(result){
+                        var d = JSON.parse(result);
+                        if(d.str){
+                            location.reload();
+                            parent.layer.msg("删除成功!!!",{icon:6});
+                            parent.layer.close(index1);
+                            parent.layer.close(index);
+                        }
+                    });
+            }, function(index){
+                parent.layer.close(index)
+            });
+
+        }
+
+        function checkName() {
+            var id = $("#id").val();
+            var name = $("#name").val();
+            var uscCode = $("#uscCode").val();
+            $.ajax({
+                url:"${ctx}/workclientinfo/workClientInfo/checkClient",
+                type:"post",
+                data:{"id":id,
+                    "name":name,
+                    "uscCode":uscCode},
+                success:function(data){
+
+                    if(data=="false"){
+                        exitName=false
+                        $("#ph").html("该客户已存在");
+                    }else {
+                        exitName=true
+                        $("#ph").html('');
+                    }
+                }
+            });
+        }
+
+        function insertTitle(tValue){
+            var list = "${workClientInfo.workAttachments}";
+            var size = (list.split('url')).length-1;
+            var files = $("#attachment_file")[0].files;
+            for(var i = 0;i<files.length;i++) {
+                var file = files[i];
+                var attachmentId = "";
+                var attachmentFlag = "5";
+                console.log(file);
+                var timestamp = new Date().getTime();
+
+                var storeAs = "workClientInfo";
+                var uploadPath = "http://gangwan-app.oss-cn-hangzhou.aliyuncs.com/" + storeAs;
+                /*将这段字符串存到数据库即可*/
+                var divId = "_attachment";
+                $("#addFile" + divId).show();
+                multipartUploadWithSts(storeAs, file, attachmentId, attachmentFlag, uploadPath, divId, size);
+            }
+        }
+
+        function disUscc(hasUscc) {
+            if("2"==hasUscc){
+                $(".companyType_uscCode").hide();
+                /*$('input[name="uscCode"]').attr("class","form-control");*/
+                $('input[name="uscCode"]').val("");
+            }else {
+                $(".companyType_uscCode").show();
+                /*$('input[name="uscCode"]').attr("class","form-control required isUscCode layui-input");*/
+            }
+        }
+
+        // 模糊查询下拉框
+        var code=null;
+        function fuzzyQuery(){
+            var keyword = $("#name").val();
+            if (keyword == null || keyword === "") {
+                return;
+            }
+            $.post(
+                "${ctx}/workclientinfo/workClientInfo/enterpriseSearchByName",
+                {"keyword": keyword},
+                function (result) {
+                    if (result == null) {
+                        return;
+                    }
+                    var json = eval(result.data.items);
+                    //如果精准查询,只有一条数据,则不显示模糊查询div,直接赋值
+                    if (json.length == 1) {
+                        var id = json[0].id;
+                        $.getJSON(
+                            "${ctx}/workclientinfo/workClientInfo/enterpriseTicketInfo",
+                            {"id": id},
+                            function (data) {
+                                $("#name").val(data.ENTNAME).change();
+                                $("#uscCode").val(data.TAXNUMBER).change();
+                                $("#registerAddress").val(data.OPLOC);
+                            }
+                        );
+                        return;
+                    }
+                    var html = "<ul>";
+                    for (var i = 0; i < json.length; i++) {
+                        html += "<li value=" + json[i].id + ">" + json[i].entname + "</li>";
+                    }
+                    html += "</ul>";
+                    $("#fuzzyQuerySelect").show().html(html);
+
+                    //鼠标移动到某行上改变颜色
+                    $("li").bind("mouseover", function () {
+                        $(this).css("background-color", "grey");
+                    });
+                    $("li").bind("mouseout", function () {
+                        $(this).css("background-color", "white");
+                    });
+                    //单击某行
+                    $("li").bind("click", function () {
+                        $("#fuzzyQuerySelect").hide();
+                        var id = $(this).val();
+                        $.getJSON(
+                            "${ctx}/workclientinfo/workClientInfo/enterpriseTicketInfo",
+                            {"id": id},
+                            function (data) {
+                                $("#name").val(data.ENTNAME).change();
+                                $("#uscCode").val(data.TAXNUMBER).change();
+                                $("#registerAddress").val(data.OPLOC);
+                            }
+                        );
+
+                    });
+                }, "json");
+        }
+
+
+    </script>
+
+</head>
+<body>
+<div class="single-form">
+    <div class="container">
+        <input type="hidden" value="${param.param}" id="param">
+        <form:form id="inputForm" modelAttribute="projectFilingBatch" enctype="multipart/form-data" action="${ctx}/projectFilingBatch/projectFilingBatchInfo/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 id="taskDefKey" 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="${projectFilingBatch.filingStatus}" />
+            <div class="form-group layui-row first">
+                <div class="form-group-label"><h2>基本信息</h2></div>
+                <div class="layui-item layui-col-sm12 lw6">
+                    <label class="layui-form-label">归档批次号:</label>
+                    <div class="layui-input-block">
+                        <form:input path="filingBatch" id="filingBatch"  readonly="true" class="form-control layui-input" />
+                    </div>
+                </div>
+                <div class="layui-item layui-col-sm12 lw6">
+                    <label class="layui-form-label">归档人:</label>
+                    <div class="layui-input-block">
+                        <form:input path="createBy.name" id="createBy"  readonly="true" class="form-control layui-input" />
+                    </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">--%>
+<%--                        <form:select path="clientType" id="clientType" class="form-control simple-select required">--%>
+<%--                            <form:option value="" label="--请选择客户类型--"/>--%>
+<%--                            <form:options items="${fns:getMainDictList('client_type')}" itemLabel="label" itemValue="value" htmlEscape="false"/>--%>
+<%--                        </form:select>--%>
+<%--                    </div>--%>
+<%--                </div>--%>
+            <div class="form-group layui-row">
+                <div class="form-group-label"><h2>联系人信息</h2></div>
+                <div class="layui-item nav-btns">
+<%--                    <a class="nav-btn nav-btn-add"--%>
+<%--                       onclick="addRow('#workClientLinkmanList', workClientLinkmanRowIdx, workClientLinkmanTpl);workClientLinkmanRowIdx = workClientLinkmanRowIdx + 1;"--%>
+<%--                       title="新增"><i class="fa fa-plus"></i> 新增</a>--%>
+                </div>
+                <div class="layui-item layui-col-xs12 form-table-container">
+                    <table id="contentTable" class="table table-bordered table-condensed can-edit">
+                        <thead>
+                        <tr>
+                            <th class="hide"></th>
+                            <th style="text-align: center">归档项目编号</th>
+                            <th style="text-align: center" >归档项目名称</th>
+                            <th style="text-align: center">报告号</th>
+                            <th style="text-align: center" >盒号</th>
+                            <th style="text-align: center" >确认盒号</th>
+                            <th style="text-align: center" >操作</th>
+                        </tr>
+                        </thead>
+                        <tbody id="workClientLinkmanList">
+                        <c:forEach items="${projectFilingBatch.project}" var="project" varStatus="index">
+                            <tr>
+                                <td>
+                                    <input name="" type="text" readonly value="${project.projectId}" class="form-control isPhone"/>
+                                </td>
+                                <td>
+                                    <input name="" type="text" readonly value="${project.projectName}" class="form-control isPhone"/>
+                                </td>
+                                <td>
+                                    <input name="" type="text" readonly value="${project.projectReportNumber}" class="form-control isPhone"/>
+                                </td>
+                                <td><input name="" type="text" value="" class="form-control isPhone"/></td>
+                                <td><input id=""
+                                           name=" " type="text"
+                                           value="" class="form-control isTel"/></td>
+                                <td>
+                                    <select path="" id="clientType" class="form-control simple-select required">
+                                        <option value="" label="--请选择--"/>
+                                        <options valer="通过" itemLabel="label" itemValue="value" htmlEscape="false"/>
+                                        <options valer="驳回" itemLabel="label" itemValue="value" htmlEscape="false"/>
+                                    </select>
+                                </td>
+
+                            </tr>
+                        </c:forEach>
+                        </tbody>
+                    </table>
+                    <script type="text/javascript">
+                        var workClientLinkmanRowIdx = 0,
+                            workClientLinkmanTpl = $("#workClientLinkmanTpl").html().replace(/(\/\/\<!\-\-)|(\/\/\-\->)/g, "");
+                        var workClientBankRowIdx = 0,
+                            workClientBankTpl = $("#workClientBankTpl").html().replace(/(\/\/\<!\-\-)|(\/\/\-\->)/g, "");
+                        $(document).ready(function () {
+                            var data = ${fns:toJson(workClientInfo.workClientLinkmanList)};
+                            for (var i = 0; i < data.length; i++) {
+                                addRow('#workClientLinkmanList', workClientLinkmanRowIdx, workClientLinkmanTpl, data[i]);
+                                workClientLinkmanRowIdx = workClientLinkmanRowIdx + 1;
+                            }
+                            var dataBank = ${fns:toJson(workClientInfo.workClientBankList)};
+                            for (var i = 0; i < dataBank.length; i++) {
+                                addRow('#workClientBankList', workClientBankRowIdx, workClientBankTpl, dataBank[i]);
+                                workClientBankRowIdx = workClientBankRowIdx + 1;
+                            }
+                        });
+
+                    </script>
+                </div>
+            </div>
+            <div class="form-group layui-row page-end"></div>
+        </form:form>
+    </div>
+</div>
+<script src="${ctxStatic}/layer-v2.3/layui/layui.all.js" charset="utf-8"></script>
+<script>
+    function contentDetailTypeShow() {
+        $.ajax({
+            type:'post',
+            url:'${ctx}/workclientinfo/workClientInfo/getJobType',
+            data:{
+                "type":2
+            },
+            success:function(data){
+                if(data.success) {
+                    var data = data.body.list;
+                    var newDataList = data;
+                    var showList = [];
+                    $.ajax({
+                        type:'post',
+                        url:'${ctx}/workclientinfo/workClientInfo/getJobTypeById',
+                        data:{
+                            "id":$("#id").val()
+                        },
+                        success:function(dataListById){
+
+                            if(dataListById.success) {
+                                var showDataList = dataListById.body.list;
+                                var lists = [];
+                                for (i in newDataList) {
+                                    for (j in showDataList) {
+                                        if (newDataList[i].value == showDataList[j].value) {
+                                            var newData = {
+                                                "name": newDataList[i].name,
+                                                "value": newDataList[i].value,
+                                                "selected": true
+
+                                            }
+                                            lists.push(newDataList[i].value);
+                                            showList.push(newData);
+                                            data.splice(i,1,newData);
+                                        }
+                                    }
+                                }
+                                if(0 == showDataList.length){
+                                    var newData = {
+                                        "name": newDataList[0].name,
+                                        "value": newDataList[0].value,
+                                        "selected": true
+
+                                    }
+                                    lists.push(newDataList[0].value);
+                                    showList.push(newData);
+                                    data.splice(0,1,newData);
+                                }
+
+                                $("#jobTypeStr").val(lists);
+                                xmSelect.render({
+                                    el: '#jobType',
+                                    language: 'zn',
+                                    data:data
+                                })
+                            }
+                        }
+                    })
+                }
+            }
+        })
+    }
+
+    var jobType = xmSelect.render({
+        el: '#jobType',
+        language: 'zn',
+        data: [
+        ]
+    })
+
+
+    document.getElementById('jobType').onblur=function(){
+        var list = [];
+        //获取当前多选选中的值
+        var selectArr = jobType.getValue();
+        for (var i in selectArr){
+            list.push(selectArr[i].value);
+        }
+        $("#jobTypeStr").val(list);
+        console.log(list);
+    }
+</script>
+</body>
+</html>

+ 15 - 0
src/main/webapp/webpage/modules/projectFilingBatch/projectFilingBacthTask.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>
+

+ 238 - 0
src/main/webapp/webpage/modules/projectFilingBatch/projectFilingBatchApply.jsp

@@ -0,0 +1,238 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>重新申请</title>
+	<meta name="decorator" content="default"/>
+	<script src="${ctxStatic}/layer-v2.3/laydate/laydate.js"></script>
+	<script type="text/javascript">
+		var validateForm;
+		function doSubmit(obj){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+            if(validateForm.form()){
+                $("#inputForm").submit();
+                return true;
+            }
+	
+		  return false;
+		}
+		$(document).ready(function() {
+			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);
+					}
+				}
+			});
+
+			var contractNum = $("#contractNum").val();
+			if (contractNum == null || contractNum === "") {
+				$("#div1").hide();
+				$("#div3").hide();
+				setTimeout(function () {
+					var tt = $("#workClientLinkmanList").find("tr").eq(0).find("td").eq(1).text().trim();
+					$("#clientName").val(tt);
+				},100);
+			}
+		});
+
+        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 = "82";
+            console.log(file);
+            var timestamp=new Date().getTime();
+
+				var storeAs = "projectRecords";
+            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){
+            // var idx1 = $("#workClientLinkmanList tr").length;
+            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="projectFilingBatch" enctype="multipart/form-data" action="${ctx}/projectFilingBatch/projectFilingBatchInfo/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 id="taskDefKey" 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="${projectFilingBatch.filingStatus}" />
+			<div class="form-group layui-row first">
+				<div class="form-group-label"><h2>归档批次信息</h2></div>
+				<div >
+					<div class="layui-item layui-col-sm12 lw6">
+						<label class="layui-form-label">归档批次号:</label>
+						<div class="layui-input-block">
+							<form:input path="filingBatch" id="filingBatch"  readonly="true" class="form-control layui-input" />
+						</div>
+					</div>
+					<div class="layui-item layui-col-sm12 lw6">
+						<label class="layui-form-label">归档人:</label>
+						<div class="layui-input-block">
+							<form:input path="createBy.name" id="createBy"  readonly="true" class="form-control layui-input" />
+						</div>
+					</div>
+				</div>
+			</div>
+			<div class="form-group layui-row first">
+				<div class="form-group-label"><h2>项目基础信息</h2></div>
+				<table id="contentTable2" class="table table-bordered table-condensed details">
+					<thead>
+					<tr>
+						<th class="hide"></th>
+						<th style="text-align: center" width="20%">归档项目编号</th>
+						<th style="text-align: center" width="20%">归档项目名称</th>
+						<th style="text-align: center" width="20%">报告号</th>
+<%--						<th style="text-align: center" width="20%">盒号</th>--%>
+<%--						<th style="text-align: center" width="20%">确认盒号</th>--%>
+						<th style="text-align: center" width="20%">操作</th>
+					</tr>
+					</thead>
+					<tbody id="workConstructionLinkmanList">
+					<c:choose>
+						<c:when test="${not empty projectFilingBatch}">
+							<c:forEach items="${projectFilingBatch.project}" var="project" varStatus="index">
+								<tr>
+									<td>
+											${project.projectId}
+									</td>
+									<td>
+											${project.projectName}
+									</td>
+									<td>
+											${project.projectReportNumber}
+									</td>
+<%--									<td>--%>
+<%--										<input id="boxNum" style="border: 0px;width: 100%;background-color: rgba(255,255,255,0);" type="text" class="form-control layui-input boxNum" value=""/>--%>
+<%--										<span class="node" style="display: none;color: red;"></span>--%>
+<%--									</td>--%>
+<%--									<td>--%>
+<%--										<input  id="reboxNum"  style="border: 0px;width: 100%;background-color: rgba(255,255,255,0);" type="text" class="form-control layui-input reBoxNum" value=""/>--%>
+<%--										<span class="reNode" style="display: none;color: red;"></span>--%>
+<%--									</td>--%>
+									<td>
+										<span class="op-btn op-btn-delete" onclick="delEntrustRow(this)" title="删除"><i class="glyphicon glyphicon-remove"></i>&nbsp;删除</span>
+<%--										<input type="hidden" id="getProId" value="${project.id}"/>--%>
+<%--										<select id="projectPass" style="border: 0px;width:100%;text-align: center;background-color: rgba(255,255,255,0);" class="form-control editable-select layui-input" readonly="true">--%>
+<%--											<option style="text-align: center" value="5">通过</option>--%>
+<%--											<option style="text-align: center" value="4">驳回</option>--%>
+<%--										</select>--%>
+									</td>
+								</tr>
+							</c:forEach>
+						</c:when>
+						<c:otherwise>
+							<tr>
+								<td colspan="7">
+									暂无数据
+								</td>
+							</tr>
+						</c:otherwise>
+					</c:choose>
+					</tbody>
+				</table>
+			</div>
+	</form:form>
+			<div class="form-group layui-row">
+				<div class="form-group-label"><h2>审批流程</h2></div>
+				<div class="layui-item layui-col-xs12 form-table-container" >
+					<act:flowChart procInsId="${projectFilingBatch.processinstanceId}"/>
+					<act:histoicFlow procInsId="${projectFilingBatch.processinstanceId}"/>
+				</div>
+			</div>
+	</div>
+</div>
+<script>
+
+	function upcase(obj) {
+		var tr=obj.parentNode;
+		var boxNum=jQuery(tr).find("#boxNum").val()
+		var reboxNum=jQuery(tr).find("#reboxNum").val()
+		if (boxNum!=""){
+			if (reboxNum!=""){
+				if(boxNum!=reboxNum){
+					alert("确认盒号与盒号不匹配")
+				}else{
+					var pass=jQuery(tr).find("#projectPass").val();
+					var proId=jQuery(tr).find("#getProId").val();
+					//修改项目状态
+					$.ajax({
+						type : "POST",
+						url : "${ctx}/projectFilingBatch/projectFilingBatchInfo/updateProjectPass",
+						data : {
+							'status':pass,
+							'proId':proId
+						},
+						//请求成功
+						success : function(result) {
+
+						},
+
+					});
+				}
+			}else{
+				alert("请输入再次确认盒号")
+			}
+		}else{
+			alert("请输入盒号")
+		}
+
+	}
+	function delEntrustRow(obj, prefix){
+		var id = $(prefix+"_id");
+		var delFlag = $(prefix+"_delFlag");
+		$(obj).parent().parent().remove();
+		if($("#workClientLinkmanList tr").length==0){
+			//按钮禁用
+			$("#addUserButton").addClass("notDisables");
+			//a标签置灰
+			$("#aButton").addClass("notForbidden");
+
+			$("#linkmanDiv").addClass("notDisables");
+			$("#linkmanButton").addClass("notForbidden");
+		}
+	}
+</script>
+</body>
+</html>

+ 238 - 0
src/main/webapp/webpage/modules/projectFilingBatch/projectFilingBatchAudit.jsp

@@ -0,0 +1,238 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>审批管理</title>
+	<meta name="decorator" content="default"/>
+	<script src="${ctxStatic}/layer-v2.3/laydate/laydate.js"></script>
+	<script type="text/javascript">
+		var validateForm;
+		function doSubmit(obj){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+            if(validateForm.form()){
+                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() {
+			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);
+					}
+				}
+			});
+
+			var contractNum = $("#contractNum").val();
+			if (contractNum == null || contractNum === "") {
+				$("#div1").hide();
+				$("#div3").hide();
+				setTimeout(function () {
+					var tt = $("#workClientLinkmanList").find("tr").eq(0).find("td").eq(1).text().trim();
+					$("#clientName").val(tt);
+				},100);
+			}
+		});
+
+        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 = "82";
+            console.log(file);
+            var timestamp=new Date().getTime();
+
+				var storeAs = "projectRecords";
+            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){
+            // var idx1 = $("#workClientLinkmanList tr").length;
+            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="projectFilingBatch" enctype="multipart/form-data" action="${ctx}/projectFilingBatch/projectFilingBatchInfo/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 id="taskDefKey" 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="${projectFilingBatch.filingStatus}" />
+			<div class="form-group layui-row first">
+				<div class="form-group-label"><h2>归档批次信息</h2></div>
+				<div >
+					<div class="layui-item layui-col-sm12 lw6">
+						<label class="layui-form-label">归档批次号:</label>
+						<div class="layui-input-block">
+							<form:input path="filingBatch" id="filingBatch"  readonly="true" class="form-control layui-input" />
+						</div>
+					</div>
+					<div class="layui-item layui-col-sm12 lw6">
+						<label class="layui-form-label">归档人:</label>
+						<div class="layui-input-block">
+							<form:input path="createBy.name" id="createBy"  readonly="true" class="form-control layui-input" />
+						</div>
+					</div>
+				</div>
+			</div>
+			<div class="form-group layui-row first">
+				<div class="form-group-label"><h2>项目基础信息</h2></div>
+				<table id="contentTable2" class="table table-bordered table-condensed details">
+					<thead>
+					<tr>
+						<th class="hide"></th>
+						<th style="text-align: center" width="20%">归档项目编号</th>
+						<th style="text-align: center" width="20%">归档项目名称</th>
+						<th style="text-align: center" width="20%">报告号</th>
+						<th style="text-align: center" width="20%">盒号</th>
+						<th style="text-align: center" width="20%">确认盒号</th>
+						<th style="text-align: center" width="20%">操作</th>
+					</tr>
+					</thead>
+					<tbody id="workConstructionLinkmanList">
+					<c:choose>
+						<c:when test="${not empty projectFilingBatch}">
+							<c:forEach items="${projectFilingBatch.project}" var="project" varStatus="index">
+								<tr onchange="onchge(this)">
+									<td>
+											${project.projectId}
+									</td>
+									<td>
+											${project.projectName}
+									</td>
+									<td>
+											${project.projectReportNumber}
+									</td>
+									<td>
+										<input id="boxNum" style="border: 0px;width: 100%;background-color: rgba(255,255,255,0);" type="text" class="layui-input" value=""/>
+										<span class="node" style="display: none;color: red;"></span>
+									</td>
+									<td>
+										<input onchange="upcase(this)" id="reboxNum"  style="border: 0px;width: 100%;background-color: rgba(255,255,255,0);" type="text" class="form-control layui-input reBoxNum" value=""/>
+										<span class="reNode" style="display: none;color: red;"></span>
+									</td>
+									<td >
+										<input type="hidden" id="getProId" value="${project.id}"/>
+										<select id="projectPass" style="border: 0px;width:100%;text-align: center;background-color: rgba(255,255,255,0);" class="form-control editable-select layui-input" readonly="true">
+											<option style="text-align: center" value="5">通过</option>
+											<option style="text-align: center" value="4">驳回</option>
+										</select>
+									</td>
+								</tr>
+							</c:forEach>
+						</c:when>
+						<c:otherwise>
+							<tr>
+								<td colspan="7">
+									暂无数据
+								</td>
+							</tr>
+						</c:otherwise>
+					</c:choose>
+					</tbody>
+				</table>
+			</div>
+	</form:form>
+			<div class="form-group layui-row">
+				<div class="form-group-label"><h2>审批流程</h2></div>
+				<div class="layui-item layui-col-xs12 form-table-container" >
+					<act:flowChart procInsId="${projectFilingBatch.processinstanceId}"/>
+					<act:histoicFlow procInsId="${projectFilingBatch.processinstanceId}"/>
+				</div>
+			</div>
+	</div>
+</div>
+<script>
+	// function onchge(obj) {
+	// 	alert($("boxNum").val())
+	// }
+
+	function upcase(obj) {
+		var tr=obj.parentNode.parentNode;
+		var boxNum=jQuery(tr).find("#boxNum").val()
+		var reboxNum=jQuery(tr).find("#reboxNum").val()
+		if (boxNum!=""){
+			if (reboxNum!=""){
+				if(boxNum!=reboxNum){
+					alert("确认盒号与盒号不匹配")
+				}else{
+					var pass=jQuery(tr).find("#projectPass").val();
+					var proId=jQuery(tr).find("#getProId").val();
+					//修改项目状态
+					<%--$.ajax({--%>
+					<%--	type : "POST",--%>
+					<%--	url : "${ctx}/projectFilingBatch/projectFilingBatchInfo/updateProjectPass",--%>
+					<%--	data : {--%>
+					<%--		'status':pass,--%>
+					<%--		'proId':proId,--%>
+					<%--		"boxNum":boxNum,--%>
+					<%--		"reboxNum":reboxNum--%>
+					<%--	},--%>
+					<%--	//请求成功--%>
+					<%--	success : function(result) {--%>
+
+					<%--	},--%>
+
+					<%--});--%>
+				}
+			}else{
+				alert("请输入再次确认盒号")
+			}
+		}else{
+			alert("请输入盒号")
+		}
+
+	}
+
+</script>
+</body>
+</html>

+ 711 - 0
src/main/webapp/webpage/modules/projectFilingBatch/projectFilingBatchForm.jsp

@@ -0,0 +1,711 @@
+<%@ 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>
+    <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;
+        }
+    </style>
+    <script type="text/javascript">
+        var validateForm;
+        var isMasterClient = true;//是否是委托方
+        var clientCount = 0;
+        function doSubmit(i){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+            if(validateForm.form()){
+                $("#inputForm").submit();
+                return true;
+            }else{
+                parent.layer.msg("信息未填写完整!", {icon: 5});
+            }
+            return false;
+        }
+        $(document).ready(function() {
+            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);
+                    }
+                }
+            });
+            var workClientLinkmanInfo = $("#workClientLinkmanInfo").val()
+            if(workClientLinkmanInfo != null && workClientLinkmanInfo !=""){
+
+                //按钮禁用
+                $("#addUserButton").removeClass("disables");
+                $("#addUserButton").removeClass("notDisables");
+                $("#addUserButton").addClass("disables");
+                //a标签置灰
+                $("#aButton").removeClass("forbidden");
+                $("#aButton").removeClass("notForbidden");
+                $("#aButton").addClass("forbidden");
+
+                $("#linkmanDiv").removeClass("disables");
+                $("#linkmanDiv").removeClass("notDisables");
+                $("#linkmanDiv").addClass("disables");
+
+                $("#linkmanButton").removeClass("forbidden");
+                $("#linkmanButton").removeClass("notForbidden");
+                $("#linkmanButton").addClass("forbidden");
+            }
+            <%--$('#scaleType').editableSelect({--%>
+            <%--effects: 'slide'--%>
+            <%--});--%>
+            <%--$('#scaleType').val("${projectRecords.scaleType}")--%>
+            <%--$('#scaleUnit').editableSelect({--%>
+            <%--effects: 'slide'--%>
+            <%--});--%>
+            <%--$('#scaleUnit').val("${projectRecords.scaleUnit}")--%>
+
+            $("input[name='ext']").on('ifChecked',function(event){
+                radioVal = $(this).val();
+                if(radioVal == 0){
+                    //有合同状态
+                    $("#divv2 input").val("");
+                    // $("#workClientLinkmanList tr").remove();
+                    $("#divv").show();
+                    $("#divv3").show();
+                }else{
+                    $("#divv input").val('');
+                    $("#divv2 input").val("");
+                    $("#divv3 input").val("");
+                    // $("#workClientLinkmanList tr").remove();
+                    $("#divv").hide();
+                    $("#divv3").hide();
+                    $("#linkmanId").val("");
+                }
+            });
+
+            //自动选择合同状态
+            if ($("#projectName").val() != null) {
+                if ($("#contractName").val() == "") {
+                    $("#ext1").iCheck("check");
+                }
+            }
+
+
+            $('#areaId').on("change", function () {
+                var areaId = $("#areaId").val();
+                $("#province").val('');
+                $("#city").val('');
+                $("#county").val('');
+                $.ajax({
+                    type : "POST",
+                    url : "${ctx}/sys/area/getParent",
+                    data : {'areaId':areaId},
+                    //请求成功
+                    success : function(result) {
+                        var pro = result.province;
+                        var city = result.city;
+                        var county  = result.county;
+                        if(pro != '') {
+                            $("#province").val(pro);
+                        }
+                        if(city != '') {
+                            $("#city").val(city);
+                        }
+                        if(county != '') {
+                            $("#county").val(county);
+                        }
+                    },
+
+                });
+            })
+
+            $('#masterId').on("change", function () {
+                var masterId = $("#masterId").val();
+                $("#officeName").val('');
+                $.ajax({
+                    type : "POST",
+                    url : "${ctx}/sys/user/getUserById",
+                    data : {'userId':masterId},
+                    //请求成功
+                    success : function(result) {
+                        var officeName = result.body.data.name;
+                        if(officeName != '') {
+                            $("#officeName").val(officeName);
+                        }
+                    },
+
+                });
+            })
+
+            laydate.render({
+                elem: '#startDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus', //响应事件。如果没有传入event,则按照默认的click
+                type : 'date'
+                , trigger: 'click'
+                , trigger: 'click'
+            });
+            laydate.render({
+                elem: '#endingDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus', //响应事件。如果没有传入event,则按照默认的click
+                type : 'date'
+                , trigger: 'click'
+                , trigger: 'click'
+            });
+        });
+
+
+        function setContractValue(obj){
+            var clientId = $("#contractClientId").val();
+            $.ajax({
+                type:'post',
+                url:'${ctx}/ruralProject/ruralProjectRecords/getContractInfo',
+                data:{
+                    "id":obj
+                },
+                success:function(data){
+                    $("#contractName").val(data.name);
+                    $("#contractPrice").val(data.contractPrice);
+                    formatNum($("#contractPrice"));
+                    $("#contractClientName").val(data.client.name);
+                    $("#contractClientId").val(data.client.id);
+                    $("#constructionProjectType").val(data.constructionProjectTypeStr);
+                    $("#linkmanId").val(data.workClinetInfoIds);
+                    //清理之前的联系人
+                    var newClientId  = data.client.id;
+                    if(clientId != newClientId){
+                        $("#workClientLinkmanList tr").remove();
+                        //if(isMasterClient){
+                        clientCount++;
+                        setLinkMan(newClientId);
+                        isMasterClient = false;
+                        // }
+                    }
+                    // console.log("clientId------newClientId");
+                    // console.log(clientId+"------"+newClientId);
+                }
+            });
+        }
+
+        function getFee() {
+            $("#unitFees").val('');
+            var totalFee = $("#totalFees").val();
+            var count = $("#buildingScale").val();
+            if(count != '' && totalFee != '') {
+                var cFee = Math.round(parseInt(totalFee) / parseInt(count) * 100) / 100 * 10000;
+                $("#unitFees").val(cFee);
+            }
+        }
+
+        //计数计算方法
+        function getBudlingFees() {
+            $("#unitFees").val('');
+            $("#buildingPercent").val('');
+            $("#buildingUnitFees").val('');
+            $("#installPercent").val('');
+            $("#installUnitFees").val('');
+            var totalFee = $("#totalFees").val();
+            var budFee = $("#buildingFees").val();
+            var insFee = $("#installFees").val();
+            var count = $("#buildingScale").val();
+            if(totalFee != '') {
+                var p = Math.round(parseInt(budFee) / parseInt(totalFee) * 100 * 100) / 100;
+                var ins = Math.round(parseInt(insFee) / parseInt(totalFee) * 100 * 100) / 100;
+            }
+            if(count != '') {
+                var pp = Math.round(parseInt(budFee) / parseInt(count) * 100) / 100 * 10000;
+                var insFe = Math.round(parseInt(insFee) / parseInt(count) * 100) / 100 * 10000;
+            }
+            if(count != '' && totalFee != '') {
+                var cFee = Math.round(parseInt(totalFee) / parseInt(count) * 100) / 100 * 10000;
+            }
+            if(!isNaN(cFee)){
+                $("#unitFees").val(cFee);
+            }
+            if(!isNaN(p)){
+                $("#buildingPercent").val(p);
+            }
+            if(!isNaN(pp)){
+                $("#buildingUnitFees").val(pp);
+            }
+            if(!isNaN(ins)){
+                $("#installPercent").val(ins);
+            }
+            if(!isNaN(insFe)){
+                $("#installUnitFees").val(insFe);
+            }
+        }
+
+        function getInstallFees() {
+            $("#installPercent").val('');
+            $("#installUnitFees").val('');
+            var totalFee = $("#totalFees").val();
+            var budFee = $("#installFees").val();
+            var count = $("#buildingScale").val();
+            if(totalFee != '') {
+                var p = Math.round(parseInt(budFee) / parseInt(totalFee) * 100 * 100) / 100;
+            }
+            if(count != '') {
+                var pp = Math.round(parseInt(budFee) / parseInt(count) * 100) / 100 * 10000;
+            }
+            $("#installPercent").val(p);
+            $("#installUnitFees").val(pp);
+        }
+
+        function setLinkMan(newClientId) {
+            $.ajax({
+                url:"${ctx}/ruralProject/ruralProjectRecords/getLinkManByClientId",
+                data:{"clientId":newClientId},
+                type:"post",
+                dataType:"json",
+                success:function (d) {
+                    // console.log(d);
+                    addRow('#workClientLinkmanList', workClientLinkmanRowIdx, workClientLinkmanTpl);workClientLinkmanRowIdx = workClientLinkmanRowIdx + 1;
+                    var row = workClientLinkmanRowIdx - 1 ;
+                    $("#workClientLinkmanList"+row+"_id").val(d.id);
+                    $("#workClientLinkmanList"+row+"_clientId_id").val(d.clientId);
+                    $("#workClientLinkmanList"+row+"_clientName").val(d.clientName);
+                    $("#workClientLinkmanList"+row+"_name").val(d.linkName);
+                    $("#workClientLinkmanList"+row+"_linkMobile").val(d.linkMobile);
+                    $("#workClientLinkmanList"+row+"_linkPhone").val(d.linkPhone);
+                    $("#workClientLinkmanList"+row+"_clientName").prop("readonly","readonly");
+                    $("#workClientLinkmanList"+row+"_name").prop("readonly","readonly");
+                    $("#workClientLinkmanList"+row+"_linkMobile").prop("readonly","readonly");
+                    $("#workClientLinkmanList"+row+"_linkPhone").prop("readonly","readonly");
+
+                    //按钮禁用
+                    $("#addUserButton").removeClass("disables");
+                    $("#addUserButton").removeClass("notDisables");
+                    $("#addUserButton").addClass("disables");
+                    //a标签置灰
+                    $("#aButton").removeClass("forbidden");
+                    $("#aButton").removeClass("notForbidden");
+                    $("#aButton").addClass("forbidden");
+
+                    $("#linkmanDiv").removeClass("disables");
+                    $("#linkmanDiv").removeClass("notDisables");
+                    $("#linkmanDiv").addClass("disables");
+
+                    $("#linkmanButton").removeClass("forbidden");
+                    $("#linkmanButton").removeClass("notForbidden");
+                    $("#linkmanButton").addClass("forbidden");
+                }
+            });
+        }
+        function setValuee(obj){
+            var successRows = 0;
+            ss = $("#workClientLinkmanList tr").length;
+            for (var i = 0; i < obj.length; i++) {
+                //没有重复的客户id,就可以插入
+                var canInsert = true;
+                for (var j = 0; j < ss; j++) {
+                    var cid = $("#workClientLinkmanList" + j + "_id").val();
+                    if(cid == obj[i].id){
+                        canInsert = false;
+                        // console.log("重复!!");
+                        break;
+                    }
+                }
+                if(canInsert==true){
+                    var idArr = $("#workClientLinkmanList tr:visible .clientId");
+                    if (obj[i].id != '' && !hasInArr(obj[i].id, idArr)) {
+                        addRow("#workClientLinkmanList", workClientLinkmanRowIdx, workClientLinkmanTpl, obj[i]);
+                        workClientLinkmanRowIdx = workClientLinkmanRowIdx + 1;
+                        successRows++;
+                    }
+                }
+            }
+            clientCount=successRows+clientCount;
+            // console.log("success==="+successRows);
+            // console.log("clientCount==="+clientCount);
+
+            //如果委托方还没有设置,则将第一个客户设置为委托方
+            if(obj[0].name != null){
+                if(isMasterClient){
+                    $("#contractClientName").val(obj[0].clientId.name);
+                    isMasterClient = false;
+                }
+            }
+
+            //按钮禁用
+            $("#addUserButton").removeClass("disables");
+            $("#addUserButton").removeClass("notDisables");
+            $("#addUserButton").addClass("disables");
+            //a标签置灰
+            $("#aButton").removeClass("forbidden");
+            $("#aButton").removeClass("notForbidden");
+            $("#aButton").addClass("forbidden");
+
+            $("#linkmanDiv").removeClass("disables");
+            $("#linkmanDiv").removeClass("notDisables");
+            $("#linkmanDiv").addClass("disables");
+
+            $("#linkmanButton").removeClass("forbidden");
+            $("#linkmanButton").removeClass("notForbidden");
+            $("#linkmanButton").addClass("forbidden");
+        }
+        function hasInArr(id,idArr) {
+            for(var i=0;i<idArr.length;i++){
+                if(id==$(idArr[i]).val()){
+                    return true;
+                }
+            }
+            return false;
+        }
+        function existLinkman(id,length) {
+            for (var i=0;i<length;i++) {
+                var val = $('#workClientLinkmanList'+i+'_id').val();
+                if(id==val){
+                    return true;
+                }
+            }
+            return false;
+        }
+
+        function setClientInfo(obj) {
+            var arr;
+            for(var i=0;i<obj.length;i++){
+                arr=obj[i].id;
+                $.ajax({
+                    url:"${ctx}/projectFilingBatch/projectFilingBatchInfo/getProjectById",
+                    data:{
+                        "projectId":arr
+                    },
+                    type:"post",
+                    success:function (d) {
+                        $("#projectList").append("<tr>" +
+                            "<td><input type=\"hidden\" name=\"proId\" value="+d.id+"/>"+d.projectId+"</td>" +
+                            "<td>"+d.projectName+"</td>"+
+                            "<td>"+d.projectReportNumber+"</td>" +
+                            "<td class=\"text-center op-td\" >" +
+                            "<span class=\"op-btn op-btn-delete\" onclick=\"delEntrustRow(this)\" title=\"删除\"><i class=\"glyphicon glyphicon-remove\"></i>&nbsp;删除</span>" + "</td>"+
+                            "</tr>")
+                    }
+                });
+                // alert(obj[i].id+"-------")
+            }
+
+        }
+        function existConstructionLinkman(obj,length) {
+            for (var i=0;i<length;i++) {
+                var val = $('#workConstructionLinkmanList'+i+'_id').val();
+                var cid = $('#workConstructionLinkmanList'+i+'_cid').val();
+                if(obj.id==val&&obj.client.id==cid){
+                    return true;
+                }
+            }
+            return false;
+        }
+
+        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 = "82";
+                /*console.log(file);*/
+                var timestamp=new Date().getTime();
+
+                var storeAs = "projectRecords";
+                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){
+            // var idx1 = $("#workClientLinkmanList tr").length;
+            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 delEntrustRow(obj, prefix){
+            var id = $(prefix+"_id");
+            var delFlag = $(prefix+"_delFlag");
+            $(obj).parent().parent().remove();
+            if($("#workClientLinkmanList tr").length==0){
+                //按钮禁用
+                $("#addUserButton").addClass("notDisables");
+                //a标签置灰
+                $("#aButton").addClass("notForbidden");
+
+                $("#linkmanDiv").addClass("notDisables");
+                $("#linkmanButton").addClass("notForbidden");
+            }
+        }
+
+        function delRow(obj, prefix){
+            var id = $(prefix+"_id");
+            var delFlag = $(prefix+"_delFlag");
+            $(obj).parent().parent().remove();
+        }
+        function formatNum(obj) {
+            var val = $(obj).val();
+            if(val==null||val==''|| isNaN(val))return;
+            var money = parseFloat((val + "").replace(/[^\d\.-]/g, "")).toFixed(2) + "";
+            var l = money.split(".")[0].split("").reverse(),
+                r = money.split(".")[1];
+            t = "";
+            for(i = 0; i < l.length; i ++ )
+            {
+                t += l[i] + ((i + 1) % 3 == 0 && (i + 1) != l.length ? "," : "");
+            }
+            $(obj).val(t.split("").reverse().join("") + "." + r);
+        }
+        function openBill2(title,url,width,height,target,formId){
+
+            if($("#workClientLinkmanList tr").length>0){
+                top.layer.msg('仅可添加一名委托方联系人!', {icon: 0});
+                return false;
+            }
+            var frameIndex = parent.layer.getFrameIndex(window.name);
+            var urls = url+"&index="+frameIndex;
+            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,
+                skin:"two-btns",
+                maxmin: false, //开启最大化最小化按钮
+                content: urls ,
+                btn: ['确定','关闭'],
+                yes: 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中展示
+                    inputForm.attr("action","${ctx}/ruralProject/ruralProjectRecords/linkManSave");//表单提交成功后,从服务器返回的url在当前tab中展示
+                    var $document = iframeWin.contentWindow.document;
+
+                    formSubmit2($document,formId,index);
+                    //新增人员之后
+                    //按钮禁用
+                    $("#addUserButton").addClass("disables");
+                    //a标签置灰
+                    $("#aButton").addClass("forbidden");
+
+                    $("#linkmanDiv").addClass("disables");
+                    $("#linkmanButton").addClass("forbidden");
+                },
+                cancel: function(index){
+                }
+            });
+
+
+        }
+
+        function formSubmit2($document,inputForm,index){
+            var validateForm = $($document.getElementById(inputForm)).validate({
+                submitHandler: function(form){
+                    loading('正在提交,请稍等...');
+                    form.submit();
+                },
+                errorContainer: "#messageBox",
+                errorPlacement: function(error, element) {
+                    $($document.getElementById("#messageBox")).text("输入有误,请先更正。");
+                    if (element.is(":checkbox")||element.is(":radio")||element.parent().is(".input-append")){
+                        error.appendTo(element.parent().parent());
+                    } else {
+                        error.insertAfter(element);
+                    }
+                }
+            });
+            if(validateForm.form()){
+                $($document.getElementById(inputForm)).ajaxSubmit({
+                    success:function(data) {
+                        var d = data;
+                        if(d.msg == "false"){
+                            parent.layer.msg("保存客户信息异常!",{icon:2});
+                            return false;
+                        }
+
+                        addRow('#workClientLinkmanList', workClientLinkmanRowIdx, workClientLinkmanTpl);workClientLinkmanRowIdx = workClientLinkmanRowIdx + 1;
+                        var row = workClientLinkmanRowIdx - 1 ;
+
+                        $("#"+"workClientLinkmanList"+row+"_id").val(d.id);
+                        $("#"+"workClientLinkmanList"+row+"_clientId_id").val(d.clientId);
+                        $("#"+"workClientLinkmanList"+row+"_clientName").val(d.clientName);
+                        $("#"+"workClientLinkmanList"+row+"_name").val(d.linkName);
+                        $("#"+"workClientLinkmanList"+row+"_linkMobile").val(d.linkMobile);
+                        $("#"+"workClientLinkmanList"+row+"_linkPhone").val(d.linkPhone);
+                        if(isMasterClient){
+                            $("#contractClientName").val(d.clientName);
+                            isMasterClient = false;
+                        }
+                        parent.layer.msg(d.str,{icon:1});
+                        top.layer.close(index)
+                    }
+                });
+            }
+        }
+
+        function getApprovalFee() {
+            //总价
+            var af = $("#estimateTotalFees").val();
+            if(af !=''){
+                $("#estimateTotalFees").val(af)
+            }
+            $("#buildingFees").val("");
+            $("#installFees").val("");
+            $("#buildingPercent").val("");
+            $("#installPercent").val("");
+        }
+
+        function getInstallFee() {
+            var af = $("#estimateTotalFees").val();
+            //安装
+            var inf = $("#installFees").val();
+            if(inf != ''&& af !=''){
+                var hf = parseInt(af)-parseInt(inf);
+                var rate = (Math.round(parseInt(inf) / parseInt(af) * 100) / 100 * 100).toFixed(2);
+                $("#installPercent").val(rate);
+                $("#buildingFees").val(hf);
+                bf = hf;
+                var bRate = (Math.round(parseInt(hf) / parseInt(af) * 100) / 100 * 100).toFixed(2);
+                $("#buildingPercent").val(bRate);
+            }
+            if(inf == ''|| af ==''){
+                $("#installPercent").val("");
+            }
+        }
+
+        function getBuildingFee() {
+            var af = $("#estimateTotalFees").val();
+            //土建
+            var bf = $("#buildingFees").val();
+            if(bf != ''&& af !=''){
+                var hf = parseInt(af)-parseInt(bf);
+                var rate = (Math.round(parseInt(bf) / parseInt(af) * 100) / 100 * 100).toFixed(2);
+                $("#buildingPercent").val(rate);
+                $("#installFees").val(hf);
+                inf = hf;
+                var inRate = (Math.round(parseInt(hf) / parseInt(af) * 100) / 100 * 100).toFixed(2);
+                $("#installPercent").val(inRate);
+            }
+            if(bf == ''|| af ==''){
+                $("#buildingPercent").val("");
+            }
+        }
+    </script>
+</head>
+<body>
+
+<div class="single-form">
+    <div class="container">
+        <sys:message content="${message}"/>
+        <form:form id="inputForm" modelAttribute="projectFilingBatch" action="${ctx}/projectFilingBatch/projectFilingBatchInfo/save" method="post" class="form-horizontal">
+            <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="filingBatch" htmlEscape="false"  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">
+                        <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>
+
+            <div class="form-group layui-row">
+                <div class="form-group-label"><h2>归档项目信息</h2></div>
+                <div class="layui-item nav-btns">
+                    <sys:gridselectClientLink url="${ctx}/projectFilingBatch/projectFilingBatchInfo/finishListShow" id="constructionOrgList"   title="选择项目"
+                                              cssClass="form-control required" fieldLabels="${fns:urlEncode('项目编号')}" fieldKeys="name"  searchLabel="${fns:urlEncode('客户名称')}" searchKey="name"></sys:gridselectClientLink>
+                </div>
+                <div class="layui-item layui-col-xs12 form-table-container">
+                    <table id="contentTable2" class="table table-bordered table-condensed details">
+                        <thead>
+                        <tr>
+                            <th class="hide"></th>
+                            <th style="text-align: center" width="20%">归档项目编号</th>
+                            <th style="text-align: center" width="20%">归档项目名称</th>
+                            <th style="text-align: center" width="20%">报告号</th>
+                            <th width="20%">操作</th>
+                        </tr>
+                        </thead>
+                        <tbody id="projectList">
+                            <c:if test="${projectFilingBatch.project!=null}">
+                                <c:forEach items="${projectFilingBatch.project}" var="pro" >
+                                    <tr>
+                                        <td><input type="hidden" name="proId" value="${pro.id}"/>${pro.projectId}</td>
+                                        <td>${pro.projectName}</td>
+                                        <td>${pro.projectReportNumber}</td>
+                                        <td class="text-center op-td" ><span class="op-btn op-btn-delete" onclick="delEntrustRow(this)" title="删除"><i class="glyphicon glyphicon-remove"></i>&nbsp;删除</span></td>
+                                    </tr>
+                                </c:forEach>
+                            </c:if>
+                        </tbody>
+                    </table>
+                </div>
+            </div>
+        </form:form>
+    </div>
+</div>
+</body>
+</html>

+ 342 - 0
src/main/webapp/webpage/modules/projectFilingBatch/projectFilingBatchList.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"/>
+    <link href="${ctxStatic}/layer-v2.3/layui/tableTree/treetable.css" rel="stylesheet" />
+    <style>
+        .layui-table th{
+            font-size: 14px;
+            text-align: center;
+        }
+        .pid{
+            font-size:14px;
+            font-weight:400;
+        }
+    </style>
+    <script type="text/javascript">
+        $(document).ready(function() {
+
+            //搜索框收放
+            // $('#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中跳转
+                        alert(top_iframe)
+                    }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;
+                //     }
+                // },
+                btn2: function (index) {
+                }
+            });
+        }
+
+        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) {
+                }
+            });
+        }
+    </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="full-width fl">
+            <div class="layui-row contentShadow shadowLR" id="queryDiv">
+                <form:form id="searchForm"  modelAttribute="projectFilingBatch"  action="${ctx}/projectFilingBatch/projectFilingBatchInfo/" 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}"/>
+                    <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="filingBatch" 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">
+                                <form:select path="filingStatus" 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 class="layui-item athird">
+                            <div class="input-group">
+<%--                                <a href="#" id="moresee"><i class="glyphicon glyphicon-menu-down"></i></a>--%>
+                                <button id="searchReset" class="fixed-btn searchReset fr" onclick="resetSearch()">重置</button>
+                                <button id="searchQuery" class="fixed-btn searchQuery fr" onclick="search()">查询</button>
+                            </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">
+                    <shiro:hasPermission name="projectFilingBatch:projectFilingBatchInfo:add">
+                        <table:addRow url="${ctx}/projectFilingBatch/projectFilingBatchInfo/form" title="归档批次"></table:addRow><!-- 增加按钮 -->
+                    </shiro:hasPermission>
+                    <shiro:hasPermission name="project:projectRecords:export">
+                        <table:exportExcel url="${ctx}/project/projectRecords/export"></table:exportExcel><!-- 导出按钮 -->
+                    </shiro:hasPermission>
+                    <button class="nav-btn nav-btn-refresh" data-toggle="tooltip" data-placement="left" onclick="sortOrRefresh()" title="刷新"><i class="glyphicon glyphicon-repeat"></i>&nbsp;刷新</button>
+
+                    <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 id="changewidth"></div>
+</div>
+
+<script src="${ctxStatic}/layer-v2.3/layui/layui.all.js" charset="utf-8"></script>
+<script>
+
+    layui.use('table', function(){
+        layui.table.render({
+            limit:${ page.pageSize }
+            ,elem: '#contentTable1'
+            ,page: false
+            ,cols: [[
+                // {checkbox: true, fixed: true},
+                {field:'index',align:'center', title: '序号',width:40}
+                ,{field:'filingBatch',align:'center', title: '归档批次号',minWidth:200,templet:function(d){
+                        return "<a class=\"attention-info\" title=\"" + d.filingBatch + "\" href=\"javascript:void(0);\" onclick=\"openDialogView('查看批次', '${ctx}/projectFilingBatch/projectFilingBatchInfo/view?id=" + d.id +"','95%', '95%')\">" + d.filingBatch + "</a>";
+                    }}
+                ,{field:'createName',align:'center', title: '创建人',  width:80}
+                ,{field:'createDate',align:'center', title: '创建日期',  width:80}
+                ,{align:'center', title: '状态',  width:70,templet:function(d){
+                        var st = getAuditState(d.filingStatus);
+                        if(st.action)
+                            var xml = "<span onclick=\"openDialogView('流程追踪', '${ctx}/projectFilingBatch/projectFilingBatchInfo/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:130,templet:function(d){
+                        ////对操作进行初始化
+                        var xml="";
+                        if(d.canedit1 != undefined && d.canedit1 =="1")
+                        {
+                            xml+="<a href=\"#\" onclick=\"openDialogre('修改项目', '${ctx}/projectFilingBatch/projectFilingBatchInfo/form?id=" + d.id +"','95%', '95%','','送审,关闭')\" class=\"op-btn op-btn-edit\" ><i class=\"fa fa-edit\"></i> 修改</a>";
+                        }
+                        if(d.canedit2 != undefined && d.canedit2 =="1")
+                        {
+                            xml+="<a href=\"#\" onclick=\"openDialogre('调整项目', '${ctx}/projectFilingBatch/projectFilingBatchInfo/modify?id=" + d.id + "','95%', '95%','','送审,关闭')\" class=\"op-btn op-btn-edit\" ><i class=\"fa fa-edit\"></i> 修改</a>";
+                        }
+                        if(d.canrecall != undefined && d.canrecall =="1")
+                        {
+                            xml+="<a href=\"#\" onclick=\"openDialogre('调整项目', '${ctx}/projectFilingBatch/projectFilingBatchInfo/form?id=" + d.id + "','95%', '95%','','送审,关闭')\" class=\"op-btn op-btn-edit\" ><i class=\"fa fa-edit\"></i> 修改</a>";
+                        }
+                        if(d.candel != undefined && d.candel =="1")
+                        {
+                            xml+="<a href=\"${ctx}/project/projectRecords/delete?id=" + d.id + "\" onclick=\"return confirmx('确认要删除该项目信息吗?', this.href)\" class=\"op-btn op-btn-delete\"><i class=\"fa fa-trash\"></i> 删除</a>";
+                        }
+                        if(d.cancancel != undefined && d.cancancel =="1")
+                        {
+                            xml+="<a href=\"${ctx}/projectFilingBatch/projectFilingBatchInfo/revoke?id=" + d.id + "&processInstanceId=" + d.procId + "&filingStatus="+d.filingStatus+ "\" onclick=\"return confirmx('确认要撤回该项目审批吗?', this.href)\" class=\"op-btn op-btn-cancel\" ><i class=\"glyphicon glyphicon-share-alt\"></i> 撤回</a>";
+                        }
+                        if(d.canedit3 != undefined && d.canedit3 =="1")
+                        {
+                            <%--xml+="<a href=\"javascript:void(0)\" onclick=\"openDialogre('项目变更管理', '${ctx}/projectFilingBatch/projectFilingBatchInfo/form?alterBeforeRecords.id='+encodeURIComponent('" + d.id + "'),'95%','95%','','送审,暂存,关闭')\" style=\"color: white;background: darkseagreen\" class=\"op-btn op-btn-op-btn-revert\" ><i class=\"fa fa-edit\"></i> 变更</a>";--%>
+                        }
+                        if(d.deleteAdmin != undefined && d.deleteAdmin =="1")
+                        {
+                            xml+="<a href=\"#\" onclick=\"openDialogre('修改项目', '${ctx}/projectFilingBatch/projectFilingBatchInfo/form?id=" + d.id + "','95%', '95%','','提交,关闭')\" class=\"op-btn op-btn-edit\" ><i class=\"fa fa-edit\"></i> 修改</a>";
+                            <%--xml+="<a href=\"${ctx}/projectFilingBatch/projectFilingBatchInfo/adminDelete?id=" + d.id + "\" onclick=\"return confirmx('确认要删除该项目信息吗?', this.href)\" class=\"op-btn op-btn-delete\"><i class=\"fa fa-trash\"></i> 删除</a>";--%>
+                        }
+                        return xml;
+
+                    }}
+            ]]
+            ,data: [
+                <c:if test="${ not empty page.list}">
+                <c:forEach items="${page.list}" var="projectFilingBatch" varStatus="index">
+                <c:if test="${index.index != 0}">,</c:if>
+                {
+                    "index":"${index.index+1}"
+                    ,"id":"${projectFilingBatch.id}"
+                    ,"filingBatch":"${projectFilingBatch.filingBatch}"
+                    ,"createName":"${projectFilingBatch.createBy.name}"
+                    ,"createDate":"<fmt:formatDate value="${projectFilingBatch.createDate}" pattern="yyyy-MM-dd"/>"
+                    ,"filingStatus":"${projectFilingBatch.filingStatus}"
+                    ,"procId":"${projectFilingBatch.processinstanceId}"
+                    <c:choose><c:when test="${flag == '1' or fns:getUser().id == projectFilingBatch.createBy.id}">
+                    <shiro:hasPermission name="projectFilingBatch:projectFilingBatchInfo:del">,"candel":	<c:choose><c:when test="${projectFilingBatch.filingStatus == 1 or projectFilingBatch.filingStatus == 3 or projectFilingBatch.filingStatus == 4}">"1"</c:when><c:otherwise>"0"</c:otherwise></c:choose></shiro:hasPermission>
+                    <shiro:hasPermission name="projectFilingBatch:projectFilingBatchInfo:edit">,"canedit1":	<c:choose><c:when test="${projectFilingBatch.filingStatus == 1 }">"1"</c:when><c:otherwise>"0"</c:otherwise></c:choose>
+                    ,"canedit2":<c:choose><c:when test="${projectFilingBatch.filingStatus == 4}">"1"</c:when><c:otherwise>"0"</c:otherwise></c:choose>
+                    ,"canrecall":<c:choose><c:when test="${projectFilingBatch.filingStatus == 3}">"1"</c:when><c:otherwise>"0"</c:otherwise></c:choose>
+                    </shiro:hasPermission>
+                    ,"cancancel":<c:choose><c:when test="${projectFilingBatch.filingStatus == 2 && fns:getUser().id == projectFilingBatch.createBy.id}">"1"</c:when><c:otherwise>"0"</c:otherwise></c:choose>
+                    ,"deleteAdmin":<c:choose><c:when test="${projectFilingBatch.filingStatus == 5}">"1"</c:when><c:otherwise>"0"</c:otherwise></c:choose>
+                    </c:when>
+                    <c:otherwise>
+                    ,"candel":"0"
+                    ,"canedit1":"0"
+                    ,"canedit2":"0"
+                    ,"canrecall":"0"
+                    ,"cancancel":"0"
+                    </c:otherwise>
+                    </c:choose>
+                    <shiro:hasPermission name="projectFilingBatch:projectFilingBatchInfo:edit">,"canedit3":<c:choose><c:when test="${projectFilingBatch.filingStatus == 5 }">"1"</c:when><c:otherwise>"0"</c:otherwise></c:choose></shiro:hasPermission>
+                }
+                </c:forEach>
+                </c:if>
+            ]
+        });
+    })
+
+    resizeListTable();
+    $("a").on("click",addLinkVisied);
+</script>
+<script>
+    resizeListWindow2();
+    $(window).resize(function(){
+        resizeListWindow2();
+    });
+</script>
+<script src="${ctxStatic}/layer-v2.3/layui/layui.all.js" charset="utf-8"></script>
+<script src="${ctxStatic}/layer-v2.3/layui/tableTree/treetable.js" charset="utf-8"></script>
+</body>
+</html>

+ 286 - 0
src/main/webapp/webpage/modules/projectFilingBatch/projectFilingBatchView.jsp

@@ -0,0 +1,286 @@
+<%@ 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>
+    <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;
+        }
+    </style>
+    <script type="text/javascript">
+
+        function hasInArr(id,idArr) {
+            for(var i=0;i<idArr.length;i++){
+                if(id==$(idArr[i]).val()){
+                    return true;
+                }
+            }
+            return false;
+        }
+        function existLinkman(id,length) {
+            for (var i=0;i<length;i++) {
+                var val = $('#workClientLinkmanList'+i+'_id').val();
+                if(id==val){
+                    return true;
+                }
+            }
+            return false;
+        }
+
+        function setClientInfo(obj) {
+            for(var i=0;i<obj.length;i++){
+                var idArr = $("#workConstructionLinkmanList tr:visible .linkmanId");
+                if(obj[i].id!=''&&!hasInArr(obj[i].id,idArr)){
+                    addRow("#workConstructionLinkmanList",workConstructionLinkmanRowIdx,workConstructionLinkmanTpl,obj[i]);
+                    workConstructionLinkmanRowIdx=workConstructionLinkmanRowIdx+1;
+                }
+            }
+        }
+        function existConstructionLinkman(obj,length) {
+            for (var i=0;i<length;i++) {
+                var val = $('#workConstructionLinkmanList'+i+'_id').val();
+                var cid = $('#workConstructionLinkmanList'+i+'_cid').val();
+                if(obj.id==val&&obj.client.id==cid){
+                    return true;
+                }
+            }
+            return false;
+        }
+
+        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 = "82";
+                /*console.log(file);*/
+                var timestamp=new Date().getTime();
+
+                var storeAs = "projectRecords";
+                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){
+            // var idx1 = $("#workClientLinkmanList tr").length;
+            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 delEntrustRow(obj, prefix){
+            var id = $(prefix+"_id");
+            var delFlag = $(prefix+"_delFlag");
+            $(obj).parent().parent().remove();
+            if($("#workClientLinkmanList tr").length==0){
+                //按钮禁用
+                $("#addUserButton").addClass("notDisables");
+                //a标签置灰
+                $("#aButton").addClass("notForbidden");
+
+                $("#linkmanDiv").addClass("notDisables");
+                $("#linkmanButton").addClass("notForbidden");
+            }
+        }
+
+        function delRow(obj, prefix){
+            var id = $(prefix+"_id");
+            var delFlag = $(prefix+"_delFlag");
+            $(obj).parent().parent().remove();
+        }
+        function formatNum(obj) {
+            var val = $(obj).val();
+            if(val==null||val==''|| isNaN(val))return;
+            var money = parseFloat((val + "").replace(/[^\d\.-]/g, "")).toFixed(2) + "";
+            var l = money.split(".")[0].split("").reverse(),
+                r = money.split(".")[1];
+            t = "";
+            for(i = 0; i < l.length; i ++ )
+            {
+                t += l[i] + ((i + 1) % 3 == 0 && (i + 1) != l.length ? "," : "");
+            }
+            $(obj).val(t.split("").reverse().join("") + "." + r);
+        }
+        function openBill2(title,url,width,height,target,formId){
+
+            if($("#workClientLinkmanList tr").length>0){
+                top.layer.msg('仅可添加一名委托方联系人!', {icon: 0});
+                return false;
+            }
+            var frameIndex = parent.layer.getFrameIndex(window.name);
+            var urls = url+"&index="+frameIndex;
+            if(navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)){//如果是移动端,就使用自适应大小弹窗
+                width='auto';
+                height='auto';
+            }else{//如果是PC端,根据用户设置的width和height显示。
+
+            }
+
+
+        }
+
+        function getInstallFee() {
+            var af = $("#estimateTotalFees").val();
+            //安装
+            var inf = $("#installFees").val();
+            if(inf != ''&& af !=''){
+                var hf = parseInt(af)-parseInt(inf);
+                var rate = (Math.round(parseInt(inf) / parseInt(af) * 100) / 100 * 100).toFixed(2);
+                $("#installPercent").val(rate);
+                $("#buildingFees").val(hf);
+                bf = hf;
+                var bRate = (Math.round(parseInt(hf) / parseInt(af) * 100) / 100 * 100).toFixed(2);
+                $("#buildingPercent").val(bRate);
+            }
+            if(inf == ''|| af ==''){
+                $("#installPercent").val("");
+            }
+        }
+
+        function getBuildingFee() {
+            var af = $("#estimateTotalFees").val();
+            //土建
+            var bf = $("#buildingFees").val();
+            if(bf != ''&& af !=''){
+                var hf = parseInt(af)-parseInt(bf);
+                var rate = (Math.round(parseInt(bf) / parseInt(af) * 100) / 100 * 100).toFixed(2);
+                $("#buildingPercent").val(rate);
+                $("#installFees").val(hf);
+                inf = hf;
+                var inRate = (Math.round(parseInt(hf) / parseInt(af) * 100) / 100 * 100).toFixed(2);
+                $("#installPercent").val(inRate);
+            }
+            if(bf == ''|| af ==''){
+                $("#buildingPercent").val("");
+            }
+        }
+    </script>
+</head>
+<body>
+<div class="single-form">
+    <div class="container">
+        <sys:message content="${message}"/>
+        <form:form id="inputForm" modelAttribute="projectFilingBatch" action="${ctx}/ruralProject/ruralProjectRecords/save" method="post" class="form-horizontal">
+            <form:hidden path="id"/>
+<%--            <form:hidden path="workContractInfo.client.id" id="contractClientId" value="${workContractInfo.client.id}"/>--%>
+<%--            <input type="hidden" id="workClientLinkmanInfo" value="${ruralProjectRecords.workClientLinkmanList}">--%>
+            <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="filingBatch" htmlEscape="false"  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">
+                        <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>
+
+            <div class="form-group layui-row">
+                <div class="form-group-label"><h2>归档项目信息</h2></div>
+<%--                <div class="layui-item nav-btns">--%>
+<%--                    <sys:gridselectClientLink url="${ctx}/workclientinfo/workClientInfo/clientInfolist" id="constructionOrgList"   title="选择项目"--%>
+<%--                                              cssClass="form-control required" fieldLabels="${fns:urlEncode('项目编号')}" fieldKeys="name"  searchLabel="${fns:urlEncode('客户名称')}" searchKey="name"></sys:gridselectClientLink>--%>
+<%--                </div>--%>
+                <div class="layui-item layui-col-xs12 form-table-container">
+                    <table id="contentTable2" class="table table-bordered table-condensed details">
+                        <thead>
+                        <tr>
+                            <th class="hide"></th>
+                            <th style="text-align: center" width="20%">归档项目编号</th>
+                            <th style="text-align: center" width="20%">归档项目名称</th>
+                            <th style="text-align: center" width="20%">报告号</th>
+<%--                            <th width="20%">操作</th>--%>
+                        </tr>
+                        </thead>
+                        <tbody id="workConstructionLinkmanList">
+                        <c:choose>
+                            <c:when test="${not empty projectFilingBatch}">
+                                <c:forEach items="${projectFilingBatch.project}" var="project" varStatus="index">
+                                    <tr>
+                                        <td>
+                                                ${project.projectId}
+                                        </td>
+                                        <td>
+                                                ${project.projectName}
+                                        </td>
+                                        <td>
+                                                ${project.projectReportNumber}
+                                        </td>
+                                    </tr>
+                                </c:forEach>
+                            </c:when>
+                            <c:otherwise>
+                                <tr>
+                                    <td colspan="7">
+                                        暂无数据
+                                    </td>
+                                </tr>
+                            </c:otherwise>
+                        </c:choose>
+                        </tbody>
+                    </table>
+
+                </div>
+            </div>
+
+        </form:form>
+    </div>
+</div>
+</body>
+</html>