QuYueTing 2 дней назад
Родитель
Сommit
ab9c56fef7
12 измененных файлов с 163 добавлено и 94 удалено
  1. 1 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/FeishuInfoController.java
  2. 4 4
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ProjectController.java
  3. 1 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/WeiXinCorpController.java
  4. 60 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/WxCorpInfoController.java
  5. 2 2
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/ProjectService.java
  6. 1 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/DingDingServiceImpl.java
  7. 42 41
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/FinanceServiceImpl.java
  8. 26 29
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java
  9. 4 3
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java
  10. 1 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/UserServiceImpl.java
  11. 19 15
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/WxCorpInfoServiceImpl.java
  12. 2 0
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ReportMapper.xml

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

@@ -207,6 +207,7 @@ public class FeishuInfoController {
             Company company = new Company().setCompanyName(corpName)
                     .setExpirationDate(LocalDateTime.now().plusDays(15));
             company.setPackageWorktime(1);
+            company.setEnableAi(true);//新公司默认打开AI解析填报功能
             companyMapper.insert(company);
             feishuInfo.setCorpid(corpId);
             feishuInfo.setCorpName(corpName);

+ 4 - 4
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ProjectController.java

@@ -223,12 +223,12 @@ public class ProjectController {
                                    String plate9,
                                    String plate10,
                                    @RequestParam(required = false,value = "deptIds") String deptIds,
-                                   String[] leaderIds) {
+                                   String[] leaderIds, Integer currentStageId, String currentStageName) {
         return projectService.editProject(id, name, code, userId, inchargerId, isPublic, planStartDate, planEndDate, level, contractAmount,changeContractReason,
                 projectBaseCostData,projectKeyNodesData,
                  budget,customerId,chosenLeaders, associateDegrees, associateDegreeNames,
                 taskGpIncharge,auditUserIds, ccUserIds, category, projectDesc,projectMainId, providerIds, providerNames, request,projectSeparate,outputValue,deptId,onlyChangeParticipate,buId,manDay,manDayStartDate,reviwerId, plate1,plate2,plate3,plate4,plate5,plate6,plate7,plate8,plate9,plate10
-        ,deptIds,leaderIds);
+        ,deptIds,leaderIds, currentStageId, currentStageName);
     }
 
     @RequestMapping("/adjustBase")
@@ -741,8 +741,8 @@ public class ProjectController {
      * @param projectId 项目id, 可不传
      */
     @RequestMapping("/getDegreeCost")
-    public HttpRespMsg getDegreeCost(String startDate, String endDate, Integer projectId,String userId) {
-        return projectService.getDegreeCost(startDate, endDate, projectId, userId,request);
+    public HttpRespMsg getDegreeCost(String startDate, String endDate, Integer projectId,String userId, Integer departmentId) {
+        return projectService.getDegreeCost(startDate, endDate, projectId, userId, departmentId, request);
     }
 
     //导出自定义维度的工时成本

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

@@ -1540,6 +1540,7 @@ public class WeiXinCorpController {
                         company.setPackageExpense(1);
                         //设置来源
                         company.setRegFrom("企业微信");
+                        company.setEnableAi(true);//新公司默认打开AI解析填报功能
                         companyMapper.insert(company);
                         //生成项目的成本基线默认条目
                         String[] array = Constant.DEFAULT_BASE_COST_ITEMS;

+ 60 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/WxCorpInfoController.java

@@ -7,12 +7,14 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.management.platform.entity.Overtime;
 import com.management.platform.entity.User;
 import com.management.platform.entity.WxCorpInfo;
+import com.management.platform.mapper.ReportMapper;
 import com.management.platform.mapper.UserMapper;
 import com.management.platform.service.OvertimeService;
 import com.management.platform.service.WxCorpInfoService;
 import com.management.platform.task.TimingTask;
 import com.management.platform.util.HttpRespMsg;
 import com.management.platform.util.ListUtil;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.http.HttpRequest;
 import org.springframework.util.StringUtils;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -21,12 +23,15 @@ import org.springframework.web.bind.annotation.RestController;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
+import java.math.BigDecimal;
 import java.time.Instant;
 import java.time.LocalDateTime;
 import java.time.ZoneId;
 import java.time.format.DateTimeFormatter;
 import java.util.Arrays;
 import java.util.List;
+import java.util.Map;
+import java.util.Optional;
 import java.util.stream.Collectors;
 
 /**
@@ -50,6 +55,61 @@ public class WxCorpInfoController {
     @Resource
     private OvertimeService overtimeService;
 
+    @Resource
+    private ReportMapper reportMapper;
+
+    @RequestMapping("/testWaitingApproveMsg")
+    public HttpRespMsg testWaitingApproveMsg(Integer companyId) {
+        HttpRespMsg msg = new HttpRespMsg();
+        WxCorpInfo wxCorpInfo = wxCorpInfoService.getOne(new QueryWrapper<WxCorpInfo>().eq("company_id", companyId));
+        List<Map<String, Object>> result = reportMapper.getProWaitingApproveCnt(wxCorpInfo.getCompanyId());
+        List<Map<String, Object>> result1 = reportMapper.getDeptWaitingApproveCnt(wxCorpInfo.getCompanyId());
+        List<Object> resultCorpwxUserIds = result.stream().map(rl -> rl.get("corpwxUserid")).collect(Collectors.toList());
+        for (Map<String, Object> map : result) {
+            Optional<Map<String, Object>> first = result1.stream().filter(r1 -> r1.get("corpwxUserid") != null && r1.get("corpwxUserid").equals(map.get("corpwxUserid"))).findFirst();
+            if(map.get("corpwxUserid")!=null){
+                String corpwxUserid = (String) map.get("corpwxUserid");
+                //推送到企业微信
+                JSONObject json=new JSONObject();
+                JSONArray dataJson=new JSONArray();
+                JSONObject jsonObj=new JSONObject();
+                Integer num = Integer.valueOf(String.valueOf(map.get("num")));
+                BigDecimal bigDecimal=new BigDecimal(num);
+                if(first.isPresent()){
+                    bigDecimal=bigDecimal.add(new BigDecimal(String.valueOf(first.get().get("num"))));
+                }
+                jsonObj.put("key", "待审核数量");
+                jsonObj.put("value",bigDecimal.toPlainString());
+                dataJson.add(jsonObj);
+                json.put("template_id","tty9TkCAAAuPvPjabDdQXGocnG0K24EQ");
+                json.put("url","https://open.weixin.qq.com/connect/oauth2/authorize?appid=ww4e237fd6abb635af&redirect_uri=http://worktime.ttkuaiban.com/api/corpWXAuth&response_type=code&scope=snsapi_base&state=review#wechat_redirect");
+                json.put("content_item",dataJson);
+                wxCorpInfoService.sendWXCorpTemplateMsg(wxCorpInfo, corpwxUserid, json);
+            }
+        }
+        for (Map<String, Object> map : result1) {
+            if(!resultCorpwxUserIds.stream().anyMatch(ol->ol != null && ((String)ol).equals(map.get("corpwxUserid")))){
+                if(map.get("corpwxUserid")!=null){
+                    String corpwxUserid = (String) map.get("corpwxUserid");
+                    //推送到企业微信
+                    JSONObject json=new JSONObject();
+                    JSONArray dataJson=new JSONArray();
+                    JSONObject jsonObj=new JSONObject();
+                    Integer num = Integer.valueOf(String.valueOf(map.get("num")));
+                    BigDecimal bigDecimal=new BigDecimal(num);
+                    jsonObj.put("key", "待审核数量");
+                    jsonObj.put("value",bigDecimal.toPlainString());
+                    dataJson.add(jsonObj);
+                    json.put("template_id","tty9TkCAAAuPvPjabDdQXGocnG0K24EQ");
+                    json.put("url","https://open.weixin.qq.com/connect/oauth2/authorize?appid=ww4e237fd6abb635af&redirect_uri=http://worktime.ttkuaiban.com/api/corpWXAuth&response_type=code&scope=snsapi_base&state=review#wechat_redirect");
+                    json.put("content_item",dataJson);
+                    wxCorpInfoService.sendWXCorpTemplateMsg(wxCorpInfo, corpwxUserid, json);
+                }
+            }
+        }
+        return msg;
+    }
+
     @RequestMapping("/testDownload")
     public HttpRespMsg testDownload() {
         HttpRespMsg msg = new HttpRespMsg();

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

@@ -62,7 +62,7 @@ public interface ProjectService extends IService<Project> {
                             String plate9,
                             String plate10,
                             String deptIds,
-                            String[] leaderIds);
+                            String[] leaderIds, Integer currentStageId, String currentStageName);
 
     HttpRespMsg deleteProject(Integer id, Integer force);
 
@@ -126,7 +126,7 @@ public interface ProjectService extends IService<Project> {
 
     HttpRespMsg exportOvertimeList(OvertimeListVO overtimeListVO, HttpServletRequest request);
 
-    HttpRespMsg getDegreeCost(String startDate, String endDate, Integer projectId, String userId,HttpServletRequest request);
+    HttpRespMsg getDegreeCost(String startDate, String endDate, Integer projectId, String userId, Integer departmentId, HttpServletRequest request);
 
     HttpRespMsg exportData(String keyword,
                            @RequestParam(required = false, defaultValue = "1") Integer searchField,

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

@@ -182,6 +182,7 @@ public class DingDingServiceImpl implements DingDingService {
                 company.setPackageOa(1);
                 //设置来源
                 company.setRegFrom("钉钉");
+                company.setEnableAi(true);//新公司默认打开AI解析填报功能
                 companyMapper.insert(company);
                 dingding.setCompanyId(company.getId());
                 companyDingdingMapper.updateById(dingding);

+ 42 - 41
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/FinanceServiceImpl.java

@@ -879,46 +879,6 @@ public class FinanceServiceImpl extends ServiceImpl<FinanceMapper, Finance> impl
             if (httpRespMsg.code.equals("error")) {
                 return httpRespMsg;
             }
-            //无项目工时人员的分配比例设置
-            List<Map> noPUserDataList = new ArrayList<>();
-            if (assignNoProUser != null && assignNoProUser && noProjectUser.size() > 0) {
-                //检查是否已经设置好分配规则
-                percentage = projectPercentageMapper.selectOne(new QueryWrapper<ProjectPercentage>().eq("company_id", companyId).eq("ymonth", yearMonth));
-                if (percentage == null) {
-                    //httpRespMsg.setError("请先设置无项目工时人员的分配比例");
-                    httpRespMsg.setError(MessageUtils.message("project.setPersonnelAllotment"));
-                    return httpRespMsg;
-                } else {
-                    //获取设置的项目
-                    String data = percentage.getData();
-                    JSONArray parse = JSONArray.parseArray(data);
-                    //获取到无项目人员配置的项目
-                    financeProjects.forEach(f->{
-                        for (int i = 0; i < parse.size(); i++) {
-                            JSONObject json = parse.getJSONObject(i);
-                            String userId = json.getString("id");
-                            String username = json.getString("name");
-                            //获取各个项目的分配比例值
-                            HashMap userCostMap = new HashMap();
-                            userCostMap.put("creatorId", userId);
-                            userCostMap.put("workingTime", 0.0f);
-                            double percent = json.getDouble(f.getProjectId()+"");
-                            Optional<Finance> first = noProjectUser.stream().filter(no -> no.getUserId().equals(userId)).findFirst();
-                            if (first.isPresent()) {
-                                Finance finance = first.get();
-                                userCostMap.put("finance", finance);
-                                userCostMap.put("percent", percent);
-                                userCostMap.put("project", f.getProjectId());
-                                userCostMap.put("projectId", f.getProjectId());
-                                userCostMap.put("projectCode", f.getProjectCode());
-                                userCostMap.put("categoryName", f.getCategoryName());
-                                noPUserDataList.add(userCostMap);
-                            }
-                        }
-                    });
-                }
-            }
-
             List<User> userList = userMapper.selectList(new QueryWrapper<User>().eq("company_id", companyId));
             for (Map<String, Object> map : projectTimeList) {
                 Integer projectId = ((Long) map.get("projectId")).intValue();
@@ -1058,7 +1018,8 @@ public class FinanceServiceImpl extends ServiceImpl<FinanceMapper, Finance> impl
 //                    System.out.println("财务数据中未找到用户:"+creatorId);
                 }
             }
-
+            //无项目工时人员的分配比例设置
+            List<Map> noPUserDataList = new ArrayList<>();
             //加上待分摊的无工时项目,如果当前项目列表没有的话
             if (assignNoProUser != null && assignNoProUser) {
                 if (timeType.getFinanceTwiceAssign()) {
@@ -1148,6 +1109,43 @@ public class FinanceServiceImpl extends ServiceImpl<FinanceMapper, Finance> impl
                         }
                     }
                 } else {
+                    if (noProjectUser.size() > 0) {
+                        //检查是否已经设置好分配规则
+                        percentage = projectPercentageMapper.selectOne(new QueryWrapper<ProjectPercentage>().eq("company_id", companyId).eq("ymonth", yearMonth));
+                        if (percentage == null) {
+                            //httpRespMsg.setError("请先设置无项目工时人员的分配比例");
+                            httpRespMsg.setError(MessageUtils.message("project.setPersonnelAllotment"));
+                            return httpRespMsg;
+                        } else {
+                            //获取设置的项目
+                            String data = percentage.getData();
+                            JSONArray parse = JSONArray.parseArray(data);
+                            //获取到无项目人员配置的项目
+                            financeProjects.forEach(f->{
+                                for (int i = 0; i < parse.size(); i++) {
+                                    JSONObject json = parse.getJSONObject(i);
+                                    String userId = json.getString("id");
+                                    String username = json.getString("name");
+                                    //获取各个项目的分配比例值
+                                    HashMap userCostMap = new HashMap();
+                                    userCostMap.put("creatorId", userId);
+                                    userCostMap.put("workingTime", 0.0f);
+                                    double percent = json.getDouble(f.getProjectId()+"");
+                                    Optional<Finance> first = noProjectUser.stream().filter(no -> no.getUserId().equals(userId)).findFirst();
+                                    if (first.isPresent()) {
+                                        Finance finance = first.get();
+                                        userCostMap.put("finance", finance);
+                                        userCostMap.put("percent", percent);
+                                        userCostMap.put("project", f.getProjectId());
+                                        userCostMap.put("projectId", f.getProjectId());
+                                        userCostMap.put("projectCode", f.getProjectCode());
+                                        userCostMap.put("categoryName", f.getCategoryName());
+                                        noPUserDataList.add(userCostMap);
+                                    }
+                                }
+                            });
+                        }
+                    }
                     List<FinanceProjects> notInFPList = new ArrayList<FinanceProjects>();
                     financeProjects.forEach(f->{
                         if (!pList.stream().anyMatch(pItem->pItem.getProjectId().intValue() == f.getProjectId())) {
@@ -1379,6 +1377,9 @@ public class FinanceServiceImpl extends ServiceImpl<FinanceMapper, Finance> impl
             DecimalFormat workTimeFormatter = new DecimalFormat("0.00");
             if (groupByCategory == 0) {
                 for (ProjectSumItem p : pList) {
+//                    if (p.getCost().compareTo(new BigDecimal(0)) == 0) {
+//                        continue;//合计为0的,跳过; 实现排除生产其他和研发其他这两个项目
+//                    }
                     p.cost = p.cost.setScale(2, BigDecimal.ROUND_HALF_UP);
                     p.salary = p.salary.setScale(2, BigDecimal.ROUND_HALF_UP);
                     p.bonus = p.bonus.setScale(2, BigDecimal.ROUND_HALF_UP);

+ 26 - 29
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java

@@ -1767,7 +1767,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                                    String plate9,
                                    String plate10,
                                    String deptIds,
-                                   String[] leaderIds) {
+                                   String[] leaderIds, Integer currentStageId, String currentStageName) {
         HttpRespMsg httpRespMsg = new HttpRespMsg();
         User user = userMapper.selectById(request.getHeader("Token"));
         Integer companyId = user.getCompanyId();
@@ -1850,7 +1850,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                             .setPlate7(plate7)
                             .setPlate8(plate8)
                             .setPlate9(plate9)
-                            .setPlate10(plate10);
+                            .setPlate10(plate10).setCurrentStageId(currentStageId).setCurrentStageName(currentStageName);
                     if(companyId==862){
                         project.setBuId(buId);
                         if (project.getBuId()!=null&&!project.getBuId().equals("")) {
@@ -1993,7 +1993,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                         .setPlate7(plate7)
                         .setPlate8(plate8)
                         .setPlate9(plate9)
-                        .setPlate10(plate10);
+                        .setPlate10(plate10).setCurrentStageId(currentStageId).setCurrentStageName(currentStageName);
                 if(companyId==862){
                     p.setBuId(buId);
                     if (p.getBuId()!=null&&!p.getBuId().equals("")) {
@@ -8007,7 +8007,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
     }
 
     @Override
-    public HttpRespMsg getDegreeCost(String startDate, String endDate, Integer projectId,String userId, HttpServletRequest request) {
+    public HttpRespMsg getDegreeCost(String startDate, String endDate, Integer projectId,String userId, Integer departmentId, HttpServletRequest request) {
         HttpRespMsg msg = new HttpRespMsg();
         String token = request.getHeader("TOKEN");
         User user = userMapper.selectById(token);
@@ -8035,6 +8035,10 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                     }
                 }
             }
+        } else if (departmentId != null) {
+            //有查看全公司的权限的情况下,按部门筛选的结果
+            List<Integer> branchDepartment = getBranchDepartment(departmentId, allDepartmentList);
+            deptIds = branchDepartment;
         }
         msg.data = projectMapper.getDegreeCost(startDate, endDate, projectId,userId, user.getCompanyId(),deptIds);
         return msg;
@@ -13333,24 +13337,17 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
             List<List<String>> allList=null ;
             List<String> sumRow = null;
             List<String> headList = new ArrayList<String>();
-            //headList.add("项目编号");
-            headList.add(MessageUtils.message("entry.projectId"));
-            //headList.add("项目名称");
-            headList.add(MessageUtils.message("entry.projectName"));
-            //headList.add("项目分类");
-            headList.add(MessageUtils.message("entry.projectType"));
-            //headList.add("人员");
-            headList.add(MessageUtils.message("entry.personnel"));
-            //headList.add("部门");
-//            headList.add(MessageUtils.message("excel.department"));
+            headList.add("项目编号");
+            headList.add("项目名称");
+            headList.add("项目分类");
+            headList.add("人员");
+            headList.add("部门");
             headList.add(timeType.getCustomDegreeName());
             if(functionTimeList.size()>0){
-                //headList.add("工时(h)");
-                headList.add(MessageUtils.message("entry.workHours")+"(h)");
+                headList.add("工时(h)");
             }
             if(functionCostList.size()>0){
-                //headList.add("成本(元)");
-                headList.add(MessageUtils.message("entry.cost")+"(元)");
+                headList.add("成本(元)");
             }
 
             allList=new ArrayList<>();
@@ -13373,7 +13370,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                 rowData.add(map.get("categoryName")==null?"":map.get("categoryName").toString());
                 rowData.add("");
                 rowData.add("");
-//                rowData.add("");
+                rowData.add("");
 
                 if(functionTimeList.size()>0){
                     rowData.add(((Double)map.get("cost")).toString());
@@ -13401,16 +13398,16 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                     membRowData.add("");
                     if(wxCorpInfo!=null&&wxCorpInfo.getSaasSyncContact()==1){
                         membRowData.add(("$userName="+membMap.get("corpwxUserId")+"$"));
-//                        if(membMap.get("departmentName").equals("未分配")){
-//                            membRowData.add("未分配");
-//                        }else {
-//                            membRowData.add((String)("$departmentName="+membMap.get("corpwxDeptId")+"$"));
-//                        }
-                    }else if(dingding!=null&&dingding.getContactNeedTranslate()==1){
-                        membRowData.add(("$userName="+(String)membMap.get("name")+"$"));
-                    }else {
+                        if(membMap.get("departmentName").equals("未分配")){
+                            membRowData.add("未分配");
+                        }else {
+                            Integer curDeptId = (Integer)membMap.get("deptId");
+                            Department curDept = allDepartmentList.stream().filter(dept->dept.getDepartmentId().equals(curDeptId)).findFirst().get();
+                            membRowData.add(exportWxDepartment(curDept));
+                        }
+                    } else {
                         membRowData.add((String)membMap.get("name"));
-//                        membRowData.add((String)membMap.get("departmentName"));
+                        membRowData.add((String)membMap.get("departmentName"));
                     }
                     membRowData.add(membMap.get("degreeName")==null?"未分配":(String)membMap.get("degreeName"));
                     if(functionTimeList.size()>0){
@@ -13426,7 +13423,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
             sumRow=new ArrayList<>();
             //sumRow.add("合计");
             sumRow.add(MessageUtils.message("entry.total"));
-            //sumRow.add("");
+            sumRow.add("");
             sumRow.add("");
             sumRow.add("");
             sumRow.add("");

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

@@ -5446,7 +5446,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
         } else {
             list = reportMapper.getUserDailyWorkTime(companyId, startDate, endDate, branchDepartment, null,user.getId());
             //管理员看全公司所有人
-            allRangeUserList = userMapper.selectList(new QueryWrapper<User>().eq("company_id", companyId).orderByDesc("department_id"));
+            allRangeUserList = userMapper.selectList(new QueryWrapper<User>().eq("company_id", companyId).eq("report_status", 0).orderByDesc("department_id"));
         }
         List<User> needRangeUserList=new ArrayList<>();
         //按人员过滤
@@ -5455,7 +5455,8 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             allRangeUserList=allRangeUserList.stream().filter(at-> finalBranchDepartment.contains(at.getDepartmentId())).collect(Collectors.toList());
         }
         for (User u : allRangeUserList) {
-            if(u.getInactiveDate()==null||(u.getInactiveDate()!=null&&u.getInactiveDate().isAfter(LocalDate.parse(startDate))||u.getIsActive()==1)){
+            //不填报的人要去掉,加上reportStatus=0条件
+            if(u.getReportStatus()==0&&(u.getInactiveDate()==null||(u.getInactiveDate()!=null&&u.getInactiveDate().isAfter(LocalDate.parse(startDate))||u.getIsActive()==1))){
                 needRangeUserList.add(u);
             }
         }
@@ -5502,7 +5503,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             }
             lastUserId = id;
         }
-        //计算未填的人员
+        //计算未填的人员,
         List<User> noReportUserList = needRangeUserList.stream()
                 .filter(au->!userMonthWorks.stream().anyMatch(mon->mon.userId.equals(au.getId())))
                 .collect(Collectors.toList());

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

@@ -1208,6 +1208,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
                 from = "官网";
             }
             company.setRegFrom(from);
+            company.setEnableAi(true);//新公司默认打开AI解析填报功能
             companyMapper.insert(company);
 
             //生成工作时长

+ 19 - 15
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/WxCorpInfoServiceImpl.java

@@ -498,6 +498,7 @@ public class WxCorpInfoServiceImpl extends ServiceImpl<WxCorpInfoMapper, WxCorpI
     @Async("taskExecutor")
     public void sendWXCorpTemplateMsg(WxCorpInfo corpInfo, String corpUserid, JSONObject msg) {
         try {
+//            System.out.println("准备发送审核消息=="+corpInfo.getCompanyId()+", "+corpUserid+", "+msg.toJSONString());
             if (isDev) return;
             if(StringUtils.isEmpty(corpUserid)){
                 return;
@@ -1808,7 +1809,7 @@ public class WxCorpInfoServiceImpl extends ServiceImpl<WxCorpInfoMapper, WxCorpI
                                 }
                             }
                         }
-                        if (corpInfo.getCompanyId() == 469 || corpInfo.getCompanyId() == 7 || corpInfo.getCompanyId() == 8607 || corpInfo.getCompanyId() == 8555) {
+                        if (corpInfo.getCompanyId() == 469 || corpInfo.getCompanyId() == 7 || corpInfo.getCompanyId() == 8607 || corpInfo.getCompanyId() == 8555 || corpInfo.getCompanyId() == 8582) {
                             needRecaculate = true;//赛元微电子,都需要重新计算
                         }
                         double timeDelta = 0;
@@ -1821,7 +1822,8 @@ public class WxCorpInfoServiceImpl extends ServiceImpl<WxCorpInfoMapper, WxCorpI
                                 timeDelta -= restTime;
                             }
                         } else {
-                            if (ct.getEndTime().compareTo(baseAfternoonStart) >= 0) {
+                            //企微传过来的考勤时间大于等于9小时,可能是包含午休的时间,需要减去。
+                            if (ct.getEndTime().compareTo(baseAfternoonStart) >= 0 && ct.getCardTime() >= 9.0) {
                                 //重新计算工作工时时,需要用打卡总时间减去中间午休时间
                                 timeDelta = ct.getCardTime() - restTime;
                             } else {
@@ -2097,20 +2099,22 @@ public class WxCorpInfoServiceImpl extends ServiceImpl<WxCorpInfoMapper, WxCorpI
                     }
                     if (itemList.size() > 0) {
                         UserCorpwxTime item = itemList.get(0);
-                        if (itemList.size() > 1) {
-                            System.out.println("数据异常: "+curUserid+", "+localDate+". 存在"+itemList.size()+"条考勤,已自动删除多余的");
-                            for (int t=1; t < itemList.size(); t++) {
-                                userCorpwxTimeMapper.deleteById(itemList.get(t).getId());
+                        if (item.getModifiedByAdmin() != null && item.getModifiedByAdmin() == 0) {//自动同步的数据可以更新,管理员手动修改的不能覆盖掉
+                            if (itemList.size() > 1) {
+                                System.out.println("数据异常: "+curUserid+", "+localDate+". 存在"+itemList.size()+"条考勤,已自动删除多余的");
+                                for (int t=1; t < itemList.size(); t++) {
+                                    userCorpwxTimeMapper.deleteById(itemList.get(t).getId());
+                                }
+                            }
+                            ct.setId(item.getId());
+                            //之前有的时长不合法,或者新的有打卡时长
+                            if (item.getWorkHours() <= 0 || hasTimeRecord) {
+                                if (showLog) System.out.println("更新考勤记录"+curUserid+", "+localDate);
+                                userCorpwxTimeMapper.updateById(ct);
+                            }
+                            if (corpInfo.getCompanyId() == 8555 || corpInfo.getCompanyId() == 8128) {
+                                handleAllowance(item, baseMorningStart, baseMorningEnd, baseAfternoonStart, baseAfternoonEnd, restTime);
                             }
-                        }
-                        ct.setId(item.getId());
-                        //之前有的时长不合法,或者新的有打卡时长
-                        if (item.getWorkHours() <= 0 || hasTimeRecord) {
-                            if (showLog) System.out.println("更新考勤记录"+curUserid+", "+localDate);
-                            userCorpwxTimeMapper.updateById(ct);
-                        }
-                        if (corpInfo.getCompanyId() == 8555 || corpInfo.getCompanyId() == 8128) {
-                            handleAllowance(item, baseMorningStart, baseMorningEnd, baseAfternoonStart, baseAfternoonEnd, restTime);
                         }
                     } else {
                         if (hasTimeRecord) {

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

@@ -1202,6 +1202,7 @@
     </select>
     <select id="getProWaitingApproveCnt" resultType="java.util.HashMap">
         select count(1) as num, user.dingding_userid as auditorDDId ,user.corpwx_userid as corpwxUserid from report
+        left join `user` on `user`.id = report.project_auditor_id
         where state = 0 and project_audit_state = 0 and is_dept_audit = 0
           and report.company_id = #{companyId}
           and `user`.is_active=1
@@ -1209,6 +1210,7 @@
     </select>
     <select id="getDeptWaitingApproveCnt" resultType="java.util.HashMap">
         select COUNT(1) as num, user.dingding_userid as auditorDDId ,user.corpwx_userid as corpwxUserid from report
+        left join `user` on `user`.id = report.audit_dept_managerid
         where state = 0 and is_dept_audit = 1
           and report.company_id =#{companyId}
           and `user`.is_active=1