ソースを参照

修复按周填报bug, 人员部门同步层级结构

seyason 2 年 前
コミット
5b0ea25b50

+ 3 - 2
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ReportController.java

@@ -471,7 +471,7 @@ public class ReportController {
                         return msg;
                     }
 
-                    List<LocalDate> workDaysListInRange = WorkDayCalculateUtils.getWorkDaysListInRange(startDate, endDate);
+                    List<LocalDate> workDaysListInRange = WorkDayCalculateUtils.getWorkDaysListInRange(startDate, endDate, comTimeType.getIncludeWeekends());
                     if (workDaysListInRange.size() == 0) {
                         HttpRespMsg msg = new HttpRespMsg();
                         msg.setError("工作日天数为0,无法提交。(批量填报会自动跳过节假日,请尝试填写日报或者重新选择日期范围)");
@@ -1198,12 +1198,13 @@ public class ReportController {
                 DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
                 LocalDate localStartDate = LocalDate.parse(startDate, dateTimeFormatter);
                 LocalDate localEndDate = LocalDate.parse(endDate, dateTimeFormatter);
+                TimeType timeType = timeTypeMapper.selectById(byId.getCompanyId());
                 //时间间隔不得超过365天
                 long until = localStartDate.until(localEndDate, ChronoUnit.DAYS);
                 if (until > 365) {
                     msg.setError("日期间隔不得超过365天");
                 } else {
-                    msg.data = WorkDayCalculateUtils.getWorkDaysCountInRange(startDate, endDate);
+                    msg.data = WorkDayCalculateUtils.getWorkDaysCountInRange(startDate, endDate, timeType.getIncludeWeekends());
                 }
             }
         }

+ 40 - 2
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/WeiXinCorpController.java

@@ -1782,6 +1782,9 @@ public class WeiXinCorpController {
             }
         }
 
+        //更新人员的deptcascade
+        updateUserDeptCascade(companyId);
+
         return new HttpRespMsg();
     }
 
@@ -1938,8 +1941,7 @@ public class WeiXinCorpController {
                         .setRoleId(defaultRole.getId())
                         .setRoleName(defaultRole.getRolename())
                         .setCompanyId(companyId)
-                        .setDepartmentId(departmentId)
-                        .setPhone(userJson.getString("mobile"))
+                        .setDepartmentId(departmentId).setPhone(userJson.getString("mobile"))
                         .setName(userJson.getString("name"))
                         .setCorpwxUserid(curUserid)
                         .setColor(ColorUtil.randomColor());
@@ -2193,6 +2195,42 @@ public class WeiXinCorpController {
         return msg;
     }
 
+    //更新用户部门的层级结构
+    @RequestMapping("/updateUserDeptCascade")
+    public HttpRespMsg updateUserDeptCascade(Integer companyId) {
+        HttpRespMsg msg = new HttpRespMsg();
+        List<User> userList = userMapper.selectList(new QueryWrapper<User>().select("id, name, department_id").eq("company_id", companyId));
+        List<Department> allDeptList = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id", companyId));
+        List<User> updateList = new ArrayList<>();
+        for (User user : userList) {
+            User u = new User();
+            u.setId(user.getId());
+            u.setDepartmentCascade(convertDepartmentIdToCascade(user.getDepartmentId(), allDeptList));
+            updateList.add(u);
+        }
+        userService.updateBatchById(updateList);
+        return msg;
+    }
+
+    //将部门id转换为部门层级
+    private String convertDepartmentIdToCascade(Integer id, List<Department> allDeptList) {
+        StringBuilder cascade = new StringBuilder();
+        if (id == 0) {
+            cascade.append("0");
+        } else {
+            cascade.append(id);
+            id = findById(id, allDeptList).getSuperiorId();
+            while (id != null) {
+                cascade.append(",").append(id);
+                id = findById(id, allDeptList).getSuperiorId();
+            }
+        }
+        return cascade.toString();
+    }
+
+    private Department findById(int id, List<Department> allList) {
+        return allList.stream().filter(all->all.getDepartmentId().intValue() == id).findFirst().get();
+    }
 
     private boolean judgeIsLeader(String userId) {
         int cnt = projectAuditorMapper.selectCount(new QueryWrapper<ProjectAuditor>().eq("auditor_id", userId));

+ 14 - 8
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 2022-08-05
+ * @since 2022-08-07
  */
 @Data
 @EqualsAndHashCode(callSuper = false)
@@ -314,9 +314,15 @@ public class TimeType extends Model<TimeType> {
     @TableField("user_custom_static")
     private Integer userCustomStatic;
 
+    /**
+     * 批量填报是否包含节假日;0-不包含,1-包含
+     */
+    @TableField("include_weekends")
+    private Integer includeWeekends;
+
     @TableField(exist = false)
     private List<User> userList;
-
+    
     @Override
     protected Serializable pkVal() {
         return this.companyId;

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

@@ -259,16 +259,16 @@ public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Departm
         return departmentMapper.selectCount(new QueryWrapper<Department>().eq("superior_id", id)) > 0;
     }
 
-    private void fillSubDepartmentList(List<Department> allDepts, DepartmentVO parentDept) {
+    private void fillSubDepartmentList(List<Department> allDepts, DepartmentVO parentDept, List<DepartmentOtherManager> otherManagerList) {
         Integer id = parentDept.getId();
         List<Department> collect = allDepts.stream().filter(all -> all.getSuperiorId() != null && all.getSuperiorId().intValue() == id).collect(Collectors.toList());
         List<DepartmentVO> subResult = new ArrayList<>();
         if (collect.size() > 0) {
             collect.forEach(c->{
-                DepartmentVO vo = formatDepartmentToVO(c);
+                DepartmentVO vo = formatDepartmentToVO(c, otherManagerList);
                 subResult.add(vo);
                 //继续添加当前部门的子部门
-                fillSubDepartmentList(allDepts, vo);
+                fillSubDepartmentList(allDepts, vo, otherManagerList);
             });
         }
         if (subResult.size() > 0) {
@@ -285,13 +285,14 @@ public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Departm
             Integer companyId = userMapper.selectById(request.getHeader("Token")).getCompanyId();
             List<Department> departmentList = departmentMapper.selectList(new QueryWrapper<Department>()
                     .eq("company_id", companyId));
+            List<DepartmentOtherManager> departmentOtherManagerList = departmentOtherManagerMapper.selectList(new QueryWrapper<DepartmentOtherManager>().eq("company_id", companyId));
             //结果列表
             List<DepartmentVO> list = new ArrayList<>();
             List<Department> rootDepartments = departmentList.stream().filter(dept -> dept.getSuperiorId() == null).collect(Collectors.toList());
             rootDepartments.forEach(root->{
-                DepartmentVO rootDeptVO = formatDepartmentToVO(root);
+                DepartmentVO rootDeptVO = formatDepartmentToVO(root, departmentOtherManagerList);
                 list.add(rootDeptVO);
-                fillSubDepartmentList(departmentList, rootDeptVO);
+                fillSubDepartmentList(departmentList, rootDeptVO, departmentOtherManagerList);
             });
             //返回数据
             httpRespMsg.data = list;
@@ -303,8 +304,7 @@ public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Departm
     }
 
     //将部门PO转化为部门VO
-    private DepartmentVO formatDepartmentToVO(Department department) {
-        List<DepartmentOtherManager> departmentOtherManagerList = departmentOtherManagerMapper.selectList(new QueryWrapper<DepartmentOtherManager>().eq("company_id", department.getCompanyId()));
+    private DepartmentVO formatDepartmentToVO(Department department, List<DepartmentOtherManager> departmentOtherManagerList) {
         List<String> collect = departmentOtherManagerList.stream().filter(dm -> dm.getDepartmentId().equals(department.getDepartmentId())).map(vo -> vo.getOtherManagerId()).collect(Collectors.toList());
         //这俩东西并没有继承关系
         return new DepartmentVO()

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

@@ -64,6 +64,8 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
     public String TEMPLATE_REPORT_PASS;
     @Value("${wx.template_report_reject}")
     public String TEMPLATE_REPORT_REJECT;
+    @Value("${configEnv.isDev}")
+    public boolean isDev;
 
     @Value("${wx.app_id}")
     public String appId;
@@ -1451,6 +1453,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
     }
 
     public boolean pushReject(String str, User user, String rejectUsername, String reason) {
+        if (isDev) return true;
         //1,配置
         WxMpInMemoryConfigStorage wxStorage = new WxMpInMemoryConfigStorage();
         wxStorage.setAppId(appId);
@@ -1484,6 +1487,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
 
 
     public boolean pushPass(String projectName, User user) {
+        if (isDev) return true;
         //1,配置
         WxMpInMemoryConfigStorage wxStorage = new WxMpInMemoryConfigStorage();
         wxStorage.setAppId(appId);
@@ -1583,9 +1587,12 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                 Report upR = new Report();
                 upR.setId(r.getId());
                 upR.setGroupAuditState(0);
-                String inchargerId = taskGroupMapper.selectById(r.getGroupId()).getInchargerId();
-                upR.setProjectAuditorId(inchargerId);
-                upR.setProjectAuditorName(userMapper.selectById(inchargerId).getName());
+                System.out.println("groupId=="+r.getGroupId());
+                if (r.getGroupId() != 0) {
+                    String inchargerId = taskGroupMapper.selectById(r.getGroupId()).getInchargerId();
+                    upR.setProjectAuditorId(inchargerId);
+                    upR.setProjectAuditorName(userMapper.selectById(inchargerId).getName());
+                }
                 newList.add(upR);
             }
             updateBatchById(newList);

+ 29 - 20
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/util/WorkDayCalculateUtils.java

@@ -97,14 +97,14 @@ public class WorkDayCalculateUtils {
      * @param endDate
      * @return
      */
-    public static List<LocalDate> getWorkDaysListInRange(String startDate, String endDate) {
+    public static List<LocalDate> getWorkDaysListInRange(String startDate, String endDate, int includeWeekends) {
         int daysOffset = 0;
         LocalDate localStartDate = LocalDate.parse(startDate, dateTimeFormatter);
         LocalDate localEndDate = LocalDate.parse(endDate, dateTimeFormatter);
         List<LocalDate> list = new ArrayList<>();
         while(true) {
             localStartDate = localStartDate.plusDays(daysOffset);
-            if (isWorkDay(localStartDate)) {
+            if (includeWeekends == 1 || isWorkDay(localStartDate)) {
                 list.add(localStartDate);
             }
             //到达结束日期,结束计算
@@ -125,28 +125,37 @@ public class WorkDayCalculateUtils {
      * @param endDate
      * @return
      */
-    public static int getWorkDaysCountInRange(String startDate, String endDate) {
-        int daysOffset = 0;
-        if (startDate.compareTo(endDate) > 0) {
-            return -1;
-        }
+    public static int getWorkDaysCountInRange(String startDate, String endDate, int includeWeekend) {
+        int count = 0;
         LocalDate localStartDate = LocalDate.parse(startDate, dateTimeFormatter);
         LocalDate localEndDate = LocalDate.parse(endDate, dateTimeFormatter);
-        int count = 0;
-        while(true) {
-            localStartDate = localStartDate.plusDays(daysOffset);
-            if (isWorkDay(localStartDate)) {
-                count++;
-            }
-            //到达结束日期,结束计算
-            if (localStartDate.isEqual(localEndDate)) {
-                break;
+
+        if (includeWeekend == 0) {
+            //不含周末节假日
+            int daysOffset = 0;
+            if (startDate.compareTo(endDate) > 0) {
+                return -1;
             }
-            //每次加一天
-            if (daysOffset == 0) {
-                daysOffset = 1;
+
+            while(true) {
+                localStartDate = localStartDate.plusDays(daysOffset);
+                if (isWorkDay(localStartDate)) {
+                    count++;
+                }
+                //到达结束日期,结束计算
+                if (localStartDate.isEqual(localEndDate)) {
+                    break;
+                }
+                //每次加一天
+                if (daysOffset == 0) {
+                    daysOffset = 1;
+                }
             }
+        } else {
+            //全部日期
+            count = (int)(localEndDate.toEpochDay() - localStartDate.toEpochDay() + 1);
         }
+
         return count;
     }
 
@@ -202,6 +211,6 @@ public class WorkDayCalculateUtils {
 
 
     public static void main(String[] args) {
-        System.out.println(getWorkDaysCountInRange("2019-01-01","2019-12-31"));
+        System.out.println(getWorkDaysCountInRange("2022-08-06","2022-08-08", 1));
     }
 }

ファイルの差分が大きいため隠しています
+ 2 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/TimeTypeMapper.xml


+ 37 - 1
fhKeeper/formulahousekeeper/ops-platform/src/main/java/com/management/platform/entity/TimeType.java

@@ -15,7 +15,7 @@ import lombok.experimental.Accessors;
  * </p>
  *
  * @author Seyason
- * @since 2022-07-25
+ * @since 2022-08-07
  */
 @Data
 @EqualsAndHashCode(callSuper = false)
@@ -156,6 +156,18 @@ public class TimeType extends Model<TimeType> {
     @TableField("custom_data_status")
     private Integer customDataStatus;
 
+    /**
+     * 工时填报数值收集字段最大值是否限制 0-否 1-是
+     */
+    @TableField("custom_data_max_status")
+    private Integer customDataMaxStatus;
+
+    /**
+     * 工时填报数值收集字段最大值限制
+     */
+    @TableField("custom_data_max_value")
+    private Integer customDataMaxValue;
+
     /**
      * 财务成本导入是否需要审核
      */
@@ -282,6 +294,30 @@ public class TimeType extends Model<TimeType> {
     @TableField("project_level_state")
     private Integer projectLevelState;
 
+    /**
+     * 0-未开启 1-开启
+     */
+    @TableField("need_evaluate")
+    private Integer needEvaluate;
+
+    /**
+     * 0-未开启 1-开启
+     */
+    @TableField("output_value_status")
+    private Integer outputValueStatus;
+
+    /**
+     * 0-未开启 1-开启
+     */
+    @TableField("user_custom_static")
+    private Integer userCustomStatic;
+
+    /**
+     * 批量填报是否包含节假日;0-不包含,1-包含
+     */
+    @TableField("include_weekends")
+    private Integer includeWeekends;
+
 
     @Override
     protected Serializable pkVal() {

ファイルの差分が大きいため隠しています
+ 7 - 1
fhKeeper/formulahousekeeper/ops-platform/src/main/resources/mapper/TimeTypeMapper.xml


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

@@ -2838,7 +2838,7 @@
                 this.$forceUpdate();
             },
 
-            getGroupStages(domain, index) {
+            getGroupStages(domain, index, keepStage) {
                 // console.log(domain);
                 if(!domain.groupId){
                     domain.projectAuditorId = ''
@@ -2852,7 +2852,9 @@
                 this.http.post("/stages/getProjectStagesByGroup", {groupId: domain.groupId},
                     res => {
                         if (res.code == "ok") {
-                            domain.stage = '';
+                            if (!keepStage) {
+                                domain.stage = '';
+                            }
                             domain.stages = res.data;
                             this.$forceUpdate();
                         }
@@ -3979,16 +3981,21 @@
                 sss.con = item.con
                 sss.progress = item.progress
                 sss.time = item.time
+                sss.groupId = item.groupId
+                sss.stage = item.stage;
                 sss.workingTime = item.workingTime
                 sss.projectAuditorId = item.projectAuditorId;
                 if (this.timeBasecostList && this.timeBasecostList.length > 0) {
                     //默认选中第一个
                     sss.basecostId = this.timeBasecostList[0].id;
                 }
+                
                 var that = this
                 setTimeout(() =>{
+                    var isFirstEdit = false;
                     if(Object.keys(item).length < 5) {
-                        // console.log(456)
+                        //首次点开当前的这个cell,初始化数据
+                        isFirstEdit = true;
                         sss.subProjectId = that.workForm.domains[0].subProjectId
                         sss.stage = that.workForm.domains[0].stage
                         sss.subProjectList = that.workForm.domains[0].subProjectList
@@ -4002,6 +4009,8 @@
                         sss.stages = item.stages
                         sss.taskGroups = item.taskGroups;
                         sss.auditUserList = obj.auditUserList;
+                        sss.degreeId = item.degreeId;
+                        sss.customData = item.customData;
                     }
                     if (sss.auditUserList != null && sss.auditUserList.length==1) {
                         //只有一个审核人,自动设置上去
@@ -4013,30 +4022,16 @@
                     that.zhoBaoName = names
                     that.zhoBao = sss
                     that.zhis = row
+                    if (sss.groupId) {
+                        //最后一个参数表示是否保留stage的值,不要重置为空
+                        this.getGroupStages(that.zhoBao, 0, !isFirstEdit)
+                    }
                     that.$forceUpdate();
-                },500);
-                // if(Object.keys(sss).length <= 4) {
-                //     sss.subProjectId = this.workForm.domains[0].subProjectId
-                //     sss.stage = this.workForm.domains[0].stage
-                //     sss.subProjectList = this.workForm.domains[0].subProjectList
-                //     sss.stages = this.workForm.domains[0].stages
-                // } else {
-                //     sss.subProjectId = item.subProjectId
-                //     sss.stage = item.stage
-                //     sss.subProjectList = item.subProjectList
-                //     sss.stages = item.stages
-                // }
-                // console.log(sss, '数据')
-                // this.zhoBaoIdx = i
-                // this.zhoBaoName = names
-                // this.zhoBao = sss
-                // this.zhis = row
-                // this.selectProject(row[0], i)
+                },600);
             },
             // 按周填报里内容的填写点击确定
             btnTianxiaes() {
                 if (this.zhoBao.projectAuditorId) {
-                    
                     let errtips = ''
                     if(this.user.timeType.customDegreeStatus == 1 && this.zhoBao.wuduList.length != 0 && !this.zhoBao.degreeId) {
                         errtips += this.user.timeType.customDegreeName + '、'
@@ -4057,8 +4052,6 @@
                             type: 'warning'
                         })
                     }else {
-
-
                         this.tianxieDialogVisible = false
                         var zhong = this.zhoData
                         zhong[this.zhoBaoIdx][this.zhoBaoName] = this.zhoBao
@@ -4557,6 +4550,9 @@
                                     formData.append("content", zhiZhi)
                                     formData.append("isOvertime", 0)
                                     formData.append("professionProgress", "[]")
+                                    if (zhoD[j].groupId) {
+                                        formData.append("groupId",zhoD[j].groupId)
+                                    }
                                     zhoD[j].stage ? formData.append("stage", zhoD[j].stage) : formData.append("stage", '');
                                     formData.append("createDate",zhoD.zhoDataTime)
                                     if (zhoD[j].projectAuditorId) {
@@ -4609,6 +4605,9 @@
                                         zhoD[j].con == '' || zhoD[j].con == null ? formData.append("content", '-') : formData.append("content", zhoD[j].con)
                                         formData.append("isOvertime", 0)
                                         formData.append("professionProgress", "[]")
+                                        if (zhoD[j].groupId) {
+                                            formData.append("groupId",zhoD[j].groupId)
+                                        }
                                         zhoD[j].stage ? formData.append("stage", zhoD[j].stage) : formData.append("stage", '');
                                         formData.append("createDate",zhoD.zhoDataTime)
                                         if (zhoD[j].projectAuditorId) {
@@ -4664,6 +4663,9 @@
                                         zhoD[j].con == '' || zhoD[j].con == null ? formData.append("content", '-') : formData.append("content", zhoD[j].con)
                                         formData.append("isOvertime", 0)
                                         formData.append("professionProgress", "[]")
+                                        if (zhoD[j].groupId) {
+                                            formData.append("groupId",zhoD[j].groupId)
+                                        }
                                         zhoD[j].stage ? formData.append("stage", zhoD[j].stage) : formData.append("stage", '');
                                         formData.append("createDate",zhoD.zhoDataTime)
                                         if (zhoD[j].projectAuditorId) {