소스 검색

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

山水共长天一色 3 년 전
부모
커밋
55c09f97c9
18개의 변경된 파일163개의 추가작업 그리고 90개의 파일을 삭제
  1. 2 2
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/CompanyDingdingController.java
  2. 18 10
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ReportController.java
  3. 6 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/TaskController.java
  4. 7 4
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/ReportAlogMembdate.java
  5. 4 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/ProjectMapper.java
  6. 4 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/TaskMapper.java
  7. 1 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/CompanyDingdingService.java
  8. 1 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/ReportService.java
  9. 2 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/CompanyDingdingServiceImpl.java
  10. 22 7
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java
  11. 17 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java
  12. 36 33
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/SimpleReportServiceImpl.java
  13. 1 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/TaskServiceImpl.java
  14. 22 20
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ProjectMapper.xml
  15. 2 1
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ReportAlogMembdateMapper.xml
  16. 15 4
      fhKeeper/formulahousekeeper/timesheet/src/views/project/list.vue
  17. 2 2
      fhKeeper/formulahousekeeper/timesheet/src/views/project/projectInside.vue
  18. 1 1
      fhKeeper/formulahousekeeper/timesheet/src/views/task/list.vue

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

@@ -38,11 +38,11 @@ public class CompanyDingdingController {
     }
 
     @RequestMapping("/pushFinishMileStoneMsg")
-    public HttpRespMsg pushFinishMileStoneMsg(String corpid, String userDingId) {
+    public HttpRespMsg pushFinishMileStoneMsg(String corpid, String userDingId, Integer projectId, String projectName) {
         CompanyDingding companyDingding = companyDingdingMapper.selectById(corpid);
         LocalDate now = LocalDate.now();
         String finishDate = DateTimeFormatter.ofPattern("yyyy-MM-dd").format(now);
-        companyDingdingService.sendFinishMileStoneMsg(companyDingding, "040534176023851922", "获取伦理批件", "工时管家", finishDate);
+        companyDingdingService.sendFinishMileStoneMsg(companyDingding, userDingId, "测试里程碑", projectId,projectName, finishDate);
         return new HttpRespMsg();
     }
 

+ 18 - 10
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ReportController.java

@@ -744,14 +744,7 @@ public class ReportController {
                 httpRespMsg.setError("请填写工作时长");
                 return httpRespMsg;
             }
-            //如果锁定工作时长上限的话,需要校验
-            if (comTimeType.getLockWorktime() == 1) {
-                if (report.getWorkingTime() > comTimeType.getAllday()) {
-                    HttpRespMsg httpRespMsg = new HttpRespMsg();
-                    httpRespMsg.setError("工作时长不得超过"+comTimeType.getAllday()+"小时");
-                    return httpRespMsg;
-                }
-            }
+
             if (report.getIsOvertime() != null && report.getIsOvertime() == 1) {
                 if (report.getOvertimeHours() <= 0) {
                     HttpRespMsg httpRespMsg = new HttpRespMsg();
@@ -765,6 +758,21 @@ public class ReportController {
             }
         }
 
+        //如果锁定工作时长上限的话,需要校验每日的合计工作时长
+        if (comTimeType.getLockWorktime() == 1) {
+            for (Report report : reportList) {
+                String creatorId = report.getCreatorId();
+                LocalDate cDate = report.getCreateDate();
+                //查找同一个人同一天的日报合计工作时长
+                double dailyWorktime = reportList.stream().filter(r->r.getCreatorId().equals(creatorId) && r.getCreateDate().isEqual(cDate)).mapToDouble(Report::getWorkingTime).sum();
+                if (dailyWorktime > comTimeType.getAllday()) {
+                    HttpRespMsg httpRespMsg = new HttpRespMsg();
+                    httpRespMsg.setError("每日工作时长不得超过"+comTimeType.getAllday()+"小时");
+                    return httpRespMsg;
+                }
+            }
+        }
+
         //只有项目管理专业版才要检查成本预算
         if (company.getPackageProject() == 1) {
             //检查成本是否超过预算
@@ -1046,9 +1054,9 @@ public class ReportController {
 
 
     @RequestMapping("/denyHisReport")
-    public HttpRespMsg denyHisReport(@RequestParam String userId, @RequestParam String createDate,
+    public HttpRespMsg denyHisReport(@RequestParam Integer hisId,
                                      String reason, HttpServletRequest request) {
-        return reportService.denyHisReport(userId, createDate, reason, request);
+        return reportService.denyHisReport(hisId, reason, request);
     }
 
     @RequestMapping("/getMembList")

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

@@ -165,6 +165,12 @@ public class TaskController {
             }
         }
         taskService.saveOrUpdate(task);
+        if (task.getExecutorId() == null) {
+            //清空执行人
+            if (!isNew) {
+                taskMapper.removeTaskExecutor(task.getId());
+            }
+        }
         if (isNew) {
             //保存任务执行人
             task.getExecutorList().forEach(exe->exe.setTaskId(task.getId()));

+ 7 - 4
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/ReportAlogMembdate.java

@@ -6,8 +6,6 @@ import java.time.LocalDate;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableField;
 import java.io.Serializable;
-
-import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
@@ -18,7 +16,7 @@ import lombok.experimental.Accessors;
  * </p>
  *
  * @author Seyason
- * @since 2022-03-24
+ * @since 2022-05-31
  */
 @Data
 @EqualsAndHashCode(callSuper = false)
@@ -31,7 +29,6 @@ public class ReportAlogMembdate extends Model<ReportAlogMembdate> {
     private Integer id;
 
     @TableField("create_date")
-    @JsonFormat(pattern = "yyyy-MM-dd")
     private LocalDate createDate;
 
     @TableField("user_id")
@@ -46,6 +43,12 @@ public class ReportAlogMembdate extends Model<ReportAlogMembdate> {
     @TableField("rlog_id")
     private Integer rlogId;
 
+    /**
+     * 1-已通过,2-已驳回,3-已撤销
+     */
+    @TableField("state")
+    private Integer state;
+
 
     @Override
     protected Serializable pkVal() {

+ 4 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/ProjectMapper.java

@@ -38,6 +38,9 @@ public interface ProjectMapper extends BaseMapper<Project> {
     @Update("update project set status = 1, finish_date = null where id = #{id}")
     void restartProject(Integer id);
 
+    @Update("update project set customer_id = null where id = #{id}")
+    void removeProjectCustomer(Integer id);
+
     List<Map<String, Object>> getCostInStage(@Param("startDate") String startDate, @Param("endDate") String endDate, @Param("projectId") Integer projectId);
     //获取全部人员成本
     List<Map<String, Object>> getAllMembCost(@Param("startDate") String startDate, @Param("endDate") String endDate, @Param("projectId") Integer projectId,
@@ -68,7 +71,7 @@ public interface ProjectMapper extends BaseMapper<Project> {
 
     List<Map<String, Object>> getUserMonthTimeCost(@Param("companyId") Integer companyId, @Param("startDate") String startDate, @Param("endDate") String endDate);
 
-    List<Map<String, Object>> getOvertimeList(String userId, Integer companyId, String startDate, String endDate, Integer projectId);
+//    List<Map<String, Object>> getOvertimeList(String userId, Integer companyId, String startDate, String endDate, Integer projectId);
 
     List<Map<String, Object>> getDegreeCost(@Param("startDate") String startDate, @Param("endDate") String endDate, @Param("projectId") Integer projectId, @Param("companyId") Integer companyId);
 

+ 4 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/TaskMapper.java

@@ -6,6 +6,7 @@ import com.management.platform.entity.Task;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.management.platform.entity.TimeTask;
 import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Update;
 import org.apache.poi.ss.formula.functions.T;
 
 import java.util.List;
@@ -39,4 +40,7 @@ public interface TaskMapper extends BaseMapper<Task> {
     List getTaskWithProjectName(@Param(Constants.WRAPPER) Wrapper wrapper, Integer pageStart, Integer pageSize);
 
     List recentSimpleList(Integer projectId, String userId);
+
+    @Update("update task set executor_id = null, executor_name = null, executor_color=null where id=#{id}")
+    void removeTaskExecutor(Integer id);
 }

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

@@ -29,7 +29,7 @@ public interface CompanyDingdingService extends IService<CompanyDingding> {
     public void sendNewTaskMsg(CompanyDingding dingding, String userId, String title, String endDate);
 
 
-    public void sendFinishMileStoneMsg(CompanyDingding dingding, String useridList, String taskName, String project, String finishDate);
+    public void sendFinishMileStoneMsg(CompanyDingding dingding, String useridList, String taskName, Integer projectId, String project, String finishDate);
 
     public void sendOAMsg(CompanyDingding dingding, String useridList, HashMap map);
 }

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

@@ -85,5 +85,5 @@ public interface ReportService extends IService<Report> {
 
     HttpRespMsg approveAllImport(HttpServletRequest request);
 
-    HttpRespMsg denyHisReport(String userId, String createDate, String reason, HttpServletRequest request);
+    HttpRespMsg denyHisReport(Integer hisId, String reason, HttpServletRequest request);
 }

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

@@ -222,7 +222,7 @@ public class CompanyDingdingServiceImpl extends ServiceImpl<CompanyDingdingMappe
 
 
     @Override
-    public void sendFinishMileStoneMsg(CompanyDingding dingding, String useridList, String taskName, String project, String finishDate) {
+    public void sendFinishMileStoneMsg(CompanyDingding dingding, String useridList, String taskName, Integer projectId, String project, String finishDate) {
         DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/message/corpconversation/sendbytemplate");
         OapiMessageCorpconversationSendbytemplateRequest req = new OapiMessageCorpconversationSendbytemplateRequest();
         req.setAgentId(dingding.getAgentId());
@@ -231,6 +231,7 @@ public class CompanyDingdingServiceImpl extends ServiceImpl<CompanyDingdingMappe
         JSONObject json = new JSONObject();
         json.put("taskName", taskName);
         json.put("project", project);
+        json.put("PROJECTID", ""+projectId);
         json.put("APPID", ""+appId);
         json.put("CORPID", dingding.getCorpid());
         json.put("finishDate", finishDate);

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

@@ -389,6 +389,10 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                 if (projectMapper.updateById(p) == 0) {
                     httpRespMsg.setError("操作失败");
                 } else {
+                    if (customerId == null) {
+                        //去掉客户
+                        projectMapper.removeProjectCustomer(id);
+                    }
                     //修改项目相关表
                     ProjectTimer timer = new ProjectTimer();
                     timer.setProjectName(name);
@@ -1210,7 +1214,6 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
         Integer companyId = user.getCompanyId();
         int total = taskMapper.getProjectTaskCount(companyId);
         int pageStart = (pageIndex -1) * pageSize;
-        System.out.println("companyId="+companyId+", pageStart="+pageStart+", pageSize="+pageSize);
         List projectTask = taskMapper.getProjectTask(companyId, pageStart, pageSize);
         HttpRespMsg httpRespMsg = new HttpRespMsg();
         Map<String, Object> map = new HashMap<>();
@@ -1924,6 +1927,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                 seq++;
             }
             String total = totalMoneyCost.toString();
+            DecimalFormat df = new DecimalFormat("#0.0");
             //合计
             List<String> sumRow = new ArrayList<String>();
             sumRow.add("合计");
@@ -1933,10 +1937,10 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
             sumRow.add("");
             sumRow.add("");
             sumRow.add("");
-            sumRow.add(""+totalWorkTime);
-            sumRow.add(""+totalCostTime);
+            sumRow.add(""+df.format(totalWorkTime));
+            sumRow.add(""+df.format(totalCostTime));
             if (hasViewSalary) {
-                sumRow.add(totalMoneyCost.toString());
+                sumRow.add(total);
             }
             allList.add(sumRow);
             //生成excel文件导出
@@ -1987,6 +1991,8 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
             projectLevelMap.put("紧急", 2);
             projectLevelMap.put("重要", 3);
             projectLevelMap.put("重要且紧急", 4);
+            List<String> existCodeList = new ArrayList<>();
+            int importCount = 0;
             for (int rowIndex = 0; rowIndex <= rowNum; rowIndex++) {
                 XSSFRow row = sheet.getRow(rowIndex);
                 if (row == null) {
@@ -2037,7 +2043,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                     }
                     //检查项目是否存在
                     List<ProjectCategory> projectCategoryList = projectCategoryMapper.selectList(new QueryWrapper<ProjectCategory>().eq("company_id", user.getCompanyId()));
-                    if (categoryCell != null) {
+                    if (categoryCell != null && !StringUtils.isEmpty(categoryCell.getStringCellValue())) {
                         Optional<ProjectCategory> category = projectCategoryList.stream().filter(pc -> pc.getName().equals(categoryCell.getStringCellValue())).findFirst();
                         if(!category.isPresent()){
                             throw  new Exception("项目分类["+categoryCell.getStringCellValue()+"]不存在");
@@ -2051,7 +2057,10 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                     if (!StringUtils.isEmpty(code)) {
                         int cnt = projectMapper.selectCount(new QueryWrapper<Project>().eq("project_code", code).eq("company_id", user.getCompanyId()));
                         if (cnt > 0) {
-                            throw new Exception("项目编号存在重复: " + code);
+//                            throw new Exception("项目编号存在重复: " + code);
+                            existCodeList.add(code);
+                            //跳过编号重复的数据
+                            continue;
                         }
                     }
                     project.setProjectCode(code);
@@ -2098,6 +2107,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                     project.setIsPublic("是".equals(isPublicCell.getStringCellValue())?1:0);
                 }
                 projectMapper.insert(project);
+                importCount++;
                 //处理子项目
                 if (subNameCell != null) {
                     //兼容中英文逗号
@@ -2117,7 +2127,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                 if (participatorCell != null) {
                     String part = participatorCell.getStringCellValue();
                     if (!StringUtils.isEmpty(part)) {
-                        String[] split = part.split(",");
+                        String[] split = part.split("\\|\\,");
                         for (String str : split) {
                             Participation p = new Participation();
                             Optional<User> first = userList.stream().filter(u -> u.getName().equals(str)).findFirst();
@@ -2133,6 +2143,11 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                     }
                 }
             }
+            msg.data = "成功导入"+importCount+"条数据。";
+            if (existCodeList.size() > 0) {
+                String collect = existCodeList.stream().collect(Collectors.joining(","));
+                msg.data += "自动跳过"+existCodeList.size()+"条已存在项目编码:"+collect;
+            }
         } catch (IOException e) {
             e.printStackTrace();
             msg.setError("文件处理出错");

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

@@ -1164,6 +1164,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                 //员工的日期
                 ReportAlogMembdate membdate = new ReportAlogMembdate();
                 membdate.setRlogId(log.getId());
+                membdate.setState(1);//通过
                 membdate.setCreateDate(oneReport.getCreateDate());
                 membdate.setUserId(oneReport.getCreatorId());
                 membdate.setUserName(userMapper.selectById(oneReport.getCreatorId()).getName());
@@ -1379,6 +1380,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             //员工的日期
             ReportAlogMembdate membdate = new ReportAlogMembdate();
             membdate.setRlogId(log.getId());
+            membdate.setState(2);//驳回
             membdate.setCreateDate(oneReport.getCreateDate());
             membdate.setUserId(oneReport.getCreatorId());
             membdate.setUserName(userMapper.selectById(oneReport.getCreatorId()).getName());
@@ -1719,6 +1721,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                     //没有的话,存进去
                     ReportAlogMembdate membdate = new ReportAlogMembdate();
                     membdate.setRlogId(log.getId());
+                    membdate.setState(1);//通过
                     membdate.setCreateDate(date);
                     membdate.setUserId(creatorId);
                     Optional<User> oneUser = allUsers.stream().filter(a->a.getId().equals(creatorId)).findFirst();
@@ -1811,6 +1814,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                 //没有的话,存进去
                 ReportAlogMembdate membdate = new ReportAlogMembdate();
                 membdate.setRlogId(log.getId());
+                membdate.setState(2);//驳回
                 membdate.setCreateDate(date);
                 membdate.setUserId(creatorId);
                 Optional<User> oneUser = allUsers.stream().filter(a->a.getId().equals(creatorId)).findFirst();
@@ -3158,9 +3162,17 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
     }
 
     @Override
-    public HttpRespMsg denyHisReport(String userId, String createDate, String reason, HttpServletRequest request) {
+    public HttpRespMsg denyHisReport(Integer hisId, String reason, HttpServletRequest request) {
         HttpRespMsg httpRespMsg = new HttpRespMsg();
         try {
+            ReportAlogMembdate log = reportAlogMembdateMapper.selectById(hisId);
+            String userId = log.getUserId();
+            String createDate = DateTimeFormatter.ofPattern("yyyy-MM-dd").format(log.getCreateDate());
+            if (log.getState() != 1) {
+                //只有已通过的历史记录才能撤销
+                httpRespMsg.setError("只有审核通过状态才可撤销审核");
+                return httpRespMsg;
+            }
             User user = userMapper.selectById(request.getHeader("Token"));
             Company company = companyMapper.selectById(user.getCompanyId());
             if (reason == null) {
@@ -3182,6 +3194,10 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             reportMapper.update(new Report().setState(2)
                             .setRejectReason(reason).setRejectUserid(user.getId()).setRejectUsername(user.getName()),
                     eq);
+            //修改审核记录的状态
+            log.setState(3);
+            reportAlogMembdateMapper.updateById(log);
+
             List<Integer> collect = list.stream().map(Report::getProjectId).collect(Collectors.toList());
             List<Project> projectList = projectMapper.selectList(new QueryWrapper<Project>().in("id", collect));
             String pNames = projectList.stream().map(Project::getProjectName).collect(Collectors.joining(", ", "[", "]"));

+ 36 - 33
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/SimpleReportServiceImpl.java

@@ -301,42 +301,45 @@ public class SimpleReportServiceImpl extends ServiceImpl<SimpleReportMapper, Sim
                 if (notFoundNames.length > 0) {
                     msg.setError(convertNameArray(notFoundNames)+" 不存在于薪资表中,请检查后提交");
                 } else {
-                    notFoundNames = financeList.stream().filter(r->{
-                        return !reportList.stream().filter(f->f.getUsername().equals(r.getName())).findAny().isPresent();
-                    }).map(SimpleFinance::getName).collect(Collectors.toList()).toArray(new String[0]);
-                    if (notFoundNames.length > 0) {
-                        msg.setError(convertNameArray(notFoundNames)+" 不存在于工时表中,请检查后提交");
+//                    notFoundNames = financeList.stream().filter(r->{
+//                        return !reportList.stream().filter(f->f.getUsername().equals(r.getName())).findAny().isPresent();
+//                    }).map(SimpleFinance::getName).collect(Collectors.toList()).toArray(new String[0]);
+//                    if (notFoundNames.length > 0) {
+//                        msg.setError(convertNameArray(notFoundNames)+" 不存在于工时表中,请检查后提交");
+//                    } else {
+//
+//                    }
+                    //每个人的总工时不能为零
+                    String[] names = reportList.stream().filter(r->r.getTimeCost() == 0).map(SimpleReport::getUsername).collect(Collectors.toList()).toArray(new String[0]);
+                    if (names.length > 0) {
+                        msg.setError(convertNameArray(names)+" 工时为零,请检查");
                     } else {
-                        //每个人的总工时不能为零
-                        String[] names = reportList.stream().filter(r->r.getTimeCost() == 0).map(SimpleReport::getUsername).collect(Collectors.toList()).toArray(new String[0]);
-                        if (names.length > 0) {
-                            msg.setError(convertNameArray(names)+" 工时为零,请检查");
-                        } else {
-                            //人员检查通过,更新finance表中的时薪,方便后续计算
-                            financeList.forEach(f->{
-                                double userTotalTime = reportList.stream().filter(r->r.getUsername().equals(f.getName())).mapToDouble(SimpleReport::getTimeCost).sum();
+                        //人员检查通过,更新finance表中的时薪,方便后续计算
+                        financeList.forEach(f->{
+                            double userTotalTime = reportList.stream().filter(r->r.getUsername().equals(f.getName())).mapToDouble(SimpleReport::getTimeCost).sum();
+                            if (userTotalTime > 0) {
                                 f.setHourCost(f.getTotalCost().divide(new BigDecimal(userTotalTime), 2, BigDecimal.ROUND_UP));
-                            });
+                            }
+                        });
 
-                            //批量插入
-                            simpleFinanceService.remove(new QueryWrapper<SimpleFinance>().eq("company_id", companyId).eq("ymonth", yearMonth));
-                            simpleFinanceService.saveBatch(financeList);
-                            //插入工时报告表,先删除旧数据
-                            QueryWrapper<SimpleReport> queryWrapper = new QueryWrapper<SimpleReport>().eq("company_id", companyId).eq("ymonth", yearMonth);
-                            simpleReportMapper.delete(queryWrapper);
-                            simpleReportService.saveBatch(reportList);
-                            //再查询出来,进行项目工时存储
-                            List<SimpleReport> queryList = simpleReportMapper.selectList(queryWrapper);
-                            System.out.println("queryList size=="+queryList.size());
-                            List<SimpleProjectime> allTimeList = new ArrayList<>();
-                            reportList.forEach(r->{
-                                Integer id = queryList.stream().filter(q -> q.getUsername().equals(r.getUsername())).findFirst().get().getId();
-                                List<SimpleProjectime> timeList = r.getProjectimeList();
-                                timeList.forEach(t->t.setSimpleId(id));
-                                allTimeList.addAll(timeList);
-                            });
-                            simpleProjectimeService.saveBatch(allTimeList);
-                        }
+                        //批量插入
+                        simpleFinanceService.remove(new QueryWrapper<SimpleFinance>().eq("company_id", companyId).eq("ymonth", yearMonth));
+                        simpleFinanceService.saveBatch(financeList);
+                        //插入工时报告表,先删除旧数据
+                        QueryWrapper<SimpleReport> queryWrapper = new QueryWrapper<SimpleReport>().eq("company_id", companyId).eq("ymonth", yearMonth);
+                        simpleReportMapper.delete(queryWrapper);
+                        simpleReportService.saveBatch(reportList);
+                        //再查询出来,进行项目工时存储
+                        List<SimpleReport> queryList = simpleReportMapper.selectList(queryWrapper);
+                        System.out.println("queryList size=="+queryList.size());
+                        List<SimpleProjectime> allTimeList = new ArrayList<>();
+                        reportList.forEach(r->{
+                            Integer id = queryList.stream().filter(q -> q.getUsername().equals(r.getUsername())).findFirst().get().getId();
+                            List<SimpleProjectime> timeList = r.getProjectimeList();
+                            timeList.forEach(t->t.setSimpleId(id));
+                            allTimeList.addAll(timeList);
+                        });
+                        simpleProjectimeService.saveBatch(allTimeList);
                     }
                 }
 

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

@@ -522,7 +522,7 @@ public class TaskServiceImpl extends ServiceImpl<TaskMapper, Task> implements Ta
                         List<Participation> participationList = participationMapper.selectList(new QueryWrapper<Participation>().eq("project_id", task.getProjectId()));
                         List<User> partUserList = userMapper.selectList(new QueryWrapper<User>().in("id", participationList.stream().map(Participation::getUserId).collect(Collectors.toList())));
                         String useridList = partUserList.stream().map(User::getDingdingUserid).collect(Collectors.joining(","));
-                        companyDingdingService.sendFinishMileStoneMsg(dingding, useridList, task.getName(), project.getProjectName(), finishDate);
+                        companyDingdingService.sendFinishMileStoneMsg(dingding, useridList, task.getName(), project.getId(), project.getProjectName(), finishDate);
                     }
                 }
                 //TODO: 企业微信注册的公司

+ 22 - 20
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ProjectMapper.xml

@@ -67,7 +67,7 @@
     </resultMap>
     <select id="selectWithStage" resultMap="BaseResultMap2" >
         select id, project_code, project_name from project
-        where company_id = #{companyId} order by id asc
+        where company_id = #{companyId} order by is_public desc, id asc
         <if test="startIndex != null">
             limit ${startIndex}, ${endIndex}
         </if>
@@ -251,7 +251,7 @@
         <if test="userId != null">
             AND a.creator_id = #{userId}
         </if>
-        ORDER BY b.id ASC
+        ORDER BY a.create_date desc
     </select>
 
     <!--按照项目内的阶段名称分组统计工时-->
@@ -307,6 +307,7 @@
         (SELECT IFNULL(SUM(amount),0) FROM expense_item , expense_sheet WHERE project_id = project.id AND  expense_sheet.id = expense_item.`expense_id` AND expense_sheet.type = 2 and expense_sheet.status = 0) AS fee_outsourcing
         FROM project WHERE project.`company_id` = #{companyId}
         and (project.status &lt;&gt; 3 or project.status is null)
+        order by is_public desc, id asc
         <if test="pageStart != null and pageSize != null">
             LIMIT #{pageStart},#{pageSize}
         </if>
@@ -392,24 +393,24 @@
     </select>
 
     <!--获取加班统计报表 -->
-    <select id="getOvertimeList" resultType="java.util.Map">
-        SELECT report.`creator_id` AS userId, user.`name` AS username, SUM(report.`working_time`) AS workingTime,
-        IFNULL(SUM(report.`overtime_hours`),0) AS overtimeHours,
-        group_concat(distinct(project.project_code)) as projectCode,
-        IFNULL(SUM(report.overtime_cost), 0) AS cost FROM report LEFT JOIN user ON user.id = report.`creator_id`
-        left join project on project.id = report.project_id
-        WHERE report.is_overtime = 1
-        and report.`state` = 1
-        AND report.`create_date` BETWEEN #{startDate} and #{endDate}
-        AND user.`company_id` = #{companyId}
-        <if test="projectId != null">
-            AND report.`project_id` = #{projectId}
-        </if>
-        <if test="userId != null">
-            AND report.`creator_id` = #{userId}
-        </if>
-        GROUP BY report.creator_id
-    </select>
+<!--    <select id="getOvertimeList" resultType="java.util.Map">-->
+<!--        SELECT report.`creator_id` AS userId, user.`name` AS username, SUM(report.`working_time`) AS workingTime,-->
+<!--        IFNULL(SUM(report.`overtime_hours`),0) AS overtimeHours,-->
+<!--        group_concat(distinct(project.project_code)) as projectCode,-->
+<!--        IFNULL(SUM(report.overtime_cost), 0) AS cost FROM report LEFT JOIN user ON user.id = report.`creator_id`-->
+<!--        left join project on project.id = report.project_id-->
+<!--        WHERE report.is_overtime = 1-->
+<!--        and report.`state` = 1-->
+<!--        AND report.`create_date` BETWEEN #{startDate} and #{endDate}-->
+<!--        AND user.`company_id` = #{companyId}-->
+<!--        <if test="projectId != null">-->
+<!--            AND report.`project_id` = #{projectId}-->
+<!--        </if>-->
+<!--        <if test="userId != null">-->
+<!--            AND report.`creator_id` = #{userId}-->
+<!--        </if>-->
+<!--        GROUP BY report.creator_id-->
+<!--    </select>-->
 
     <!-- 获取某个员工的某时间段内的加班详情 -->
     <select id="getOvertimeDetail" resultType="java.util.Map">
@@ -432,6 +433,7 @@
         <if test="userId != null">
             AND report.`creator_id` = #{userId}
         </if>
+        order by user.create_time asc, report.create_date desc
     </select>
     <!--按照项目内的阶段名称分组统计工时-->
     <select id="getDegreeCost" resultType="java.util.Map">

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

@@ -9,11 +9,12 @@
         <result column="user_id" property="userId" />
         <result column="user_name" property="userName" />
         <result column="rlog_id" property="rlogId" />
+        <result column="state" property="state" />
     </resultMap>
 
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
-        id, create_date, user_id, user_name, rlog_id
+        id, create_date, user_id, user_name, rlog_id, state
     </sql>
 
 </mapper>

+ 15 - 4
fhKeeper/formulahousekeeper/timesheet/src/views/project/list.vue

@@ -662,6 +662,11 @@
                 </div>
             </el-dialog>
         </el-dialog>
+        <el-dialog append-to-body title="项目导入结果" v-if="showImportResult" :visible.sync="showImportResult" width="40%">
+                <div >
+                    {{importResultMsg}}
+                </div>
+            </el-dialog>
     </section>
 </template>
 <style scoped>
@@ -698,6 +703,8 @@ a {
         components:{projectgantt},
         data() {
             return {
+                showImportResult: false,
+                importResultMsg:null,
                 isganttshow: false,
                 deleteAlertMsg: null,
                 chosenLeaders:[],
@@ -1801,10 +1808,14 @@ a {
                         this.$refs.upload.clearFiles();
                         this.listLoading = false;
                         if (res.code == "ok") {
-                            this.$message({
-                                message: "导入成功",
-                                type: "success"
-                            });
+                            // this.$message({
+                            //     message: res.data,
+                            //     type: "success"
+                            // },5000);
+                            //弹窗显示
+                            this.showImportResult = true;
+                            this.importResultMsg = res.data;
+
                             this.getList();
                         } else {
                             this.$message({

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

@@ -319,14 +319,14 @@
                     </el-form-item>
                 <div style="border: 1px solid #ddd;margin:5px 0;padding:5px 0;">
                 <el-form-item :label="'执行人'+(index+1)" v-for="(executorItem, index) in addForm.executorListFront" :key="index">
-                    <el-select v-model="executorItem.executorId" :disabled="(addForm.id != null && user.id != addForm.createrId && currentProject.inchargerId != user.id) && !permissions.projectManagement" size="small" filterable placeholder="请选择执行人" style="width:40%;" @change="$forceUpdate()">
+                    <el-select v-model="executorItem.executorId" :disabled="(addForm.id != null && user.id != addForm.createrId && currentProject.inchargerId != user.id) && !permissions.projectManagement" size="small" filterable clearable placeholder="请选择执行人" style="width:40%;" @change="$forceUpdate()">
                         <el-option v-for="item in users" :key="item.id" :label="item.name" :value="item.id"></el-option>
                     </el-select>
                     <span style="margin-left:30px;margin-right:10px;">计划工时</span>
                     <el-input-number size="small" :disabled="(addForm.id != null && user.id != addForm.createrId && currentProject.inchargerId != user.id) && !permissions.projectManagement" v-model="gstimday[index]" style="width:16%;" :min="1" :max="100"  placeholder="请输入计划工作时长,单位天" @change="chggstim(0,index)"></el-input-number ><span style="margin-left:5px;">天</span>
                     <el-input-number size="small" :disabled="(addForm.id != null && user.id != addForm.createrId && currentProject.inchargerId != user.id) && !permissions.projectManagement" v-model="gstimhour[index]" style="width:16%;" :min="1" :max="100"  placeholder="请输入计划工作时长,单位小时" @change="chggstim(1,index)"></el-input-number ><span style="margin-left:5px;">小时</span>
                     <!--移除执行人 -->
-                    <i class="el-icon-delete" v-if="index>0 && (addForm.id == null|| user.id == addForm.createrId || currentProject.inchargerId == user.id)" style="margin-left:5px" @click="removeExecutorLine(index)"></i>
+                    <i class="el-icon-delete" v-if="index>0 && (addForm.id == null|| user.id == addForm.createrId || currentProject.inchargerId == user.id|| permissions.projectManagement)" style="margin-left:5px" @click="removeExecutorLine(index)"></i>
                 </el-form-item>
                 <el-link type="primary" v-if="(addForm.executorListFront == null || addForm.executorListFront.length<10)&& (addForm.id == null|| user.id == addForm.createrId || currentProject.inchargerId == user.id || permissions.projectManagement)" style="margin-left:35px;" @click="addExecutorLine">添加执行人</el-link>
                 </div>

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

@@ -207,7 +207,7 @@
                     </el-form-item>
                 <div style="border: 1px solid #ddd;margin:5px 0;padding:5px 0;">
                 <el-form-item :label="'执行人'+(index+1)" v-for="(executorItem, index) in addForm.executorListFront" :key="index">
-                    <el-select v-model="executorItem.executorId" :disabled="addForm.id != null && user.id != addForm.createrId && currentProject.inchargerId != user.id" size="small" filterable placeholder="请选择执行人" style="width:40%;" @change="$forceUpdate()">
+                    <el-select v-model="executorItem.executorId" :disabled="addForm.id != null && user.id != addForm.createrId && currentProject.inchargerId != user.id" size="small" filterable clearable placeholder="请选择执行人" style="width:40%;" @change="$forceUpdate()">
                         <el-option v-for="item in users" :key="item.id" :label="item.name" :value="item.id"></el-option>
                     </el-select>
                     <span style="margin-left:30px;margin-right:10px;">计划工时</span>