소스 검색

解决财务核算成本模块的bug: 同名项目会导致分摊结果有误

seyason 1 년 전
부모
커밋
1883c7602c

+ 47 - 42
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/WeiXinCorpController.java

@@ -3425,48 +3425,53 @@ public class WeiXinCorpController {
         if (json.containsKey("auth_corp_info")){
             String edition_id = json.getJSONObject("edition_info").getJSONArray("agent")
                     .getJSONObject(0).getString("edition_id");
-            switch (edition_id){
-                //基础版
-                case "sp17da4a6e6f2a91f8":
-                    newCompany.setPackageProject(0);
-                    newCompany.setPackageOa(0);
-                    newCompany.setPackageExpense(0);
-                    newCompany.setPackageCustomer(0);
-                    newCompany.setPackageEngineering(0);
-                    newCompany.setPackageProvider(0);
-                    break;
-                //专业版
-                case "sp4a30d92ede178afd":
-                    newCompany.setPackageProject(1);//项目协作平台
-                    newCompany.setPackageOa(0);//OA平台;请假,出差等
-                    newCompany.setPackageExpense(1);//费用报销
-                    newCompany.setPackageCustomer(0);//客户管理
-                    newCompany.setPackageEngineering(0);//工程专业
-                    newCompany.setPackageProvider(0);//供应商模块
-                    break;
-                //建筑版
-                case "sp29bdb884f4a78392":
-                    newCompany.setPackageProject(1);//项目协作平台
-                    newCompany.setPackageOa(0);//OA平台;请假,出差等
-                    newCompany.setPackageExpense(1);//费用报销
-                    newCompany.setPackageCustomer(1);//客户管理
-                    newCompany.setPackageEngineering(1);//工程专业
-                    newCompany.setPackageProvider(0);//供应商模块
-                    break;
-                //旗舰版
-                case "sp852fec2d1198957a":
-                    newCompany.setPackageProject(1);//项目协作平台
-                    newCompany.setPackageOa(1);//OA平台;请假,出差等
-                    newCompany.setPackageExpense(1);//费用报销
-                    newCompany.setPackageCustomer(1);//客户管理
-                    newCompany.setPackageEngineering(0);//工程专业
-                    newCompany.setPackageProvider(1);//供应商模块
-                    break;
-            }
-            companyMapper.updateById(newCompany);
-            System.out.println("已成功变更版本,版本号为:"+edition_id);
-            //开通模块和权限
-            rootRole(wxCorpInfo.getCompanyId());
+            //非体验版
+            if (!"sp4abb17b6c9df6f9f".equals(edition_id)) {
+                switch (edition_id){
+                    //基础版
+                    case "sp17da4a6e6f2a91f8":
+                        newCompany.setPackageProject(0);
+                        newCompany.setPackageOa(0);
+                        newCompany.setPackageExpense(0);
+                        newCompany.setPackageCustomer(0);
+                        newCompany.setPackageEngineering(0);
+                        newCompany.setPackageProvider(0);
+                        break;
+                    //专业版
+                    case "sp4a30d92ede178afd":
+                        newCompany.setPackageProject(1);//项目协作平台
+                        newCompany.setPackageOa(0);//OA平台;请假,出差等
+                        newCompany.setPackageExpense(1);//费用报销
+                        newCompany.setPackageCustomer(0);//客户管理
+                        newCompany.setPackageEngineering(0);//工程专业
+                        newCompany.setPackageProvider(0);//供应商模块
+                        break;
+                    //建筑版
+                    case "sp29bdb884f4a78392":
+                        newCompany.setPackageProject(1);//项目协作平台
+                        newCompany.setPackageOa(0);//OA平台;请假,出差等
+                        newCompany.setPackageExpense(1);//费用报销
+                        newCompany.setPackageCustomer(1);//客户管理
+                        newCompany.setPackageEngineering(1);//工程专业
+                        newCompany.setPackageProvider(0);//供应商模块
+                        break;
+                    //旗舰版
+                    case "sp852fec2d1198957a":
+                        newCompany.setPackageProject(1);//项目协作平台
+                        newCompany.setPackageOa(1);//OA平台;请假,出差等
+                        newCompany.setPackageExpense(1);//费用报销
+                        newCompany.setPackageCustomer(1);//客户管理
+                        newCompany.setPackageEngineering(0);//工程专业
+                        newCompany.setPackageProvider(1);//供应商模块
+                        break;
+                }
+                companyMapper.updateById(newCompany);
+                System.out.println("已成功变更版本,版本号为:"+edition_id);
+                //开通模块和权限
+                rootRole(wxCorpInfo.getCompanyId());
+            } else {
+                System.out.println("=========体验版=======");
+            }
         }else {
             System.out.println("++++++++++++++++++++++"+"版本变更失败!"+"++++++++++++++++++++++++");
         }

+ 17 - 10
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/FinanceServiceImpl.java

@@ -26,6 +26,7 @@ import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import java.io.*;
 import java.math.BigDecimal;
+import java.text.DecimalFormat;
 import java.time.LocalDate;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
@@ -735,7 +736,7 @@ public class FinanceServiceImpl extends ServiceImpl<FinanceMapper, Finance> impl
 
             List<User> userList = userMapper.selectList(new QueryWrapper<User>().eq("company_id", companyId));
             for (Map<String, Object> map : projectTimeList) {
-                Integer projectId = (Integer) map.get("projectId");
+                Integer projectId = ((Long) map.get("projectId")).intValue();
                 String curProjectCode = (String) map.get("projectCode");
                 String categoryName = (String) map.get("categoryName");
                 String curProject = (String) map.get("project");
@@ -778,7 +779,8 @@ public class FinanceServiceImpl extends ServiceImpl<FinanceMapper, Finance> impl
 //                    System.out.println("财务数据中未找到用户:"+creatorId);
                 }
 
-                if (curProject.equals(item.project)) {
+                //改成按照projectId匹配,之前projectname可能存在重名问题。
+                if (projectId.equals(item.projectId)) {
                     item.workingTime += workingTime;
                     item.cost = item.cost.add(cost);
                     item.salary = item.salary.add(salary);
@@ -839,7 +841,7 @@ public class FinanceServiceImpl extends ServiceImpl<FinanceMapper, Finance> impl
             if (assignNoProUser != null && assignNoProUser) {
                 List<FinanceProjects> notInFPList = new ArrayList<FinanceProjects>();
                 financeProjects.forEach(f->{
-                    if (!projectTimeList.stream().anyMatch(map->((Integer)map.get("projectId")).equals(f.getProjectId()))) {
+                    if (!projectTimeList.stream().anyMatch(map->(((Long)map.get("projectId"))).intValue() == f.getProjectId())) {
                         notInFPList.add(f);
                     }
                 });
@@ -935,6 +937,7 @@ public class FinanceServiceImpl extends ServiceImpl<FinanceMapper, Finance> impl
             //查找所有部门
             List<Department> allDepartments = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id", companyId));
             //按项目名称分组
+            DecimalFormat workTimeFormatter = new DecimalFormat("0.00");
             if (groupByCategory == 0) {
                 pList.forEach(p->{
                     p.cost = p.cost.setScale(2, BigDecimal.ROUND_HALF_UP);
@@ -958,7 +961,7 @@ public class FinanceServiceImpl extends ServiceImpl<FinanceMapper, Finance> impl
                     //部门空出来
                     rowData.add("");
                     userCustoms.forEach(userCustom -> {rowData.add("");});
-                    rowData.add(p.workingTime+"");
+                    rowData.add(workTimeFormatter.format(p.workingTime));
                     rowData.add(p.salary.toPlainString());
                     rowData.add(p.bonus.toPlainString());
                     rowData.add(p.allowance.toPlainString());
@@ -981,7 +984,10 @@ public class FinanceServiceImpl extends ServiceImpl<FinanceMapper, Finance> impl
 
                     //获取成员
                     for (Map<String, Object> membMap : projectTimeList) {
-                        if (membMap.get("project").equals(p.project)) {
+//                        if (membMap.get("project").equals(p.project)) {
+                        Integer projectId = ((Long) membMap.get("projectId")).intValue();
+                        //修改为按照projectId匹配
+                        if (projectId.equals(p.projectId)) {
                             //匹配到项目了
                             List<String> membRowData = new ArrayList<String>();
                             membRowData.add(p.projectCode);
@@ -1040,7 +1046,7 @@ public class FinanceServiceImpl extends ServiceImpl<FinanceMapper, Finance> impl
                                         break;
                                 }
                             }
-                            membRowData.add(workingTime+"");
+                            membRowData.add(workTimeFormatter.format(workingTime));
                             membRowData.add(salary.setScale(6, BigDecimal.ROUND_HALF_UP).toPlainString());
                             membRowData.add(bonus.setScale(6, BigDecimal.ROUND_HALF_UP).toPlainString());
                             membRowData.add(allowance.setScale(6, BigDecimal.ROUND_HALF_UP).toPlainString());
@@ -1126,7 +1132,7 @@ public class FinanceServiceImpl extends ServiceImpl<FinanceMapper, Finance> impl
                                                 break;
                                         }
                                     }
-                                    membRowData.add(workingTime+"");
+                                    membRowData.add(workTimeFormatter.format(workingTime));
                                     membRowData.add(salary.setScale(6, BigDecimal.ROUND_HALF_UP).toPlainString());
                                     membRowData.add(bonus.setScale(6, BigDecimal.ROUND_HALF_UP).toPlainString());
                                     membRowData.add(allowance.setScale(6, BigDecimal.ROUND_HALF_UP).toPlainString());
@@ -1335,6 +1341,7 @@ public class FinanceServiceImpl extends ServiceImpl<FinanceMapper, Finance> impl
                     f.setHourCost(new BigDecimal(0));
                     if (noProjectItem.project == null) {
                         //noProjectItem.project = "无项目";
+                        noProjectItem.projectId = 0;
                         noProjectItem.project = MessageUtils.message("entry.noProject");
                         noProjectItem.workingTime = 0;
                         noProjectItem.cost = new BigDecimal(0);
@@ -1348,7 +1355,7 @@ public class FinanceServiceImpl extends ServiceImpl<FinanceMapper, Finance> impl
 
             List<String> missingFinanceUserIds = new ArrayList<>();
             for (Map<String, Object> map : projectTimeList) {
-                Integer projectId = (Integer) map.get("projectId");
+                Integer projectId = ((Long) map.get("projectId")).intValue();
                 String curProject = (String) map.get("project");
                 String creatorId = (String) map.get("creatorId");
                 Optional<Finance> first = finances.stream().filter(f -> f.getUserId().equals(creatorId)).findFirst();
@@ -1365,7 +1372,7 @@ public class FinanceServiceImpl extends ServiceImpl<FinanceMapper, Finance> impl
                 if (curProject == null) {
                     System.out.println("projectId="+projectId+", creatorId="+creatorId);
                 }
-                if (curProject.equals(item.project)) {
+                if (projectId.equals(item.projectId)) {
                     item.workingTime += workingTime;
                     item.cost = item.cost.add(cost);
                 } else {
@@ -1429,7 +1436,7 @@ public class FinanceServiceImpl extends ServiceImpl<FinanceMapper, Finance> impl
 
                 List<FinanceProjects> notInFPList = new ArrayList<FinanceProjects>();
                 financeProjects.forEach(f->{
-                    if (!projectTimeList.stream().anyMatch(map->((Integer)map.get("projectId")).equals(f.getProjectId()))) {
+                    if (!projectTimeList.stream().anyMatch(map->(((Long)map.get("projectId"))).intValue() == f.getProjectId())) {
                         notInFPList.add(f);
                     }
                 });

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

@@ -916,7 +916,6 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                     }
                     reportService.updateBatchById(updateBIdList);
                 }
-
             }
         } else {
             //没有需要更新的,则

+ 17 - 2
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/WxCorpInfoServiceImpl.java

@@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.management.platform.controller.WeiXinCorpController;
 import com.management.platform.entity.*;
 import com.management.platform.mapper.*;
+import com.management.platform.service.TimeTypeService;
 import com.management.platform.service.WxCorpInfoService;
 import com.management.platform.task.SFTPAsyncUploader;
 import com.management.platform.util.*;
@@ -120,6 +121,9 @@ public class WxCorpInfoServiceImpl extends ServiceImpl<WxCorpInfoMapper, WxCorpI
 
     @Resource
     SysConfigMapper sysConfigMapper;
+    @Resource
+    TimeTypeService timeTypeService;
+
     @Resource
     UserMapper userMapper;
     @Resource
@@ -811,7 +815,7 @@ public class WxCorpInfoServiceImpl extends ServiceImpl<WxCorpInfoMapper, WxCorpI
             DateTimeFormatter dateTimeFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd");
             while (true) {
                 LocalDate day = date.plusDays(i);
-                if (WorkDayCalculateUtils.isWorkDay(day)) {
+                if (timeTypeService.isWorkDay(corpInfo.getCompanyId(), day)) {
                     System.out.println("============="+dateTimeFormat.format(day)+"==============");
                     List<String> missRecordUserCorpIds = new ArrayList<>();
                     List<User> filterusers = new ArrayList<>();
@@ -1222,7 +1226,7 @@ public class WxCorpInfoServiceImpl extends ServiceImpl<WxCorpInfoMapper, WxCorpI
                     ct.setWorkHours(0.0);
                     ct.setOutdoorTime(0.0);
                     //工作日或者非工作日有打卡,需要校正请假,外出的时长数据
-                    if (WorkDayCalculateUtils.isWorkDay(localDate) || sTime > 0 || eTime > 0) {
+                    if (timeTypeService.isWorkDay(corpInfo.getCompanyId(), localDate) || sTime > 0 || eTime > 0) {
                         JSONArray holidayItems = jsonObject.getJSONArray("holiday_infos");
                         //开始时间和结束时间一样,说明下班没有打卡,需要提取请假的最晚时间作为下班打卡时间
                         boolean needRecaculate = false;
@@ -1673,6 +1677,16 @@ public class WxCorpInfoServiceImpl extends ServiceImpl<WxCorpInfoMapper, WxCorpI
                     } else {
                         if (hasTimeRecord) {
                             userCorpwxTimeMapper.insert(ct);
+                        } else {
+                            //调用打卡详情去获取,弥补外出打卡且时间不在自动同步范围内的情况; 仅对工作日有效
+                            if (timeTypeService.isWorkDay(corpInfo.getCompanyId(), localDate)) {
+                                System.out.println("=========获取日打卡详情========="+localDate.toString());
+                                User user = userMapper.selectOne(new QueryWrapper<User>().eq("corpwx_userid", curUserid));
+                                if (user != null) {
+                                    getUserPunchRecord(corpInfo.getCompanyId(), user.getId(), localDate.atTime(0,0,0),
+                                            localDate.atTime(23,59,59), showLog);
+                                }
+                            }
                         }
                     }
                 }
@@ -1681,6 +1695,7 @@ public class WxCorpInfoServiceImpl extends ServiceImpl<WxCorpInfoMapper, WxCorpI
 
                 throw new Exception(json.toJSONString());
             }
+
         }
     }
 

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

@@ -774,7 +774,7 @@
         </if>
     </select>
     <select id="getRealProjectTime" resultType="java.util.Map">
-        SELECT project.id as projectId, project.project_code as projectCode, IFNULL(project.category_name,'其他') as categoryName,
+        SELECT ifnull(project.id, 0) as projectId, project.project_code as projectCode, IFNULL(project.category_name,'其他') as categoryName,
         IFNULL(project.project_name,'其他') as project,report.creator_id AS creatorId,sum(working_time) as workingTime, SUM(cost) as cost
         FROM report
         left join project on project.id = report.project_id