فهرست منبع

增加审批自动通过的设置项;停用人员时可选临时还是永久

QuYueTing 2 ماه پیش
والد
کامیت
2651f2b312

+ 29 - 38
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ReportController.java

@@ -477,7 +477,6 @@ public class ReportController {
                 customData[i] = 0.0;
             }
         }
-        System.out.println("projectAuditorId:"+(projectAuditorId == null?"为Null":"Length="+projectAuditorId.length));
         if (projectAuditorId == null || projectAuditorId.length == 0) {
             projectAuditorId = new String[projectId.length];
             for(int i=0;i<projectAuditorId.length; i++) {
@@ -1193,38 +1192,7 @@ public class ReportController {
                                 //并非并行审核模式下的代填,需要设置审核状态
                                 report.setState(0);
                                 setReportWorkflowAuditor(auditWorkflowList, allDeptList, report,comTimeType);
-//                                if (auditWorkflowList.size() == 0) {
-//                                    //没有自定义审核流,直接代填的,还是走正常的审核流程
-//                                    report.setIsDeptAudit(0);
-//                                    report.setIsFinalAudit(1);
-//                                    report.setState(0);
-//                                } else {
-//                                    System.out.println("代填的情况下,有自定义审核流程");
-
-//                                    int projectLeaderNodeIndex = 0;
-//                                    for (int t=0;t<auditWorkflowList.size(); t++) {
-//                                        if (auditWorkflowList.get(t).getIsDeptAudit() == 0) {
-//                                            projectLeaderNodeIndex = t;
-//                                            break;
-//                                        }
-//                                    }
-//                                    if (projectLeaderNodeIndex == auditWorkflowList.size() -1) {
-//                                        //最后一个节点就是项目经理,那就不用审核了,直接通过
-//                                        report.setState(1);
-//                                    } else {
-//                                        //否则取下一个节点,待审核
-//                                        report.setState(0);
-//                                        int nextIndex = projectLeaderNodeIndex + 1;
-//                                        AuditWorkflowTimeSetting nextNode = auditWorkflowList.get(nextIndex);
-//                                        report.setIsFinalAudit((nextIndex == auditWorkflowList.size()-1)?1:0);
-//                                        report.setIsDeptAudit(nextNode.getIsDeptAudit());
-//                                        report.setAuditDeptid(nextNode.getAuditDeptId());
-//                                        report.setAuditDeptManagerid(nextNode.getAuditDeptId() != null?allDeptList.stream().filter(d->d.getDepartmentId().equals(nextNode.getAuditDeptId())).findFirst().get().getManagerId(): null);
-//                                    }
-//                                }
                             }
-
-
                             if (taskId != null && taskId[i] != null && taskId[i] != 0) {
                                 report.setTaskId(taskId[i]);
                             }
@@ -1607,11 +1575,18 @@ public class ReportController {
             for (User creator : creatorList) {
                 if (!StringUtils.isEmpty(creator.getSuperiorId())) {
                     User superior = userMapper.selectById(creator.getSuperiorId());
+                    //校验直属日报审核人是否已经离职
+                    if (superior.getIsActive() == 0) {
+                        HttpRespMsg msg = new HttpRespMsg();
+                        msg.setError("直属日报审核人已离职,请联系管理员重新设置后再提交");
+                        return msg;
+                    }
                     if (!tempAuditorUserList.stream().anyMatch(item -> item.getId().equals(superior.getId()))) {
                         tempAuditorUserList.add(superior);
                     }
                 }
             }
+
             for (Report report : reportList) {
                 report.setDepartmentAuditState(0);
                 //优先按照当前日报填写人的直属审核人审核
@@ -1631,6 +1606,14 @@ public class ReportController {
                             HttpRespMsg httpRespMsg=new HttpRespMsg();
                             httpRespMsg.setError("当前所在部门["+first.get().getDepartmentName()+"]不存在负责人,请联系管理员设置");
                             return httpRespMsg;
+                        } else {
+                            //检查部门负责人是否已经离职
+                            User deptAuditor = userMapper.selectById(first.get().getManagerId());
+                            if (deptAuditor.getIsActive() == 0) {
+                                HttpRespMsg msg = new HttpRespMsg();
+                                msg.setError("部门负责人已离职,请联系管理员重新设置后再提交");
+                                return msg;
+                            }
                         }
                         report.setAuditDeptid(first.get().getDepartmentId());
                         report.setProjectAuditorId(null);
@@ -1938,8 +1921,8 @@ public class ReportController {
             }
         }
         HttpRespMsg httpRespMsg = reportService.editReport(reportList, createDate.length > 0 ? createDate[0] : null, targetUserList, hourCost, user.getCompanyId(), summary, weeklyAttachment);
-        //填报自动通过功能:【上海绎维】、【火石演示】、【博通容合】、【威派格】使用
-        if (company.getId() == 862 || company.getId() == 10 || company.getId() == 3344 || company.getId() == 936) {
+        //填报自动通过功能:【上海绎维】、【火石演示】、【博通容合】、【威派格】使用;以及设置了自动审核通过的公司
+        if (company.getId() == 862 || company.getId() == 3344 || company.getId() == 936 || comTimeType.getAutoProjectApprove()) {
             //项目审核人是提交人的情况,直接审核
             List<String> reportIds = new ArrayList<>();
             for (int i = 0; i<id.length; i++) {
@@ -2971,7 +2954,7 @@ public class ReportController {
     }
 
     @RequestMapping("/denyByCheckId")
-    public HttpRespMsg denyByCheckId(String userId){
+    public HttpRespMsg denyByCheckId(String userId, @RequestParam(required = false,defaultValue = "true") Boolean isPermanent, HttpServletRequest request){
         HttpRespMsg msg=new HttpRespMsg();
         Integer companyId = userMapper.selectById(request.getHeader("token")).getCompanyId();
         LambdaQueryWrapper<Report> queryWrapper = new LambdaQueryWrapper<>();
@@ -2981,6 +2964,7 @@ public class ReportController {
         List<Report> reportList = reportMapper.selectList(queryWrapper);
         reportList.forEach(r->{
             r.setState(2);
+            r.setRejectReason("审核人已离职,请重新提交日报");
         });
         if(!reportService.updateBatchById(reportList)){
             msg.setError("验证失败");
@@ -2989,12 +2973,16 @@ public class ReportController {
         User user = userMapper.selectById(userId);
         user.setIsActive(0);
         userMapper.updateById(user);
-        participationMapper.delete(new LambdaQueryWrapper<Participation>().eq(Participation::getUserId,user.getId()));
+        if (isPermanent) {
+            //永久移除,需要删除
+            participationMapper.delete(new LambdaQueryWrapper<Participation>().eq(Participation::getUserId,user.getId()));
+        }
+
         return msg;
     }
 
     @RequestMapping("/transferReportAuditor")
-    public HttpRespMsg transferReportAuditor(String userId, String targetAuditorId){
+    public HttpRespMsg transferReportAuditor(String userId, String targetAuditorId,@RequestParam(required = false,defaultValue = "true") Boolean isPermanent){
         HttpRespMsg msg=new HttpRespMsg();
         Integer companyId = userMapper.selectById(request.getHeader("token")).getCompanyId();
         LambdaQueryWrapper<Report> queryWrapper = new LambdaQueryWrapper<>();
@@ -3016,7 +3004,10 @@ public class ReportController {
         User user = userMapper.selectById(userId);
         user.setIsActive(0);
         userMapper.updateById(user);
-        participationMapper.delete(new LambdaQueryWrapper<Participation>().eq(Participation::getUserId,user.getId()));
+        if (isPermanent) {
+            //永久移除,需要删除
+            participationMapper.delete(new LambdaQueryWrapper<Participation>().eq(Participation::getUserId,user.getId()));
+        }
         return msg;
     }
 

+ 13 - 13
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/UserController.java

@@ -748,24 +748,24 @@ public class UserController {
     public HttpRespMsg changeSysManager(String toUserId, Integer myRoleId) {return userService.changeSysManager(toUserId, myRoleId, request); }
 
     @RequestMapping("/deactiveUser")
-    public HttpRespMsg deactiveUser(User user) {
+    public HttpRespMsg deactiveUser(User user, @RequestParam(required = false, defaultValue = "true") Boolean isPermanent) {
         HttpRespMsg msg = new HttpRespMsg();
         Integer companyId = userService.getById(request.getHeader("token")).getCompanyId();
-        //针对美莱德,飞锐特,湾创在对人员进行停用操作时,需要检查待他审核的日报
-        if(companyId==876||companyId==877||companyId==878 || companyId==10){
-            LambdaQueryWrapper<Report> queryWrapper = new LambdaQueryWrapper<>();
-            queryWrapper.eq(Report::getState,0);
-            queryWrapper.eq(Report::getCompanyId,companyId);
-            queryWrapper.and(wrapper->wrapper.and(wr->wr.eq(Report::getAuditDeptManagerid,user.getId()).eq(Report::getIsDeptAudit,1)).or(wr1->wr1.eq(Report::getProjectAuditorId,user.getId()).eq(Report::getIsDeptAudit,0)));
-            Integer count = reportMapper.selectCount(queryWrapper);
-            if(count>0){
-                msg.setError("当前员工有待审核日报,请确认处理方式?");
-                return msg;
-            }
+        //需要检查待他审核的日报
+        LambdaQueryWrapper<Report> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(Report::getState,0);
+        queryWrapper.eq(Report::getCompanyId,companyId);
+        queryWrapper.and(wrapper->wrapper.and(wr->wr.eq(Report::getAuditDeptManagerid,user.getId()).eq(Report::getIsDeptAudit,1)).or(wr1->wr1.eq(Report::getProjectAuditorId,user.getId()).eq(Report::getIsDeptAudit,0)));
+        Integer count = reportMapper.selectCount(queryWrapper);
+        if(count>0){
+            msg.setError("当前员工有待审核日报,请确认处理方式?");
+            return msg;
         }
         user.setIsActive(0);
         userService.updateById(user);
-        participationMapper.delete(new LambdaQueryWrapper<Participation>().eq(Participation::getUserId,user.getId()));
+        if (isPermanent) {
+            participationMapper.delete(new LambdaQueryWrapper<Participation>().eq(Participation::getUserId,user.getId()));
+        }
         return msg;
     }
 

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

@@ -1,23 +1,23 @@
 package com.management.platform.entity;
 
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableId;
+import java.math.BigDecimal;
 import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableField;
+import java.io.Serializable;
+import java.util.List;
+
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
 
-import java.io.Serializable;
-import java.math.BigDecimal;
-import java.util.List;
-
 /**
  * <p>
  * 
  * </p>
  *
  * @author Seyason
- * @since 2025-01-04
+ * @since 2025-03-11
  */
 @Data
 @EqualsAndHashCode(callSuper = false)
@@ -644,6 +644,11 @@ public class TimeType extends Model<TimeType> {
     @TableField("report_charge_msg")
     private Integer reportChargeMsg;
 
+    /**
+     * 项目审核人是自己时自动审核通过
+     */
+    @TableField("auto_project_approve")
+    private Boolean autoProjectApprove;
 
     @TableField(exist = false)
     private List<User> userList;
@@ -652,6 +657,7 @@ public class TimeType extends Model<TimeType> {
     @TableField(exist = false)
     private Integer saasSyncContact;
 
+
     @Override
     protected Serializable pkVal() {
         return this.companyId;

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

@@ -13692,6 +13692,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
         return msg;
     }
 
+    //依斯倍SAP项目同步
     @Override
     public HttpRespMsg syncProjectWithSap(String startDate,String endDate,String projectCodes) {
         HttpRespMsg msg=new HttpRespMsg();

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

@@ -995,7 +995,6 @@ public class WxCorpInfoServiceImpl extends ServiceImpl<WxCorpInfoMapper, WxCorpI
                 contactSyncLogMapper.insert(contactSyncLog);
                 user.setIsActive(0);//先同步过来,但是停用
                 userMapper.insert(user);
-                participationMapper.delete(new LambdaQueryWrapper<Participation>().eq(Participation::getUserId,user.getId()));
             }else {
                 userMapper.insert(user);
                 contactSyncLog.setResult(1);

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 5 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/TimeTypeMapper.xml


+ 1 - 1
fhKeeper/formulahousekeeper/timesheet/src/i18n/zh.json

@@ -198,7 +198,7 @@
     "read": "已读",
     "changeThePassword": "修改密码",
     "launchTheLogin": "退出登录",
-    "confirmExit": "确定退出吗",
+    "confirmExit": "确定退出吗",
     "prompts": "提示",
     "expired": "已过期",
     "AskForLeaveOnTheSameDay": "当日请假",

+ 5 - 0
fhKeeper/formulahousekeeper/timesheet/src/views/settings/timetype.vue

@@ -382,6 +382,11 @@
                 <!-- <span v-if="timeType.reportAuditType == 10">公司副总:{{timeType.thirdAuditor}}</span><el-link underline="none" v-if="timeType.reportAuditType == 10">设置</el-link> -->
             </el-tag>
         </div>
+        <div class="yanjiu" >
+            <p style="margin-left:10px;color:#666;">自动审核</p>
+            <el-switch style="margin-left: 55px" v-model="timeType.autoProjectApprove" :active-color="themeColor" > </el-switch>
+            <span style="margin-left:10px;color:#999;">项目审核人是自己时自动审核通过</span>
+        </div>
         <div class="yanjiu">
             <p style="margin-left:10px;color:#666;">{{ $t('xiangMuChaoQiHouBuKeTianBao') }}</p>
             <el-switch style="margin-left: 40px" v-model="timeType.notAllowedExpiredProject" :active-color="themeColor" > </el-switch>

+ 12 - 10
fhKeeper/formulahousekeeper/timesheet/src/views/team/index.vue

@@ -650,6 +650,12 @@
                 <el-form-item :label="$t('employeedeparture')" >
                     <el-date-picker type="date" v-model="deactiveDate" value-format="yyyy-MM-dd" format="yyyy-MM-dd" :placeholder="$t('defaultText.pleaseChoose')" />
                 </el-form-item>
+                <el-form-item label="停用时效" >
+                  <el-radio-group v-model="isPermanent">
+                      <el-radio :label="true" >永久停用</el-radio>
+                      <el-radio :label="false" >暂时停用</el-radio>
+                  </el-radio-group>
+                </el-form-item>
             </el-form>
             <span slot="footer" class="dialog-footer">
                 <el-button type="default" @click="deactiveDialog = false">{{ $t('btn.cancel') }}</el-button>
@@ -981,6 +987,7 @@ export default {
   },
   data() {
     return {
+      isPermanent: true,
       reportAuditorSelectDialog: false,
       userInActiveForm:{way:0,targetAuditorId:null},
       isExporting: false,
@@ -2298,6 +2305,7 @@ export default {
         {
           id: this.deactiveUser.id,
           inactiveDate: this.deactiveDate,
+          isPermanent: this.isPermanent
         },
         (res) => {
           if (res.code == "ok") {
@@ -2308,16 +2316,9 @@ export default {
             });
             this.getUser();
           } else {
-            if(this.user.companyId==876||this.user.companyId==877||this.user.companyId==878 || this.user.companyId == 10){
-              //新的模式
-              this.userInActiveForm.userId = this.deactiveUser.id;
-              this.reportAuditorSelectDialog = true;
-            }else{
-              this.$message({
-                message: error,
-                type: "error",
-              });
-            }
+            //新的模式
+            this.userInActiveForm.userId = this.deactiveUser.id;
+            this.reportAuditorSelectDialog = true;
           }
         },
         (error) => {
@@ -2330,6 +2331,7 @@ export default {
     },
 
     confirmInactiveWay() {
+      this.userInActiveForm.isPermanent = this.isPermanent;
       var url = this.userInActiveForm.way?'/report/transferReportAuditor':'/report/denyByCheckId'
       this.http.post(
           url,