Ver Fonte

导出日报功能

seyason há 3 anos atrás
pai
commit
e3733a0575

+ 1 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/Project.java

@@ -49,7 +49,7 @@ public class Project extends Model<Project> {
     private Integer companyId;
 
     /**
-     * 项目编
+     * 项目编
      */
     @TableField("project_code")
     private String projectCode;

+ 10 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/ReportMapper.java

@@ -29,6 +29,16 @@ public interface ReportMapper extends BaseMapper<Report> {
                                                      @Param("companyId") Integer companyId,
                                                      @Param("userId") String userId,
                                                      @Param("endDate") String endDate);
+    List<HashMap<String, Object>> getProjectMembReportByDate(@Param("startDate") String startDate,
+                                                     @Param("companyId") Integer companyId,
+                                                     @Param("leaderId") String leaderId,
+                                                     @Param("endDate") String endDate);
+
+    //获取部门下的人员的日报
+    List<HashMap<String, Object>> getDeptMembReportByDate(@Param("startDate") String startDate,
+                                                             @Param("companyId") Integer companyId,
+                                                             @Param("deptIds") List<Integer> deptIds,
+                                                             @Param("endDate") String endDate);
 
     //按当前人员获取本人报告
     List<Map<String, Object>> getReportByDate(@Param("date") String date, @Param("id") String id);

+ 6 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/FinanceServiceImpl.java

@@ -442,7 +442,8 @@ public class FinanceServiceImpl extends ServiceImpl<FinanceMapper, Finance> impl
             BigDecimal totalField3 = cusColList.size() > 2?BigDecimal.valueOf(0):null;
 
             List<String> headList = new ArrayList<String>();
-            headList.add("项目");
+            headList.add("项目编号");
+            headList.add("项目名称");
             headList.add("人员");
             headList.add("工时(h)");
             headList.add("工资(元)");
@@ -818,6 +819,7 @@ public class FinanceServiceImpl extends ServiceImpl<FinanceMapper, Finance> impl
 
                 //组装写入excel文件的数据,从项目开始,项目下面挂成员
                 List<String> rowData = new ArrayList<String>();
+                rowData.add(p.projectCode);
                 rowData.add(p.project);
                 rowData.add("");
                 rowData.add(p.workingTime+"");
@@ -848,6 +850,7 @@ public class FinanceServiceImpl extends ServiceImpl<FinanceMapper, Finance> impl
                         //匹配到项目了
                         List<String> membRowData = new ArrayList<String>();
                         membRowData.add("");
+                        membRowData.add("");
                         Double workingTime = (Double) membMap.get("workingTime");
                         String creatorId = (String) membMap.get("creatorId");
                         User us = userList.stream().filter(u->u.getId().equals(creatorId)).findFirst().get();
@@ -902,6 +905,7 @@ public class FinanceServiceImpl extends ServiceImpl<FinanceMapper, Finance> impl
                     for (Finance npu : noProjectUser) {
                         List<String> membRowData = new ArrayList<String>();
                         membRowData.add("");
+                        membRowData.add("");
                         Double workingTime = new Double(0);
                         Finance userFinance = npu;
                         Optional<Map> op = noPUserDataList.stream().filter(map->((Integer)map.get("projectId")).equals(p.projectId) && ((String)map.get("creatorId")).equals(npu.getUserId())).findFirst();
@@ -957,6 +961,7 @@ public class FinanceServiceImpl extends ServiceImpl<FinanceMapper, Finance> impl
             List<String> sumRow = new ArrayList<String>();
             sumRow.add("合计");
             sumRow.add("");
+            sumRow.add("");
             sumRow.add(""+totalCostTime);
             sumRow.add(totalSalary.toString());
             sumRow.add(totalBonus.toString());

+ 1 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java

@@ -1536,7 +1536,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                     if (!StringUtils.isEmpty(code)) {
                         int cnt = projectMapper.selectCount(new QueryWrapper<Project>().eq("project_code", code).eq("company_id", user.getCompanyId()));
                         if (cnt > 0) {
-                            throw new Exception("项目编存在重复: " + code);
+                            throw new Exception("项目编存在重复: " + code);
                         }
                     }
                     project.setProjectCode(code);

+ 28 - 7
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java

@@ -2175,13 +2175,34 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             //新增数据行 并且装填数据
             int rowNum = 1;
             List<HashMap<String, Object>> allReportByDate = null;
-            if (user.getRole() == 0) {
-                //普通员工只能看自己的
-                allReportByDate = reportMapper.getAllReportByDate(startDate, null, user.getId(), endDate, projectId);
-            }else if (user.getRole() == 5) {
-                //项目管理员,看自己创建的项目相关的日报
-                allReportByDate = reportMapper.getPMOReportByDate(startDate, null, user.getId(), endDate);
-            } else {
+            if (user.getRole() == 0 || user.getRole() == 5) {
+                //检查是否是部门负责人
+                if (user.getManageDeptId() > 0) {
+                    List<Department> allDeptList = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id", user.getCompanyId()));
+                    List<Department> deptList = allDeptList.stream().filter(dept->user.getId().equals(dept.getManagerId())).collect(Collectors.toList());
+                    List<Department> allSubDepts = new ArrayList<>();
+                    allSubDepts.addAll(deptList);
+                    for (Department dept: deptList) {
+                        allSubDepts.addAll(getSubDepts(dept, allDeptList));
+                    }
+                    List<Integer> collect = allSubDepts.stream().map(Department::getDepartmentId).collect(Collectors.toList());
+                    allReportByDate = reportMapper.getDeptMembReportByDate(startDate, null, collect, endDate);
+                } else {
+                    //检查是否是项目负责人
+                    int cnt = projectMapper.selectCount(new QueryWrapper<Project>().eq("incharger_id", user.getId()));
+                    if (cnt > 0) {
+                        allReportByDate = reportMapper.getProjectMembReportByDate(startDate, null, user.getId(), endDate);
+                    } else {
+                        //普通员工只能看自己的
+                        allReportByDate = reportMapper.getAllReportByDate(startDate, null, user.getId(), endDate, projectId);
+                    }
+                }
+            }
+//            else if (user.getRole() == 5) {
+//                //项目管理员,看自己创建的项目相关的日报
+//                allReportByDate = reportMapper.getPMOReportByDate(startDate, null, user.getId(), endDate);
+//            }
+            else {
                 //管理员看公司所有人的
                 allReportByDate = reportMapper.getAllReportByDate(startDate, user.getCompanyId(), null, endDate, projectId);
             }

+ 56 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ReportMapper.xml

@@ -98,6 +98,61 @@
         ORDER BY a.creator_id, a.create_date desc
     </select>
 
+    <select id="getProjectMembReportByDate" resultType="java.util.Map">
+        SELECT c.name, b.project_name AS project, a.working_time AS duration, a.content, a.create_time AS time, a.create_date as createDate,
+        a.state, a.time_type as timeType, a.cost, a.report_time_type as reportTimeType, a.start_time as startTime,
+        a.end_time as endTime, d.name as subProjectName,a.task_id as taskId, task.name as taskName, a.is_overtime as isOvertime,a.progress as progress,
+        a.department_audit_state as departmentAuditState, a.pic_str as picStr, multi_worktime as multiWorktime
+        , reject_reason as rejectReason, reject_username as rejectUsername, reject_userid as rejectUserid, degree_id as degree_id,report_extra_degree.name as degreeName
+        FROM report AS a
+        JOIN project AS b ON a.project_id=b.id
+        LEFT JOIN user AS c ON a.creator_id=c.id
+        left join sub_project as d on d.id = a.sub_project_id
+        left join task on task.id = a.task_id
+        left join report_extra_degree on report_extra_degree.id = a.degree_id
+        WHERE a.state = 1
+        <if test="startDate != null and startDate != ''">
+            AND a.create_date between #{startDate} and #{endDate}
+        </if>
+        <if test="companyId != null">
+            AND c.company_id = #{companyId}
+        </if>
+        <if test="leaderId != null">
+            AND b.incharger_id = #{leaderId}
+        </if>
+        ORDER BY a.creator_id, a.create_date desc
+    </select>
+
+    <select id="getDeptMembReportByDate" resultType="java.util.Map">
+        SELECT c.name, b.project_name AS project, a.working_time AS duration, a.content, a.create_time AS time, a.create_date as createDate,
+        a.state, a.time_type as timeType, a.cost, a.report_time_type as reportTimeType, a.start_time as startTime,
+        a.end_time as endTime, d.name as subProjectName,a.task_id as taskId, task.name as taskName, a.is_overtime as isOvertime,a.progress as progress,
+        a.department_audit_state as departmentAuditState, a.pic_str as picStr, multi_worktime as multiWorktime
+        , reject_reason as rejectReason, reject_username as rejectUsername, reject_userid as rejectUserid, degree_id as degree_id,report_extra_degree.name as degreeName
+        FROM report AS a
+        JOIN project AS b ON a.project_id=b.id
+        LEFT JOIN user AS c ON a.creator_id=c.id
+        left join sub_project as d on d.id = a.sub_project_id
+        left join task on task.id = a.task_id
+        left join report_extra_degree on report_extra_degree.id = a.degree_id
+        WHERE a.state = 1
+        <if test="startDate != null and startDate != ''">
+            AND a.create_date between #{startDate} and #{endDate}
+        </if>
+        <if test="companyId != null">
+            AND c.company_id = #{companyId}
+        </if>
+        <if test="deptIds != null">
+            AND c.department_id in
+            <foreach collection="deptIds" item="deptId" separator="," close=")" open="(" index="index">
+                #{deptId}
+            </foreach>
+        </if>
+        ORDER BY a.creator_id, a.create_date desc
+    </select>
+
+
+
     <!--根据员工id,日期获取当天全部报告信息-->
     <select id="getReportByDate" resultType="java.util.Map">
         SELECT a.id, a.project_id as projectId,b.project_name AS project, a.working_time AS time, a.content, a.state, a.time_type as timeType, a.cost, a.report_time_type as reportTimeType, a.start_time as startTime,
@@ -167,7 +222,7 @@
         <if test="date != null and date != ''">
             AND a.create_date=#{date}
         </if>
-        <if test="targetUserId != null">
+        <if test="targetUserId != null and targetUserId != ''">
             AND a.creator_id=#{targetUserId}
         </if>
         <if test="startDate != null and startDate != '' and endDate != null and endDate != ''">

+ 10 - 10
fhKeeper/formulahousekeeper/timesheet/config/index.js

@@ -4,19 +4,19 @@ var path = require('path')
 // var ip = '192.168.2.36'
 
  
-var ip = '47.100.37.243' 
+// var ip = '47.100.37.243' 
 // var ip = '192.168.2.159'
 
-// var os = require('os'), ip = '', ifaces = os.networkInterfaces() // 获取本机ip
+var os = require('os'), ip = '', ifaces = os.networkInterfaces() // 获取本机ip
 
-// for (var i in ifaces) {
-//     for (var j in ifaces[i]) {
-//         var val = ifaces[i][j]
-//         if (val.family === 'IPv4' && val.address !== '127.0.0.1') {
-//             ip = val.address
-//         }
-//     }
-// }
+for (var i in ifaces) {
+    for (var j in ifaces[i]) {
+        var val = ifaces[i][j]
+        if (val.family === 'IPv4' && val.address !== '127.0.0.1') {
+            ip = val.address
+        }
+    }
+}
 
 module.exports = {
   build: {

+ 5 - 5
fhKeeper/formulahousekeeper/timesheet/src/views/corpreport/list.vue

@@ -41,7 +41,7 @@
         <div class="staff">
             <!--项目报表 -->
             <el-table v-if="ins == 0" :key="ins" border :data="list" highlight-current-row v-loading="listLoading" :height="tableHeight" style="width: 100%;">
-                <el-table-column  prop="projectCode" label="项目编"  width="120"></el-table-column>
+                <el-table-column  prop="projectCode" label="项目编"  width="120"></el-table-column>
                 <el-table-column  prop="projectName" label="项目名称" >
                   <template slot-scope="scope" >
                     {{scope.row.projectName}}
@@ -81,7 +81,7 @@
 
             <!-- 项目任务报表 -->
             <el-table v-if="ins == 1" :key="ins" border :data="list" highlight-current-row v-loading="listLoading" :height="tableHeight" style="width: 100%;">
-                <el-table-column  prop="project_code" label="项目编"  width="120"></el-table-column>
+                <el-table-column  prop="project_code" label="项目编"  width="120"></el-table-column>
                 <el-table-column  prop="project_name" label="项目名称" width="200">
                   <template slot-scope="scope" >
                     {{scope.row.project_name}}
@@ -121,7 +121,7 @@
 
             <!--项目成本报表 -->
             <el-table v-if="ins == 2"  :key="ins" border :data="list" highlight-current-row v-loading="listLoading" :height="tableHeight" style="width: 100%;">
-                <el-table-column  prop="projectCode" label="项目编"  width="120"></el-table-column>
+                <el-table-column  prop="projectCode" label="项目编"  width="120"></el-table-column>
                 <el-table-column  prop="projectName" label="项目名称" >
                   <template slot-scope="scope" >
                     {{scope.row.projectName}}
@@ -160,7 +160,7 @@
             </el-table>
             <!--项目收支平衡表 -->
             <el-table v-if="ins == 3"  :key="ins" border :data="list" highlight-current-row v-loading="listLoading" :height="tableHeight" style="width: 100%;">
-                <el-table-column prop="projectCode" label="项目编"  width="120"></el-table-column>
+                <el-table-column prop="projectCode" label="项目编"  width="120"></el-table-column>
                 <el-table-column prop="projectName" label="项目名称" >
                   <template slot-scope="scope" >
                     {{scope.row.projectName}}
@@ -262,7 +262,7 @@
             <el-table v-if="ins == 5" border :data="list" :key="ins"
             highlight-current-row v-loading="listLoading" :height="tableHeight" 
              style="width: 100%;">
-                <el-table-column prop="projectCode" label="项目编"  width="120" fixed ></el-table-column>
+                <el-table-column prop="projectCode" label="项目编"  width="120" fixed ></el-table-column>
                 <el-table-column prop="projectName" label="项目名称" width="450" fixed  >
                   <template slot-scope="scope" >
                     {{scope.row.projectName}}

+ 1 - 1
fhKeeper/formulahousekeeper/timesheet/src/views/project/info.vue

@@ -14,7 +14,7 @@
                             <el-progress  :percentage="project.progress == null?0:project.progress"></el-progress></span></el-col>
                     </el-row>
                     <el-row :gutter="10">
-                        <el-col :span="5" ><span class="gray_label">项目编: </span></el-col><el-col :span="7" ><span >{{project.projectCode}}&nbsp;</span></el-col>
+                        <el-col :span="5" ><span class="gray_label">项目编: </span></el-col><el-col :span="7" ><span >{{project.projectCode}}&nbsp;</span></el-col>
                         <el-col :span="5" v-if="user.role>0 || user.id == project.creatorId || user.id == project.inchargerId"><span class="gray_label">合同金额:</span></el-col>
                         <el-col :span="7" v-if="user.role>0 || user.id == project.creatorId || user.id == project.inchargerId">
                         <span >{{project.contractAmount == null?'-':project.contractAmount | numberToCurrency}} 元</span></el-col>

+ 2 - 2
fhKeeper/formulahousekeeper/timesheet/src/views/project/list.vue

@@ -11,7 +11,7 @@
                     <el-input style="float:left;" v-model="keyword" class="input-with-select" placeholder="请输入项目名称关键字" clearable="true">
                         <el-select v-model="searchField" style="width:120px;"  slot="prepend" placeholder="请选择">
                             <el-option label="项目名称" value=1 ></el-option>
-                            <el-option label="项目编" value=2></el-option>
+                            <el-option label="项目编" value=2></el-option>
                         </el-select>
                         <el-button slot="append" @click="searchList" icon="el-icon-search"></el-button>
                     </el-input>
@@ -57,7 +57,7 @@
                         {{scope.$index+1+(page-1)*size}}
                     </template>
             </el-table-column>
-            <el-table-column prop="projectCode" label="项目编" sortable width="150"></el-table-column>
+            <el-table-column prop="projectCode" label="项目编" sortable width="150"></el-table-column>
             <el-table-column prop="projectName" label="项目名称" width="250" sortable>
                  <template slot-scope="scope">
                      <!-- <div class="kans">

+ 2 - 2
fhKeeper/formulahousekeeper/timesheet/src/views/workReport/daily.vue

@@ -74,10 +74,10 @@
                         <span style="float:right;">
                             <el-link type="primary" style="margin-right:10px;" :underline="false" @click="isSubstitude=false;fillInReport(-1,0)">填写日报</el-link>
                             <el-link v-if="reportTimeType.type != 0" type="primary" style="margin-right:10px;" :underline="false" @click="isSubstitude=false;fillInReportss()">按周填报</el-link>
-                            <el-link type="primary" style="margin-right:10px;" :underline="false" @click="isSubstitude=true; fillInReport(-1,0)">代填日报</el-link>
+                            <el-link type="primary" v-if="user.role==1||user.role==2||user.leader==1||user.manageDeptId != 0" style="margin-right:10px;" :underline="false" @click="isSubstitude=true; fillInReport(-1,0)">代填日报</el-link>
                             <el-link type="primary" style="margin-right:10px;" :underline="false" @click="isSubstitude=false;fillInReport(-1,1)">批量填报</el-link>
                             <el-link type="primary" v-if="user.role==1||user.role==2||user.role==6||user.manageDeptId != 0" style="margin-right:10px;" :underline="false" @click="imports()">工时导入</el-link>
-                            <el-link type="primary" v-if="user.role==1||user.role==2||user.role==6||user.manageDeptId != 0" style="margin-right:10px;" :underline="false" @click="showExportDialog">导出日报</el-link>
+                            <el-link type="primary" style="margin-right:10px;" :underline="false" @click="showExportDialog">导出日报</el-link>
                         </span>
                     </div>
                     <!--普通员工,含项目经理 -->