소스 검색

Merge remote-tracking branch 'origin/master'

Enford 5 년 전
부모
커밋
b03ab8616c
17개의 변경된 파일1475개의 추가작업 그리고 7개의 파일을 삭제
  1. 24 0
      src/main/java/com/jeeplus/modules/projectSpecialistAssess/dao/ProjectSpecialistAssessDao.java
  2. 151 0
      src/main/java/com/jeeplus/modules/projectSpecialistAssess/entity/ProjectSpecialistAssess.java
  3. 131 0
      src/main/java/com/jeeplus/modules/projectSpecialistAssess/service/ProjectSpecialistAssessService.java
  4. 166 0
      src/main/java/com/jeeplus/modules/projectSpecialistAssess/web/ProjectSpecialistAssessController.java
  5. 2 0
      src/main/java/com/jeeplus/modules/projectrecord/dao/ProjectRecordsDao.java
  6. 19 0
      src/main/java/com/jeeplus/modules/projectrecord/service/ProjectRecordsService.java
  7. 3 0
      src/main/java/com/jeeplus/modules/workinvoice/web/WorkInvoiceController.java
  8. 143 0
      src/main/resources/mappings/modules/projectSpecialistAssess/ProjectSpecialistAssessDao.xml
  9. 68 0
      src/main/resources/mappings/modules/projectrecord/ProjectRecordsDao.xml
  10. 14 0
      src/main/webapp/static/common/jeeplus.js
  11. 154 0
      src/main/webapp/webpage/modules/projectSpecialistAssess/projectSpecialistAssessForm.jsp
  12. 292 0
      src/main/webapp/webpage/modules/projectSpecialistAssess/projectSpecialistAssessList.jsp
  13. 156 0
      src/main/webapp/webpage/modules/projectSpecialistAssess/projectSpecialistAssessModify.jsp
  14. 108 0
      src/main/webapp/webpage/modules/projectSpecialistAssess/projectSpecialistAssessView.jsp
  15. 1 1
      src/main/webapp/webpage/modules/projectcontentinfo/projectcontentinfoForm.jsp
  16. 2 2
      src/main/webapp/webpage/modules/projectcontentinfo/reportForm.jsp
  17. 41 4
      src/main/webapp/webpage/modules/projectrecord/projectRecordsForm.jsp

+ 24 - 0
src/main/java/com/jeeplus/modules/projectSpecialistAssess/dao/ProjectSpecialistAssessDao.java

@@ -0,0 +1,24 @@
+package com.jeeplus.modules.projectSpecialistAssess.dao;
+
+import com.jeeplus.common.persistence.CrudDao;
+import com.jeeplus.common.persistence.annotation.MyBatisDao;
+import com.jeeplus.modules.projectSpecialistAssess.entity.ProjectSpecialistAssess;
+
+/**
+ * 专家评估报告dao
+ * @author 徐滕
+ * @version 2020-05-15
+ */
+@MyBatisDao
+public interface ProjectSpecialistAssessDao extends CrudDao<ProjectSpecialistAssess> {
+
+    int queryCount(ProjectSpecialistAssess projectSpecialistAssess);
+
+    /**
+     * 修改报告号信息
+     * @param projectSpecialistAssess
+     * @return
+     */
+    int updateReportId(ProjectSpecialistAssess projectSpecialistAssess);
+
+}

+ 151 - 0
src/main/java/com/jeeplus/modules/projectSpecialistAssess/entity/ProjectSpecialistAssess.java

@@ -0,0 +1,151 @@
+package com.jeeplus.modules.projectSpecialistAssess.entity;
+
+import com.jeeplus.common.persistence.DataEntity;
+import com.jeeplus.modules.projectrecord.entity.ProjectRecords;
+
+import java.util.Date;
+
+/**
+ * 专家评估报告entity
+ * @author 徐滕
+ * @version 2020-05-15
+ */
+public class ProjectSpecialistAssess extends DataEntity<ProjectSpecialistAssess> {
+    private static final long serialVersionUID = 1L;
+    private String companyId;		// 公司id
+    private String officeId;		// 部门id
+    private String officeName;		// 部门id
+    private ProjectRecords project;		// 项目信息
+    private String projectId;		// 项目id
+    private String pNumber;		// 项目编号
+    private String assessContent;//评估内容
+    private Date assessDate;//评估时间
+    private Integer status;     //是否调整报告(0:不调整,1:调整)
+    private String projectMaster;	// 负责人
+    private String projectName;    //项目名称
+    private String reportName;     //报告名称
+    private String reportId;     //报告id
+
+    private Date beginDate;
+    private Date endDate;
+
+    public String getpNumber() {
+        return pNumber;
+    }
+
+    public void setpNumber(String pNumber) {
+        this.pNumber = pNumber;
+    }
+
+    public String getReportId() {
+        return reportId;
+    }
+
+    public void setReportId(String reportId) {
+        this.reportId = reportId;
+    }
+
+    public String getProjectName() {
+        return projectName;
+    }
+
+    public void setProjectName(String projectName) {
+        this.projectName = projectName;
+    }
+
+    public String getReportName() {
+        return reportName;
+    }
+
+    public void setReportName(String reportName) {
+        this.reportName = reportName;
+    }
+
+    public String getProjectMaster() {
+        return projectMaster;
+    }
+
+    public void setProjectMaster(String projectMaster) {
+        this.projectMaster = projectMaster;
+    }
+
+    public String getCompanyId() {
+        return companyId;
+    }
+
+    public void setCompanyId(String companyId) {
+        this.companyId = companyId;
+    }
+
+    public String getOfficeId() {
+        return officeId;
+    }
+
+    public void setOfficeId(String officeId) {
+        this.officeId = officeId;
+    }
+
+    public String getOfficeName() {
+        return officeName;
+    }
+
+    public void setOfficeName(String officeName) {
+        this.officeName = officeName;
+    }
+
+    public ProjectRecords getProject() {
+        return project;
+    }
+
+    public void setProject(ProjectRecords project) {
+        this.project = project;
+    }
+
+    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 String getAssessContent() {
+        return assessContent;
+    }
+
+    public void setAssessContent(String assessContent) {
+        this.assessContent = assessContent;
+    }
+
+    public Date getAssessDate() {
+        return assessDate;
+    }
+
+    public void setAssessDate(Date assessDate) {
+        this.assessDate = assessDate;
+    }
+
+    public Date getBeginDate() {
+        return beginDate;
+    }
+
+    public void setBeginDate(Date beginDate) {
+        this.beginDate = beginDate;
+    }
+
+    public Date getEndDate() {
+        return endDate;
+    }
+
+    public void setEndDate(Date endDate) {
+        this.endDate = endDate;
+    }
+}

+ 131 - 0
src/main/java/com/jeeplus/modules/projectSpecialistAssess/service/ProjectSpecialistAssessService.java

@@ -0,0 +1,131 @@
+package com.jeeplus.modules.projectSpecialistAssess.service;
+
+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.biddingManagement.entity.BiddingManagementInfo;
+import com.jeeplus.modules.projectAssess.entity.ProjectAssessInfo;
+import com.jeeplus.modules.projectSpecialistAssess.dao.ProjectSpecialistAssessDao;
+import com.jeeplus.modules.projectSpecialistAssess.entity.ProjectSpecialistAssess;
+import com.jeeplus.modules.projectcontentinfo.dao.ProjectReportDataDao;
+import com.jeeplus.modules.projectcontentinfo.entity.ProjectReportData;
+import com.jeeplus.modules.projectcontentinfo.service.ProjectReportDataService;
+import com.jeeplus.modules.projectrecord.service.ProjectRecordsService;
+import com.jeeplus.modules.projectreportnum.service.ProjectReportNumService;
+import com.jeeplus.modules.sys.dao.WorkattachmentDao;
+import com.jeeplus.modules.sys.entity.MainDictDetail;
+import com.jeeplus.modules.sys.entity.Office;
+import com.jeeplus.modules.sys.entity.User;
+import com.jeeplus.modules.sys.entity.Workattachment;
+import com.jeeplus.modules.sys.utils.DictUtils;
+import com.jeeplus.modules.sys.utils.UserUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 专家评估报告service
+ * @author 徐滕
+ * @version 2020-05-15
+ */
+@Service
+@Transactional(readOnly = true)
+public class ProjectSpecialistAssessService extends CrudService<ProjectSpecialistAssessDao, ProjectSpecialistAssess> {
+
+    @Autowired
+    private ProjectRecordsService projectRecordsService;
+    @Autowired
+    private ProjectReportDataService projectReportDataService;
+    @Autowired
+    private ProjectReportNumService projectReportNumService;
+    @Autowired
+    private WorkattachmentDao workattachmentDao;
+
+    public ProjectSpecialistAssess get(String id) {
+        return super.get(id);
+    }
+
+    public Page<ProjectSpecialistAssess> findPage(Page<ProjectSpecialistAssess> page, ProjectSpecialistAssess projectSpecialistAssess) {
+        //设置数据权限
+        if(!UserUtils.getUser().isAdmin()) {
+            String dataScopeSql = dataScopeFilterOR(projectSpecialistAssess.getCurrentUser(), "o", "u", "s", MenuStatusEnum.PROJECT_REPORTDATA.getValue());
+            projectSpecialistAssess.getSqlMap().put("dsf", dataScopeSql);
+        }
+        int count = dao.queryCount(projectSpecialistAssess);
+        page.setCount(count);
+        page.setCountFlag(false);
+        projectSpecialistAssess.setPage(page);
+        List<ProjectSpecialistAssess> projectAssessList = findList(projectSpecialistAssess);
+        page.setList(projectAssessList);
+        return page;
+    }
+
+    @Transactional(readOnly = false)
+    public void save(ProjectSpecialistAssess projectSpecialistAssess) {
+        User createBy = projectSpecialistAssess.getCreateBy();
+        if(createBy != null){
+            createBy = UserUtils.get(createBy.getId());
+        }else {
+            createBy = UserUtils.getUser();
+        }
+        projectSpecialistAssess.setCreateBy(createBy);
+        projectSpecialistAssess.setCreateDate(new Date());
+        projectSpecialistAssess.setUpdateBy(createBy);
+        projectSpecialistAssess.setUpdateDate(new Date());
+        if(StringUtils.isBlank(projectSpecialistAssess.getId())){
+            projectSpecialistAssess.setId(IdGen.uuid());
+            dao.insert(projectSpecialistAssess);
+        }else {
+            super.save(projectSpecialistAssess);
+        }
+        if (1 == projectSpecialistAssess.getStatus()){
+            ProjectReportData projectReportData = projectReportDataService.get(projectSpecialistAssess.getReportId());
+            String oldAttachmentId = projectReportData.getId();
+            String newAttachmentId = projectSpecialistAssess.getId();
+            projectReportData.setId(newAttachmentId);
+            projectReportData.setFileStatus("1");
+            projectReportData.setStatus("1");
+            String num = projectReportData.getNumber();
+            if(com.jeeplus.common.utils.StringUtils.isNotBlank(num)){
+                projectReportNumService.updateNum(num);
+            }
+            //保存新的报告信息
+            projectReportDataService.insert(projectReportData);
+            //删除老的报告信息
+            projectReportData.setId(oldAttachmentId);
+            projectReportDataService.delete(projectReportData);
+            //修改报告附件对应报告信息的id信息
+            workattachmentDao.updateAttachmentId(oldAttachmentId,newAttachmentId);
+            projectSpecialistAssess.setReportId(newAttachmentId);
+            dao.updateReportId(projectSpecialistAssess);
+        }
+    }
+
+    @Transactional(readOnly = false)
+    public void update(ProjectSpecialistAssess projectSpecialistAssess) {
+        User createBy = projectSpecialistAssess.getCreateBy();
+        if(createBy != null){
+            createBy = UserUtils.get(createBy.getId());
+        }else {
+            createBy = UserUtils.getUser();
+        }
+        projectSpecialistAssess.setUpdateBy(createBy);
+        projectSpecialistAssess.setUpdateDate(new Date());
+        if(StringUtils.isBlank(projectSpecialistAssess.getId())){
+            projectSpecialistAssess.setId(IdGen.uuid());
+            dao.insert(projectSpecialistAssess);
+        }else {
+            dao.update(projectSpecialistAssess);
+        }
+    }
+
+    @Transactional(readOnly = false)
+    public void delete(ProjectSpecialistAssess projectSpecialistAssess) {
+        dao.delete(projectSpecialistAssess);
+    }
+}

+ 166 - 0
src/main/java/com/jeeplus/modules/projectSpecialistAssess/web/ProjectSpecialistAssessController.java

@@ -0,0 +1,166 @@
+package com.jeeplus.modules.projectSpecialistAssess.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.projectSpecialistAssess.entity.ProjectSpecialistAssess;
+import com.jeeplus.modules.projectSpecialistAssess.service.ProjectSpecialistAssessService;
+import com.jeeplus.modules.projectrecord.entity.ProjectRecords;
+import com.jeeplus.modules.projectrecord.enums.ProjectStatusEnum;
+import com.jeeplus.modules.projectrecord.service.ProjectRecordsService;
+import com.jeeplus.modules.sys.utils.UserUtils;
+import org.apache.shiro.authz.annotation.Logical;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.ModelAttribute;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.servlet.mvc.support.RedirectAttributes;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import java.util.Date;
+
+/**
+ * 专家评估报告Controller
+ * @author 徐滕
+ * @version 2020-05-15
+ */
+@Controller
+@RequestMapping(value = "${adminPath}/projectReport/projectSpecialistAssess")
+public class ProjectSpecialistAssessController extends BaseController {
+
+    @Autowired
+    private ProjectSpecialistAssessService projectSpecialistAssessService;
+    @Autowired
+    protected ProjectRecordsService projectRecordsService;
+
+    @ModelAttribute
+    public ProjectSpecialistAssess get(@RequestParam(required=false) String id) {
+        ProjectSpecialistAssess entity = null;
+        if (StringUtils.isNotBlank(id)){
+            entity = projectSpecialistAssessService.get(id);
+        }
+        if (entity == null){
+            entity = new ProjectSpecialistAssess();
+        }
+        return entity;
+    }
+
+    /**
+     * 报告详情列表页面
+     */
+    @RequiresPermissions("projectReport:projectSpecialistAssess:list")
+    @RequestMapping(value = {"list", ""})
+    public String list(ProjectSpecialistAssess projectSpecialistAssess, HttpServletRequest request, HttpServletResponse response, Model model) {
+        Page<ProjectSpecialistAssess> page = projectSpecialistAssessService.findPage(new Page<ProjectSpecialistAssess>(request, response), projectSpecialistAssess);
+        model.addAttribute("page", page);
+        model.addAttribute("projectName", projectSpecialistAssess.getProjectName());
+        model.addAttribute("beginDate", projectSpecialistAssess.getBeginDate());
+        model.addAttribute("endDate", projectSpecialistAssess.getEndDate());
+        model.addAttribute("status", projectSpecialistAssess.getStatus());
+        return "modules/projectSpecialistAssess/projectSpecialistAssessList";
+    }
+
+    /**
+     * 查看,增加,编辑开票管理表单页面
+     */
+    @RequiresPermissions(value={"projectReport:projectSpecialistAssess:add","projectReport:projectSpecialistAssess:edit"},logical= Logical.OR)
+    @RequestMapping(value = "form")
+    public String form(ProjectSpecialistAssess projectSpecialistAssess, Model model) {
+        if (projectSpecialistAssess != null && StringUtils.isNotBlank(projectSpecialistAssess.getId())) {
+            return "modules/projectSpecialistAssess/projectSpecialistAssessModify";
+        }else {
+            projectSpecialistAssess.setCreateBy(UserUtils.getUser());
+            projectSpecialistAssess.setCreateDate(new Date());
+        }
+        model.addAttribute("projectSpecialistAssess", projectSpecialistAssess);
+        return "modules/projectSpecialistAssess/projectSpecialistAssessForm";
+    }
+
+    /**
+     * 查看
+     * @param model
+     * @return
+     */
+    @RequiresPermissions(value={"projectReport:projectSpecialistAssess:view"})
+    @RequestMapping(value = "view")
+    public String view(ProjectSpecialistAssess projectSpecialistAssess, Model model) {
+        model.addAttribute("projectSpecialistAssess", projectSpecialistAssess);
+        return "modules/projectSpecialistAssess/projectSpecialistAssessView";
+    }
+
+
+    /**
+     * 选择开票项目
+     */
+    @RequestMapping(value = "selectproject")
+    public String selectproject(ProjectRecords project, String url, String fieldLabels, String fieldKeys, String searchLabel, String searchKey, String ids, HttpServletRequest request, HttpServletResponse response, Model model) {
+        project.setCompany(UserUtils.getSelectCompany());
+        project.setProjectStatus(ProjectStatusEnum.SIGNED.getValue());//已签状态
+        project.setLeaderNameStr(UserUtils.getUser().getName());
+        Page<ProjectRecords> page = projectRecordsService.findProjectSpecialistAssess(new Page<ProjectRecords>(request, response), project);
+        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", project);
+        model.addAttribute("page",page);
+        return "modules/sys/gridinvoiceproject";
+    }
+
+
+
+    /**
+     * 保存项目
+     */
+    @RequiresPermissions(value={"projectReport:projectSpecialistAssess:add","projectReport:projectSpecialistAssess:edit"},logical=Logical.OR)
+    @RequestMapping(value = "save")
+    public String tStore(ProjectSpecialistAssess projectSpecialistAssess, Model model, RedirectAttributes redirectAttributes) throws Exception{
+        if (!beanValidator(model, projectSpecialistAssess)){
+            return form(projectSpecialistAssess, model);
+        }
+        try {
+            if (!projectSpecialistAssess.getIsNewRecord()) {//编辑表单保存
+                ProjectSpecialistAssess t = projectSpecialistAssessService.get(projectSpecialistAssess.getId());//从数据库取出记录的值
+                MyBeanUtils.copyBeanNotNull2Bean(projectSpecialistAssess, t);//将编辑表单中的非NULL值覆盖数据库记录中的值
+                projectSpecialistAssessService.update(t);//修改
+            } else {//新增表单保存
+                projectSpecialistAssessService.save(projectSpecialistAssess);//保存
+            }
+            addMessage(redirectAttributes, "保存专家评估信息成功");
+        }catch (Exception e){
+            logger.error("保存专家评估信息异常:",e);
+            addMessage(redirectAttributes, "保存专家评估信息异常:"+e.getMessage());
+        }
+        return "redirect:"+ Global.getAdminPath()+"/projectReport/projectSpecialistAssess/?repage";
+    }
+
+    /**
+     * 删除项目
+     */
+    @RequiresPermissions("projectReport:projectSpecialistAssess:del")
+    @RequestMapping(value = "delete")
+    public String delete(ProjectSpecialistAssess projectSpecialistAssess, RedirectAttributes redirectAttributes) {
+        projectSpecialistAssessService.delete(projectSpecialistAssess);
+        addMessage(redirectAttributes, "删除专家评估成功");
+        return "redirect:"+Global.getAdminPath()+"/projectReport/projectSpecialistAssess/?repage";
+    }
+}

+ 2 - 0
src/main/java/com/jeeplus/modules/projectrecord/dao/ProjectRecordsDao.java

@@ -30,7 +30,9 @@ public interface ProjectRecordsDao extends CrudDao<ProjectRecords> {
 
     ProjectRecords findUseableByProjectId(String projectId);
     List<ProjectRecords> findPageByRe(ProjectRecords records);
+    List<ProjectRecords> findProjectSpecialistAssessList(ProjectRecords records);
     int queryCount(ProjectRecords records);
+    int queryCountProjectSpecialistAssess(ProjectRecords records);
     int queryCountByBiddingManagement(ProjectRecords records);
     List<ProjectRecords> findListByBiddingManagement(ProjectRecords records);
     int queryCountByStatus(ProjectRecords records);

+ 19 - 0
src/main/java/com/jeeplus/modules/projectrecord/service/ProjectRecordsService.java

@@ -201,6 +201,25 @@ public class ProjectRecordsService extends CrudService<ProjectRecordsDao, Projec
 		return page;
 	}
 
+	public Page<ProjectRecords> findProjectSpecialistAssess(Page<ProjectRecords> page, ProjectRecords projectRecords) {
+		int count = dao.queryCountProjectSpecialistAssess(projectRecords);
+		page.setCount(count);
+		page.setCountFlag(false);
+		projectRecords.setPage(page);
+		List<ProjectRecords> recordsList = dao.findProjectSpecialistAssessList(projectRecords);
+		//查询负责人信息
+		for (ProjectRecords 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", ","));
+			records.setCompany(dao.selectCompany(records.getCompany().getId()));
+		}
+		page.setList(recordsList);
+		return page;
+	}
+
 	public Page<ProjectRecords> findPageByBiddingManagement(Page<ProjectRecords> page, ProjectRecords projectRecords) {
 		//设置数据权限
 		if(!UserUtils.getUser().isAdmin()) {

+ 3 - 0
src/main/java/com/jeeplus/modules/workinvoice/web/WorkInvoiceController.java

@@ -620,7 +620,10 @@ public class WorkInvoiceController extends BaseController {
 		ProjectRecords projectRecords = projectRecordsService.getInfo(obj);
 		Office company = projectRecordsService.getCompanyById(projectRecords.getCompany().getId());
 		map.put("companyName",company.getName());
+		map.put("reportName",projectRecords.getReportData().getName());
+		map.put("reportId",projectRecords.getReportData().getId());
 		map.put("pNumber",projectRecords.getProjectId());//项目编号
+		map.put("projectId",projectRecords.getId());//项目id
 		map.put("cName",projectRecords.getWorkContractInfo().getClient().getName());//委托方
 		map.put("cInfoName",projectRecords.getWorkContractInfo().getName());//合同名称
 		map.put("cMoney",projectRecords.getWorkContractInfo().getContractPrice());//合同名称

+ 143 - 0
src/main/resources/mappings/modules/projectSpecialistAssess/ProjectSpecialistAssessDao.xml

@@ -0,0 +1,143 @@
+<?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.projectSpecialistAssess.dao.ProjectSpecialistAssessDao">
+    
+	<sql id="projectSpecialistAssessColumns">
+		a.id AS "id",
+		a.create_by AS "createBy.id",
+		a.create_date AS "createDate",
+		a.update_by AS "updateBy.id",
+		a.update_date AS "updateDate",
+		a.remarks AS "remarks",
+		a.del_flag AS "delFlag",
+		a.project_id AS projectId,
+		a.assess_content AS assessContent,
+		a.assess_date AS assessDate,
+		a.status AS status,
+		a.p_number as pNumber,
+		a.report_id as reportId
+	</sql>
+	
+    
+	<select id="get" resultType="com.jeeplus.modules.projectSpecialistAssess.entity.ProjectSpecialistAssess" >
+        SELECT
+            pr.project_name as projectName,prd.name as reportName,
+            <include refid="projectSpecialistAssessColumns"/>
+        FROM project_specialist_assess a
+        left join project_records pr on pr.id = a.project_id
+        left join project_report_data prd on prd.project_id = a.project_id
+		WHERE a.id = #{id}
+	</select>
+
+	<select id="findList" resultType="com.jeeplus.modules.projectSpecialistAssess.entity.ProjectSpecialistAssess" >
+		SELECT
+			pr.project_name as projectName,prd.name as reportName,
+			<include refid="projectSpecialistAssessColumns"/>
+		FROM project_specialist_assess a
+		left join project_records pr on pr.id = a.project_id
+		left join project_report_data prd on prd.project_id = a.project_id
+		<where>
+			a.del_flag = #{DEL_FLAG_NORMAL}
+			<if test="projectName != null and projectName != ''">
+				AND pr.project_name like concat('%',#{projectName},'%')
+			</if>
+			<if test="beginDate != null and beginDate != ''">
+				AND a.create_date &gt;= #{beginDate}
+			</if>
+			<if test="endDate != null and endDate != ''">
+				AND a.create_date &lt;= #{endDate}
+			</if>
+            <if test="status != null">
+                AND a.status = #{status}
+            </if>
+		</where>
+		<choose>
+			<when test="page !=null and page.orderBy != null and page.orderBy != ''">
+				ORDER BY ${page.orderBy}
+			</when>
+			<otherwise>
+				ORDER BY a.update_date DESC
+			</otherwise>
+		</choose>
+	</select>
+
+    <select id="queryCount" resultType="int">
+        SELECT count(DISTINCT a.id)
+        FROM project_specialist_assess a
+        left join project_records pr on pr.id = a.project_id
+        left join project_report_data prd on prd.project_id = a.project_id
+        <where>
+            a.del_flag = #{DEL_FLAG_NORMAL}
+            <if test="projectName != null and projectName != ''">
+                AND pr.project_name like concat('%',#{projectName},'%')
+            </if>
+            <if test="beginDate != null and beginDate != ''">
+                AND a.create_date &gt;= #{beginDate}
+            </if>
+            <if test="endDate != null and endDate != ''">
+                AND a.create_date &lt;= #{endDate}
+            </if>
+            <if test="status != null">
+                AND a.status = #{status}
+            </if>
+        </where>
+    </select>
+
+    <insert id="insert">
+        INSERT INTO project_specialist_assess(
+			id,
+			create_by,
+			create_date,
+			update_by,
+			update_date,
+			del_flag,
+            remarks,
+            project_id,
+            assess_content,
+            status,
+            assess_date,
+            p_number,
+            report_id
+		) VALUES (
+			#{id},
+			#{createBy.id},
+			#{createDate},
+			#{updateBy.id},
+			#{updateDate},
+			#{delFlag},
+            #{remarks},
+            #{projectId},
+            #{assessContent},
+            #{status},
+            #{assessDate},
+            #{pNumber},
+            #{reportId}
+		)
+    </insert>
+
+	<update id="update">
+		update project_specialist_assess
+		set
+		update_by = #{createBy.id},
+		update_date = #{createDate},
+		remarks = #{remarks},
+		assess_content = #{assessContent},
+		assess_date = #{assessDate}
+		where id = #{id}
+	</update>
+
+	<update id="updateReportId">
+		update project_specialist_assess
+		set
+		report_id = #{reportId}
+		where id = #{id}
+	</update>
+
+	<delete id="delete">
+		update project_specialist_assess
+		set del_flag = 1
+		where id = #{id}
+	</delete>
+
+
+</mapper>

+ 68 - 0
src/main/resources/mappings/modules/projectrecord/ProjectRecordsDao.xml

@@ -54,10 +54,13 @@
 			<include refid="projectRecordsColumns"/>
         ,su.name AS "createBy.name"
         ,o.top_company AS "office.name"
+        ,prd.name AS "reportData.name"
+        ,prd.id AS "reportData.id"
         FROM project_records a
         <include refid="projectRecordsJoins"/>
         LEFT JOIN sys_user su ON su.id = a.create_by
         LEFT JOIN sys_office o ON o.id = a.office_id
+        LEFT JOIN project_report_data prd ON prd.project_id = a.id
 		WHERE a.id = #{id}
 	</select>
 	
@@ -270,6 +273,71 @@
         </where>
     </select>
 
+
+
+    <select id="findProjectSpecialistAssessList" resultType="ProjectRecords" >
+        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"
+        FROM project_records a
+        <include refid="projectRecordsJoins"/>
+
+        <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
+        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
+        left join project_report_data prd on prd.project_id = a.id
+        <where>
+            a.status = 5 and prd.status = 5 and a.id not in (
+            select psa.project_id from project_specialist_assess psa where psa.del_flag = 0
+            )
+        </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="queryCountProjectSpecialistAssess" resultType="int" >
+        SELECT count(DISTINCT pr.id)
+        FROM project_records pr
+        left join project_report_data prd on prd.project_id = pr.id
+        <where>
+            pr.status = 5 and prd.status = 5 and pr.id not in (
+              select psa.project_id from project_specialist_assess psa where psa.del_flag = 0
+            )
+        </where>
+    </select>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 	<select id="findListByStatus" resultType="ProjectRecords" >
 		SELECT
 		<include refid="projectRecordsColumns"/>

+ 14 - 0
src/main/webapp/static/common/jeeplus.js

@@ -437,6 +437,20 @@ function getAuditState(id)
     }
     return result;
 }
+
+function getAssessStatusView(id)
+{
+    var result ={};
+    result.action = true;
+    switch(id)
+    {
+        case "0":result.label = "signed";result.status="无需调整";break;
+        case "1":result.label = "cancel";result.status="调整";break;
+        default:
+            result.label = "unknown";result.status="未知";break;
+    }
+    return result;
+}
 function getAuditRecordState(id)
 {
     var result ={};

+ 154 - 0
src/main/webapp/webpage/modules/projectSpecialistAssess/projectSpecialistAssessForm.jsp

@@ -0,0 +1,154 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>专家评估</title>
+	<meta name="decorator" content="default"/>
+    <style>
+        label.error{
+            left:0px;
+            top:40px;
+        }
+    </style>
+	<script type="text/javascript">
+		var validateForm;
+		function doSubmit(i){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+            if(validateForm.form()){
+                $("#inputForm").submit();
+                return true;
+            }
+	
+		  return false;
+		}
+        $(document).ready(function() {
+            $("input[name='ext']").on('ifChecked', function(event){
+                var radioVal = $(this).val();
+                if(radioVal == 0){
+                    $(".td1").removeClass("hide");
+                }else{
+                    $(".td1").addClass("hide");
+                }
+            });
+            if("${workReimbursement.ext}" == "1"){
+                $("#ext1").iCheck('check')
+            }else{
+                $("#ext").iCheck('check')
+            }
+            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);
+                    }
+                }
+            });
+            $("#attachment_btn").click(function () {
+                $("#attachment_file").click();
+            });
+            laydate.render({
+                elem: '#assessDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus', //响应事件。如果没有传入event,则按照默认的click
+                type : 'date'
+            });
+        });
+
+
+        function insertTitle(tValue){
+            var list = "${workAdministrativeAtamp.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 = "102";
+            console.log(file);
+            var timestamp=new Date().getTime();
+
+            var storeAs = "attachment-file/workIncomingMessage/"+timestamp+"/"+file['name'];
+            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 setPNumber(obj){
+            $.ajax({
+                type:'post',
+                url:'${ctx}/workinvoice/workInvoice/getPNumber',
+                data:{
+                    "obj":obj
+                },
+                success:function(data){
+                    var d = JSON.parse(data);
+                    $("#pNumber").val(d.pNumber);
+                    $("#projectId").val(d.projectId);
+                    $("#cInfoName").val(d.cInfoName);
+                    $("#cName").val(d.cName);
+                    $("#reportName").val(d.reportName);
+                    $("#reportId").val(d.reportId);
+                }
+            })
+        }
+	</script>
+</head>
+<body>
+    <div class="single-form">
+        <div class="container">
+            <form:form id="inputForm" modelAttribute="projectSpecialistAssess" action="${ctx}/projectReport/projectSpecialistAssess/save" method="post" class="form-horizontal">
+                <input type="hidden" id="reportId" name="reportId" value="">
+                <input type="hidden" id="projectId" name="projectId" value="">
+            <form:hidden path="id"/>
+                <div class="form-group layui-row first">
+                    <div class="form-group-label"><h2>基本信息</h2></div>
+                    <div class="layui-item layui-col-sm6">
+                        <label class="layui-form-label"><span class="require-item">*</span>项目名称:</label>
+                        <div class="layui-input-block  with-icon">
+                            <input type="hidden" value="" id ="ids">
+                            <sys:gridselectcallprojectt url="${ctx}/projectReport/projectSpecialistAssess/selectproject" id="project" name="project.id"  value="${projectSpecialistAssess.projectId}"  title="选择所属项目" labelName="projectApproval.project.projectName"
+                                                        labelValue="${projectSpecialistAssess.projectName}" cssClass="form-control required layui-input" fieldLabels="项目" fieldKeys="projectName" searchLabel="项目名称" searchKey="projectName" ></sys:gridselectcallprojectt>
+                        </div>
+                    </div>
+                    <div class="layui-item layui-col-sm6">
+                        <label class="layui-form-label"><span class="require-item">*</span>项目编号:</label>
+                        <div class="layui-input-block">
+                            <form:input id ="pNumber" path="pNumber" htmlEscape="false"  readonly="true" class="form-control layui-input"/>
+                        </div>
+                    </div>
+                    <div class="layui-item layui-col-sm6">
+                        <label class="layui-form-label double-line"><span class="require-item">*</span>项目报告名称:</label>
+                        <div class="layui-input-block">
+                            <form:input id ="reportName" path="reportName" htmlEscape="false"  readonly="true" class="form-control layui-input"/>
+                        </div>
+                    </div>
+                    <div class="layui-item layui-col-sm6">
+                        <label class="layui-form-label double-line"><span class="require-item">*</span>是否调整报告:</label>
+                        <div class="layui-input-block">
+                            <select id="status" name="status" class="form-control simple-select required" lay-verify="">
+                                <option value="">--是否调整报告--</option>
+                                <option value="0" <c:if test="${projectSpecialistAssess.status eq '0' }">selected</c:if>>无需调整</option>
+                                <option value="1" <c:if test="${projectSpecialistAssess.status eq '1' }">selected</c:if>>调整</option>
+                            </select>
+                        </div>
+                    </div>
+                    <div class="layui-item layui-col-sm6">
+                        <label class="layui-form-label double-line"><span class="require-item">*</span>评估日期:</label>
+                        <div class="layui-input-block">
+                            <input class="laydate-icondate layui-input form-control layer-date laydate-icon required" id="assessDate" name="assessDate" value="<fmt:formatDate value="${projectSpecialistAssess.assessDate}" pattern="yyyy-MM-dd"/>">
+                        </div>
+                    </div>
+                    <div class="layui-item layui-col-sm12 with-textarea">
+                        <label class="layui-form-label">评估内容:</label>
+                        <div class="layui-input-block">
+                            <form:textarea path="assessContent" htmlEscape="false" rows="3" maxlength="255" class="form-control"/>
+                        </div>
+                    </div>
+                </div>
+	        </form:form>
+        </div>
+    </div>
+</body>
+</html>

+ 292 - 0
src/main/webapp/webpage/modules/projectSpecialistAssess/projectSpecialistAssessList.jsp

@@ -0,0 +1,292 @@
+<%@ 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">
+        $(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'
+            });
+            laydate.render({
+                elem: '#endDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus', //响应事件。如果没有传入event,则按照默认的click
+                type : 'date'
+            });
+        });
+
+        function switchInput(obj){
+            $("#"+obj).show();
+            $("#"+obj).siblings().hide();
+        }
+        function openDialogre(title,url,width,height,target){
+
+            if(navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)){//如果是移动端,就使用自适应大小弹窗
+                width='auto';
+                height='auto';
+            }else{//如果是PC端,根据用户设置的width和height显示。
+
+            }
+            top.layer.open({
+                type: 2,
+                area: [width, height],
+                title: title,
+                maxmin: false, //开启最大化最小化按钮
+                skin: 'three-btns',
+                content: url ,
+                btn: ['送审','暂存','关闭'],
+                btn1: function(index, layero){
+                    var body = top.layer.getChildFrame('body', index);
+                    var iframeWin = layero.find('iframe')[0]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
+                    var inputForm = body.find('#inputForm');
+                    var top_iframe;
+                    if(target){
+                        top_iframe = target;//如果指定了iframe,则在改frame中跳转
+                    }else{
+                        top_iframe = top.getActiveTab().attr("name");//获取当前active的tab的iframe
+                    }
+                    inputForm.attr("target",top_iframe);//表单提交成功后,从服务器返回的url在当前tab中展示
+                    if(iframeWin.contentWindow.doSubmit(1) ){
+                        top.layer.close(index);//关闭对话框。
+                        setTimeout(function(){top.layer.close(index)}, 100);//延时0.1秒,对应360 7.1版本bug
+                    }
+                },
+                btn2:function(index,layero){
+                    var body = top.layer.getChildFrame('body', index);
+                    var iframeWin = layero.find('iframe')[0]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
+                    var inputForm = body.find('#inputForm');
+                    var top_iframe;
+                    if(target){
+                        top_iframe = target;//如果指定了iframe,则在改frame中跳转
+                    }else{
+                        top_iframe = top.getActiveTab().attr("name");//获取当前active的tab的iframe
+                    }
+                    inputForm.attr("target",top_iframe);//表单提交成功后,从服务器返回的url在当前tab中展示
+                    if(iframeWin.contentWindow.doSubmit(2) ){
+                        top.layer.close(index);//关闭对话框。
+//                        setTimeout(function(){top.layer.close(index)}, 100);//延时0.1秒,对应360 7.1版本bug
+                    }
+                    return false;
+                },
+                btn3: function(index){
+                }
+            });
+        }
+        function openDialogreplay(title,url,width,height,target){
+
+            if(navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)){//如果是移动端,就使用自适应大小弹窗
+                width='auto';
+                height='auto';
+            }else{//如果是PC端,根据用户设置的width和height显示。
+
+            }
+            top.layer.open({
+                type: 2,
+                area: [width, height],
+                title: title,
+                maxmin: false, //开启最大化最小化按钮
+                skin: 'two-btns',
+                content: url ,
+                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中展示
+
+                    if(iframeWin.contentWindow.doSubmit() ){
+                        top.layer.close(index);//关闭对话框。
+                        //setTimeout(function(){top.layer.close(index)}, 100);//延时0.1秒,对应360 7.1版本bug
+                    }
+
+                },
+                cancel: 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="layui-row">
+		<div class="full-width fl">
+			<div class="layui-row contentShadow shadowLR" id="queryDiv">
+				<form:form id="searchForm" modelAttribute="projectSpecialistAssess" action="${ctx}/projectReport/projectSpecialistAssess/" 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">
+								<input htmlEscape="false" id="projectName" name="projectName"  class="form-control layui-input" value="${projectName}"/>
+							</div>
+						</div>
+
+						<div class="layui-item query athird ">
+							<label class="layui-form-label">创建时间:</label>
+							<div class="layui-input-block">
+								<input id="beginDate" name="beginDate" placeholder="开始时间" type="text" readonly="readonly" maxlength="20" class="laydate-icondate form-control layer-date layui-input laydate-icon query-group"
+									   value="<fmt:formatDate value="${beginDate}" pattern="yyyy-MM-dd"/>"/>
+								</input>
+								<span class="group-sep">-</span>
+								<input id="endDate" name="endDate" placeholder="结束时间" type="text" readonly="readonly" maxlength="20" class="laydate-icondate form-control layer-date layui-input laydate-icon query-group"
+									   value="<fmt:formatDate value="${endDate}" pattern="yyyy-MM-dd"/>"/>
+								</input>
+							</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>
+					<div id="moresees" style="clear:both;display:none;" class="lw6">
+						<div class="layui-item query athird ">
+							<label class="layui-form-label double-line"><span class="require-item">*</span>调整状态:</label>
+							<div class="layui-input-block">
+								<select id="status" name="status" class="form-control simple-select required" lay-verify="">
+									<option value="">--是否调整报告--</option>
+									<option value="0" <c:if test="${status eq '0' }">selected</c:if>>无需调整</option>
+									<option value="1" <c:if test="${status eq '1' }">selected</c:if>>调整</option>
+								</select>
+							</div>
+						</div>
+						<div style="clear:both;"></div>
+					</div>
+				</form:form>
+			</div>
+		</div>
+		<div class="full-width fl">
+			<div class="contentShadow layui-form contentDetails">
+				<div class="nav-btns">
+					<shiro:hasPermission name="workcontractinfo:workContractInfo:add">
+						<table:addRow url="${ctx}/projectReport/projectSpecialistAssess/form" title="专家评估"></table:addRow><!-- 增加按钮 -->
+					</shiro:hasPermission>
+					<%--<shiro:hasPermission name="projectReport:projectSpecialistAssess:add">
+						<table:addRow url="${ctx}/projectReport/projectSpecialistAssess/form" title="专家评估"></table:addRow><!-- 增加按钮 -->
+					</shiro:hasPermission>--%>
+					<%--<shiro:hasPermission name="project:projectRecords:export">
+						<table:exportExcel url="${ctx}/projectReport/projectSpecialistAssess/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: [[
+                {field:'index',align:'center', title: '序号',width:40}
+                ,{field:'projName',align:'center', title: '项目名称',minWidth:150,templet:function(d){
+                        return "<a class=\"attention-info\" title=\"" + d.projName + "\" href=\"javascript:void(0);\" onclick=\"openDialogView('查看项目', '${ctx}/projectReport/projectSpecialistAssess/view?id=" + d.id +"','95%', '95%')\">" + d.projName + "</a>";
+                    }}
+                ,{field:'reportName',align:'center', title: '报告名称',minWidth:150,templet:function(d){
+                        return "<a class=\"attention-info\" title=\"" + d.reportName + "\" href=\"javascript:void(0);\" onclick=\"openDialogView('查看项目评估信息', '${ctx}/projectcontentinfo/projectcontentinfo/form?project.id=" + d.projectId +"&view=report&infoId="+d.reportId+"','95%', '95%')\">" + d.reportName + "</a>";
+                    }}
+                ,{field:'assessContent',align:'center', title: '评估内容',  width:300,templet:function(d){
+                        return "<span title=\"" + d.assessContent + "\">" + d.assessContent + "</span>";
+                    }}
+                ,{field:'assessDate',align:'center', title: '评估时间',  width:100}
+                ,{field:'createDate',align:'center', title: '创建日期',  width:100}
+                ,{align:'center', title: '是否调整报告号',  width:170,templet:function(d){
+                        var st = getAssessStatusView(d.status);
+                        if(st.action)
+                            var xml = "<span style=\"cursor:default;\" 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="";
+                        xml +="<a href=\"javascript:void(0)\" onclick=\"openDialog('修改专家评估信息', '${ctx}/projectReport/projectSpecialistAssess/form?id=" + d.id + "','95%', '95%','','确定,关闭')\" class=\"op-btn op-btn-edit\" ><i class=\"fa fa-edit\"></i> 修改</a>";
+                        xml+="<a href=\"${ctx}/projectReport/projectSpecialistAssess/delete?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="projectSpecialistAssess" varStatus="index">
+                <c:if test="${index.index != 0}">,</c:if>
+                {
+                    "index":"${index.index+1}"
+                    ,"id":"${projectSpecialistAssess.id}"
+                    ,"projName":"<c:out value="${projectSpecialistAssess.projectName}" escapeXml="true"/>"
+                    ,"reportName":"<c:out value="${projectSpecialistAssess.reportName}" escapeXml="true"/>"
+                    ,"assessContent":"<c:out value="${projectSpecialistAssess.assessContent}" escapeXml="true"/>"
+                    ,"assessDate":"<fmt:formatDate value="${projectSpecialistAssess.assessDate}" pattern="yyyy-MM-dd"/>"
+                    ,"createDate":"<fmt:formatDate value="${projectSpecialistAssess.createDate}" pattern="yyyy-MM-dd"/>"
+                    ,"status":"${projectSpecialistAssess.status}"
+                    ,"projectId":"${projectSpecialistAssess.projectId}"
+                    ,"reportId":"${projectSpecialistAssess.reportId}"
+                }
+                </c:forEach>
+                </c:if>
+            ]
+            // ,even: true
+            // ,height: 315
+        });
+    })
+
+    resizeListTable();
+    $("a").on("click",addLinkVisied);
+</script>
+<script>
+    resizeListWindow2();
+    $(window).resize(function(){
+        resizeListWindow2();
+    });
+</script>
+</body>
+</html>

+ 156 - 0
src/main/webapp/webpage/modules/projectSpecialistAssess/projectSpecialistAssessModify.jsp

@@ -0,0 +1,156 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>专家评估</title>
+	<meta name="decorator" content="default"/>
+    <style>
+        label.error{
+            left:0px;
+            top:40px;
+        }
+    </style>
+	<script type="text/javascript">
+		var validateForm;
+		function doSubmit(i){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+            if(validateForm.form()){
+                $("#inputForm").submit();
+                return true;
+            }
+	
+		  return false;
+		}
+        $(document).ready(function() {
+            $("input[name='ext']").on('ifChecked', function(event){
+                var radioVal = $(this).val();
+                if(radioVal == 0){
+                    $(".td1").removeClass("hide");
+                }else{
+                    $(".td1").addClass("hide");
+                }
+            });
+            if("${workReimbursement.ext}" == "1"){
+                $("#ext1").iCheck('check')
+            }else{
+                $("#ext").iCheck('check')
+            }
+            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);
+                    }
+                }
+            });
+            $("#attachment_btn").click(function () {
+                $("#attachment_file").click();
+            });
+            laydate.render({
+                elem: '#assessDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus', //响应事件。如果没有传入event,则按照默认的click
+                type : 'date'
+            });
+        });
+
+
+        function insertTitle(tValue){
+            var list = "${workAdministrativeAtamp.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 = "102";
+            console.log(file);
+            var timestamp=new Date().getTime();
+
+            var storeAs = "attachment-file/workIncomingMessage/"+timestamp+"/"+file['name'];
+            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 setPNumber(obj){
+            $.ajax({
+                type:'post',
+                url:'${ctx}/workinvoice/workInvoice/getPNumber',
+                data:{
+                    "obj":obj
+                },
+                success:function(data){
+                    var d = JSON.parse(data);
+                    $("#pNumber").val(d.pNumber);
+                    $("#projectId").val(d.projectId);
+                    $("#cInfoName").val(d.cInfoName);
+                    $("#cName").val(d.cName);
+                    $("#reportName").val(d.reportName);
+                    $("#reportId").val(d.reportId);
+                }
+            })
+        }
+	</script>
+</head>
+<body>
+    <div class="single-form">
+        <div class="container">
+            <form:form id="inputForm" modelAttribute="projectSpecialistAssess" action="${ctx}/projectReport/projectSpecialistAssess/save" method="post" class="form-horizontal">
+                <input type="hidden" id="reportId" name="reportId" value="">
+                <input type="hidden" id="projectId" name="projectId" value="">
+                <input type="hidden" id="status" name="status" value="">
+            <form:hidden path="id"/>
+                <div class="form-group layui-row first">
+                    <div class="form-group-label"><h2>基本信息</h2></div>
+                    <div class="layui-item layui-col-sm6 td1">
+                        <label class="layui-form-label"><span class="require-item">*</span>项目名称:</label>
+                        <div class="layui-input-block">
+                            <form:input id ="projectName" path="projectName" htmlEscape="false"  readonly="true" class="form-control layui-input"/>
+                        </div>
+                    </div>
+                    <div class="layui-item layui-col-sm6 td1">
+                        <label class="layui-form-label"><span class="require-item">*</span>项目编号:</label>
+                        <div class="layui-input-block">
+                            <form:input id ="pNumber" path="pNumber" htmlEscape="false"  readonly="true" class="form-control layui-input"/>
+                        </div>
+                    </div>
+                    <div class="layui-item layui-col-sm6 td1">
+                        <label class="layui-form-label double-line"><span class="require-item">*</span>项目报告名称:</label>
+                        <div class="layui-input-block">
+                            <form:input id ="reportName" path="reportName" htmlEscape="false"  readonly="true" class="form-control layui-input"/>
+                        </div>
+                    </div>
+                    <div class="layui-item layui-col-sm6 td1">
+                        <label class="layui-form-label double-line"><span class="require-item">*</span>是否调整报告:</label>
+                        <div class="layui-input-block">
+                            <c:choose>
+                                <c:when test="${projectSpecialistAssess.status == 0}">
+                                    <input type="text" htmlEscape="false"  readonly="true" class="form-control layui-input" value="无需调整">
+                                </c:when>
+                                <c:otherwise>
+                                    <input type="text" htmlEscape="false"  readonly="true" class="form-control layui-input" value="调整">
+                                </c:otherwise>
+                            </c:choose>
+                        </div>
+                    </div>
+                    <div class="layui-item layui-col-sm6">
+                        <label class="layui-form-label double-line"><span class="require-item">*</span>评估日期:</label>
+                        <div class="layui-input-block">
+                            <input class="laydate-icondate layui-input form-control layer-date laydate-icon required" id="assessDate" name="assessDate" value="<fmt:formatDate value="${projectSpecialistAssess.assessDate}" pattern="yyyy-MM-dd"/>">
+                        </div>
+                    </div>
+                    <div class="layui-item layui-col-sm12 with-textarea">
+                        <label class="layui-form-label">评估内容:</label>
+                        <div class="layui-input-block">
+                            <form:textarea path="assessContent" htmlEscape="false" rows="3" maxlength="255" class="form-control"/>
+                        </div>
+                    </div>
+                </div>
+	        </form:form>
+        </div>
+    </div>
+</body>
+</html>

+ 108 - 0
src/main/webapp/webpage/modules/projectSpecialistAssess/projectSpecialistAssessView.jsp

@@ -0,0 +1,108 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+    <title>专家评估</title>
+    <meta name="decorator" content="default"/>
+    <style>
+        label.error{
+            left:0px;
+            top:40px;
+        }
+    </style>
+    <script type="text/javascript">
+        var validateForm;
+        $(document).ready(function() {
+            $("input[name='ext']").on('ifChecked', function(event){
+                var radioVal = $(this).val();
+                if(radioVal == 0){
+                    $(".td1").removeClass("hide");
+                }else{
+                    $(".td1").addClass("hide");
+                }
+            });
+            if("${workReimbursement.ext}" == "1"){
+                $("#ext1").iCheck('check')
+            }else{
+                $("#ext").iCheck('check')
+            }
+            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);
+                    }
+                }
+            });
+            $("#attachment_btn").click(function () {
+                $("#attachment_file").click();
+            });
+        });
+    </script>
+</head>
+<body>
+<div class="single-form">
+    <div class="container">
+        <form:form id="inputForm" modelAttribute="projectSpecialistAssess" action="${ctx}/projectReport/projectSpecialistAssess/save" method="post" class="form-horizontal">
+            <input type="hidden" id="reportId" name="reportId" value="">
+            <input type="hidden" id="projectId" name="projectId" value="">
+            <input type="hidden" id="status" name="status" value="">
+            <form:hidden path="id"/>
+            <div class="form-group layui-row first">
+                <div class="form-group-label"><h2>基本信息</h2></div>
+                <div class="layui-item layui-col-sm6 td1">
+                    <label class="layui-form-label"><span class="require-item">*</span>项目名称:</label>
+                    <div class="layui-input-block">
+                        <form:input id ="projectName" path="projectName" htmlEscape="false"  readonly="true" class="form-control layui-input"/>
+                    </div>
+                </div>
+                <div class="layui-item layui-col-sm6 td1">
+                    <label class="layui-form-label"><span class="require-item">*</span>项目编号:</label>
+                    <div class="layui-input-block">
+                        <form:input id ="pNumber" path="pNumber" htmlEscape="false"  readonly="true" class="form-control layui-input"/>
+                    </div>
+                </div>
+                <div class="layui-item layui-col-sm6 td1">
+                    <label class="layui-form-label double-line"><span class="require-item">*</span>项目报告名称:</label>
+                    <div class="layui-input-block">
+                        <form:input id ="reportName" path="reportName" htmlEscape="false"  readonly="true" class="form-control layui-input"/>
+                    </div>
+                </div>
+                <div class="layui-item layui-col-sm6 td1">
+                    <label class="layui-form-label double-line"><span class="require-item">*</span>是否调整报告:</label>
+                    <div class="layui-input-block">
+                        <c:choose>
+                            <c:when test="${projectSpecialistAssess.status == 0}">
+                                <input type="text" htmlEscape="false"  readonly="true" class="form-control layui-input" value="无需调整">
+                            </c:when>
+                            <c:otherwise>
+                                <input type="text" htmlEscape="false"  readonly="true" class="form-control layui-input" value="调整">
+                            </c:otherwise>
+                        </c:choose>
+                    </div>
+                </div>
+                <div class="layui-item layui-col-sm6">
+                    <label class="layui-form-label double-line"><span class="require-item">*</span>评估日期:</label>
+                    <div class="layui-input-block">
+                        <input readonly="readonly" class="laydate-icondate layui-input form-control layer-date laydate-icon required" id="assessDate" name="assessDate" value="<fmt:formatDate value="${projectSpecialistAssess.assessDate}" pattern="yyyy-MM-dd"/>">
+                    </div>
+                </div>
+                <div class="layui-item layui-col-sm12 with-textarea">
+                    <label class="layui-form-label">评估内容:</label>
+                    <div class="layui-input-block">
+                        <form:textarea path="assessContent" readonly="true" htmlEscape="false" rows="3" maxlength="255" class="form-control"/>
+                    </div>
+                </div>
+            </div>
+        </form:form>
+    </div>
+</div>
+</body>
+</html>

+ 1 - 1
src/main/webapp/webpage/modules/projectcontentinfo/projectcontentinfoForm.jsp

@@ -544,7 +544,7 @@
 												<div class="op-btn-box">
 													<c:if test="${projectReportData.createBy.id eq fns:getUser().id && empty change}">
 														<c:if test="${projectReportData.status eq '1'}">
-															<a href="javascript:void(0)" onclick="openDialogres('修改报告', '${ctx}/projectcontentinfo/projectcontentinfo/form?view=report&dictType=${dictType}&id=${id}&parentIds=${parentIds}&projectReportData.id=${projectReportData.id}','95%','95%',false,'inputForm')" class="op-btn op-btn-edit" ><i class="fa fa-edit"></i> 修改</a>
+															<a href="javascript:void(0)" onclick="openDialogreAudit('修改报告', '${ctx}/projectcontentinfo/projectcontentinfo/form?view=report&dictType=${dictType}&id=${id}&parentIds=${parentIds}&projectReportData.id=${projectReportData.id}','95%','95%',false,'inputForm')" class="op-btn op-btn-edit" ><i class="fa fa-edit"></i> 修改</a>
 															<a href="${ctx}/projectcontentinfo/projectcontentinfo/delete?infoId=${projectReportData.id}&id=${id}&type=8" onclick="return confirmxRefresh('确认要删除该工作内容报告吗?', this.href)"   class="op-btn op-btn-delete"><i class="fa fa-trash"></i> 删除</a>
 														</c:if>
 														<c:if test="${projectReportData.status eq '3'}">

+ 2 - 2
src/main/webapp/webpage/modules/projectcontentinfo/reportForm.jsp

@@ -892,11 +892,11 @@
 				<%--</table>--%>
 			<%--</div>--%>
 		<%--</div>--%>
-			<c:if test="${not empty projectcontentinfo.infoId}">
+			<%--<c:if test="${not empty projectcontentinfo.infoId}">
 				<div class="pull-right">
 					<button id="btnSubmit" class="btn btn-primary btn-rounded btn-outline btn-sm" type="submit" onclick="$('#edit').val('edit')"><i class="fa fa-chevron-up"></i>暂 存</button>
 				</div>
-			</c:if>
+			</c:if>--%>
 		<div class="form-group layui-row page-end"></div>
 		</form:form>
 	</div>

+ 41 - 4
src/main/webapp/webpage/modules/projectrecord/projectRecordsForm.jsp

@@ -4,9 +4,11 @@
 <head>
     <title>项目管理</title>
     <meta name="decorator" content="default"/>
+    <script src="${ctxp}/static/layui/layui.js"></script>
     <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"/>
+    <link rel='layuicss' type="text/css" href="${ctxp}/static/layui/css/layui.css"/>
     <style>
         #projectDesc-error{
             left:0;
@@ -357,6 +359,41 @@
             // var idx1 = $("#workClientLinkmanList tr").length;
             bornTemplete(list, idx, tpl, row, idx);
         }
+        function addPlanRow(list, idx, tpl, row){
+            // var idx1 = $("#workClientLinkmanList tr").length;
+            bornTempletePlan(list, idx, tpl, row, idx);
+        }
+
+        function bornTempletePlan(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");
+                    }
+                }
+            });
+
+            laydate.render({
+                elem : (list+idx+"_beginDate"),
+                event: 'focus',
+                type : 'date',
+                trigger: 'click'
+            });
+            laydate.render({
+                elem : (list+idx+"_endDate"),
+                event: 'focus',
+                type : 'date',
+                trigger: 'click'
+            });
+        }
 
         function bornTemplete(list, idx, tpl, row, idx1){
             $(list).append(Mustache.render(tpl, {
@@ -765,7 +802,7 @@
                     <div class="layui-input-block">
                         <div class="layui-item nav-btns" style="padding-left:0px;">
                             <a class="nav-btn nav-btn-add"
-                               onclick="addRow('#projectPlanList', workClientBankRowIdx, workClientBankTpl);workClientBankRowIdx = workClientBankRowIdx + 1;"
+                               onclick="addPlanRow('#projectPlanList', workClientBankRowIdx, workClientBankTpl);workClientBankRowIdx = workClientBankRowIdx + 1;"
                                title="新增"><i class="fa fa-plus"></i> 新增</a>
                         </div>
                         <table id="bankinfo" class="table table-bordered table-condensed can-edit">
@@ -788,10 +825,10 @@
                                     <input id="projectPlanList{{idx}}_delFlag" name="projectPlanList[{{idx}}].delFlag" type="hidden" value="0"/>
                                 </td>
                                 <td>
-                                    <input id="projectPlanList{{idx}}_beginDate" name="projectPlanList[{{idx}}].beginDate" type="text" value="{{row.beginDate}}"  class="form-control required"/>
+                                    <input lay-verify="date" placeholder="yyyy-MM-dd" autocomplete="off" id="projectPlanList{{idx}}_beginDate" name="projectPlanList[{{idx}}].beginDate" type="text" value="{{row.beginDate}}"  class="form-control required datetime"/>
                                 </td>
                                 <td>
-                                    <input id="projectPlanList{{idx}}_endDate" name="projectPlanList[{{idx}}].endDate" type="text" value="{{row.endDate}}"  class="form-control required"/>
+                                    <input lay-verify="date" placeholder="yyyy-MM-dd" autocomplete="off" id="projectPlanList{{idx}}_endDate" name="projectPlanList[{{idx}}].endDate" type="text" value="{{row.endDate}}"  class="form-control required datetime"/>
                                 </td>
                                 <td>
                                     <input id="projectPlanList{{idx}}_remarks" name="projectPlanList[{{idx}}].remarks" type="text" value="{{row.remarks}}"    class="form-control required"/>
@@ -1069,7 +1106,7 @@
         var data = ${fns:toJson(projectRecords.projectPlanList)};
         if (null!=data){
             for (var i = 0; i < data.length; i++) {
-                addRow('#projectPlanList', workClientBankRowIdx, workClientBankTpl, data[i]);
+                addPlanRow('#projectPlanList', workClientBankRowIdx, workClientBankTpl, data[i]);
                 workClientBankRowIdx = workClientBankRowIdx + 1;
             }
         }