QuYueTing 4 days ago
parent
commit
ab9c56fef7
12 changed files with 163 additions and 94 deletions
  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)
             Company company = new Company().setCompanyName(corpName)
                     .setExpirationDate(LocalDateTime.now().plusDays(15));
                     .setExpirationDate(LocalDateTime.now().plusDays(15));
             company.setPackageWorktime(1);
             company.setPackageWorktime(1);
+            company.setEnableAi(true);//新公司默认打开AI解析填报功能
             companyMapper.insert(company);
             companyMapper.insert(company);
             feishuInfo.setCorpid(corpId);
             feishuInfo.setCorpid(corpId);
             feishuInfo.setCorpName(corpName);
             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 plate9,
                                    String plate10,
                                    String plate10,
                                    @RequestParam(required = false,value = "deptIds") String deptIds,
                                    @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,
         return projectService.editProject(id, name, code, userId, inchargerId, isPublic, planStartDate, planEndDate, level, contractAmount,changeContractReason,
                 projectBaseCostData,projectKeyNodesData,
                 projectBaseCostData,projectKeyNodesData,
                  budget,customerId,chosenLeaders, associateDegrees, associateDegreeNames,
                  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
                 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")
     @RequestMapping("/adjustBase")
@@ -741,8 +741,8 @@ public class ProjectController {
      * @param projectId 项目id, 可不传
      * @param projectId 项目id, 可不传
      */
      */
     @RequestMapping("/getDegreeCost")
     @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.setPackageExpense(1);
                         //设置来源
                         //设置来源
                         company.setRegFrom("企业微信");
                         company.setRegFrom("企业微信");
+                        company.setEnableAi(true);//新公司默认打开AI解析填报功能
                         companyMapper.insert(company);
                         companyMapper.insert(company);
                         //生成项目的成本基线默认条目
                         //生成项目的成本基线默认条目
                         String[] array = Constant.DEFAULT_BASE_COST_ITEMS;
                         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.Overtime;
 import com.management.platform.entity.User;
 import com.management.platform.entity.User;
 import com.management.platform.entity.WxCorpInfo;
 import com.management.platform.entity.WxCorpInfo;
+import com.management.platform.mapper.ReportMapper;
 import com.management.platform.mapper.UserMapper;
 import com.management.platform.mapper.UserMapper;
 import com.management.platform.service.OvertimeService;
 import com.management.platform.service.OvertimeService;
 import com.management.platform.service.WxCorpInfoService;
 import com.management.platform.service.WxCorpInfoService;
 import com.management.platform.task.TimingTask;
 import com.management.platform.task.TimingTask;
 import com.management.platform.util.HttpRespMsg;
 import com.management.platform.util.HttpRespMsg;
 import com.management.platform.util.ListUtil;
 import com.management.platform.util.ListUtil;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.http.HttpRequest;
 import org.springframework.http.HttpRequest;
 import org.springframework.util.StringUtils;
 import org.springframework.util.StringUtils;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -21,12 +23,15 @@ import org.springframework.web.bind.annotation.RestController;
 
 
 import javax.annotation.Resource;
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletRequest;
+import java.math.BigDecimal;
 import java.time.Instant;
 import java.time.Instant;
 import java.time.LocalDateTime;
 import java.time.LocalDateTime;
 import java.time.ZoneId;
 import java.time.ZoneId;
 import java.time.format.DateTimeFormatter;
 import java.time.format.DateTimeFormatter;
 import java.util.Arrays;
 import java.util.Arrays;
 import java.util.List;
 import java.util.List;
+import java.util.Map;
+import java.util.Optional;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
 
 
 /**
 /**
@@ -50,6 +55,61 @@ public class WxCorpInfoController {
     @Resource
     @Resource
     private OvertimeService overtimeService;
     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")
     @RequestMapping("/testDownload")
     public HttpRespMsg testDownload() {
     public HttpRespMsg testDownload() {
         HttpRespMsg msg = new HttpRespMsg();
         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 plate9,
                             String plate10,
                             String plate10,
                             String deptIds,
                             String deptIds,
-                            String[] leaderIds);
+                            String[] leaderIds, Integer currentStageId, String currentStageName);
 
 
     HttpRespMsg deleteProject(Integer id, Integer force);
     HttpRespMsg deleteProject(Integer id, Integer force);
 
 
@@ -126,7 +126,7 @@ public interface ProjectService extends IService<Project> {
 
 
     HttpRespMsg exportOvertimeList(OvertimeListVO overtimeListVO, HttpServletRequest request);
     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,
     HttpRespMsg exportData(String keyword,
                            @RequestParam(required = false, defaultValue = "1") Integer searchField,
                            @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.setPackageOa(1);
                 //设置来源
                 //设置来源
                 company.setRegFrom("钉钉");
                 company.setRegFrom("钉钉");
+                company.setEnableAi(true);//新公司默认打开AI解析填报功能
                 companyMapper.insert(company);
                 companyMapper.insert(company);
                 dingding.setCompanyId(company.getId());
                 dingding.setCompanyId(company.getId());
                 companyDingdingMapper.updateById(dingding);
                 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")) {
             if (httpRespMsg.code.equals("error")) {
                 return httpRespMsg;
                 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));
             List<User> userList = userMapper.selectList(new QueryWrapper<User>().eq("company_id", companyId));
             for (Map<String, Object> map : projectTimeList) {
             for (Map<String, Object> map : projectTimeList) {
                 Integer projectId = ((Long) map.get("projectId")).intValue();
                 Integer projectId = ((Long) map.get("projectId")).intValue();
@@ -1058,7 +1018,8 @@ public class FinanceServiceImpl extends ServiceImpl<FinanceMapper, Finance> impl
 //                    System.out.println("财务数据中未找到用户:"+creatorId);
 //                    System.out.println("财务数据中未找到用户:"+creatorId);
                 }
                 }
             }
             }
-
+            //无项目工时人员的分配比例设置
+            List<Map> noPUserDataList = new ArrayList<>();
             //加上待分摊的无工时项目,如果当前项目列表没有的话
             //加上待分摊的无工时项目,如果当前项目列表没有的话
             if (assignNoProUser != null && assignNoProUser) {
             if (assignNoProUser != null && assignNoProUser) {
                 if (timeType.getFinanceTwiceAssign()) {
                 if (timeType.getFinanceTwiceAssign()) {
@@ -1148,6 +1109,43 @@ public class FinanceServiceImpl extends ServiceImpl<FinanceMapper, Finance> impl
                         }
                         }
                     }
                     }
                 } else {
                 } 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>();
                     List<FinanceProjects> notInFPList = new ArrayList<FinanceProjects>();
                     financeProjects.forEach(f->{
                     financeProjects.forEach(f->{
                         if (!pList.stream().anyMatch(pItem->pItem.getProjectId().intValue() == f.getProjectId())) {
                         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");
             DecimalFormat workTimeFormatter = new DecimalFormat("0.00");
             if (groupByCategory == 0) {
             if (groupByCategory == 0) {
                 for (ProjectSumItem p : pList) {
                 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.cost = p.cost.setScale(2, BigDecimal.ROUND_HALF_UP);
                     p.salary = p.salary.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);
                     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 plate9,
                                    String plate10,
                                    String plate10,
                                    String deptIds,
                                    String deptIds,
-                                   String[] leaderIds) {
+                                   String[] leaderIds, Integer currentStageId, String currentStageName) {
         HttpRespMsg httpRespMsg = new HttpRespMsg();
         HttpRespMsg httpRespMsg = new HttpRespMsg();
         User user = userMapper.selectById(request.getHeader("Token"));
         User user = userMapper.selectById(request.getHeader("Token"));
         Integer companyId = user.getCompanyId();
         Integer companyId = user.getCompanyId();
@@ -1850,7 +1850,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                             .setPlate7(plate7)
                             .setPlate7(plate7)
                             .setPlate8(plate8)
                             .setPlate8(plate8)
                             .setPlate9(plate9)
                             .setPlate9(plate9)
-                            .setPlate10(plate10);
+                            .setPlate10(plate10).setCurrentStageId(currentStageId).setCurrentStageName(currentStageName);
                     if(companyId==862){
                     if(companyId==862){
                         project.setBuId(buId);
                         project.setBuId(buId);
                         if (project.getBuId()!=null&&!project.getBuId().equals("")) {
                         if (project.getBuId()!=null&&!project.getBuId().equals("")) {
@@ -1993,7 +1993,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                         .setPlate7(plate7)
                         .setPlate7(plate7)
                         .setPlate8(plate8)
                         .setPlate8(plate8)
                         .setPlate9(plate9)
                         .setPlate9(plate9)
-                        .setPlate10(plate10);
+                        .setPlate10(plate10).setCurrentStageId(currentStageId).setCurrentStageName(currentStageName);
                 if(companyId==862){
                 if(companyId==862){
                     p.setBuId(buId);
                     p.setBuId(buId);
                     if (p.getBuId()!=null&&!p.getBuId().equals("")) {
                     if (p.getBuId()!=null&&!p.getBuId().equals("")) {
@@ -8007,7 +8007,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
     }
     }
 
 
     @Override
     @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();
         HttpRespMsg msg = new HttpRespMsg();
         String token = request.getHeader("TOKEN");
         String token = request.getHeader("TOKEN");
         User user = userMapper.selectById(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);
         msg.data = projectMapper.getDegreeCost(startDate, endDate, projectId,userId, user.getCompanyId(),deptIds);
         return msg;
         return msg;
@@ -13333,24 +13337,17 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
             List<List<String>> allList=null ;
             List<List<String>> allList=null ;
             List<String> sumRow = null;
             List<String> sumRow = null;
             List<String> headList = new ArrayList<String>();
             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());
             headList.add(timeType.getCustomDegreeName());
             if(functionTimeList.size()>0){
             if(functionTimeList.size()>0){
-                //headList.add("工时(h)");
-                headList.add(MessageUtils.message("entry.workHours")+"(h)");
+                headList.add("工时(h)");
             }
             }
             if(functionCostList.size()>0){
             if(functionCostList.size()>0){
-                //headList.add("成本(元)");
-                headList.add(MessageUtils.message("entry.cost")+"(元)");
+                headList.add("成本(元)");
             }
             }
 
 
             allList=new ArrayList<>();
             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(map.get("categoryName")==null?"":map.get("categoryName").toString());
                 rowData.add("");
                 rowData.add("");
                 rowData.add("");
                 rowData.add("");
-//                rowData.add("");
+                rowData.add("");
 
 
                 if(functionTimeList.size()>0){
                 if(functionTimeList.size()>0){
                     rowData.add(((Double)map.get("cost")).toString());
                     rowData.add(((Double)map.get("cost")).toString());
@@ -13401,16 +13398,16 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                     membRowData.add("");
                     membRowData.add("");
                     if(wxCorpInfo!=null&&wxCorpInfo.getSaasSyncContact()==1){
                     if(wxCorpInfo!=null&&wxCorpInfo.getSaasSyncContact()==1){
                         membRowData.add(("$userName="+membMap.get("corpwxUserId")+"$"));
                         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("name"));
-//                        membRowData.add((String)membMap.get("departmentName"));
+                        membRowData.add((String)membMap.get("departmentName"));
                     }
                     }
                     membRowData.add(membMap.get("degreeName")==null?"未分配":(String)membMap.get("degreeName"));
                     membRowData.add(membMap.get("degreeName")==null?"未分配":(String)membMap.get("degreeName"));
                     if(functionTimeList.size()>0){
                     if(functionTimeList.size()>0){
@@ -13426,7 +13423,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
             sumRow=new ArrayList<>();
             sumRow=new ArrayList<>();
             //sumRow.add("合计");
             //sumRow.add("合计");
             sumRow.add(MessageUtils.message("entry.total"));
             sumRow.add(MessageUtils.message("entry.total"));
-            //sumRow.add("");
+            sumRow.add("");
             sumRow.add("");
             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 {
         } else {
             list = reportMapper.getUserDailyWorkTime(companyId, startDate, endDate, branchDepartment, null,user.getId());
             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<>();
         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());
             allRangeUserList=allRangeUserList.stream().filter(at-> finalBranchDepartment.contains(at.getDepartmentId())).collect(Collectors.toList());
         }
         }
         for (User u : allRangeUserList) {
         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);
                 needRangeUserList.add(u);
             }
             }
         }
         }
@@ -5502,7 +5503,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             }
             }
             lastUserId = id;
             lastUserId = id;
         }
         }
-        //计算未填的人员
+        //计算未填的人员,
         List<User> noReportUserList = needRangeUserList.stream()
         List<User> noReportUserList = needRangeUserList.stream()
                 .filter(au->!userMonthWorks.stream().anyMatch(mon->mon.userId.equals(au.getId())))
                 .filter(au->!userMonthWorks.stream().anyMatch(mon->mon.userId.equals(au.getId())))
                 .collect(Collectors.toList());
                 .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 = "官网";
                 from = "官网";
             }
             }
             company.setRegFrom(from);
             company.setRegFrom(from);
+            company.setEnableAi(true);//新公司默认打开AI解析填报功能
             companyMapper.insert(company);
             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")
     @Async("taskExecutor")
     public void sendWXCorpTemplateMsg(WxCorpInfo corpInfo, String corpUserid, JSONObject msg) {
     public void sendWXCorpTemplateMsg(WxCorpInfo corpInfo, String corpUserid, JSONObject msg) {
         try {
         try {
+//            System.out.println("准备发送审核消息=="+corpInfo.getCompanyId()+", "+corpUserid+", "+msg.toJSONString());
             if (isDev) return;
             if (isDev) return;
             if(StringUtils.isEmpty(corpUserid)){
             if(StringUtils.isEmpty(corpUserid)){
                 return;
                 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;//赛元微电子,都需要重新计算
                             needRecaculate = true;//赛元微电子,都需要重新计算
                         }
                         }
                         double timeDelta = 0;
                         double timeDelta = 0;
@@ -1821,7 +1822,8 @@ public class WxCorpInfoServiceImpl extends ServiceImpl<WxCorpInfoMapper, WxCorpI
                                 timeDelta -= restTime;
                                 timeDelta -= restTime;
                             }
                             }
                         } else {
                         } else {
-                            if (ct.getEndTime().compareTo(baseAfternoonStart) >= 0) {
+                            //企微传过来的考勤时间大于等于9小时,可能是包含午休的时间,需要减去。
+                            if (ct.getEndTime().compareTo(baseAfternoonStart) >= 0 && ct.getCardTime() >= 9.0) {
                                 //重新计算工作工时时,需要用打卡总时间减去中间午休时间
                                 //重新计算工作工时时,需要用打卡总时间减去中间午休时间
                                 timeDelta = ct.getCardTime() - restTime;
                                 timeDelta = ct.getCardTime() - restTime;
                             } else {
                             } else {
@@ -2097,20 +2099,22 @@ public class WxCorpInfoServiceImpl extends ServiceImpl<WxCorpInfoMapper, WxCorpI
                     }
                     }
                     if (itemList.size() > 0) {
                     if (itemList.size() > 0) {
                         UserCorpwxTime item = itemList.get(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 {
                     } else {
                         if (hasTimeRecord) {
                         if (hasTimeRecord) {

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

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