Kaynağa Gözat

Merge branch 'master' of http://47.100.37.243:10191/wutt/manHourHousekeeper

zhouyy 1 ay önce
ebeveyn
işleme
80a36ef75c

+ 33 - 6
fhKeeper/formulahousekeeper/customerBuler-crm/src/pages/tasks/taskCalendar.vue

@@ -1,7 +1,7 @@
 
 
 <template>
-  <div class="w-full h-full flex flex-col">
+  <div class="w-full h-full flex flex-col calendarPlugin">
     <div class="flex-1" v-loading="calendarLoading">
       <FullCalendar ref="calendarRef" :options="calendarOptions" class="h-full w-full">
         <template v-slot:eventContent='arg'>
@@ -43,13 +43,18 @@ const calendarOptions = ref<any>({
   initialView: currentView.value,
   slotMinTime: '06:00:00',  // 最早显示时间
   slotMaxTime: '22:00:00',  // 最晚显示时间
-  slotDuration: '00:30:00', // 30分钟一格(timeGrid生效)
+  slotDuration: '01:00:00', // 一个小时一格(timeGrid生效)
   events: [],
   headerToolbar: {  // 自定义头部
     left: 'today,prev,next',  // 左侧按钮:上一页,下一页,今天
     center: 'title',
     right: 'dayGridMonth,timeGridWeek,timeGridDay'  // 右侧显示视图切换按钮
   },
+  slotLabelContent: (arg: any) => {
+    const hour = arg.date.getHours()
+    const meridiem = hour < 12 ? '上午' : '下午'
+    return `${meridiem} ${hour} 时`
+  },
   datesSet: (arg: any) => { // 📌 每次切换视图或日期都会触发
     const { startStr = '', endStr = '' } = arg
     if (startStr && endStr) {
@@ -71,7 +76,11 @@ function renderTableData() {
         ...item,
         start: item.startDate,
         end: item.endDate,
-        title: item.taskName
+        title: item.taskName,
+        // backgroundColor: ['#909399', '#075985', '#67C23A', '#F56C6C'][item.status],
+        // borderColor: ['#909399', '#075985', '#67C23A', '#F56C6C'][item.status]
+        backgroundColor: ['#a6a9b0', '#3a7fc1', '#7fbf72', '#e28c8c'][item.status],
+        borderColor: ['#a6a9b0', '#3a7fc1', '#7fbf72', '#e28c8c'][item.status],
       }
     })
   }
@@ -101,7 +110,25 @@ defineExpose({
 </script>
 
 <style lang="scss" scoped>
-:deep(.fc-today-button) {
-  margin-right: 10px;
-} 
+.calendarPlugin {
+  :deep(.fc-today-button) {
+    margin-right: 10px;
+  }
+  :deep(table) {
+    height: 100%;
+  }
+  
+  /* 强制事件内文字换行 */
+  :deep(.fc-timegrid-col-events .fc-event-main) div {
+    width: 50%;
+    white-space: normal !important;
+    word-break: break-word;
+  }
+
+  :deep(.fc-timegrid-col-events .fc-timegrid-event-harness:last-child .fc-event-main) div {
+    width: 100%;
+    white-space: normal !important;
+    word-break: break-word;
+  }
+}
 </style> 

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

@@ -240,8 +240,8 @@ public interface ReportMapper extends BaseMapper<Report> {
     @Select("SELECT report.id,report.creator_id,  report.`create_date`, report.`create_time`, group_id, task_group.`name`,report.project_id, task_group.`project_id` AS error_pid FROM report LEFT JOIN task_group ON task_group.id = report.`group_id` WHERE report.`company_id`=#{companyId} AND report.project_id <> task_group.`project_id`  AND create_date BETWEEN #{startDate} AND #{endDate} ORDER BY report.id DESC")
     List<Map<String, Object>> selectErrorGroupData(Integer companyId, String startDate, String endDate);
 
-    @Update("update report set state=2,reject_reason='提醒工时变更' where create_date=#{createDate} and creator_id=#{userId}")
-    void denyReportWithUserAndCreateDate(String userId, String createDate);
+    @Update("update report set state=2,reject_reason='工时与考勤不一致,请重新提交',reject_userid=#{rejectUserid},reject_username=#{rejectUsername} where create_date=#{createDate} and creator_id=#{userId}")
+    void denyReportWithUserAndCreateDate(String userId, String createDate,String rejectUserid, String rejectUsername);
 
     List<Map<String, Object>> getUserDailyWorkTimeReminder(Integer companyId,String startDate, String endDate,@Param("list") List<Integer> deptIds,Integer deptId,String leaderId);
 

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

@@ -250,7 +250,7 @@ public interface ProjectService extends IService<Project> {
 
     HttpRespMsg getFTEData(Integer pageIndex, Integer pageSize,String monthStart,String monthEnd, String area,String userId,String sortProp, Integer sortOrder,Integer departmentId,HttpServletRequest request);
 
-    HttpRespMsg exportFTEData(String monthStart,String monthEnd, String area, HttpServletRequest request);
+    HttpRespMsg exportFTEData(String monthStart,String monthEnd, String area,Integer departmentId, HttpServletRequest request);
 
     HttpRespMsg getProjectListByToken(String json);
 

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

@@ -13416,7 +13416,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
 
     //导出FTE报表数据
     @Override
-    public HttpRespMsg exportFTEData(String monthStart,String monthEnd, String area,HttpServletRequest request) {
+    public HttpRespMsg exportFTEData(String monthStart,String monthEnd, String area,Integer departmentId,HttpServletRequest request) {
         HttpRespMsg httpRespMsg = new HttpRespMsg();
         User user = userMapper.selectById(request.getHeader("token"));
         WxCorpInfo wxCorpInfo = wxCorpInfoMapper.selectOne(new QueryWrapper<WxCorpInfo>().eq("company_id", user.getCompanyId()));
@@ -13426,7 +13426,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
         if (userCustoms.size() != 0){
             customName = userCustoms.get(0).getName();
         }
-        HttpRespMsg fteData = getFTEData(null, null, monthStart,monthEnd, area,null,null,null,null,request);
+        HttpRespMsg fteData = getFTEData(null, null, monthStart,monthEnd, area,null,null,null,departmentId,request);
         LocalDate timeStart = LocalDate.parse(monthStart, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
         LocalDate timeEnd = LocalDate.parse(monthEnd, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
         timeStart=timeStart.with(TemporalAdjusters.firstDayOfMonth());

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

@@ -5619,6 +5619,20 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                                 if (withCheckIn != null) {
                                     if (row.getCell(workContentIndex) != null) {
                                         workContent = row.getCell(workContentIndex).getStringCellValue().trim();
+                                        //支持多个项目内容,用 | 隔开,每个项目内容以项目名称:开头,支持中英文冒号,取当前项目名称匹配的内容
+                                        if (!StringUtils.isEmpty(workContent)) {
+                                            String[] split = workContent.split("\\|");
+                                            for (String s : split) {
+                                                //按:或者:分割
+                                                String[] split1 = s.split(":|:");
+                                                if (split1.length >= 2) {
+                                                    if (split1[0].equals(pName)) {
+                                                        workContent = s.replaceAll(split1[0] + ":", "").replaceAll(split1[0] + ":", "");
+                                                        break;
+                                                    }
+                                                }
+                                            }
+                                        }
                                         report.setContent(workContent);
                                     }
                                 }
@@ -10241,10 +10255,10 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
     @Transactional(rollbackFor = Exception.class)
     public HttpRespMsg changeReminder(HttpServletRequest request,String createDate,String userId,String startDate,String endDate) throws Exception {
         HttpRespMsg msg=new HttpRespMsg();
-        DateTimeFormatter df=DateTimeFormatter.ofPattern("yyyy-MM-dd");
-        Integer companyId = userMapper.selectById(request.getHeader("token")).getCompanyId();
+        DateTimeFormatter df =DateTimeFormatter.ofPattern("yyyy-MM-dd");
+        User operator = userMapper.selectById(request.getHeader("token"));
+        Integer companyId = operator.getCompanyId();
         WxCorpInfo wxCorpInfo = wxCorpInfoMapper.selectOne(new LambdaQueryWrapper<WxCorpInfo>().eq(WxCorpInfo::getCompanyId, companyId));
-        LocalDate now=LocalDate.now();
         HttpRespMsg userDailyWorkTime = getUserDailyWorkTimeReminder(request,startDate,endDate,null,0);
         Map<String, Object> map = (Map<String, Object>) userDailyWorkTime.getData();
         List<Map<String, Object>> mapList = (List<Map<String, Object>>) map.get("list");
@@ -10259,13 +10273,40 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             }
             exceedCardTimeList.forEach(e->{
                 Information information=new Information();
-                information.setUserId(String.valueOf(e.get("userId")));
+                String curUserid = String.valueOf(e.get("userId"));
+                String date = String.valueOf(e.get("createDate"));
+                String userName = String.valueOf(e.get("name"));
+                information.setUserId(curUserid);
                 information.setTime(LocalDateTime.now());
-                information.setContent(String.valueOf(e.get("createDate")));
+                information.setContent(date);
                 information.setType(0);
-                information.setMsg("您在"+String.valueOf(e.get("createDate"))+"的日报考勤填报异常,请完成填报变更");
+                String reason = "您在"+date+"的日报考勤填报异常,请完成填报变更";
+                information.setMsg(reason);
                 informationList.add(information);
-                reportMapper.denyReportWithUserAndCreateDate(String.valueOf(e.get("userId")),String.valueOf(e.get("createDate")));
+
+                //审批流里面增加驳回的记录
+                ReportAuditLog log = new ReportAuditLog();
+                log.setAuditChannel(1);
+                log.setCompanyId(companyId);
+                //log.setResult("驳回"+(StringUtils.isEmpty(reason)?"":"("+reason+")"));
+                log.setResult(MessageUtils.message("stages.reject")+(StringUtils.isEmpty(reason)?"":"("+reason+")"));
+                log.setUserId(operator.getId());
+                log.setUserName(operator.getName());
+                reportAuditLogMapper.insert(log);
+                //员工的日期
+                ReportAlogMembdate membdate = new ReportAlogMembdate();
+                membdate.setRlogId(log.getId());
+                membdate.setState(2);//驳回
+                membdate.setCreateDate(LocalDate.parse(date,df));
+                membdate.setUserId(curUserid);
+                membdate.setUserName(userName);
+                reportAlogMembdateMapper.insert(membdate);
+
+                //查询出日报
+                List<Report> rList = reportMapper.selectList(new QueryWrapper<Report>().eq("create_date", date).eq("user_id", curUserid));
+                saveDenyReportLog(rList, curUserid, userName, reason);
+                //todo: 增加客户操作记录
+                reportMapper.denyReportWithUserAndCreateDate(String.valueOf(e.get("userId")),String.valueOf(e.get("createDate")), operator.getId(), operator.getName());
                 //发送企业微信消息
                 if(wxCorpInfo!=null&&e.get("corpwxUserId")!=null){
                     wxCorpInfoService.sendWXCorpMsg(wxCorpInfo,String.valueOf(e.get("corpwxUserId")), "您在"+String.valueOf(e.get("createDate"))+"的日报考勤填报异常,请完成填报变更", null, WxCorpInfoServiceImpl.TEXT_CARD_MSG_REPORT_ABNOEMAL);

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

@@ -2846,6 +2846,7 @@ export default {
           sl.monthStart= this.monthRange[0]+"-01"
           sl.monthEnd= this.monthRange[1]+"-01"
           sl.area = this.areaName || null
+          sl.departmentId = this.departmentIdArray.length > 0 ? this.departmentIdArray[this.departmentIdArray.length - 1] : ''
         }else if(this.ins == 20) {
           fName = this.$t('youXiaoGongShiShuaiBiao') + '.xlsx'
           url = "/project/exportEffectiveLaborHourRate"

+ 3 - 3
fhKeeper/formulahousekeeper/timesheet_h5/src/views/expense/details.vue

@@ -219,10 +219,10 @@
                         </template>
                     </van-field>
                     <van-field
-                        label="审核人" v-if="item.projectManagerName && user.companyId != mechanicalCompanyId">
+                        label="审核人" v-if="item.auditorName && user.companyId != mechanicalCompanyId">
                         <template #input>
-                            <span v-if="user.userNameNeedTranslate == 1"><TranslationOpenDataText type='userName' :openid='item.projectManagerName'></TranslationOpenDataText></span>
-                            <span v-else>{{item.projectManagerName}}</span>
+                            <span v-if="user.userNameNeedTranslate == 1"><TranslationOpenDataText type='userName' :openid='item.auditorName'></TranslationOpenDataText></span>
+                            <span v-else>{{item.auditorName}}</span>
                         </template>
                     </van-field>
                     <van-field