浏览代码

修复费用报销多次审核模式的bug
日报支持时间段可重叠模式

seyason 1 年之前
父节点
当前提交
31a676da13

+ 12 - 7
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ReportController.java

@@ -132,6 +132,8 @@ public class ReportController {
     @RequestMapping("/getHoursByTimeRange")
     public HttpRespMsg getHoursByTimeRange(String timeJsonStr) {
         String token = request.getHeader("TOKEN");
+        Integer companyId = userMapper.selectById(token).getCompanyId();
+        TimeType timeType = timeTypeMapper.selectById(companyId);
 
         HttpRespMsg msg = new HttpRespMsg();
         JSONArray array = JSONArray.parseArray(timeJsonStr);
@@ -144,16 +146,19 @@ public class ReportController {
             worktimeItemList.add(worktimeItem);
         }
         //检查worktimeItemList是否有交叉
-        for (int i = 0; i < worktimeItemList.size(); i++) {
-            WorktimeItem worktimeItem = worktimeItemList.get(i);
-            for (int j = i + 1; j < worktimeItemList.size(); j++) {
-                WorktimeItem worktimeItem1 = worktimeItemList.get(j);
-                if (!(worktimeItem1.getEndTime().compareTo(worktimeItem.getStartTime()) <= 0 || worktimeItem1.getStartTime().compareTo(worktimeItem.getEndTime()) >= 0)) {
-                    msg.setError("时间段有交叉:"+worktimeItem1.getStartTime()+"-"+worktimeItem1.getEndTime()+"和"+worktimeItem.getStartTime()+"-"+worktimeItem.getEndTime());
-                    return msg;
+        if (timeType.getTimeCanOverlap() == 0) {
+            for (int i = 0; i < worktimeItemList.size(); i++) {
+                WorktimeItem worktimeItem = worktimeItemList.get(i);
+                for (int j = i + 1; j < worktimeItemList.size(); j++) {
+                    WorktimeItem worktimeItem1 = worktimeItemList.get(j);
+                    if (!(worktimeItem1.getEndTime().compareTo(worktimeItem.getStartTime()) <= 0 || worktimeItem1.getStartTime().compareTo(worktimeItem.getEndTime()) >= 0)) {
+                        msg.setError("时间段有交叉:"+worktimeItem1.getStartTime()+"-"+worktimeItem1.getEndTime()+"和"+worktimeItem.getStartTime()+"-"+worktimeItem.getEndTime());
+                        return msg;
+                    }
                 }
             }
         }
+
         User user = userMapper.selectById(token);
         //按当前填报人所属部门或者全公司来匹配
         List<TimeAutoExclude> excludeTimeList = timeAutoExcludeMapper.selectList(new QueryWrapper<TimeAutoExclude>().eq("company_id", user.getCompanyId()));

+ 1 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/TaskController.java

@@ -1037,7 +1037,7 @@ public class TaskController {
         List<Integer> serviceIds = new ArrayList<>();
         for (TaskExecutor executor : taskExecutors) {
             Integer serviceId = executor.getServiceId();
-            if (!StringUtils.isEmpty(serviceId)) {
+            if (serviceId != null) {
                 serviceIds.add(serviceId);
             }
         }

+ 7 - 2
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/TimeType.java

@@ -17,13 +17,12 @@ import lombok.experimental.Accessors;
  * </p>
  *
  * @author Seyason
- * @since 2023-11-27
+ * @since 2023-12-16
  */
 @Data
 @EqualsAndHashCode(callSuper = false)
 @Accessors(chain = true)
 public class TimeType extends Model<TimeType> {
-
     private static final long serialVersionUID=1L;
 
     /**
@@ -528,6 +527,12 @@ public class TimeType extends Model<TimeType> {
     @TableField("not_allowed_expired_project")
     private Integer notAllowedExpiredProject;
 
+    /**
+     * 按时间段填报时,时间是否可重叠
+     */
+    @TableField("time_can_overlap")
+    private Integer timeCanOverlap;
+
 
     @Override
     protected Serializable pkVal() {

+ 11 - 5
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ExpenseSheetServiceImpl.java

@@ -126,9 +126,11 @@ public class ExpenseSheetServiceImpl extends ServiceImpl<ExpenseSheetMapper, Exp
                     sheet.setReviewProcess(2);
                     sheet.setStatus(0);
                 }
+                if (sheet.getStatus() == null) {
+                    sheet.setStatus(1);//默认提交时为待审核状态
+                }
             }
 
-
             isNew = true;
             //检查code不能重复
             Integer num = expenseSheetMapper.selectCount(new QueryWrapper<ExpenseSheet>().eq("company_id", user.getCompanyId()).eq("code", sheet.getCode()));
@@ -625,11 +627,15 @@ public class ExpenseSheetServiceImpl extends ServiceImpl<ExpenseSheetMapper, Exp
         expenseSheetMapper.updateById(sheet);
 
         sheet = expenseSheetMapper.selectById(id);
-        WxCorpInfo wxCorpInfo = wxCorpInfoMapper.selectOne(new QueryWrapper<WxCorpInfo>().eq("company_id", user.getCompanyId()));
-        if (wxCorpInfo != null) {
-            sendAuditResult(wxCorpInfo, user, sheet, null);
+        //考虑到存在二审的流程,只有审核最终通过了才发通知
+        if (sheet.getStatus() == 0) {
+            WxCorpInfo wxCorpInfo = wxCorpInfoMapper.selectOne(new QueryWrapper<WxCorpInfo>().eq("company_id", user.getCompanyId()));
+            if (wxCorpInfo != null) {
+                sendAuditResult(wxCorpInfo, user, sheet, null);
+            }
+            saveNotifyToApplier(sheet, user);
         }
-        saveNotifyToApplier(sheet, user);
+
 
         return new HttpRespMsg();
     }

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

@@ -802,7 +802,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                         List<Integer> serviceIds = new ArrayList<>();
                         for (TaskExecutor executor : taskExecutors) {
                             Integer serviceId = executor.getServiceId();
-                            if (!StringUtils.isEmpty(serviceId)) {
+                            if (serviceId != null) {
                                 serviceIds.add(serviceId);
                             }
                         }

文件差异内容过多而无法显示
+ 2 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/TimeTypeMapper.xml


+ 2 - 2
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/UserMapper.xml

@@ -60,7 +60,7 @@
     <!--单独分页获取人员-->
     <select id="getUserByDepartment" resultType="java.util.Map">
         SELECT a.id, a.role_id as roleId, a.role_name as roleName, a.name, a.phone, a.portrait_url AS portraitUrl, a.role, a.company_id AS companyId, a.cost,
-        a.department_id AS departmentId, b.department_name AS departmentName, a.department_cascade AS departmentCascade,
+        a.department_id AS departmentId, b.department_name AS departmentName, a.department_cascade AS departmentCascade,a.corpwx_userid as corpwxUserid,
         a.month_cost as monthCost, a.salary_type as salaryType, a.is_active as isActive,date_format(a.`inactive_date`, '%Y-%m-%d') AS inactiveDate, a.cost_apply_date as costApplyDate,a.plate1,a.plate2,a.plate3,a.plate4,a.plate5,
         a.job_number as jobNumber, DATE_FORMAT(a.create_time, '%Y-%m-%d %H:%m')  as createTime, c.name as superiorName, c.corpwx_userid as superiorCorpwxUserid
         FROM user AS a
@@ -95,7 +95,7 @@
     <!--范围分页获取人员-->
     <select id="getUserByDepartmentList" resultType="java.util.Map">
         SELECT a.id,  a.role_id as roleId, a.role_name as roleName,  a.name, a.phone, a.portrait_url AS portraitUrl, a.role, a.company_id AS companyId, a.cost,
-        a.department_id AS departmentId, b.department_name AS departmentName, a.department_cascade AS departmentCascade,
+        a.department_id AS departmentId, b.department_name AS departmentName, a.department_cascade AS departmentCascade,a.corpwx_userid as corpwxUserid,
         a.month_cost as monthCost, a.salary_type as salaryType, a.is_active as isActive,date_format(a.`inactive_date`, '%Y-%m-%d') AS inactiveDate, a.cost_apply_date as costApplyDate,a.plate1,a.plate2,a.plate3,a.plate4,a.plate5,
         a.job_number as jobNumber, DATE_FORMAT(a.create_time, '%Y-%m-%d %H:%m')  as createTime, c.name as superiorName, c.corpwx_userid as superiorCorpwxUserid
         FROM user AS a

+ 1 - 4
fhKeeper/formulahousekeeper/timesheet/src/views/expense/expense.vue

@@ -405,7 +405,7 @@
                     v-show="permissions.costAudit || scope.row.status == 1 || scope.row.status == 2"></el-button>
                 </div>
                 <div v-if="isAuditList">
-                  <div v-if="auditTypeItem.auditType == 0">
+                  <div v-if="auditTypeItem.auditType == 0 || auditTypeItem.auditType == 2">
                     <el-button size="mini" @click.stop.native="downloadByA(scope.row)">{{ $t('cha-kan') }}</el-button>
                     <el-button size="mini" style="margin-left:5px;" @click.stop.native="approve(scope.row)">{{
                       $t('btn.through') }}</el-button>
@@ -415,9 +415,6 @@
                   <div v-if="auditTypeItem.auditType == 1">
                     <el-button size="mini" @click.stop.native="approve(scope.row)">审核</el-button>
                   </div>
-                  <div v-if="auditTypeItem.auditType == 2">
-                    <el-button size="mini" @click.stop.native="approve(scope.row)">审核</el-button>
-                  </div>
                 </div>
               </template>
             </el-table-column>

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

@@ -6316,36 +6316,33 @@
                                 alp.push(objs)
                             } 
                         }
-                        // if(zhis.reportTimes){
-                        //     for(let k in zhis.reportTimes){
-                        //         let objs = {}
-                        //         objs.s = zhis.reportTimes[k].split('-')[0]
-                        //         objs.e = zhis.reportTimes[k].split('-')[1]
-                        //         alp.push(objs)
-                        //     }
-                        // }
                         console.log(alp)
                         this.dateAr = alp
-                        let str = this.$t('message.Filledtimeperiodsoverlap')
-                        if(this.dateAr.length > 0) {
-                            const trus = this.fns();
-                            const overlapDataTime = this.getOverlapData(alp);
-                            if (overlapDataTime.length > 0) {
-                                const arrList = overlapDataTime.map((item) => item.p);
-                                str = `${this.zhoData[i].zhoDataTime} 【${arrList.join(',')}】项目 填写的时间段重叠`;
-                            }
+                        if (this.reportTimeType.timeCanOverlap == 0) {
+                            let str = this.$t('message.Filledtimeperiodsoverlap')
+                            if(this.dateAr.length > 0) {
+                                const trus = this.fns();
+                                const overlapDataTime = this.getOverlapData(alp);
+                                if (overlapDataTime.length > 0) {
+                                    const arrList = overlapDataTime.map((item) => item.p);
+                                    str = `${this.zhoData[i].zhoDataTime} 【${arrList.join(',')}】项目 填写的时间段重叠`;
+                                }
 
-                            ll += 1
-                            if(!trus) {
-                                this.$message({
-                                    message: str,
-                                    type: 'error'
-                                })
-                                return false
+                                ll += 1
+                                if(!trus) {
+                                    this.$message({
+                                        message: str,
+                                        type: 'error'
+                                    })
+                                    return false
+                                }
+                            }
+                        } else {
+                            if(this.dateAr.length > 0) {
+                                ll +=1 ;
                             }
                         }
-                           
-                    }
+                    } 
                      if(ll == 0) {
                         this.$message({
                             message: this.$t('message.Pleasefillinthetime'),
@@ -6936,51 +6933,55 @@
             },
             submitReportSon() {
                 this.dateAr = []
-                        let alp = []
-                        if(this.user.timeType.multiWorktime != 1) {
-                            for(var p in this.workForm.domains) {
-                                if(this.workForm.domains[p].startTime || this.workForm.domains[p].endTime) {
-                                    let objs = {}
-                                    objs.s = this.workForm.domains[p].startTime
-                                    objs.e = this.workForm.domains[p].endTime
-                                    alp.push(objs)
-                                }
+                //检查重叠
+                if (this.user.timeType.reportTimeType == 2 && this.user.timeType.timeCanOverlap == 0) {
+                    let alp = []
+                    if(this.user.timeType.multiWorktime != 1) {
+                        for(var p in this.workForm.domains) {
+                            if(this.workForm.domains[p].startTime || this.workForm.domains[p].endTime) {
+                                let objs = {}
+                                objs.s = this.workForm.domains[p].startTime
+                                objs.e = this.workForm.domains[p].endTime
+                                alp.push(objs)
                             }
-                            this.dateAr = alp
-                            if(this.dateAr.length > 0) {
-                                let trus = this.fns()
-                                if(!trus) {
-                                    this.$message({
-                                        message: this.$t('message.Filledtimeperiodsoverlap'),
-                                        type: "error"
-                                    });
-                                    return
-                                }
+                        }
+                        this.dateAr = alp
+                        if(this.dateAr.length > 0) {
+                            let trus = this.fns()
+                            if(!trus) {
+                                this.$message({
+                                    message: this.$t('message.Filledtimeperiodsoverlap'),
+                                    type: "error"
+                                });
+                                return
                             }
-                        } else {
-                            for(var p in this.workForm.domains) {
-                                var slll = this.workForm.domains[p]
-                                for(var o in slll.worktimeList) {
-                                    if(slll.worktimeList[o].startTime || slll.worktimeList[o].endTime) {
-                                        let objs = {}
-                                        objs.s = slll.worktimeList[o].startTime
-                                        objs.e = slll.worktimeList[o].endTime
-                                        alp.push(objs)
-                                    }
+                        }
+                    } else {
+                        for(var p in this.workForm.domains) {
+                            var slll = this.workForm.domains[p]
+                            for(var o in slll.worktimeList) {
+                                if(slll.worktimeList[o].startTime || slll.worktimeList[o].endTime) {
+                                    let objs = {}
+                                    objs.s = slll.worktimeList[o].startTime
+                                    objs.e = slll.worktimeList[o].endTime
+                                    alp.push(objs)
                                 }
                             }
-                            this.dateAr = alp
-                            if(this.dateAr.length > 0) {
-                                let trus = this.fns()
-                                if(!trus) {
-                                    this.$message({
-                                        message: this.$t('message.Filledtimeperiodsoverlap'),
-                                        type: "error"
-                                    });
-                                    return
-                                }
+                        }
+                        this.dateAr = alp
+                        if(this.dateAr.length > 0) {
+                            let trus = this.fns()
+                            if(!trus) {
+                                this.$message({
+                                    message: this.$t('message.Filledtimeperiodsoverlap'),
+                                    type: "error"
+                                });
+                                return
                             }
                         }
+                    }
+                }
+                        
                         //检查子项目
                         if (this.user.timeType.subProMustFill == 1) {
                             for(var p in this.workForm.domains) {
@@ -7267,16 +7268,19 @@
                                         });
                                         return;
                                     }
-                                    for (var p = j+1;p<workList.length; p++) {
-                                        var jItem = workList[p];
-                                        if ((jItem.startTime>=curItem.startTime&&jItem.startTime < curItem.endTime)
-                                                || (jItem.endTime>curItem.startTime&&jItem.endTime <= curItem.endTime)) {
-                                            this.$message({
-                                                message: this.$t('message.period')+curItem.startTime+'-'+curItem.endTime+this.$t('message.and')+ 
-                                                    jItem.startTime+'-'+jItem.endTime+ this.$t('message.Thereisoverlappleaseedit'),
-                                                type: "error"
-                                            });
-                                            return;
+                                    //时间不可重叠
+                                    if (this.reportTimeType.timeCanOverlap == 0) {
+                                        for (var p = j+1;p<workList.length; p++) {
+                                            var jItem = workList[p];
+                                            if ((jItem.startTime>=curItem.startTime&&jItem.startTime < curItem.endTime)
+                                                    || (jItem.endTime>curItem.startTime&&jItem.endTime <= curItem.endTime)) {
+                                                this.$message({
+                                                    message: this.$t('message.period')+curItem.startTime+'-'+curItem.endTime+this.$t('message.and')+ 
+                                                        jItem.startTime+'-'+jItem.endTime+ this.$t('message.Thereisoverlappleaseedit'),
+                                                    type: "error"
+                                                });
+                                                return;
+                                            }
                                         }
                                     }
                                 }

+ 11 - 8
fhKeeper/formulahousekeeper/timesheet_h5/src/views/edit/index.vue

@@ -2267,14 +2267,17 @@ import timetoolVue from '../timetool/timetool.vue';
                                             "结束时间必须大于开始时间");
                                     return;
                                 }
-                                for (var p = j+1;p<workList.length; p++) {
-                                    var jItem = workList[p];
-                                    if ((jItem.startTime>=curItem.startTime&&jItem.startTime < curItem.endTime)
-                                            || (jItem.endTime>curItem.startTime&&jItem.endTime <= curItem.endTime)) {
-                                        
-                                        this.$toast.fail("时间段"+curItem.startTime+'-'+curItem.endTime+"与"+ 
-                                                jItem.startTime+'-'+jItem.endTime+ "存在重叠,请修改。");
-                                        return;
+                                //时间段不可重叠
+                                if (this.reportTimeType.timeCanOverlap == 0) {
+                                    for (var p = j+1;p<workList.length; p++) {
+                                        var jItem = workList[p];
+                                        if ((jItem.startTime>=curItem.startTime&&jItem.startTime < curItem.endTime)
+                                                || (jItem.endTime>curItem.startTime&&jItem.endTime <= curItem.endTime)) {
+                                            
+                                            this.$toast.fail("时间段"+curItem.startTime+'-'+curItem.endTime+"与"+ 
+                                                    jItem.startTime+'-'+jItem.endTime+ "存在重叠,请修改。");
+                                            return;
+                                        }
                                     }
                                 }
                             }