ソースを参照

修复导出月度工时表文件中的项目名称字段

seyason 9 ヶ月 前
コミット
e80ede8c75

+ 4 - 5
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ReportController.java

@@ -626,21 +626,20 @@ public class ReportController {
             }
         } else if (comTimeType.getReportAuditType() == 1 || comTimeType.getReportAuditType() == 2 || comTimeType.getReportAuditType() == 9) {
             List<TaskGroup> groupList = taskGroupService.list(new QueryWrapper<TaskGroup>().in("id", Arrays.asList(groupId)));
-
             for (int i=0;i<projectAuditorId.length; i++) {
                 if (projectAuditorId[i] == null) {
                     //取分组的负责人进行审核
                     int finalPid = projectId[i];
                     Integer finalGroupId = groupId[i];
                     TaskGroup targetGroup = groupList.stream().filter(g->g.getId().equals(finalGroupId)).findFirst().orElse(null);
-                    if (targetGroup != null) {
-                        projectAuditorId[i] = targetGroup.getInchargerId();
-                    } else {
-                        //没有分组的情况,返回错误信息
+                    if (targetGroup == null || targetGroup.getInchargerId() == null) {
+                        //没有分组的情况或者分组没有设置负责人的情况下,返回错误信息
                         HttpRespMsg msg = new HttpRespMsg();
                         msg.setError("请设置"+projectList.stream().filter(project -> project.getId().equals(finalPid)).findFirst().get().getProjectName()+
                                 "项目下"+targetGroup.getName()+"分组的负责人");
                         return msg;
+                    } else {
+                        projectAuditorId[i] = targetGroup.getInchargerId();
                     }
                 }
             }

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

@@ -382,18 +382,11 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
             Integer companyId = targetUser.getCompanyId();
             WxCorpInfo wxCorpInfo = wxCorpInfoMapper.selectOne(new QueryWrapper<WxCorpInfo>().eq("company_id", companyId));
             CompanyDingding dingding = companyDingdingMapper.selectOne(new LambdaQueryWrapper<CompanyDingding>().eq(CompanyDingding::getCompanyId, companyId));
-            Map<String, Object> resultMap = new HashMap<>();
 
-//当前用户管理部门
-            List<Integer> deptIds=null;
-            List<Department> departmentList = departmentMapper.selectList(new QueryWrapper<Department>().eq("manager_id", targetUser.getId()).eq("company_id", companyId));
+            //当前用户管理部门
             List<Department> allDepartmentList = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id", targetUser.getCompanyId()));
             Department[] deptArray = allDepartmentList.toArray(new Department[0]);
 
-            List<User> userList = userMapper.selectList(new QueryWrapper<User>().eq("company_id", companyId));
-
-
-
             List<Map<String, Object>> list = new ArrayList<>();
             List<List<String>> allList = null;
             List<String> sumRow = null;
@@ -416,7 +409,6 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
 
             allList = new ArrayList<>();
             allList.add(headList);
-            double totalCostTime = 0;
 
             //查询到的前六个字段
             List<Map<String, Object>> dataList = projectMapper.getTimeCostGroupByProjectUserSumTime(companyId,startDate, endDate);
@@ -453,7 +445,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                     .map(item -> ImmutableMap.of(
                             "id", item.get("id"),
                             "projectCode", item.get("projectCode"),
-                            "departmentName", item.get("departmentName")
+                            "projectName", item.get("projectName")
                     ))
                     .collect(Collectors.toList());
 
@@ -465,7 +457,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                 //每个项目的统计
                 List<String> rowList = new ArrayList<String>();
                 rowList.add(map.get("projectCode")==null?"":map.get("projectCode").toString());
-                rowList.add(map.get("departmentName")==null?"":map.get("departmentName").toString());
+                rowList.add(map.get("projectName")==null?"":map.get("projectName").toString());
                 rowList.add("");//项目分类
                 rowList.add("");//人员
                 rowList.add("");//部门
@@ -495,7 +487,13 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                     rowUserList.add("");//项目编号
                     rowUserList.add("");//项目名称
                     rowUserList.add(objectMap.get("categoryName")==null?"":objectMap.get("categoryName").toString());
-                    rowUserList.add(objectMap.get("name")==null?"":objectMap.get("name").toString());
+                    String name = objectMap.get("name")==null?"":objectMap.get("name").toString();
+                    if (wxCorpInfo != null && wxCorpInfo.getSaasSyncContact() == 1) {
+                        rowUserList.add("$userName="+name+"$");
+                    } else {
+                        rowUserList.add(name);
+                    }
+
                     rowUserList.add(objectMap.get("departmentNameComplete")==null?"":objectMap.get("departmentNameComplete").toString());
                     rowUserList.add(objectMap.get("cost")==null?"":objectMap.get("cost").toString());
                     for (int i = 1; i <= daysInMonth; i++) {
@@ -616,7 +614,11 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                 for (Map<String, Object> map : costTimeByUser) {
                     List<String> row = new ArrayList<String>();
                     row.add(map.get("jobNumber")==null?"":map.get("jobNumber").toString());
-                    row.add(map.get("name")==null?"":map.get("name").toString());
+                    if (wxCorpInfo != null && wxCorpInfo.getSaasSyncContact() == 1) {
+                        row.add("$userName="+map.get("name").toString()+"$");
+                    } else {
+                        row.add(map.get("name")==null?"":map.get("name").toString());
+                    }
                     row.add(map.get("departmentNameComplete")==null?"":map.get("departmentNameComplete").toString());
                     row.add(map.get("cost")==null?"":map.get("cost").toString());
                     for (int i = 1; i <=daysInMonth; i++) {

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

@@ -1602,7 +1602,8 @@ public class WxCorpInfoServiceImpl extends ServiceImpl<WxCorpInfoMapper, WxCorpI
                                     //检查请假时间段是否在打卡的时间范围内
                                     if (baseMorningStart.equals(leaveStart) && baseMorningEnd.equals(leaveEnd)) {
                                         morningLeave = true;
-                                    } else if (baseAfternoonStart.equals(leaveStart) && baseAfternoonEnd.equals(leaveEnd)) {
+                                    } else if ((baseAfternoonStart.equals(leaveStart) || "14:00".equals(leaveStart)) && baseAfternoonEnd.equals(leaveEnd)) {
+                                        //补充14:00是因为企业微信传递的数据不规则,有时候下午请假正常是13:00-18:00,有时候是14:00-18:00
                                         afternoonLeave = true;
                                     }
 

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

@@ -1284,7 +1284,7 @@
            </foreach>
         </if>
         <if test="leaderId != null">
-            AND user.id in (select user_id from participation where project_id in (select id from project where incharger_id = #{leaderId}))
+            AND u.id in (select user_id from participation where project_id in (select id from project where incharger_id = #{leaderId}))
         </if>
         GROUP BY r.create_date,r.creator_id
         order by u.id,r.create_date

+ 14 - 24
fhKeeper/formulahousekeeper/timesheet/src/views/project/cost.vue

@@ -59,7 +59,6 @@
         </el-col>
         <el-col :span="3">
             <el-button @click="exportProjectData" v-if="theCustomListFlg"  size="small">{{ $t('reporderived') }}</el-button>
-            <el-button @click="showExportMonthlyDataDialog" v-else-if="user.companyId == 10 && radio==$t('other.project')"  size="small">{{ $t('reporderived') }}</el-button>
             <el-button @click="showExportDialog" v-else  size="small">{{ $t('reporderived') }}</el-button>
         </el-col>
         </el-row>
@@ -91,24 +90,20 @@
             </div>
         </div>
 
-        <!--导出月度工时统计表-->
-        <el-dialog :title="$t('timeReportExport')" v-if="selectMonthExportDialog" :visible.sync="selectMonthExportDialog" :close-on-click-modal="false" customClass="customWidth" width="500px">
-            <el-form ref="form4" :model="exportParam" >
-                <el-form-item :label="this.$t('Selectmonth')" >
-                    <el-date-picker size="small" v-model="exportParam.date" :editable="false" format="yyyy-MM" value-format="yyyy-MM" :clearable="false" type="month" :placeholder="$t('Selectmonth')" style="margin-right: 20px"></el-date-picker>
-                </el-form-item>
-            </el-form>
-            <div slot="footer" class="dialog-footer">
-                <el-button type="primary" @click="exportMonthlyProjectData" style="width:100%;" :loading="exporting">{{ $t('export.export') }}</el-button>
-            </div>
-        </el-dialog>
         <!--导出报表条件选择 -->
         <el-dialog :title="$t('timeReportExport')" v-if="exportDialog" :visible.sync="exportDialog" :close-on-click-modal="false" customClass="customWidth" width="500px">
             
             <el-form ref="form3" :model="exportParam" >
-                <el-form-item :label="this.$t('Selectmonth')" v-if="user.companyId == 10 && radio==$t('other.project')">
+                <p style="text-align: center;">
+                    <el-radio-group size="medium" v-model="exportParam.reportType">
+                        <el-radio-button :label="0">常规报表</el-radio-button>
+                        <el-radio-button :label="1">月度报表</el-radio-button>
+                    </el-radio-group>
+                </p>
+                <el-form-item :label="this.$t('Selectmonth')" v-if="exportParam.reportType == 1">
                     <el-date-picker size="small" v-model="exportParam.date" :editable="false" format="yyyy-MM" value-format="yyyy-MM" :clearable="false" type="month" :placeholder="$t('Selectmonth')" style="margin-right: 20px"></el-date-picker>
                 </el-form-item>
+                <template v-else>
                 <el-form-item prop="projectCategoryId" :label="$t('projectclassification')" v-if="radio == $t('projectclassification')||radio==$t('other.project')">
                     <el-select v-model="exportParam.projectCategoryId" :placeholder="$t('classificationitems')"  clearable style="width:350px;" filterable="true" @change="filterCategory">
                         <el-option v-for="item in categoryList"  :key="item.id" :label="item.name" :value="item.id">
@@ -205,9 +200,10 @@
                 <el-form-item v-if="radio == $t('ren-yuan') && user.timeType.mainProjectState == 1">
                     <el-checkbox v-model="exportParam.mainProjectColumn" >{{ $t('hanZhuXiangMu') }}</el-checkbox>
                 </el-form-item>
+                </template>
             </el-form>
             <div slot="footer" class="dialog-footer">
-                <el-button type="primary" @click="exportProjectData" style="width:100%;" :loading="exporting">{{ $t('export.export') }}</el-button>
+                <el-button type="primary" @click="exportParam.reportType==0?exportProjectData():exportMonthlyProjectData()" style="width:100%;" :loading="exporting">{{ $t('export.export') }}</el-button>
             </div>
         </el-dialog>
     </section>
@@ -227,7 +223,6 @@
         },
         data() {
             return {
-                selectMonthExportDialog: false,
                 exporting: false,
                 totalTime111: 0,
                 allListData: [],
@@ -243,7 +238,7 @@
                 hasReportUserList:[],
                 projectList:[],
                 categoryList: [],
-                exportParam:{projectId:null,dateRange:[],userId: null,type: '0', withPercent: false, date: null},
+                exportParam:{projectId:null,dateRange:[],userId: null,type: '0', withPercent: false, date: null, reportType: 0},
                 exportDialog:false,
                 dateRange:[],
                 user: JSON.parse(sessionStorage.getItem("user")),
@@ -348,11 +343,11 @@
                 if(this.radio == this.$t('ren-yuan')) {
                     this.exportParam.userIds = new Array()
                 }
-                console.log(this.exportParam)
 
                 this.exportDialog = true;
                 this.exportParam.dateRange = this.dateRange;
-                this.$forceUpdate();
+                var array = this.exportParam.dateRange[0].split('-');
+                this.exportParam.date = array[0] + '-' + array[1];
                 if (this.radio == this.$t('ren-yuan')) {
                     // this.exportParam.userIds = [];
                 }
@@ -397,14 +392,9 @@
                     });
                 });
             },
-            showExportMonthlyDataDialog() {
-                this.selectMonthExportDialog = true;
-                var array = this.exportParam.dateRange[0].split('-');
-                this.exportParam.date = array[0] + '-' + array[1];
-            },
             exportMonthlyProjectData() {
                 var url = '/project/exportTimeByProjectAndEmployee';
-                var fileName = this.exportParam.date + '月度工时成本统计表.xlsx';
+                var fileName = this.exportParam.date + '月度工时统计表.xlsx';
                 this.exporting = true;
                 this.http.post(url, this.exportParam,
                     res => {