Pārlūkot izejas kodu

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

ggooalice 2 gadi atpakaļ
vecāks
revīzija
943a6258f1
15 mainītis faili ar 572 papildinājumiem un 113 dzēšanām
  1. 14 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ReportController.java
  2. 2 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/TaskGroupController.java
  3. 2 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/TaskGroupService.java
  4. 23 7
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/GroupParticipatorServiceImpl.java
  5. 32 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java
  6. 0 5
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java
  7. 14 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/TaskGroupServiceImpl.java
  8. 6 3
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/task/TimingTask.java
  9. 3 3
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ParticipationMapper.xml
  10. 1 0
      fhKeeper/formulahousekeeper/octopus/build.bat
  11. 13 1
      fhKeeper/formulahousekeeper/ops-platform/src/main/java/com/management/platform/entity/TimeType.java
  12. 368 0
      fhKeeper/formulahousekeeper/ops-platform/src/main/java/com/management/platform/entity/vo/TimeType.java
  13. 3 1
      fhKeeper/formulahousekeeper/ops-platform/src/main/resources/mapper/TimeTypeMapper.xml
  14. 4 2
      fhKeeper/formulahousekeeper/timesheet/src/views/project/info.vue
  15. 87 88
      fhKeeper/formulahousekeeper/timesheet/src/views/project/projectInside.vue

+ 14 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ReportController.java

@@ -253,6 +253,20 @@ public class ReportController {
                 basecostId[i] = 0;
             }
         }
+        if (company.getPackageProject() == 1) {
+            //检查是否设置了预算的工时预警
+            ProjectBasecostSetting alarmSetting = projectBasecostSettingMapper.selectOne(new QueryWrapper<ProjectBasecostSetting>()
+                    .eq("company_id", company.getId()).eq("alarm_type", 1).last("limit 1"));
+            if (alarmSetting != null) {
+                //有预警类型的预算成本,默认给选上
+                for (int i=0;i<projectId.length; i++) {
+                    if (basecostId[i] == 0) {
+                        basecostId[i] = alarmSetting.getId();
+                    }
+                }
+            }
+
+        }
 
 
         //检查项目是否可填报

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

@@ -199,7 +199,8 @@ public class TaskGroupController {
 
     @RequestMapping("/saveGroupIncharger")
     public HttpRespMsg saveGroupIncharger(TaskGroup taskGroup) {
-        taskGroupService.saveGroupIncharger(taskGroup);
+        User user = userMapper.selectById(request.getHeader("token"));
+        taskGroupService.saveGroupIncharger(taskGroup,user);
         HttpRespMsg msg = new HttpRespMsg();
         return msg;
     }

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

@@ -2,6 +2,7 @@ package com.management.platform.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.management.platform.entity.TaskGroup;
+import com.management.platform.entity.User;
 import com.management.platform.util.HttpRespMsg;
 
 /**
@@ -14,7 +15,7 @@ import com.management.platform.util.HttpRespMsg;
  */
 public interface TaskGroupService extends IService<TaskGroup> {
 
-    void saveGroupIncharger(TaskGroup taskGroup);
+    void saveGroupIncharger(TaskGroup taskGroup, User user);
 
     HttpRespMsg createFromTemplate(String templateJson, Integer projectId);
 }

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

@@ -2,19 +2,17 @@ package com.management.platform.service.impl;
 
 import com.alibaba.fastjson.JSONArray;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.management.platform.entity.GroupParticipator;
-import com.management.platform.entity.Participation;
-import com.management.platform.mapper.GroupParticipatorMapper;
-import com.management.platform.mapper.ParticipationMapper;
-import com.management.platform.mapper.TaskGroupMapper;
-import com.management.platform.service.GroupParticipatorService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.management.platform.entity.*;
+import com.management.platform.mapper.*;
+import com.management.platform.service.GroupParticipatorService;
 import com.management.platform.service.ParticipationService;
 import com.management.platform.util.HttpRespMsg;
-import org.apache.poi.hssf.record.GroupMarkerSubRecord;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import java.time.LocalDateTime;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.stream.Collectors;
@@ -37,9 +35,18 @@ public class GroupParticipatorServiceImpl extends ServiceImpl<GroupParticipatorM
     private TaskGroupMapper taskGroupMapper;
     @Resource
     private ParticipationService participationService;
+    @Resource
+    private UserMapper userMapper;
+    @Resource
+    private HttpServletRequest request;
+    @Resource
+    private ProjectMapper projectMapper;
+    @Resource
+    private OperationRecordMapper operationRecordMapper;
 
     @Override
     public HttpRespMsg save(Integer groupId, String idsJson) {
+        User user = userMapper.selectById(request.getHeader("token"));
         groupParticipatorMapper.delete(new QueryWrapper<GroupParticipator>().eq("group_id", groupId));
         List<String> idsArray = JSONArray.parseArray(idsJson, String.class);
         List<GroupParticipator> participatorList = new ArrayList<>();
@@ -50,8 +57,17 @@ public class GroupParticipatorServiceImpl extends ServiceImpl<GroupParticipatorM
             participatorList.add(p);
         }
         saveBatch(participatorList);
+        OperationRecord operationRecord=new OperationRecord();
+        operationRecord.setCompanyId(user.getCompanyId());
+        operationRecord.setOperatorName(user.getName());
+        operationRecord.setContent("修改了参与人");
+        operationRecord.setOperationTime(LocalDateTime.now());
+        operationRecord.setModuleName("任务分组");
         //检查项目的参与人里面是否有,如果没有自动加上
         int projectId = taskGroupMapper.selectById(groupId).getProjectId();
+        Project project = projectMapper.selectById(projectId);
+        operationRecord.setProjectName(project.getProjectName());
+        operationRecordMapper.insert(operationRecord);
         List<Participation> proPartList = participationMapper.selectList(new QueryWrapper<Participation>().eq("project_id", projectId));
         List<String> nonList = idsArray.stream().filter(p->!proPartList.stream().anyMatch(pro->pro.getUserId().equals(p))).collect(Collectors.toList());
         if (nonList.size() > 0) {

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

@@ -136,6 +136,8 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
     @Resource
     ProviderInfoMapper providerInfoMapper;
     @Resource
+    PpMembsMapper ppMembsMapper;
+    @Resource
     ProjectMainMapper projectMainMapper;
     @Resource
     ProjectLevelMapper projectLevelMapper;
@@ -292,7 +294,19 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                     projectSeparateList = projectSeparateMapper.selectList(new QueryWrapper<ProjectSeparate>().in("id", projectIds));
                 }
             }
+            //建筑工程版项目总进度计算
+            Company company = companyMapper.selectById(companyId);
+            List<PpMembs> ppMembList = null;
+            List<ProjectProfession> ppList = null;
+            if (company.getPackageEngineering() == 1) {
+                ppMembList = ppMembsMapper.selectList(new QueryWrapper<PpMembs>().in("project_id", projectIds));
+                ppList = projectProfessionMapper.selectList(new QueryWrapper<ProjectProfession>().in("project_id", projectIds));
+            }
+
             List<ProjectVO> list = new ArrayList<>();
+            if(projectIds.size()==0){
+                projectIds.add(-1);
+            }
             List<Map<String,Object>> particpationList=participationMapper.getAllParticipator(projectIds);
             for (Project project : projectList) {
                 ProjectVO projectVO = new ProjectVO();
@@ -360,6 +374,24 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                             projectVO.setProjectSeparate(first1.get());
                         }
                 }
+                //工程专业版:计算当前项目的总进度
+                if (company.getPackageEngineering() == 1) {
+                    List<PpMembs> curProjectPMList = ppMembList.stream().filter(pp->pp.getProjectId().equals(project.getId())).collect(Collectors.toList());
+                    List<ProjectProfession> curPPList = ppList.stream().filter(pp->pp.getProjectId().equals(project.getId())).collect(Collectors.toList());
+                    int totalProgress = 0;
+                    for (PpMembs memb : curProjectPMList) {
+                        System.out.println("getProgress=="+memb.getProgress()+""+memb.getPercentage());
+                        Optional<ProjectProfession> first1 = curPPList.stream().filter(pp -> pp.getProfessionId().equals(memb.getProfessionId())).findFirst();
+                        if (first1.isPresent()) {
+                            totalProgress += memb.getProgress()*memb.getPercentage()*first1.get().getPercentage();
+                        }
+
+                        System.out.println("getProgress==totalProgress="+totalProgress);
+                    }
+                    totalProgress = totalProgress/100/100;
+                    System.out.println("totalProgress=="+totalProgress);
+                    projectVO.setProgress(totalProgress);
+                }
                 list.add(projectVO);
             }
             List<String> stringList = providerCategoryList.stream().distinct().map(ProviderCategory::getProviderCategoryName).collect(Collectors.toList());

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

@@ -219,9 +219,6 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                 List<Integer> allVisibleDeptIdList = getAllVisibleDeptIdList(user, null);
                 //需要看可见部门(部门主要负责人和其他负责人以及查看本部门工时权限)所有人员的日报
                 if (allVisibleDeptIdList.size() > 0) {
-                    for (Integer ids : allVisibleDeptIdList) {
-                        System.out.println(ids);
-                    }
                     if (nameList.size() > 0) {
                         //自己填写的日报
                         List<Map<String, Object>> deptNameList = reportMapper.getReportNameByDateAndDept(date,
@@ -235,7 +232,6 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                         nameList = reportMapper.getReportNameByDateAndDept(date,
                                 allVisibleDeptIdList, targetUid, null);
                     }
-                    System.out.println("有可见部门==="+nameList.size());
                     if (nameList.size() > 0) {
                         List<String> userIds = new ArrayList<>();
                         nameList.forEach(n->{
@@ -1840,7 +1836,6 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
         for (User u : userList) {
             //入职日期在当前日期之后的,不要显示
             if (u.getInductionDate() != null && u.getInductionDate().isAfter(curDate)) {
-                System.out.println("========"+u.getName());
                 continue;
             }
             HashMap<String, Object> user = new HashMap<String, Object>();

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

@@ -16,6 +16,7 @@ import org.springframework.util.StringUtils;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
+import java.time.LocalDateTime;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -49,13 +50,25 @@ public class TaskGroupServiceImpl extends ServiceImpl<TaskGroupMapper, TaskGroup
     private TaskExecutorService taskExecutorService;
     @Resource
     private ProjectMapper projectMapper;
+    @Resource
+    private OperationRecordMapper operationRecordMapper;
     @Override
-    public void saveGroupIncharger(TaskGroup taskGroup) {
+    public void saveGroupIncharger(TaskGroup taskGroup,User user) {
         if (StringUtils.isEmpty(taskGroup.getInchargerId())) {
             //清除负责人
             taskGroupMapper.removeInchargerId(taskGroup.getId());
         } else {
+            TaskGroup select = taskGroupMapper.selectById(taskGroup.getId());
             taskGroupMapper.updateById(taskGroup);
+            Project project = projectMapper.selectById(taskGroup.getProjectId());
+            OperationRecord operationRecord=new OperationRecord();
+            operationRecord.setOperationTime(LocalDateTime.now());
+            operationRecord.setContent("修改了分组负责人,修改前["+select.getInchargerId()+",修改后["+taskGroup.getInchargerId()+"]");
+            operationRecord.setOperatorName(user.getName());
+            operationRecord.setCompanyId(user.getCompanyId());
+            operationRecord.setModuleName("任务分组");
+            operationRecord.setProjectName(project.getProjectName());
+            operationRecordMapper.insert(operationRecord);
         }
     }
 

+ 6 - 3
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/task/TimingTask.java

@@ -242,10 +242,15 @@ public class TimingTask {
             List<User> userList = userMapper.selectList(new QueryWrapper<User>().eq("company_id", company.getId()));
             if(timeType.getReportAutoApprove()==1){
                 Integer reportAutoApproveDays = timeType.getReportAutoApproveDays();
+                if(reportAutoApproveDays==null){
+                    continue;
+                }
                 LocalDate localDate = LocalDate.now().minusDays(reportAutoApproveDays);
                 List<Report> reports = reportMapper.selectList(new QueryWrapper<Report>().eq("state", 0).le("create_time", localDate.atTime(LocalTime.now())));
                 for (Report report : reports) {
                     report.setState(1);
+                    //项目审核的状态修改成已审核
+                    report.setProjectAuditState(1);
                     report.setReportAutoApprove(1);
                     reportMapper.updateById(report);
                     Optional<User> first = userList.stream().filter(u -> u.getId().equals(report.getCreatorId())).findFirst();
@@ -339,11 +344,9 @@ public class TimingTask {
                 }
                 thirdPartyInterface.setToken(token);
                 thirdPartyInterface.setExpireTime(localDateTime.plusDays(1));
+                thirdPartyInterfaceMapper.updateById(thirdPartyInterface);
             }
         }
-        if(thirdPartyInterfaceList.size()>0&&!thirdPartyInterfaceList.isEmpty()){
-            thirdPartyInterfaceService.updateBatchById(thirdPartyInterfaceList);
-        }
     }
 
     public static void main(String[] args) {

+ 3 - 3
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ParticipationMapper.xml

@@ -28,9 +28,9 @@
         FROM participation AS a
         LEFT JOIN user AS b ON a.user_id = b.id
         WHERE a.project_id in
-        <foreach collection="projectIdList" open="(" close=")" separator="," item="item">
-            #{item}
-        </foreach>
+            <foreach collection="projectIdList" open="(" close=")" separator="," item="item">
+                #{item}
+            </foreach>
     </select>
 
 </mapper>

+ 1 - 0
fhKeeper/formulahousekeeper/octopus/build.bat

@@ -0,0 +1 @@
+npm run build

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

@@ -17,7 +17,7 @@ import java.util.List;
  * </p>
  *
  * @author Seyason
- * @since 2022-08-17
+ * @since 2022-08-24
  */
 @Data
 @EqualsAndHashCode(callSuper = false)
@@ -344,6 +344,18 @@ public class TimeType extends Model<TimeType> {
     @TableField("report_approve_msgpush")
     private Integer reportApproveMsgpush;
 
+    /**
+     * 日报自动审核 0-未开启 1-开启
+     */
+    @TableField("report_auto_approve")
+    private Integer reportAutoApprove;
+
+    /**
+     * 日报自动审核天数
+     */
+    @TableField("report_auto_approve_days")
+    private Integer reportAutoApproveDays;
+
     @TableField(exist = false)
     private List<User> userList;
 

+ 368 - 0
fhKeeper/formulahousekeeper/ops-platform/src/main/java/com/management/platform/entity/vo/TimeType.java

@@ -0,0 +1,368 @@
+package com.management.platform.entity.vo;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.management.platform.entity.User;
+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-24
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+public class TimeType extends Model<TimeType> {
+
+    private static final long serialVersionUID=1L;
+
+    /**
+     * 公司id
+     */
+    @TableId("company_id")
+    private Integer companyId;
+
+    /**
+     * 全天时长
+     */
+    @TableField("allday")
+    private Float allday;
+
+    /**
+     * 上午时长
+     */
+    @TableField("am")
+    private Float am;
+
+    /**
+     * 下午时长
+     */
+    @TableField("pm")
+    private Float pm;
+
+    /**
+     * 每月工作天数
+     */
+    @TableField("month_days")
+    private BigDecimal monthDays;
+
+    /**
+     * 时薪录入方式:0-按月薪计算,1-直接输入时薪
+     */
+    @TableField("hour_cost_input_type")
+    private Integer hourCostInputType;
+
+    /**
+     * 时长上报方式
+     */
+    @TableField("type")
+    private Integer type;
+
+    /**
+     * 是否计算加班工时工资
+     */
+    @TableField("pay_overtime")
+    private Boolean payOvertime;
+
+    /**
+     * 提醒时间
+     */
+    @TableField("alert_time")
+    private String alertTime;
+
+    /**
+     * 支持同个项目多个时间事项录入
+     */
+    @TableField("multi_worktime")
+    private Integer multiWorktime;
+
+    /**
+     * 强制固定月薪
+     */
+    @TableField("fix_monthcost")
+    private Integer fixMonthcost;
+
+    /**
+     * 可补填几个月的, 0-不限制,1-本月,2-上个月,3-上上月,4- 7天内 ,5- 前一天
+     */
+    @TableField("fill_months")
+    private Integer fillMonths;
+
+    /**
+     * 工时填报自定义维度是否启用
+     */
+    @TableField("custom_degree_active")
+    private Integer customDegreeActive;
+
+    /**
+     * 工时填报自定义维度名称
+     */
+    @TableField("custom_degree_name")
+    private String customDegreeName;
+
+    /**
+     * 工时填报自定义维度是否必填 0-否 1-是
+     */
+    @TableField("custom_degree_status")
+    private Integer customDegreeStatus;
+
+    /**
+     * 提醒内容
+     */
+    @TableField("alert_msg")
+    private String alertMsg;
+
+    /**
+     * 同步企业微信的考勤记录
+     */
+    @TableField("sync_corpwx_time")
+    private Integer syncCorpwxTime;
+
+    /**
+     * 是否需要部门上级审核日报
+     */
+    @TableField("need_dept_audit")
+    private Integer needDeptAudit;
+
+    /**
+     * 是否开启自定义审批流
+     */
+    @TableField("report_workflow")
+    private Integer reportWorkflow;
+
+    /**
+     * 工时填报数值收集开关
+     */
+    @TableField("custom_data_active")
+    private Integer customDataActive;
+
+    /**
+     * 工时填报数值收集字段名称
+     */
+    @TableField("custom_data_name")
+    private String customDataName;
+
+    /**
+     * 工时填报数值收集字段是否必填 0-否 1-是
+     */
+    @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;
+
+    /**
+     * 财务成本导入是否需要审核
+     */
+    @TableField("finance_audit")
+    private Integer financeAudit;
+
+    /**
+     * 加班倍数
+     */
+    @TableField("overtime_ratio")
+    private Double overtimeRatio;
+
+    /**
+     * 是否同步钉钉考勤打卡和出差
+     */
+    @TableField("sync_dingding")
+    private Integer syncDingding;
+
+    /**
+     * 是否是药研行业
+     */
+    @TableField("is_cro")
+    private Integer isCro;
+
+    /**
+     * 只使用导入功能,不要项目审核
+     */
+    @TableField("only_importreport")
+    private Integer onlyImportreport;
+
+    /**
+     * 填写日报显示钉钉打卡时长
+     */
+    @TableField("show_dd_cardtime")
+    private Integer showDdCardtime;
+
+    /**
+     * 填写日报显示企业微信打卡时长
+     */
+    @TableField("show_corpwx_cardtime")
+    private Integer showCorpwxCardtime;
+
+    /**
+     * 自定义文本信息是否开启
+     */
+    @TableField("custom_text_active")
+    private Integer customTextActive;
+
+    /**
+     * 自定义文本信息字段名称
+     */
+    @TableField("custom_text_name")
+    private String customTextName;
+
+    /**
+     * 自定义文本信息是否必填 0-否 1-是
+     */
+    @TableField("custom_text_status")
+    private Integer customTextStatus;
+
+    /**
+     * 是否锁定每日填报时长
+     */
+    @TableField("lock_worktime")
+    private Integer lockWorktime;
+
+    /**
+     * 填报是否填报加班
+     */
+    @TableField("fill_overtime")
+    private Integer fillOvertime;
+
+    /**
+     * 是否显示填报和审核的时间
+     */
+    @TableField("show_fillaudit_time")
+    private Integer showFillauditTime;
+
+    /**
+     * 是否秘薪处理,即任何人的薪资都显示*
+     */
+    @TableField("is_secret_salary")
+    private Integer isSecretSalary;
+
+    /**
+     * 0-每日提醒当天漏填 1-每日提醒昨天漏填
+     */
+    @TableField("alert_type")
+    private Integer alertType;
+
+    /**
+     * 0-工作内容非必填 1-工作内容必填
+     */
+    @TableField("work_content_state")
+    private Integer workContentState;
+
+    /**
+     * 0-不可提前填报 1-可提前填报
+     */
+    @TableField("fill_ahead")
+    private Integer fillAhead;
+
+    /**
+     * 0-当天 1-第二天 2-第三天
+     */
+    @TableField("timeliness")
+    private Integer timeliness;
+
+    /**
+     * 0-未开启 1-开启
+     */
+    @TableField("main_project_state")
+    private Integer mainProjectState;
+
+    /**
+     * 日报的审核类型, 0-项目审核人审核,1-分组负责人审核,2-先分组负责人审核再项目负责人(PM)审核
+     */
+    @TableField("report_audit_type")
+    private Integer reportAuditType;
+
+    /**
+     * 0-未开启 1-开启
+     */
+    @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;
+
+    /**
+     * 从相册选择图片 0-未开启 1-开启
+     */
+    @TableField("chose_from_album")
+    private Integer choseFromAlbum;
+
+    /**
+     * 项目相关部门 0-未开启 1-开启
+     */
+    @TableField("project_with_dept")
+    private Integer projectWithDept;
+
+    /**
+     * 财务核算成本导入是否含工号:0-不含,1-含
+     */
+    @TableField("finance_jobnum_enabled")
+    private Integer financeJobnumEnabled;
+
+    /**
+     * 日报审核通过消息推送 0-未开启 1-开启
+     */
+    @TableField("report_approve_msgpush")
+    private Integer reportApproveMsgpush;
+
+    /**
+     * 日报自动审核 0-未开启 1-开启
+     */
+    @TableField("report_auto_approve")
+    private Integer reportAutoApprove;
+
+    /**
+     * 日报自动审核天数
+     */
+    @TableField("report_auto_approve_days")
+    private Integer reportAutoApproveDays;
+
+    @TableField(exist = false)
+    private List<User> userList;
+
+    @Override
+    protected Serializable pkVal() {
+        return this.companyId;
+    }
+
+}

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 3 - 1
fhKeeper/formulahousekeeper/ops-platform/src/main/resources/mapper/TimeTypeMapper.xml


+ 4 - 2
fhKeeper/formulahousekeeper/timesheet/src/views/project/info.vue

@@ -19,8 +19,10 @@
                     </el-row>
                     <el-row :gutter="10">
                         <el-col :span="5" ><span class="gray_label">状态:</span></el-col><el-col :span="7" ><span >{{project.status==null?'-':statusTxt[project.status]}}</span></el-col>
-                        <el-col :span="5" ><span class="gray_label">完成度: </span></el-col><el-col :span="7" ><span>
-                            <el-progress  :percentage="project.progress == null?0:project.progress"></el-progress></span></el-col>
+                        <el-col :span="5" v-if="user.company.packageEngineering==0"><span class="gray_label">完成度: </span></el-col><el-col :span="7" >
+                        <span v-if="user.company.packageEngineering==0">
+                            <el-progress  :percentage="project.progress == null?0:project.progress"></el-progress>
+                        </span></el-col>
                     </el-row>
                     <el-row :gutter="10">
                         <el-col :span="5" ><span class="gray_label">项目编号: </span></el-col><el-col :span="7" ><span >{{project.projectCode}}&nbsp;</span></el-col>

+ 87 - 88
fhKeeper/formulahousekeeper/timesheet/src/views/project/projectInside.vue

@@ -10,6 +10,7 @@
                             <span style="float: right;margin-left: 20px">{{ item.projectName }}</span>
                         </el-option>
                     </el-select>
+                    
                     <el-dropdown trigger="click" style="margin-right:30px;color:#262626;cursor:pointer;">
                         <i class="iconfont firerock-iconcaidan" ></i>
                         <el-dropdown-menu slot="dropdown">
@@ -119,102 +120,100 @@
                     
                     <!-- 增加侧边栏的点击效果 -->
                     
-                    <el-main style="background:#f7f7f7;padding:0px;">
+                    <el-main style="background:#f7f7f7;padding:0px;position: relative;">
                         <el-row style="color:#999;margin-top:10px;padding: 0px 10px;" :gutter="10">
-                        <el-col :span="12">
-                            <el-link @click="toggleGroup"><i v-if="selectedGroup != null" :class="groupWidth==0?'el-icon-d-arrow-right':'el-icon-d-arrow-left'" style="margin-top:10px;">{{selectedGroup.name}}</i></el-link>
-                        </el-col>
-                        <el-col :span="8" style="float:right;width:380px">
-                            <el-select v-model="order" size="small" style="background:#fff;display:inline-block;" @change="orderChange">
-                                <el-option v-for="item in orderList" :key="item.id" :label="item.name" :value="item.id">
-                                    <span>{{item.name}}</span>
-                                </el-option>
-                            </el-select>
-                            <el-button icon="iconfont firerock-icondaochu" style="margin-left:10px" size="mini" @click="showExportDialog">导出</el-button>
-                            <el-button icon="iconfont firerock-icondaoru" size="mini" @click="importTaskDialog = true;importToStageId = stageList[0].id;">导入</el-button>
-                        </el-col>
-                        <!-- <el-col :span="4">
-                            
-                        </el-col> -->
+                            <el-col :span="12">
+                                <el-link @click="toggleGroup"><i v-if="selectedGroup != null" :class="groupWidth==0?'el-icon-d-arrow-right':'el-icon-d-arrow-left'" style="margin-top:10px;">{{selectedGroup.name}}</i></el-link>
+                            </el-col>
+                            <el-col :span="8" style="float:right;width:380px">
+                                <el-select v-model="order" size="small" style="background:#fff;display:inline-block;" @change="orderChange">
+                                    <el-option v-for="item in orderList" :key="item.id" :label="item.name" :value="item.id">
+                                        <span>{{item.name}}</span>
+                                    </el-option>
+                                </el-select>
+                                <el-button icon="iconfont firerock-icondaochu" style="margin-left:10px" size="mini" @click="showExportDialog">导出</el-button>
+                                <el-button icon="iconfont firerock-icondaoru" size="mini" @click="importTaskDialog = true;importToStageId = stageList[0].id;">导入</el-button>
+                            </el-col>
                         </el-row>
                         <!-- <div style="color:#999;margin-top:10px;">
                             <i v-if="selectedGroup != null" class="el-icon-arrow-left" style="margin-top:10px;">{{selectedGroup.name}}</i>
                         
                         </div> -->
                         <div v-if="!displayTable">
+                            <div style="width: 100%;overflow-x: auto;">
+                                <draggable style="white-space:nowrap;" @update="onMoveStage"
+                                v-model="stageList" group="stage" @start="stageDrag=true" @end="stageDrag=false;" draggable=".taskStage" >
+                                    <!--每个阶段的拖拽 -->
+                                    <!-- <transition-group > -->
+                                        <v-flex class="taskStage"  v-for="stage in stageList" :key="stage.id" :style="'height:'+stageListHeight+'px;'">
+                                            <div :id="stage.id"
+                                            class="taskList" >
+                                                
+                                                <!--头部显示阶段名称,操作 -->
+                                                <div slot="header" style="margin:10px 0px;cursor:move;width:300px" role="task">
+                                                    <span class="stage">{{stage.stagesName}}</span><span style="margin-left:10px;color:#303133;font-size:12px;">{{stage.taskList.length}}</span>
+                                                    <!-- <i class="el-icon-more" style="float:right;"></i> -->
+                                                    <el-dropdown trigger="click" style="float:right;cursor:pointer;">
+                                                            <i class="el-icon-more" ></i>
+                                                            <el-dropdown-menu slot="dropdown">
+                                                                <el-dropdown-item @click.native="addTask(stage)">
+                                                                    <i class="el-icon-document-add"></i>
+                                                                    创建任务</el-dropdown-item>
+                                                                <el-dropdown-item @click.native="renameStage(stage)">
+                                                                    <i class="el-icon-edit"></i>
+                                                                    重命名列表</el-dropdown-item>
+                                                                <el-dropdown-item divided @click.native="deleteStage(stage)">
+                                                                    <i class="el-icon-delete"></i>删除列表</el-dropdown-item>
+                                                            </el-dropdown-menu>
+                                                    </el-dropdown>
+                                                </div>
 
-                        <draggable style="white-space:nowrap;" @update="onMoveStage"
-                        v-model="stageList" group="stage" @start="stageDrag=true" @end="stageDrag=false;" draggable=".taskStage" >
-                            <!--每个阶段的拖拽 -->
-                            <!-- <transition-group > -->
-                                <v-flex class="taskStage"  v-for="stage in stageList" :key="stage.id" :style="'height:'+stageListHeight+'px;'">
-                                    <div :id="stage.id"
-                                    class="taskList" >
-                                        
-                                        <!--头部显示阶段名称,操作 -->
-                                        <div slot="header" style="margin:10px 0px;cursor:move;width:300px" role="task">
-                                            <span class="stage">{{stage.stagesName}}</span><span style="margin-left:10px;color:#303133;font-size:12px;">{{stage.taskList.length}}</span>
-                                            <!-- <i class="el-icon-more" style="float:right;"></i> -->
-                                            <el-dropdown trigger="click" style="float:right;cursor:pointer;">
-                                                    <i class="el-icon-more" ></i>
-                                                    <el-dropdown-menu slot="dropdown">
-                                                        <el-dropdown-item @click.native="addTask(stage)">
-                                                            <i class="el-icon-document-add"></i>
-                                                            创建任务</el-dropdown-item>
-                                                        <el-dropdown-item @click.native="renameStage(stage)">
-                                                            <i class="el-icon-edit"></i>
-                                                            重命名列表</el-dropdown-item>
-                                                        <el-dropdown-item divided @click.native="deleteStage(stage)">
-                                                            <i class="el-icon-delete"></i>删除列表</el-dropdown-item>
-                                                    </el-dropdown-menu>
-                                            </el-dropdown>
-                                        </div>
-
-                                        <draggable class="taskListin" :style="'max-height:' + taskListinH + 'px;'" @start="drag=true" @end="drag=false" draggable=".taskCard" ghostClass="ghost" @update="onChange" @add="onChange" group="task1" :id="stage.id">
-                                            <div v-for="element in stage.taskList" :id="element.id" :key="element.id" class="taskCard" ref="tasks" @click="editTask(element)" :style="element.taskStatus==0?'':'background:#eFeFeF;'">
-                                                <!--任务卡片内容显示 -->
-                                                <div>
-                                                    <div v-if="element.taskLevel == 2" class="taskImg hong"><img src="../../assets/image/hong.png" alt=""></div>
-                                                    <div v-if="element.taskLevel == 1" class="taskImg huang"><img src="../../assets/image/huang.png" alt=""></div>
-                                                    <div v-if="element.taskLevel == 0" class="taskImg hui"><img src="../../assets/image/hui.png" alt=""></div>
-                                                    <el-checkbox :disabled="element.taskStatus==2 || element.subTaskList.length > element.subTaskFinishNum" :checked="element.taskStatus==1?true:false" size="large" class="cb"  
-                                                    @change="finishTask(element)"
-                                                    @click.stop.native=""
-                                                    ></el-checkbox>
-                                                    <el-tooltip class="item" effect="dark" :content="element.name" placement="top">
-                                                    <label class="task_name" :style="'background:'+(element.taskStatus==0?'#ffffff;':'#eFeFeF;')"><span>{{element.name}}</span></label>
-                                                    </el-tooltip>
-                                                    <i :class="taskTypeIcon[element.taskType]" :style="'float:right;color:'+taskTypeColor[element.taskType]+';margin-right:8px;margin-top:8px;'" ></i>
+                                                <draggable class="taskListin" :style="'max-height:' + taskListinH + 'px;'" @start="drag=true" @end="drag=false" draggable=".taskCard" ghostClass="ghost" @update="onChange" @add="onChange" group="task1" :id="stage.id">
+                                                    <div v-for="element in stage.taskList" :id="element.id" :key="element.id" class="taskCard" ref="tasks" @click="editTask(element)" :style="element.taskStatus==0?'':'background:#eFeFeF;'">
+                                                        <!--任务卡片内容显示 -->
+                                                        <div>
+                                                            <div v-if="element.taskLevel == 2" class="taskImg hong"><img src="../../assets/image/hong.png" alt=""></div>
+                                                            <div v-if="element.taskLevel == 1" class="taskImg huang"><img src="../../assets/image/huang.png" alt=""></div>
+                                                            <div v-if="element.taskLevel == 0" class="taskImg hui"><img src="../../assets/image/hui.png" alt=""></div>
+                                                            <el-checkbox :disabled="element.taskStatus==2 || element.subTaskList.length > element.subTaskFinishNum" :checked="element.taskStatus==1?true:false" size="large" class="cb"  
+                                                            @change="finishTask(element)"
+                                                            @click.stop.native=""
+                                                            ></el-checkbox>
+                                                            <el-tooltip class="item" effect="dark" :content="element.name" placement="top">
+                                                            <label class="task_name" :style="'background:'+(element.taskStatus==0?'#ffffff;':'#eFeFeF;')"><span>{{element.name}}</span></label>
+                                                            </el-tooltip>
+                                                            <i :class="taskTypeIcon[element.taskType]" :style="'float:right;color:'+taskTypeColor[element.taskType]+';margin-right:8px;margin-top:8px;'" ></i>
+                                                            </div>
+                                                        <div style="margin: 10px 0px;color:#666;" @click="timess(element.endDate)">
+                                                            <span v-if="element.endDate >= times || element.taskStatus == 1"><i v-if="element.endDate != null" class="el-icon-date" style="margin-left:5px">&nbsp;&nbsp;{{element.endDate}}</i></span>
+                                                            <span v-else><em v-if="element.endDate != null" style="display: inline-block;padding:3px 5px"><i v-if="element.endDate != null" class="el-icon-date"><span  class="element_span"> &nbsp;&nbsp;{{element.endDate}} 截止</span></i></em></span>
+                                                            <span v-if="element.executorName">
+                                                            <span v-for="(exeItem, exeIndex) in element.executorName.split(',')" :key="exeIndex" :style="element.executorColor ? 'background:' + element.executorColor.split(',')[exeIndex] : ''" class="user_name_icon">{{exeItem.length>2?exeItem.substring(exeItem.length-2, exeItem.length):exeItem}}</span>
+                                                            </span>
+                                                            <el-button v-if="!element.executorName" type="primary" @click.stop.native="addAsMyTask(element)" size="mini" style="float:right;width:38px;padding:5px;position: absolute;z-index: 5;right: 5px;">认领</el-button>
+                                                        </div>
+                                                        <!--子任务 -->
+                                                        <div v-if="element.subTaskList.length > 0" class="taskCardCircleBox">
+                                                            <el-progress type="circle" :percentage="(element.subTaskFinishNum/element.subTaskList.length) * 100" width="16" :show-text="false" stroke-linecap="butt" stroke-width="8"></el-progress><span style="margin-left:5px;font-size:12px;">{{element.subTaskFinishNum}}/{{element.subTaskList.length}}</span>
+                                                        </div>
+                                                        <!-- <div v-if="element.taskType == 1 && element.refTaskList != null">
+                                                            <el-tooltip class="item" effect="dark" content="查看关联任务" placement="top">
+                                                            <el-link class="sub_task_num" @click.stop.native="showSubTaskList(element)"><i class="iconfont firerock-icontree" ></i><span style="margin-left:5px;">{{element.finishRefTaskCount}}/{{element.refTaskList.length}}</span></el-link>
+                                                            </el-tooltip>
+                                                        </div> -->
+                                                        <div v-if="element.taskType == 1 && !(element.refTaskList == null || element.refTaskList.length == 0)"  class="taskCardCircleBox">
+                                                            <el-progress type="circle" :percentage="(element.finishRefTaskCount/(element.refTaskList ? element.refTaskList.length : 0)) * 100" width="16" :show-text="false" stroke-linecap="butt" stroke-width="8"></el-progress>
+                                                            <span style="margin-left:5px;font-size:12px">{{element.finishRefTaskCount}}/{{(element.refTaskList ? element.refTaskList.length : 0)}}</span>
+                                                        </div>
                                                     </div>
-                                                <div style="margin: 10px 0px;color:#666;" @click="timess(element.endDate)">
-                                                    <span v-if="element.endDate >= times || element.taskStatus == 1"><i v-if="element.endDate != null" class="el-icon-date" style="margin-left:5px">&nbsp;&nbsp;{{element.endDate}}</i></span>
-                                                    <span v-else><em v-if="element.endDate != null" style="display: inline-block;padding:3px 5px"><i v-if="element.endDate != null" class="el-icon-date"><span  class="element_span"> &nbsp;&nbsp;{{element.endDate}} 截止</span></i></em></span>
-                                                    <span v-if="element.executorName">
-                                                    <span v-for="(exeItem, exeIndex) in element.executorName.split(',')" :key="exeIndex" :style="element.executorColor ? 'background:' + element.executorColor.split(',')[exeIndex] : ''" class="user_name_icon">{{exeItem.length>2?exeItem.substring(exeItem.length-2, exeItem.length):exeItem}}</span>
-                                                    </span>
-                                                    <el-button v-if="!element.executorName" type="primary" @click.stop.native="addAsMyTask(element)" size="mini" style="float:right;width:38px;padding:5px;position: absolute;z-index: 5;right: 5px;">认领</el-button>
-                                                </div>
-                                                <!--子任务 -->
-                                                <div v-if="element.subTaskList.length > 0" class="taskCardCircleBox">
-                                                    <el-progress type="circle" :percentage="(element.subTaskFinishNum/element.subTaskList.length) * 100" width="16" :show-text="false" stroke-linecap="butt" stroke-width="8"></el-progress><span style="margin-left:5px;font-size:12px;">{{element.subTaskFinishNum}}/{{element.subTaskList.length}}</span>
-                                                </div>
-                                                <!-- <div v-if="element.taskType == 1 && element.refTaskList != null">
-                                                    <el-tooltip class="item" effect="dark" content="查看关联任务" placement="top">
-                                                    <el-link class="sub_task_num" @click.stop.native="showSubTaskList(element)"><i class="iconfont firerock-icontree" ></i><span style="margin-left:5px;">{{element.finishRefTaskCount}}/{{element.refTaskList.length}}</span></el-link>
-                                                    </el-tooltip>
-                                                </div> -->
-                                                <div v-if="element.taskType == 1 && !(element.refTaskList == null || element.refTaskList.length == 0)"  class="taskCardCircleBox">
-                                                    <el-progress type="circle" :percentage="(element.finishRefTaskCount/(element.refTaskList ? element.refTaskList.length : 0)) * 100" width="16" :show-text="false" stroke-linecap="butt" stroke-width="8"></el-progress>
-                                                    <span style="margin-left:5px;font-size:12px">{{element.finishRefTaskCount}}/{{(element.refTaskList ? element.refTaskList.length : 0)}}</span>
-                                                </div>
+                                                </draggable>
+                                                <el-button v-if="canAddTask" slot="footer" role="people" @click="addTask(stage)" style="width:300px;" size="small" icon="el-icon-plus"></el-button>
                                             </div>
-                                        </draggable>
-                                        <el-button v-if="canAddTask" slot="footer" role="people" @click="addTask(stage)" style="width:300px;" size="small" icon="el-icon-plus"></el-button>
-                                    </div>
-                                </v-flex>
-                            <!-- </transition-group > -->
-                            <el-button slot="footer" v-if="selectedGroup != null" @click="addStage" class="taskList" icon="el-icon-plus" style="margin-top:30px;">新建任务列表</el-button>
-                        </draggable>
+                                        </v-flex>
+                                    <!-- </transition-group > -->
+                                    <el-button slot="footer" v-if="selectedGroup != null" @click="addStage" class="taskList" icon="el-icon-plus" style="margin-top:30px;">新建任务列表</el-button>
+                                </draggable>
+                            </div>
                         </div>
                         <!--列表-->
                         <el-table v-if="displayTable" :data="taskDataList" 
@@ -809,7 +808,7 @@
                     </el-form-item> -->
                 </el-form>
             <div slot="footer" class="dialog-footer">
-                <el-button type="primary" @click="addGroup" style="width:100%;" >保存</el-button>
+                <el-button type="primary" @click="addGroup('form2')" style="width:100%;" >保存</el-button>
             </div>
         </el-dialog>
         <el-dialog title="添加为模板" v-if="addToTmpDialog" :visible.sync="addToTmpDialog" :close-on-click-modal="false" customClass="customWidth" width="500px">
@@ -1544,7 +1543,7 @@ import delete$ from 'dingtalk-jsapi/api/biz/cspace/delete';
 
             //保存分组负责人
             saveGroupIncharger() {
-                this.http.post('/task-group/saveGroupIncharger', {id: this.groupForm.id, inchargerId: this.groupForm.inchargerId},
+                this.http.post('/task-group/saveGroupIncharger', {id: this.groupForm.id, inchargerId: this.groupForm.inchargerId, projectId: this.curProjectId},
                         res => {
                             this.setInchargerDialog = false;
                             if (res.code == "ok") {