浏览代码

项目计划模块内容

user5 5 年之前
父节点
当前提交
0efd92eeb4

+ 14 - 0
src/main/java/com/jeeplus/modules/projectrecord/dao/ProjectPlanDao.java

@@ -0,0 +1,14 @@
+package com.jeeplus.modules.projectrecord.dao;
+
+import com.jeeplus.common.persistence.CrudDao;
+import com.jeeplus.common.persistence.annotation.MyBatisDao;
+import com.jeeplus.modules.projectrecord.entity.ProjectPlanInfo;
+
+/**
+ * 项目计划DAO接口
+ * @author 徐滕
+ * @version 2020-05-14
+ */
+@MyBatisDao
+public interface ProjectPlanDao extends CrudDao<ProjectPlanInfo> {
+}

+ 50 - 0
src/main/java/com/jeeplus/modules/projectrecord/entity/ProjectPlanInfo.java

@@ -0,0 +1,50 @@
+package com.jeeplus.modules.projectrecord.entity;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.jeeplus.common.persistence.DataEntity;
+
+import java.util.Date;
+
+/**
+ * 项目计划Entity
+ * @author 徐滕
+ * @version 2020-05-13
+ */
+public class ProjectPlanInfo extends DataEntity<ProjectPlanInfo> {
+    private String beginDate;  //开始时间
+    private String endDate;   //结束时间
+    private String projectId;  //项目id
+    private String planUser;		// 上传人
+
+    public String getPlanUser() {
+        return planUser;
+    }
+
+    public void setPlanUser(String planUser) {
+        this.planUser = planUser;
+    }
+
+    public String getBeginDate() {
+        return beginDate;
+    }
+
+    public void setBeginDate(String beginDate) {
+        this.beginDate = beginDate;
+    }
+
+    public String getEndDate() {
+        return endDate;
+    }
+
+    public void setEndDate(String endDate) {
+        this.endDate = endDate;
+    }
+
+    public String getProjectId() {
+        return projectId;
+    }
+
+    public void setProjectId(String projectId) {
+        this.projectId = projectId;
+    }
+}

+ 11 - 0
src/main/java/com/jeeplus/modules/projectrecord/entity/ProjectRecords.java

@@ -18,6 +18,7 @@ import com.jeeplus.modules.workinvoice.entity.WorkInvoice;
 import org.hibernate.validator.constraints.NotBlank;
 
 import javax.validation.constraints.NotNull;
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 
@@ -60,10 +61,20 @@ public class ProjectRecords extends ActEntity<ProjectRecords> {
 
 	private ProjectReportData reportData;//报告
 
+	private List<ProjectPlanInfo> projectPlanList;  //项目计划
+
 	public ProjectReportData getReportData() {
 		return reportData;
 	}
 
+	public List<ProjectPlanInfo> getProjectPlanList() {
+		return projectPlanList;
+	}
+
+	public void setProjectPlanList(List<ProjectPlanInfo> projectPlanList) {
+		this.projectPlanList = projectPlanList;
+	}
+
 	public void setReportData(ProjectReportData reportData) {
 		this.reportData = reportData;
 	}

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

@@ -18,8 +18,10 @@ import com.jeeplus.modules.projectcontentinfo.dao.ProjectcontentinfoDao;
 import com.jeeplus.modules.projectcontentinfo.entity.ProjectReportData;
 import com.jeeplus.modules.projectcontentinfo.entity.Projectcontentinfo;
 import com.jeeplus.modules.projectrecord.dao.ProjectClientLinkmanDao;
+import com.jeeplus.modules.projectrecord.dao.ProjectPlanDao;
 import com.jeeplus.modules.projectrecord.dao.ProjectRecordsDao;
 import com.jeeplus.modules.projectrecord.dao.WorkProjectUserDao;
+import com.jeeplus.modules.projectrecord.entity.ProjectPlanInfo;
 import com.jeeplus.modules.projectrecord.entity.ProjectRecords;
 import com.jeeplus.modules.projectrecord.enums.ProjectStatusEnum;
 import com.jeeplus.modules.serialnum.service.SerialNumTplService;
@@ -111,6 +113,8 @@ public class ProjectRecordsService extends CrudService<ProjectRecordsDao, Projec
     private WorkActivityProcessDao workActivityProcessDao;
     @Autowired
 	private ProjectReportDataDao projectReportDataDao;
+    @Autowired
+	private ProjectPlanDao projectPlanDao;
 
 	public ProjectRecords get(String id) {
 		return super.get(id);
@@ -335,6 +339,8 @@ public class ProjectRecordsService extends CrudService<ProjectRecordsDao, Projec
 		}else {
             this.saveAttachments(projectRecords);
         }
+        //保存项目计划信息
+		this.saveProjectPlans(projectRecords);
 		//启动审批流程
 		if (projectRecords.getProjectStatus()==ProjectStatusEnum.IN_APRL.getValue()&&(oldStatus==null||ProjectStatusEnum.REJECTED.getValue()!=oldStatus)) {
 			this.startAudit(projectRecords,projectRecords.getProcessInstanceId());
@@ -1038,6 +1044,13 @@ public class ProjectRecordsService extends CrudService<ProjectRecordsDao, Projec
 		projectRecords.setWorkAttachments(attachments);
 	}
 
+	public void getProjectPlanData(ProjectRecords projectRecords) {
+		ProjectPlanInfo projectPlanInfo = new ProjectPlanInfo();
+		projectPlanInfo.setProjectId(projectRecords.getId());
+		List<ProjectPlanInfo> getProjectPlanList = projectPlanDao.findList(projectPlanInfo);
+		projectRecords.setProjectPlanList(getProjectPlanList);
+	}
+
 	public void queryReportData(ProjectRecords projectRecords){
        String projectId = projectRecords.getId();
        List<ProjectReportData> byProjectId = projectReportDataDao.findByProjectId(projectId);
@@ -1080,6 +1093,27 @@ public class ProjectRecordsService extends CrudService<ProjectRecordsDao, Projec
 		}
 	}
 
+	private void saveProjectPlans(ProjectRecords projectRecords){
+		if (projectRecords.getProjectPlanList()!=null && !projectRecords.getProjectPlanList().isEmpty()) {
+			//保存计划信息
+			for (ProjectPlanInfo projectPlanInfo : projectRecords.getProjectPlanList()) {
+				if (ProjectPlanInfo.DEL_FLAG_NORMAL.equals(projectPlanInfo.getDelFlag())) {
+					projectPlanInfo.setProjectId(projectRecords.getId());
+					projectPlanInfo.setPlanUser(UserUtils.getUser().getId());
+					if (StringUtils.isBlank(projectPlanInfo.getId()) || "null".equals(projectPlanInfo.getId())) {
+						projectPlanInfo.preInsert();
+						projectPlanDao.insert(projectPlanInfo);
+					} else {
+						projectPlanInfo.preUpdate();
+						projectPlanDao.update(projectPlanInfo);
+					}
+				} else {
+					projectPlanDao.delete(projectPlanInfo);
+				}
+			}
+		}
+	}
+
 	/**
 	 * 查询合同信息
 	 * @param projectRecords
@@ -1116,6 +1150,8 @@ public class ProjectRecordsService extends CrudService<ProjectRecordsDao, Projec
         this.queryReportData(projectRecords);
         //获取项目发票信息
         this.queryInvoiceData(projectRecords);
+        //获取项目计划信息
+        this.getProjectPlanData(projectRecords);
     }
 
     public Page<ProjectRecords> findPageDetail(Page<ProjectRecords> page, ProjectRecords projectRecords) {

+ 88 - 0
src/main/resources/mappings/modules/projectrecord/ProjectPlanDao.xml

@@ -0,0 +1,88 @@
+<?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.ProjectPlanDao">
+
+	<sql id="projectPlanColumns">
+	  a.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.remarks as remarks,
+	  a.begin_date as beginDate,
+	  a.end_date as endDate,
+	  a.project_id as  projectId
+	</sql>
+	
+    
+	<select id="get" resultType="com.jeeplus.modules.projectrecord.entity.ProjectPlanInfo" >
+		SELECT
+			<include refid="projectPlanColumns"/>
+        FROM project_plan_info a
+		WHERE a.id = #{id}
+	</select>
+	
+	<select id="findList" resultType="com.jeeplus.modules.projectrecord.entity.ProjectPlanInfo" >
+		SELECT
+			<include refid="projectPlanColumns"/>
+		FROM project_plan_info a
+		<where>
+			a.project_id = #{projectId} and 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.begin_date asc, a.end_date asc, a.update_date DESC
+			</otherwise>
+		</choose>
+	</select>
+
+	<insert id="insert">
+		INSERT INTO project_plan_info(
+			id,
+			create_by,
+			create_date,
+			update_by,
+			update_date,
+			del_flag,
+			remarks,
+			begin_date,
+			end_date,
+			project_id
+		) VALUES (
+			#{id},
+			#{createBy.id},
+			#{createDate},
+			#{updateBy.id},
+			#{updateDate},
+			#{delFlag},
+			#{remarks},
+			#{beginDate},
+			#{endDate},
+			#{projectId}
+		)
+	</insert>
+	
+	<update id="update">
+		UPDATE project_plan_info SET
+			update_by = #{updateBy.id},
+			update_date = #{updateDate},
+			project_id = #{projectId},
+			remarks = #{remarks},
+			begin_date = #{beginDate},
+			end_date = #{endDate}
+		WHERE id = #{id}
+	</update>
+	
+	
+	<!--物理删除-->
+	<update id="delete">
+		UPDATE project_plan_info SET
+			del_flag = #{DEL_FLAG_DELETE}
+		WHERE id = #{id}
+	</update>
+</mapper>

+ 120 - 1
src/main/webapp/webpage/modules/projectrecord/projectRecordsForm.jsp

@@ -15,11 +15,32 @@
         .layui-layer-dialog{
             background: red;
         }
-        td input{
+        #workClientLinkmanList td input{
             margin-left:-10px !important;
             height: 42px !important;
         }
     </style>
+
+
+    <script>
+        //主要是用到laydate
+        layui.use( 'laydate', function () {
+            var laydate = layui.laydate;
+            //核心方法
+            function timeAdd(){
+                lay('.datetime').each(function() {
+                    laydate.render({
+                        elem : this,
+                        trigger : 'click'
+                    });
+                });
+            }
+            //初始化时先调用一次,确保静态的那一行可点
+            timeAdd();
+        })
+    </script>
+
+
     <script type="text/javascript">
         var validateForm;
         var isMasterClient = true;//是否是主委托方
@@ -65,6 +86,17 @@
                 }
             });
 
+            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'
+            });
+
             <%--$('#scaleType').editableSelect({--%>
                 <%--effects: 'slide'--%>
             <%--});--%>
@@ -349,6 +381,12 @@
             var delFlag = $(prefix+"_delFlag");
             $(obj).parent().parent().remove();
         }
+        function delPlanRow(obj, prefix){
+            var id = $(prefix+"_id");
+            var delFlag = $(prefix+"_delFlag");
+            $(prefix+"_delFlag").val(1);
+            $(obj).parent().parent().hide();
+        }
         function formatNum(obj) {
             var val = $(obj).val();
             if(val==null||val==''|| isNaN(val))return;
@@ -403,6 +441,18 @@
 
         }
 
+        function addRow(list, idx, tpl, row){
+            var idx1 = $("#projectPlanList tr").length;
+            if(list == '#projectPlanList'){
+                bornTemplete(list, idx, tpl, row, idx1);
+            }
+            var idx2 = $("#workClientLinkmanList tr").length;
+            if(list == '#workClientLinkmanList'){
+                bornTemplete(list, idx, tpl, row, idx2);
+            }
+        }
+
+
         function formSubmit2($document,inputForm,index){
             var validateForm = $($document.getElementById(inputForm)).validate({
                 submitHandler: function(form){
@@ -710,9 +760,54 @@
                         <form:textarea path="remarks" htmlEscape="false" rows="4"  maxlength="255"  class="form-control "/>
                     </div>
                 </div>
+                <div class="layui-item layui-col-sm12 lw7">
+                    <label class="layui-form-label"><span class="require-item">*</span>项目计划书:</label>
+                    <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;"
+                               title="新增"><i class="fa fa-plus"></i> 新增</a>
+                        </div>
+                        <table id="bankinfo" class="table table-bordered table-condensed can-edit">
+                            <thead>
+                            <tr>
+                                <th width="15%">开始时间</th>
+                                <th width="15%">结束时间</th>
+                                <th width="50%;">工作内容</th>
+                                <th width="20%">操作</th>
+                            </tr>
+                            </thead>
+                            <tbody id="projectPlanList">
+
+                            </tbody>
+                        </table>
+                        <script type="text/template" id="workClientBankTpl">//<!--
+                            <tr id="projectPlanList{{idx}}">
+                                <td class="hide">
+                                    <input id="projectPlanList{{idx}}_id" name="projectPlanList[{{idx}}].id" type="hidden" value="{{row.id}}"/>
+                                    <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"/>
+                                </td>
+                                <td>
+                                    <input id="projectPlanList{{idx}}_endDate" name="projectPlanList[{{idx}}].endDate" type="text" value="{{row.endDate}}"  class="form-control required"/>
+                                </td>
+                                <td>
+                                    <input id="projectPlanList{{idx}}_remarks" name="projectPlanList[{{idx}}].remarks" type="text" value="{{row.remarks}}"    class="form-control required"/>
+                                </td>
+
+                                <td class="text-center op-td" width="10">
+                                    {{#delBtn}}<span class="op-btn op-btn-delete" onclick="delPlanRow(this, '#projectPlanList{{idx}}')" title="删除"><i class="fa fa-trash"></i>&nbsp;删除</span>{{/delBtn}}
+                                </td>
+                            </tr>//-->
+                        </script>
+                    </div>
+                </div>
             </div>
 
 
+
             <div>
                 <div class="form-group-label"><h2><span class="require-item">*</span>委托方联系人信息</h2></div>
                 <div class="layui-item nav-btns" style="float: left;width: 155px">
@@ -964,5 +1059,29 @@
         </form:form>
     </div>
 </div>
+
+<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(projectRecords.projectPlanList)};
+        if (null!=data){
+            for (var i = 0; i < data.length; i++) {
+                addRow('#projectPlanList', workClientBankRowIdx, workClientBankTpl, data[i]);
+                workClientBankRowIdx = workClientBankRowIdx + 1;
+            }
+        }
+        /*var dataBank = ${fns:toJson(projectRecords.projectPlanList)};
+        if (null!=dataBank){
+            for (var i = 0; i < dataBank.length; i++) {
+                addRow('#projectPlanList', workClientBankRowIdx, workClientBankTpl, dataBank[i]);
+                workClientBankRowIdx = workClientBankRowIdx + 1;
+            }
+        }*/
+    });
+
+</script>
 </body>
 </html>