Ver Fonte

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

Lijy há 2 anos atrás
pai
commit
2aa1ef97ec
34 ficheiros alterados com 3038 adições e 10675 exclusões
  1. 9 3
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/GroupTemplateController.java
  2. 1 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ProjectDocumentController.java
  3. 6 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ReportController.java
  4. 11 4
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/WeiXinCorpController.java
  5. 7 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/TimeType.java
  6. 2 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/ReportMapper.java
  7. 2 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/ReportService.java
  8. 9 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/WxCorpInfoService.java
  9. 21 15
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/BusinessTripServiceImpl.java
  10. 69 35
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/DepartmentServiceImpl.java
  11. 38 19
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/DingDingServiceImpl.java
  12. 9 8
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ExpenseSheetServiceImpl.java
  13. 17 8
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/FinanceFixedcolnameServiceImpl.java
  14. 30 16
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/FinanceServiceImpl.java
  15. 5 2
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/GroupParticipatorServiceImpl.java
  16. 37 23
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/LeaveSheetServiceImpl.java
  17. 12 6
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/PermissionServiceImpl.java
  18. 399 181
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java
  19. 4 2
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProviderInfoServiceImpl.java
  20. 1 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportExtraDegreeServiceImpl.java
  21. 134 61
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java
  22. 13 7
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/SimpleReportServiceImpl.java
  23. 5 2
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/TaskGroupServiceImpl.java
  24. 4 2
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/TaskProgressServiceImpl.java
  25. 49 25
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/TaskServiceImpl.java
  26. 96 42
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/UserServiceImpl.java
  27. 125 6
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/WxCorpInfoServiceImpl.java
  28. 1 1
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/application.yml
  29. 251 1
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/i18n/messages.properties
  30. 252 2
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/i18n/messages_en_US.properties
  31. 18 0
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ReportMapper.xml
  32. 3 1
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/TimeTypeMapper.xml
  33. 1397 10200
      fhKeeper/formulahousekeeper/management-platform/workTime.log
  34. 1 0
      fhKeeper/formulahousekeeper/timesheet/src/views/team/index.vue

+ 9 - 3
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/GroupTemplateController.java

@@ -9,6 +9,7 @@ import com.management.platform.service.GroupTemplateService;
 import com.management.platform.service.GroupTmpstagesService;
 import com.management.platform.service.UserService;
 import com.management.platform.util.HttpRespMsg;
+import com.management.platform.util.MessageUtils;
 import org.springframework.web.bind.annotation.RequestMapping;
 
 import org.springframework.web.bind.annotation.RestController;
@@ -41,11 +42,16 @@ public class GroupTemplateController {
     public HttpRespMsg initData() {
         if (groupTemplateService.count() == 0) {
             //系统中没有数据,需要初始化
-            String[] templateNames = {"工程设计","软硬件研发","客服工单处理"};
-            String[][] stages = {{"信息收集","策划","原型图","效果图","审核中","修改调整","完成"},
+            //String[] templateNames = {"工程设计","软硬件研发","客服工单处理"};
+            String[] templateNames = {MessageUtils.message("stages.engineering"),MessageUtils.message("stages.research"),MessageUtils.message("stages.service")};
+            /*String[][] stages = {{"信息收集","策划","原型图","效果图","审核中","修改调整","完成"},
                                 {"需求分析","设计中","研发中","测试中","修改BUG","已发布"},
                                 {"用户问题","解决中","已解决","反馈用户&问题解决"}
-                                };
+                                };*/
+            String[][] stages = {{MessageUtils.message("stages.infoCollect"),MessageUtils.message("stages.plan"),MessageUtils.message("stages.proDrawing"),MessageUtils.message("stages.designSketch"),MessageUtils.message("stages.underReview"),MessageUtils.message("stages.modify"),MessageUtils.message("stages.complete")},
+                    {MessageUtils.message("stages.requirement"),MessageUtils.message("stages.design"),MessageUtils.message("stages.development"),MessageUtils.message("stages.test"),MessageUtils.message("stages.BUG"),MessageUtils.message("stages.release")},
+                    {MessageUtils.message("stages.userPro"),MessageUtils.message("stages.inSettlement"),MessageUtils.message("stages.resolved"),MessageUtils.message("stages.feedbackAndProblem")}
+            };
             for (int i=0;i<templateNames.length;i++) {
                 String s = templateNames[i];
                 GroupTemplate template = new GroupTemplate();

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

@@ -265,7 +265,7 @@ public class ProjectDocumentController {
             QueryWrapper<ProjectDocument> firstQuery = new QueryWrapper<ProjectDocument>();
             firstQuery.eq("project_id", projectId);
             if (projectDocumentMapper.selectCount(firstQuery) == 0) {
-                String[] names = new String[]{"立项准备材料","项目过程文档","项目交付件"};
+                String[] names = new String[]{MessageUtils.message("project.storesReserve"),MessageUtils.message("project.processDocuments"),MessageUtils.message("project.deliverable")};
                 for (String name : names) {
                     ProjectDocument doc = new ProjectDocument();
                     doc.setProjectId(projectId);

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

@@ -1355,5 +1355,11 @@ public class ReportController {
     public HttpRespMsg getProcessErrorData() {
         return reportService.getProcessErrorData();
     }
+
+    //todo 获取成本数据 上传到 第三方
+    @RequestMapping("/getUploadThirdReportData")
+    public HttpRespMsg getUploadThirdReportData(String yearMonth){
+        return reportService.getUploadThirdReportData(yearMonth,request);
+    }
 }
 

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

@@ -73,6 +73,8 @@ public class WeiXinCorpController {
     private String suitId;
     @Value("${suitSecret}")
     private String suitSecret;
+    @Value("${providerSecret}")
+    private String providerSecret;
 
     //自己公司的企业微信通讯录secret
     private String concactSecret="irf7s8fy16wLhWGb8IxvGL2Nkm0sTB6dludpe_3VP6k";
@@ -1448,11 +1450,11 @@ public class WeiXinCorpController {
     //改造老版的接口,从平台获取客户通讯录
     @RequestMapping("/getCorpMembsFromPlatform")
     public HttpRespMsg getCorpMembsFromPlatform(Integer companyId) {
-        Company company = companyMapper.selectById(companyId);
         WxCorpInfo wxCorpInfo = wxCorpInfoMapper.selectOne(new QueryWrapper<WxCorpInfo>().eq("company_id", companyId));
         if (wxCorpInfo == null) {
             HttpRespMsg msg = new HttpRespMsg();
-            msg.setError("仅企业微信用户支持该操作");
+            //msg.setError("仅企业微信用户支持该操作");
+            msg.setError(MessageUtils.message("wx.noWXUser"));
             return msg;
         }
         String curCorpAccessToken = null;
@@ -1489,6 +1491,11 @@ public class WeiXinCorpController {
                 } else {
                     //
                     System.out.println("找到了已有部门== name=="+curDept.getDepartmentName());
+                    if (parentId != 1 && curDept.getCorpwxDeptpid() == null) {
+                        //有父部门需要更新
+                        curDept.setCorpwxDeptpid(parentId);
+                        departmentMapper.updateById(curDept);
+                    }
                 }
             }
 
@@ -1896,10 +1903,10 @@ public class WeiXinCorpController {
         List<Department> allDbDeptList = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id", companyId));
         for (Department department : allDbDeptList) {
             Integer corpwxpid = department.getCorpwxDeptpid();
-            if (corpwxpid != null && corpwxpid == 1) {
+            if (corpwxpid == null || corpwxpid == 1) {
 
             } else {
-                Optional<Department> first = allDbDeptList.stream().filter(all -> all.getCorpwxDeptid().intValue() == corpwxpid).findFirst();
+                Optional<Department> first = allDbDeptList.stream().filter(all -> all.getCorpwxDeptid() != null && all.getCorpwxDeptid().intValue() == corpwxpid).findFirst();
                 if (first.isPresent()) {
                     //按照企业微信的部门父部门找到了
                     Integer sysPid = first.get().getDepartmentId();

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

@@ -17,7 +17,7 @@ import lombok.experimental.Accessors;
  * </p>
  *
  * @author Seyason
- * @since 2022-09-06
+ * @since 2022-09-27
  */
 @Data
 @EqualsAndHashCode(callSuper = false)
@@ -365,6 +365,12 @@ public class TimeType extends Model<TimeType> {
     @TableField("max_report_time")
     private Float maxReportTime;
 
+    /**
+     * 员工自由选择审核人的方式下的审核层级:默认为2
+     */
+    @TableField("audit_level")
+    private Integer auditLevel;
+
 
     @Override
     protected Serializable pkVal() {

+ 2 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/ReportMapper.java

@@ -145,4 +145,6 @@ public interface ReportMapper extends BaseMapper<Report> {
             "AND NOT EXISTS(SELECT 1 FROM report r WHERE r.id <> report.id AND r.`creator_id` = report.`creator_id` AND r.`create_date` = report.`create_date` AND r.project_audit_state = 0)\n" +
             "AND EXISTS (SELECT 1 FROM report r WHERE r.id <> report.id AND r.`creator_id` = report.`creator_id` AND r.`create_date` = report.`create_date`)\n")
     List<Map<String, Object>> getProcessErrorData();
+
+    List<Map<String, Object>> getUploadThirdReportData(Integer companyId,@Param("startDate") LocalDate startDate, @Param("endDate") LocalDate endDate);
 }

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

@@ -92,4 +92,6 @@ public interface ReportService extends IService<Report> {
     HttpRespMsg getWeeklyWorkTime(String dateStr, HttpServletRequest request);
 
     HttpRespMsg getProcessErrorData();
+
+    HttpRespMsg getUploadThirdReportData(String yearMonth,HttpServletRequest request);
 }

+ 9 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/WxCorpInfoService.java

@@ -6,6 +6,7 @@ import com.management.platform.entity.LeaveSheet;
 import com.management.platform.entity.WxCorpInfo;
 import com.management.platform.util.HttpRespMsg;
 
+import java.io.File;
 import java.time.LocalDateTime;
 import java.util.List;
 
@@ -32,4 +33,12 @@ public interface WxCorpInfoService extends IService<WxCorpInfo> {
     HttpRespMsg syncMembByCardTime(WxCorpInfo wxCorpInfo);
 
     public List<LeaveSheet> WxLeaveNumber(String startTime,String endTime,List<WxCorpInfo> wxCorpInfos) throws Exception;
+
+    public String getProviderAccessToken() throws Exception;
+
+    public String getTranslationMediaId(String fileName) throws Exception;
+
+    public String syncTranslation(String mediaId,String outPutFileName,String outputFileFormat) throws Exception;
+
+    public String getSyncTranslationResult(String jobId) throws Exception;
 }

+ 21 - 15
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/BusinessTripServiceImpl.java

@@ -69,8 +69,8 @@ public class BusinessTripServiceImpl extends ServiceImpl<BusinessTripMapper, Bus
         List<List<String>> sheetOneDataList=new ArrayList<>();
         List<List<String>> sheetTwoDataList=new ArrayList<>();
         DateTimeFormatter df=DateTimeFormatter.ofPattern("yyyy-MM-dd");
-        String[] sheetOneTitleArray=new String[]{"出差人员","出差天数","出差详情","交通工具","出差开始时间","出差结束时间","状态","备注"};
-        String[] sheetTwoTitleArray=new String[]{"出差人员","总出差天数"};
+        String[] sheetOneTitleArray=new String[]{MessageUtils.message("leave.people"),MessageUtils.message("leave.days"),MessageUtils.message("leave.details"),MessageUtils.message("leave.vehicle"),MessageUtils.message("leave.startTime"),MessageUtils.message("leave.endTime"),MessageUtils.message("leave.status"),MessageUtils.message("leave.task")};
+        String[] sheetTwoTitleArray=new String[]{MessageUtils.message("leave.people"),MessageUtils.message("leave.totalDays")};
         List<String> sheetOneTitleList=Arrays.asList(sheetOneTitleArray);
         List<String> sheetTwoTitleList=Arrays.asList(sheetTwoTitleArray);
         sheetOneDataList.add(sheetOneTitleList);
@@ -86,35 +86,39 @@ public class BusinessTripServiceImpl extends ServiceImpl<BusinessTripMapper, Bus
                 for (int i = 0; i < businessTripProjectList.size(); i++) {
                     BustripProject bustripProject = businessTripProjectList.get(i);
                     if(i<businessTripProjectList.size()-1){
-                        detail+=bustripProject.getStartDate()+"至"+bustripProject.getEndDate()+" "+(StringUtils.isEmpty(bustripProject.getProjectName())?"":bustripProject.getProjectName())+" "+(StringUtils.isEmpty(bustripProject.getDegreeName())?"":bustripProject.getDegreeName())+"\n";
+                        detail+=bustripProject.getStartDate()+MessageUtils.message("leave.to")+bustripProject.getEndDate()+" "+(StringUtils.isEmpty(bustripProject.getProjectName())?"":bustripProject.getProjectName())+" "+(StringUtils.isEmpty(bustripProject.getDegreeName())?"":bustripProject.getDegreeName())+"\n";
                     }else {
-                        detail+=bustripProject.getStartDate()+"至"+bustripProject.getEndDate()+" "+(StringUtils.isEmpty(bustripProject.getProjectName())?"":bustripProject.getProjectName())+" "+(StringUtils.isEmpty(bustripProject.getDegreeName())?"":bustripProject.getDegreeName());
+                        detail+=bustripProject.getStartDate()+MessageUtils.message("leave.to")+bustripProject.getEndDate()+" "+(StringUtils.isEmpty(bustripProject.getProjectName())?"":bustripProject.getProjectName())+" "+(StringUtils.isEmpty(bustripProject.getDegreeName())?"":bustripProject.getDegreeName());
                     }
                 }
             }
             item.add(detail);
             switch (businessTrip.getWay()){
-                case 0:item.add("飞机");
+                case 0:item.add(MessageUtils.message("leave.plane"));
                     break;
-                case 1:item.add("火车");
+                case 1:item.add(MessageUtils.message("leave.train"));
                     break;
-                case 2:item.add("汽车");
+                case 2:item.add(MessageUtils.message("leave.car"));
                     break;
-                case 3:item.add("轮船");
+                case 3:item.add(MessageUtils.message("leave.ship"));
                     break;
-                case 4:item.add("其他");
+                case 4:item.add(MessageUtils.message("leave.other"));
                     break;
             }
             item.add(df.format(businessTrip.getStartDate()));
             item.add(df.format(businessTrip.getEndDate()));
             switch (businessTrip.getStatus()){
-                case 0:item.add("审核通过");
+                //case 0:item.add("审核通过");
+                case 0:item.add(MessageUtils.message("stages.approved"));
                     break;
-                case 1:item.add("待审核");
+                //case 1:item.add("待审核");
+                case 1:item.add(MessageUtils.message("stages.reviewed"));
                     break;
-                case 2:item.add("驳回");
+                //case 2:item.add("驳回");
+                case 2:item.add(MessageUtils.message("stages.reject"));
                     break;
-                case 3:item.add("已撤回");
+                //case 3:item.add("已撤回");
+                case 3:item.add(MessageUtils.message("stages.withdrawn"));
                     break;
             }
             item.add(businessTrip.getRemark());
@@ -135,8 +139,10 @@ public class BusinessTripServiceImpl extends ServiceImpl<BusinessTripMapper, Bus
             }
         }
         //生成excel文件导出
-        String fileName = "出差统计导出_"+System.currentTimeMillis();
-        String resp=ExcelUtil.exportTwoSheetGeneralExcelByTitleAndList(fileName,sheetOneDataList,sheetTwoDataList,path,"人员出差详情表","人员出差统计");
+        //String fileName = "出差统计导出_"+System.currentTimeMillis();
+        String fileName = MessageUtils.message("fileName.travelers",System.currentTimeMillis());
+        //String resp=ExcelUtil.exportTwoSheetGeneralExcelByTitleAndList(fileName,sheetOneDataList,sheetTwoDataList,path,"人员出差详情表","人员出差统计");
+        String resp=ExcelUtil.exportTwoSheetGeneralExcelByTitleAndList(fileName,sheetOneDataList,sheetTwoDataList,path,MessageUtils.message("leave.travelDetails"),MessageUtils.message("leave.travelStatistics"));
         httpRespMsg.data = resp;
 
         return httpRespMsg;

+ 69 - 35
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/DepartmentServiceImpl.java

@@ -234,32 +234,39 @@ public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Departm
             Integer companyId = userMapper.selectById(request.getHeader("Token")).getCompanyId();
             Department department = departmentMapper.selectById(departmentId);
             if (!department.getCompanyId().equals(companyId)) {
-                httpRespMsg.setError("不能删除其他公司的部门");
+                //httpRespMsg.setError("不能删除其他公司的部门");
+                httpRespMsg.setError(MessageUtils.message("department.deleteOtherDep"));
             } else if (checkBranch(departmentId)) {
-                httpRespMsg.setError("不能在有子级部门时删除部门");
+                //httpRespMsg.setError("不能在有子级部门时删除部门");
+                httpRespMsg.setError(MessageUtils.message("department.subDep"));
             } else {
                 Integer reportCut = reportMapper.selectCount(new QueryWrapper<Report>().eq("dept_id", departmentId));
                 if(reportCut>0){
-                    httpRespMsg.setError("当前部门已被日报数据使用");
+                    //httpRespMsg.setError("当前部门已被日报数据使用");
+                    httpRespMsg.setError(MessageUtils.message("department.dailyData"));
                     return httpRespMsg;
                 }
                 Integer auditDeptidCut = leaveSheetMapper.selectCount(new QueryWrapper<LeaveSheet>().eq("audit_deptid", departmentId));
                 if(auditDeptidCut>0){
-                    httpRespMsg.setError("当前部门已被请假数据使用");
+                    //httpRespMsg.setError("当前部门已被请假数据使用");
+                    httpRespMsg.setError(MessageUtils.message("department.leaveDate"));
                     return httpRespMsg;
                 }
                 Integer auditWorkflowTimeSettingCut = auditWorkflowTimeSettingMapper.selectCount(new QueryWrapper<AuditWorkflowTimeSetting>().eq("audit_dept_id", departmentId));
                 if(auditWorkflowTimeSettingCut>0){
-                    httpRespMsg.setError("当前部门已被工时审批流数据使用");
+                    //httpRespMsg.setError("当前部门已被工时审批流数据使用");
+                    httpRespMsg.setError(MessageUtils.message("department.approvalProcess"));
                     return httpRespMsg;
                 }
                 Integer auditWorkflowSettingCut = auditWorkflowSettingMapper.selectCount(new QueryWrapper<AuditWorkflowSetting>().eq("audit_dept_id", departmentId));
                 if(auditWorkflowSettingCut>0){
-                    httpRespMsg.setError("当前部门已被请假出差审批流数据使用");
+                    //httpRespMsg.setError("当前部门已被请假出差审批流数据使用");
+                    httpRespMsg.setError(MessageUtils.message("department.leaveAndTravel"));
                     return httpRespMsg;
                 }
                 if (departmentMapper.deleteById(department) == 0) {
-                    httpRespMsg.setError("删除失败");
+                    //httpRespMsg.setError("删除失败");
+                    httpRespMsg.setError(MessageUtils.message("file.deleteError"));
                 } else {
                     userMapper.update(new User().setDepartmentId(0).setDepartmentCascade("0"), new QueryWrapper<User>()
                             .eq("company_id", companyId)
@@ -272,7 +279,8 @@ public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Departm
             }
 
         } catch (NullPointerException e) {
-            httpRespMsg.setError("验证失败");
+            //httpRespMsg.setError("验证失败");
+            httpRespMsg.setError(MessageUtils.message("access.verificationError"));
             return httpRespMsg;
         }
         return httpRespMsg;
@@ -287,7 +295,8 @@ public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Departm
             httpRespMsg.data = departmentMapper.selectList(new QueryWrapper<Department>()
                     .eq("company_id", companyId));
         } catch (NullPointerException e) {
-            httpRespMsg.setError("验证失败");
+            //httpRespMsg.setError("验证失败");
+            httpRespMsg.setError(MessageUtils.message("Company.validationError"));
             return httpRespMsg;
         }
         return httpRespMsg;
@@ -336,7 +345,8 @@ public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Departm
             //返回数据
             httpRespMsg.data = list;
         } catch (NullPointerException e) {
-            httpRespMsg.setError("验证失败");
+            //httpRespMsg.setError("验证失败");
+            httpRespMsg.setError(MessageUtils.message("Company.validationError"));
             return httpRespMsg;
         }
         return httpRespMsg;
@@ -436,7 +446,8 @@ public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Departm
             }
             httpRespMsg.data = resultMap;
         } catch (NullPointerException e) {
-            httpRespMsg.setError("验证失败");
+            //httpRespMsg.setError("验证失败");
+            httpRespMsg.setError(MessageUtils.message("access.verificationError"));
             return httpRespMsg;
         }
         return httpRespMsg;
@@ -484,7 +495,8 @@ public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Departm
                     List<Department> allDeptList = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id", companyId));
                     deptIds = getBranchDepartment(departmentId, allDeptList);
                 } else {
-                    httpRespMsg.setError("部门不存在或无查看权限");
+                    //httpRespMsg.setError("部门不存在或无查看权限");
+                    httpRespMsg.setError(MessageUtils.message("department.noExistentOrAccess"));
                     return httpRespMsg;
                 }
             }
@@ -556,7 +568,8 @@ public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Departm
             }
             httpRespMsg.data = finalMap;
         } catch (NullPointerException e) {
-            httpRespMsg.setError("验证失败");
+            //httpRespMsg.setError("验证失败");
+            httpRespMsg.setError(MessageUtils.message("access.verificationError"));
             return httpRespMsg;
         }
         return httpRespMsg;
@@ -644,13 +657,17 @@ public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Departm
             DecimalFormat df = new DecimalFormat("#0.00");
             List<List<String>> dataList = new ArrayList<List<String>>();
             List<String> titleList =new ArrayList<>();
-            titleList.add("人员");
-            titleList.add("项目");
+            //titleList.add("人员");
+            titleList.add(MessageUtils.message("entry.personnel"));
+            //titleList.add("项目");
+            titleList.add(MessageUtils.message("entry.project"));
             if(functionTimeList.size()>0){
-                titleList.add("工时");
+                //titleList.add("工时");
+                titleList.add(MessageUtils.message("entry.workHours"));
             }
             if(functionCostList.size()>0){
-                titleList.add("成本");
+                //titleList.add("成本");
+                titleList.add(MessageUtils.message("entry.cost"));
             }
             dataList.add(titleList);
             BigDecimal totalMoneyCost = BigDecimal.valueOf(0);
@@ -698,8 +715,9 @@ public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Departm
             String total = totalMoneyCost.setScale(2, BigDecimal.ROUND_UP).toString();
             //合计
             List<String> sumRow = new ArrayList<String>();
-            sumRow.add("合计");
-            sumRow.add("");
+            //sumRow.add("合计");
+            //sumRow.add("合计");
+            sumRow.add("entry.total");
             if(functionTimeList.size()>0){
                 sumRow.add(""+df.format(totalCostTime));
             }
@@ -708,12 +726,14 @@ public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Departm
             }
             dataList.add(sumRow);
             //生成excel文件导出
-            String fileName = "人员成本统计_"+System.currentTimeMillis();
+            //String fileName = "人员成本统计_"+System.currentTimeMillis();
+            String fileName = MessageUtils.message("fileName.costStatistics",System.currentTimeMillis());
             String resp = ExcelUtil.exportGeneralExcelByTitleAndList(fileName , dataList, path);
 
             httpRespMsg.data = resp;
         } catch (NullPointerException e) {
-            httpRespMsg.setError("验证失败");
+            //httpRespMsg.setError("验证失败");
+            httpRespMsg.setError(MessageUtils.message("access.verificationError"));
             return httpRespMsg;
         }
         return httpRespMsg;
@@ -757,7 +777,8 @@ public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Departm
         //加上未分配的部门
         DepartmentVO unAssignedDept = new DepartmentVO();
         unAssignedDept.setId(0);
-        unAssignedDept.setLabel("未分配");
+        //unAssignedDept.setLabel("未分配");
+        unAssignedDept.setLabel(MessageUtils.message("department.noDistribution"));
         list.add(unAssignedDept);
 
         List<User> userList = new ArrayList<>();
@@ -815,8 +836,10 @@ public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Departm
             List<HashMap> itemList = (List<HashMap>) map.get("list");
             TimeType timeType = timeTypeMapper.selectById(companyId);
             List<String> headList = new ArrayList<String>();
-            headList.add("序号");
-            headList.add("姓名");
+            //headList.add("序号");
+            headList.add(MessageUtils.message("entry.serialNo"));
+            //headList.add("姓名");
+            headList.add(MessageUtils.message("entry.name"));
             headList.add(timeType.getCustomDataName());
             List<List<String>> allList = new ArrayList<List<String>>();
             allList.add(headList);
@@ -836,18 +859,21 @@ public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Departm
             }
             //合计
             List<String> sumRow = new ArrayList<String>();
-            sumRow.add("合计");
+            //sumRow.add("合计");
+            sumRow.add(MessageUtils.message("entry.total"));
             sumRow.add("");
             sumRow.add(""+new BigDecimal(totalCostTime).setScale(1, BigDecimal.ROUND_HALF_UP));
             allList.add(sumRow);
             //生成excel文件导出
-            String fileName = timeType.getCustomDataName() + "统计_"+System.currentTimeMillis();
+            //String fileName = timeType.getCustomDataName() + "统计_"+System.currentTimeMillis();
+            String fileName = MessageUtils.message("fileName.statistics",timeType.getCustomDataName(),System.currentTimeMillis());
             String resp = ExcelUtil.exportGeneralExcelByTitleAndList(fileName , allList, path);
 
             httpRespMsg.data = resp;
         } catch (NullPointerException e) {
             e.printStackTrace();
-            httpRespMsg.setError("验证失败");
+            //httpRespMsg.setError("验证失败");
+            httpRespMsg.setError(MessageUtils.message("access.verificationError"));
             return httpRespMsg;
         }
         return httpRespMsg;
@@ -881,7 +907,8 @@ public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Departm
                     allDeptList = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id", companyId));
                     deptIds = getBranchDepartment(departmentId, allDeptList);
                 } else {
-                    httpRespMsg.setError("部门不存在或无查看权限");
+                    //httpRespMsg.setError("部门不存在或无查看权限");
+                    httpRespMsg.setError(MessageUtils.message("department.noExistentOrAccess"));
                     return httpRespMsg;
                 }
             }
@@ -969,7 +996,8 @@ public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Departm
 
         } catch (NullPointerException e) {
             e.printStackTrace();
-            httpRespMsg.setError("验证失败");
+            //httpRespMsg.setError("验证失败");
+            httpRespMsg.setError(MessageUtils.message("access.verificationError"));
             return httpRespMsg;
         }
         return httpRespMsg;
@@ -984,12 +1012,15 @@ public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Departm
             List<DepartmentMasterVO> costList = (List<DepartmentMasterVO>) mapData.get("costList");
             BigDecimal totalCostMoney= (BigDecimal) mapData.get("totalCostMoney");
             List<String> titleList=new ArrayList<>();
-            titleList.add("部门");
+            //titleList.add("部门");
+            titleList.add(MessageUtils.message("excel.department"));
             if(!costList.stream().anyMatch(ct->ct.getCostTime()==null)){
-                titleList.add("工时");
+                //titleList.add("工时");
+                titleList.add(MessageUtils.message("entry.workHours"));
             }
             if(!costList.stream().anyMatch(ct->ct.getCostMoney()==null)){
-                titleList.add("成本");
+                //titleList.add("成本");
+                titleList.add(MessageUtils.message("entry.cost"));
             }
             List<List<String>> dataList=new ArrayList<>();
             dataList.add(titleList);
@@ -1007,7 +1038,8 @@ public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Departm
                 dataList.add(item);
             }
             List<String> rowData=new ArrayList<>();
-            rowData.add("合计");
+            //rowData.add("合计");
+            rowData.add(MessageUtils.message("entry.total"));
             if(!costList.stream().anyMatch(ct->ct.getCostTime()==null)){
                 rowData.add(String.valueOf(bigDecimal.doubleValue()));
             }
@@ -1016,12 +1048,14 @@ public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Departm
             }
             dataList.add(rowData);
             //生成excel文件导出
-            String fileName = "部门工时统计_"+System.currentTimeMillis();
+            //String fileName = "部门工时统计_"+System.currentTimeMillis();
+            String fileName = MessageUtils.message("fileName.depHours",System.currentTimeMillis());
             String resp = ExcelUtil.exportGeneralExcelByTitleAndList(fileName , dataList, path);
             httpRespMsg.data = resp;
         } catch (NullPointerException e) {
             e.printStackTrace();
-            httpRespMsg.setError("验证失败");
+            //httpRespMsg.setError("验证失败");
+            httpRespMsg.setError(MessageUtils.message("access.verificationError"));
             return httpRespMsg;
         }
         return httpRespMsg;

+ 38 - 19
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/DingDingServiceImpl.java

@@ -174,27 +174,46 @@ public class DingDingServiceImpl implements DingDingService {
                 //生成费用报销默认条目
                 String[] expenseTypes = Constant.EXPENSE_TYPES;
                 List<String> commonly = new ArrayList<>();
-                commonly.add("材料费");
-                commonly.add("办公用品");
-                commonly.add("培训费");
-                commonly.add("打印费");
-                commonly.add("快递费");
-                commonly.add("制作费");
-                commonly.add("律师费");
-                commonly.add("水费");
-                commonly.add("电费");
-                commonly.add("团建费");
-                commonly.add("其他");
+                //commonly.add("材料费");
+                commonly.add(MessageUtils.message("entry.materialCost"));
+                //commonly.add("办公用品");
+                commonly.add(MessageUtils.message("entry.workCost"));
+                //commonly.add("培训费");
+                commonly.add(MessageUtils.message("entry.trainCost"));
+                //commonly.add("打印费");
+                commonly.add(MessageUtils.message("entry.printCost"));
+                //commonly.add("快递费");
+                commonly.add(MessageUtils.message("entry.expressCost"));
+                //commonly.add("制作费");
+                commonly.add(MessageUtils.message("entry.makeCost"));
+                //commonly.add("律师费");
+                commonly.add(MessageUtils.message("entry.lawyerCost"));
+                //commonly.add("水费");
+                commonly.add(MessageUtils.message("entry.waterCost"));
+                //commonly.add("电费");
+                commonly.add(MessageUtils.message("entry.electricCost"));
+                //commonly.add("团建费");
+                commonly.add(MessageUtils.message("entry.leagueCost"));
+                //commonly.add("其他");
+                commonly.add(MessageUtils.message("entry.other"));
                 List<String> travel  = new ArrayList<>();
-                travel.add("城市间交通费");
-                travel.add("住宿费");
-                travel.add("伙食补助费");
-                travel.add("市内交通费");
-                travel.add("其他差旅费");
+//                travel.add("城市间交通费");
+//                travel.add("住宿费");
+//                travel.add("伙食补助费");
+//                travel.add("市内交通费");
+//                travel.add("其他差旅费");
+                travel.add(MessageUtils.message("entry.cityTrafficCost"));
+                travel.add(MessageUtils.message("entry.liveCost"));
+                travel.add(MessageUtils.message("entry.eatCost"));
+                travel.add(MessageUtils.message("entry.insideCityCost"));
+                travel.add(MessageUtils.message("entry.otherLiveTraCost"));
                 List<String> outsource = new ArrayList<>();
-                outsource.add("项目外包费");
-                outsource.add("劳务外包费");
-                outsource.add("其他外包费");
+//                outsource.add("项目外包费");
+//                outsource.add("劳务外包费");
+//                outsource.add("其他外包费");
+                outsource.add(MessageUtils.message("entry.projectCost"));
+                outsource.add(MessageUtils.message("entry.labourCost"));
+                outsource.add(MessageUtils.message("entry.OtherOutsourceCost"));
                 List<ExpenseType> expenseTypeList=new ArrayList<>();
                 for (String expenseType : expenseTypes) {
                     ExpenseType item=new ExpenseType();

+ 9 - 8
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ExpenseSheetServiceImpl.java

@@ -250,16 +250,13 @@ public class ExpenseSheetServiceImpl extends ServiceImpl<ExpenseSheetMapper, Exp
                 if (expenseTypeCell != null) expenseTypeCell.setCellType(CellType.STRING);
                 if (remarksCell != null) remarksCell.setCellType(CellType.STRING);
                 if (reimburserCell == null) {//报销人为空的直接跳过
-                    //throw new Exception("报销人名称不能为空");
-                    throw new Exception(MessageUtils.message("Reimbursement.nameNull"));
+                    throw new Exception("报销人名称不能为空");
                 }
                 if (expenseTypeCell == null) {
-                    //throw new Exception("费用类型不能为空");
-                    throw new Exception(MessageUtils.message("Reimbursement.costTypeNull"));
+                    throw new Exception("费用类型不能为空");
                 }
                 if (reportDateCell == null) {
-                    //throw new Exception("填报日期不能为空");
-                    throw new Exception(MessageUtils.message("Reimbursement.dataNull"));
+                    throw new Exception("填报日期不能为空");
                 }
                 ExpenseSheet expenseSheet = new ExpenseSheet();
                 if(functionList.size()>0){
@@ -292,19 +289,21 @@ public class ExpenseSheetServiceImpl extends ServiceImpl<ExpenseSheetMapper, Exp
                     expenseSheet.setOwnerId(first.get().getId());
                     expenseSheet.setOwnerName(first.get().getName());
                 } else {
-                    //throw new Exception("报销人[" +reimburserCell+"]不存在");
-                    throw new Exception(MessageUtils.message("Reimbursement.PeopleNull",reimburserCell));
+                    throw new Exception("报销人[" +reimburserCell+"]不存在");
                 }
                 expenseSheet.setOperatorId(user.getId());
                 expenseSheet.setRemark(remarksCell.getStringCellValue());
                 switch (expenseTypeCell.getStringCellValue()) {
                     case "一般":
+                    case "general":
                         expenseSheet.setType(0);
                         break;
                     case "差旅":
+                    case "travel on business":
                         expenseSheet.setType(1);
                         break;
                     case "外包":
+                    case "outsource":
                         expenseSheet.setType(2);
                         break;
                 }
@@ -364,9 +363,11 @@ public class ExpenseSheetServiceImpl extends ServiceImpl<ExpenseSheetMapper, Exp
                     if(invoiceTypeCell!=null){
                         switch (invoiceTypeCell.getStringCellValue()) {
                             case "增值税专用发票":
+                            case "VAT special invoice":
                                 expenseItem.setInvoiceType(0);
                                 break;
                             case "增值税普通发票":
+                            case "VAT ordinary invoice":
                                 expenseItem.setInvoiceType(1);
                                 break;
                         }

+ 17 - 8
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/FinanceFixedcolnameServiceImpl.java

@@ -6,6 +6,7 @@ import com.management.platform.mapper.FinanceCalculateMapper;
 import com.management.platform.mapper.FinanceFixedcolnameMapper;
 import com.management.platform.service.FinanceFixedcolnameService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.management.platform.util.MessageUtils;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
@@ -28,14 +29,22 @@ public class FinanceFixedcolnameServiceImpl extends ServiceImpl<FinanceFixedcoln
         if (item == null) {
             //自动生成默认值
             item = new FinanceFixedcolname();
-            item.setMonthCost("工资");
-            item.setBonus("奖金");
-            item.setAllowance("津贴");
-            item.setInsuranceOld("养老保险");
-            item.setInsuranceMedical("医疗保险");
-            item.setInsuranceLosejob("失业保险");
-            item.setInsuranceInjury("工伤保险");
-            item.setHouseFund("住房公积金");
+            //item.setMonthCost("工资");
+            item.setMonthCost(MessageUtils.message("entry.wages"));
+            //item.setBonus("奖金");
+            item.setBonus(MessageUtils.message("entry.bonus"));
+            //item.setAllowance("津贴");
+            item.setAllowance(MessageUtils.message("entry.allowance"));
+            //item.setInsuranceOld("养老保险");
+            item.setInsuranceOld(MessageUtils.message("entry.endowmentInsurance"));
+            //item.setInsuranceMedical("医疗保险");
+            item.setInsuranceMedical(MessageUtils.message("entry.medicalInsurance"));
+            //item.setInsuranceLosejob("失业保险");
+            item.setInsuranceLosejob(MessageUtils.message("entry.unemploymentInsurance"));
+            //item.setInsuranceInjury("工伤保险");
+            item.setInsuranceInjury(MessageUtils.message("entry.injuryInsurance"));
+            //item.setHouseFund("住房公积金");
+            item.setHouseFund(MessageUtils.message("entry.housingProvidentFund"));
             item.setCompanyId(companyId);
             save(item);
         }

+ 30 - 16
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/FinanceServiceImpl.java

@@ -217,7 +217,7 @@ public class FinanceServiceImpl extends ServiceImpl<FinanceMapper, Finance> impl
 
                 String name = nameCell.getStringCellValue().trim().replaceAll("\\u00a0", "");
                 Finance finance = new Finance();
-                if (name.equals("姓名") && rowIndex == 0) {
+                if (name.equals(MessageUtils.message("entry.name")) && rowIndex == 0) {
                     continue;
                 }
                 Cell houseFundCell = row.getCell(nameStartIndex + 8);
@@ -234,7 +234,7 @@ public class FinanceServiceImpl extends ServiceImpl<FinanceMapper, Finance> impl
                 if (includeJobNumber) {
                     finance.setJobNumber(jobNumberCell.getStringCellValue());
                     if (StringUtils.isEmpty(finance.getJobNumber())) {
-                        msg.setError("工号不能为空");
+                        msg.setError(MessageUtils.message("staff.jobNoNull"));
                         return msg;
                     }
                 }
@@ -478,12 +478,17 @@ public class FinanceServiceImpl extends ServiceImpl<FinanceMapper, Finance> impl
 
             List<String> headList = new ArrayList<String>();
             if (groupByCategory == 0) {
-                headList.add("项目编号");
-                headList.add("项目名称");
-                headList.add("人员");
-                headList.add("工时(h)");
+                //headList.add("项目编号");
+                headList.add(MessageUtils.message("entry.projectId"));
+                //headList.add("项目名称");
+                headList.add(MessageUtils.message("entry.projectName"));
+                //headList.add("人员");
+                headList.add(MessageUtils.message("entry.personnel"));
+                //headList.add("工时(h)");
+                headList.add(MessageUtils.message("entry.workHours")+"(h)");
             } else {
-                headList.add("项目分类");
+                //headList.add("项目分类");
+                headList.add(MessageUtils.message("entry.projectType"));
             }
 
             FinanceFixedcolname fixedItem = financeFixedcolnameService.getFixed(companyId);
@@ -499,7 +504,8 @@ public class FinanceServiceImpl extends ServiceImpl<FinanceMapper, Finance> impl
             for (FinanceTblcuscol col : cusColList) {
                 headList.add(col.getFieldName());
             }
-            headList.add("总成本(元)");
+            //headList.add("总成本(元)");
+            headList.add(MessageUtils.message("entry.totalCost")+"(元)");
             List<List<String>> allList = new ArrayList<List<String>>();
             allList.add(headList);
 
@@ -557,7 +563,8 @@ public class FinanceServiceImpl extends ServiceImpl<FinanceMapper, Finance> impl
                 if (curP.isPresent()) {
                     String name = curP.get().getCategoryName();
                     if (name == null) {
-                        name = "其他";
+                        //name = "其他";
+                        name = MessageUtils.message("leave.other");
                     }
                     f.setCategoryName(name);
                 } else {
@@ -1045,7 +1052,8 @@ public class FinanceServiceImpl extends ServiceImpl<FinanceMapper, Finance> impl
 
             //合计
             List<String> sumRow = new ArrayList<String>();
-            sumRow.add("合计");
+            //sumRow.add("合计");
+            sumRow.add(MessageUtils.message("entry.total"));
             if (groupByCategory == 0) {
                 sumRow.add("");
                 sumRow.add("");
@@ -1066,7 +1074,8 @@ public class FinanceServiceImpl extends ServiceImpl<FinanceMapper, Finance> impl
             sumRow.add(totalMoneyCost.toString());
             allList.add(sumRow);
             //生成excel文件导出
-            String fileName = yearMonth+(groupByCategory==0?"财务人员成本_":"财务项目分类成本_")+System.currentTimeMillis();
+            //String fileName = yearMonth+(groupByCategory==0?"财务人员成本_":"财务项目分类成本_")+System.currentTimeMillis();
+            String fileName = yearMonth+(groupByCategory==0?MessageUtils.message("fileName.costFinancialPersonnel"):MessageUtils.message("fileName.proClassCost"))+System.currentTimeMillis();
             String resp = ExcelUtil.exportGeneralExcelByTitleAndList(fileName , allList, path);
 
             httpRespMsg.data = resp;
@@ -1137,7 +1146,8 @@ public class FinanceServiceImpl extends ServiceImpl<FinanceMapper, Finance> impl
                     //该员工无工时填报,计入无项目
                     f.setHourCost(new BigDecimal(0));
                     if (noProjectItem.project == null) {
-                        noProjectItem.project = "无项目";
+                        //noProjectItem.project = "无项目";
+                        noProjectItem.project = MessageUtils.message("entry.noProject");
                         noProjectItem.workingTime = 0;
                         noProjectItem.cost = new BigDecimal(0);
                     }
@@ -1354,7 +1364,8 @@ public class FinanceServiceImpl extends ServiceImpl<FinanceMapper, Finance> impl
             BigDecimal totalField3 = cusColList.size() > 2?BigDecimal.valueOf(0):null;
 
             List<String> headList = new ArrayList<String>();
-            headList.add("姓名");
+            //headList.add("姓名");
+            headList.add(MessageUtils.message("entry.name"));
             FinanceFixedcolname fixedItem = financeFixedcolnameService.getFixed(companyId);
             headList.add(fixedItem.getMonthCost()+"(元)");
             headList.add(fixedItem.getBonus()+"(元)");
@@ -1367,7 +1378,8 @@ public class FinanceServiceImpl extends ServiceImpl<FinanceMapper, Finance> impl
             for (FinanceTblcuscol col : cusColList) {
                 headList.add(col.getFieldName());
             }
-            headList.add("总成本(元)");
+            //headList.add("总成本(元)");
+            headList.add(MessageUtils.message("entry.totalCost")+"(元)");
             List<List<String>> allList = new ArrayList<List<String>>();
             allList.add(headList);
 
@@ -1458,7 +1470,8 @@ public class FinanceServiceImpl extends ServiceImpl<FinanceMapper, Finance> impl
             }
             //合计
             List<String> sumRow = new ArrayList<String>();
-            sumRow.add("合计");;
+            //sumRow.add("合计");;
+            sumRow.add(MessageUtils.message("entry.total"));;
             sumRow.add(totalSalary.toString());
             sumRow.add(totalBonus.toString());
             sumRow.add(totalAllowance.toString());
@@ -1473,7 +1486,8 @@ public class FinanceServiceImpl extends ServiceImpl<FinanceMapper, Finance> impl
             sumRow.add(totalMoneyCost.toString());
             allList.add(sumRow);
             //生成excel文件导出
-            String fileName = "人员薪资_"+company.getCompanyName()+yearMonth+"_"+System.currentTimeMillis();
+            //String fileName = "人员薪资_"+company.getCompanyName()+yearMonth+"_"+System.currentTimeMillis();
+            String fileName = MessageUtils.message("fileName.perSal")+company.getCompanyName()+yearMonth+"_"+System.currentTimeMillis();
             String resp = ExcelUtil.exportGeneralExcelByTitleAndList(fileName , allList, path);
             httpRespMsg.data = resp;
         } catch (NullPointerException e) {

+ 5 - 2
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/GroupParticipatorServiceImpl.java

@@ -8,6 +8,7 @@ import com.management.platform.mapper.*;
 import com.management.platform.service.GroupParticipatorService;
 import com.management.platform.service.ParticipationService;
 import com.management.platform.util.HttpRespMsg;
+import com.management.platform.util.MessageUtils;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
@@ -60,9 +61,11 @@ public class GroupParticipatorServiceImpl extends ServiceImpl<GroupParticipatorM
         OperationRecord operationRecord=new OperationRecord();
         operationRecord.setCompanyId(user.getCompanyId());
         operationRecord.setOperatorName(user.getName());
-        operationRecord.setContent("修改了参与人");
+        //operationRecord.setContent("修改了参与人");
+        operationRecord.setContent(MessageUtils.message("other.upPart"));
         operationRecord.setOperationTime(LocalDateTime.now());
-        operationRecord.setModuleName("任务分组");
+        //operationRecord.setModuleName("任务分组");
+        operationRecord.setModuleName(MessageUtils.message("other.taskGroup"));
         //检查项目的参与人里面是否有,如果没有自动加上
         int projectId = taskGroupMapper.selectById(groupId).getProjectId();
         Project project = projectMapper.selectById(projectId);

+ 37 - 23
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/LeaveSheetServiceImpl.java

@@ -254,15 +254,24 @@ public class LeaveSheetServiceImpl extends ServiceImpl<LeaveSheetMapper, LeaveSh
         };
         List<List<String>> allList = new ArrayList<>();
         List<String> headList = new ArrayList<String>();
-        headList.add("请假人");
-        headList.add("电话");
-        headList.add("请假类型");
-        headList.add("请假开始时间");
-        headList.add("请假结束时间");
-        headList.add("请假天数");
-        headList.add("请假时长");
-        headList.add("状态");
-        headList.add("备注");
+//        headList.add("请假人");
+//        headList.add("电话");
+//        headList.add("请假类型");
+//        headList.add("请假开始时间");
+//        headList.add("请假结束时间");
+//        headList.add("请假天数");
+//        headList.add("请假时长");
+//        headList.add("状态");
+//        headList.add("备注");
+        headList.add(MessageUtils.message("leave.perForLeave"));
+        headList.add(MessageUtils.message("leave.telephone"));
+        headList.add(MessageUtils.message("leave.leaveType"));
+        headList.add(MessageUtils.message("leave.LStartTime"));
+        headList.add(MessageUtils.message("leave.LEndTime"));
+        headList.add(MessageUtils.message("leave.LDays"));
+        headList.add(MessageUtils.message("leave.duration"));
+        headList.add(MessageUtils.message("leave.state"));
+        headList.add(MessageUtils.message("leave.remark"));
         allList.add(headList);
         for (LeaveSheet leaveSheet : leaveSheets) {
             List<String> item = new ArrayList<>();
@@ -271,31 +280,31 @@ public class LeaveSheetServiceImpl extends ServiceImpl<LeaveSheetMapper, LeaveSh
             String lts = "";
             switch (leaveSheet.getLeaveType()){
                 case 0:
-                    lts = "事假";
+                    lts = MessageUtils.message("leave.thing");
                     break;
                 case 1:
-                    lts = "病假";
+                    lts = MessageUtils.message("leave.illness");
                     break;
                 case 2:
-                    lts = "年假";
+                    lts = MessageUtils.message("leave.year");
                     break;
                 case 3:
-                    lts = "产假";
+                    lts = MessageUtils.message("leave.maternity");
                     break;
                 case 4:
-                    lts = "婚嫁";
+                    lts = MessageUtils.message("leave.marry");
                     break;
                 case 5:
-                    lts = "丧假";
+                    lts = MessageUtils.message("leave.die");
                     break;
                 case 6:
-                    lts = "调休假";
+                    lts = MessageUtils.message("leave.compensatory");
                     break;
                 case 7:
-                    lts = "陪产假";
+                    lts = MessageUtils.message("leave.paternity");
                     break;
                 case 8:
-                    lts = "其他";
+                    lts = MessageUtils.message("leave.other");
                     break;
             }
             item.add(lts);
@@ -309,23 +318,28 @@ public class LeaveSheetServiceImpl extends ServiceImpl<LeaveSheetMapper, LeaveSh
             String statusS = "";
             switch (leaveSheet.getStatus()){
                 case 0:
-                    statusS = "审核通过";
+                    //statusS = "审核通过";
+                    statusS = MessageUtils.message("stages.approved");
                     break;
                 case 1:
-                    statusS = "待审核";
+                    //statusS = "待审核";
+                    statusS = MessageUtils.message("stages.reviewed");
                     break;
                 case 2:
-                    statusS = "驳回";
+                    //statusS = "驳回";
+                    statusS = MessageUtils.message("stages.reject");
                     break;
                 case 3:
-                    statusS = "已撤销";
+                    //statusS = "已撤销";
+                    statusS = MessageUtils.message("stages.withdrawn");
                     break;
             }
             item.add(statusS);
             item.add(leaveSheet.getRemark());
             allList.add(item);
         }
-        String fileName = "请假信息_"+System.currentTimeMillis();
+        //String fileName = "请假信息_"+System.currentTimeMillis();
+        String fileName = MessageUtils.message("fileName.leaveInfo")+System.currentTimeMillis();
         String resp = ExcelUtil.exportGeneralExcelByTitleAndList(fileName , allList, path);
         httpRespMsg.data = resp;
         return httpRespMsg;

+ 12 - 6
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/PermissionServiceImpl.java

@@ -382,14 +382,16 @@ public class PermissionServiceImpl extends ServiceImpl<PermissionMapper, Permiss
         SysRole roleItem = sysRoleMapper.selectById(role);
         List<SysModule> menuList= (List<SysModule>) msg.data;
         HSSFWorkbook wb=new HSSFWorkbook();
-        HSSFSheet sheet=wb.createSheet(roleItem.getRolename()+"_权限表");
+        //HSSFSheet sheet=wb.createSheet(roleItem.getRolename()+"_权限表");
+        HSSFSheet sheet=wb.createSheet(roleItem.getRolename()+MessageUtils.message("excel.permissions"));
         //设置每一列的列宽
         sheet.setColumnWidth(0,256*15);
         sheet.setColumnWidth(1,256*20);
         sheet.setColumnWidth(2,256*10);
         sheet.setColumnWidth(3,256*60);
 
-        List<String> titles = Arrays.asList("模块","功能","是否具有","备注");
+        //List<String> titles = Arrays.asList("模块","功能","是否具有","备注");
+        List<String> titles = Arrays.asList(MessageUtils.message("excel.modular"),MessageUtils.message("excel.function"),MessageUtils.message("excel.have"),MessageUtils.message("excel.remarks"));
         HSSFRow row = sheet.createRow(0);
         HSSFCellStyle style = wb.createCellStyle();
         style.setBorderBottom(BorderStyle.valueOf((short)1));
@@ -459,8 +461,10 @@ public class PermissionServiceImpl extends ServiceImpl<PermissionMapper, Permiss
             startRow = endRow + 1;
         }
         //导出excel
-        String result="系统提示:Excel文件导出成功!";
-        String title= roleItem.getRolename()+"权限表_"+System.currentTimeMillis();
+        //String result="系统提示:Excel文件导出成功!";
+        String result=MessageUtils.message("file.excelScu");
+        //String title= roleItem.getRolename()+"权限表_"+System.currentTimeMillis();
+        String title= roleItem.getRolename()+MessageUtils.message("excel.permissions")+System.currentTimeMillis();
         String fileName= title+".xls";
         try {
             File dir = null;
@@ -497,11 +501,13 @@ public class PermissionServiceImpl extends ServiceImpl<PermissionMapper, Permiss
 
     private String getUserNameById(Integer id) {
         if (id == null) {
-            return "未知";
+            //return "未知";
+            return MessageUtils.message("entry.unknown");
         } else {
             User user = userMapper.selectById(id);
             if (user == null) {
-                return "未知";
+                //return "未知";
+                return MessageUtils.message("entry.unknown");
             } else {
                 return user.getName();
             }

Diff do ficheiro suprimidas por serem muito extensas
+ 399 - 181
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java


+ 4 - 2
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProviderInfoServiceImpl.java

@@ -159,7 +159,8 @@ public class ProviderInfoServiceImpl extends ServiceImpl<ProviderInfoMapper, Pro
     public HttpRespMsg exportData(HttpServletRequest request) {
         User user = userMapper.selectById(request.getHeader("token"));
         List<List<String>> dataList=new ArrayList<>();
-        String[] titleString=new String[]{"供应商编号","供应商名称","分类","联系人","联系电话","邮箱","地址","备注"};
+        //String[] titleString=new String[]{"供应商编号","供应商名称","分类","联系人","联系电话","邮箱","地址","备注"};
+        String[] titleString=new String[]{MessageUtils.message("excel.supplierNo"),MessageUtils.message("excel.supplierName"),MessageUtils.message("excel.classification"),MessageUtils.message("excel.contacts"),MessageUtils.message("excel.phone"),MessageUtils.message("excel.email"),MessageUtils.message("excel.address"),MessageUtils.message("excel.remarks")};
         List<String> titleList = Arrays.asList(titleString);
         dataList.add(titleList);
         List<ProviderInfo> providerInfoList = providerInfoMapper.selectList(new QueryWrapper<ProviderInfo>().eq("company_id", user.getCompanyId()));
@@ -176,7 +177,8 @@ public class ProviderInfoServiceImpl extends ServiceImpl<ProviderInfoMapper, Pro
             dataList.add(item);
         }
         //生成excel文件导出
-        String fileName = "供应商统计_"+System.currentTimeMillis();
+        //String fileName = "供应商统计_"+System.currentTimeMillis();
+        String fileName = MessageUtils.message("fileName.supStat")+System.currentTimeMillis();
         String resp = ExcelUtil.exportGeneralExcelByTitleAndList(fileName , dataList, path);
         HttpRespMsg httpRespMsg = new HttpRespMsg();
         httpRespMsg.data = resp;

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

@@ -155,7 +155,7 @@ public class ReportExtraDegreeServiceImpl extends ServiceImpl<ReportExtraDegreeM
         List<ReportExtraDegree> reportExtraDegreeList = reportExtraDegreeMapper.selectList(new QueryWrapper<ReportExtraDegree>().eq("company_id", user.getCompanyId()));
         TimeType timeType = timeTypeMapper.selectById(user.getCompanyId());
         List<String> titleList=new ArrayList<>();
-        titleList.add(timeType.getCustomDegreeName()+"名称");
+        titleList.add(timeType.getCustomDegreeName()+MessageUtils.message("excel.name"));
         List<List<String>> dataList=new ArrayList<>();
         dataList.add(titleList);
         for (ReportExtraDegree reportExtraDegree : reportExtraDegreeList) {

+ 134 - 61
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java

@@ -1550,7 +1550,8 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             LocalDate createDate = reportList.stream().filter(r -> r.getProjectId().equals(n.getProjectId())).findFirst().get().getCreateDate();
             String format = dft.format(createDate);
             information.setContent(format);//日报的日期
-            information.setMsg(projectName+"项目,日报审批通过");
+            //information.setMsg(projectName+"项目,日报审批通过");
+            information.setMsg(projectName+MessageUtils.message("other.proDailyRep"));
             informationList.add(information);
 
             userIdList.add(n.getUserId());
@@ -1564,7 +1565,8 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
         final WxCorpInfo wxCorpInfo = companyWXList.size()>0?companyWXList.get(0):null;
 
         projectList.stream().forEach(p->{
-            final String msg = p.getProjectName() + "项目,日报审核通过";
+            //final String msg = p.getProjectName() + "项目,日报审核通过";
+            final String msg = p.getProjectName() + MessageUtils.message("other.proDailyRep");
             notifyUsers.stream().filter(n -> n.getProjectId().equals(p.getId()))
                     .forEach(m->{
                         String uid = m.getUserId();
@@ -1732,10 +1734,12 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
         String str = null;
         String fillUserId = null;
         if (oneReport.getState() == -1) {//待部门直属领导审核
-            str = "您"+date+"导入的日报中"+pNames+"项目被["+user.getName()+"]驳回。原因:" + reason+",请重新导入。";
+            //str = "您"+date+"导入的日报中"+pNames+"项目被["+user.getName()+"]驳回。原因:" + reason+",请重新导入。";
+            str = MessageUtils.message("profession.impProReject",date,pNames,user.getName(),reason);
             fillUserId = oneReport.getFillUserid();
         } else {
-            str = "您"+date+"填写的日报中"+pNames+"项目被["+user.getName()+"]驳回。原因:" + reason;
+            //str = "您"+date+"填写的日报中"+pNames+"项目被["+user.getName()+"]驳回。原因:" + reason;
+            str = MessageUtils.message("profession.fillProReject",date,pNames,user.getName(),reason);
             fillUserId = oneReport.getCreatorId();
         }
 
@@ -1856,7 +1860,8 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             //加上未分配的部门
             DepartmentVO unAssignedDept = new DepartmentVO();
             unAssignedDept.setId(0);
-            unAssignedDept.setLabel("未分配");
+            //unAssignedDept.setLabel("未分配");
+            unAssignedDept.setLabel(MessageUtils.message("department.noDistribution"));
             list.add(unAssignedDept);
         } else {
             //按权限查看
@@ -2759,7 +2764,8 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
         String token = request.getHeader("TOKEN");
         User user = userMapper.selectById(token);
         Integer companyId = user.getCompanyId();
-        String[] weekDayCHN = {"周一","周二","周三","周四","周五","周六","周日"};
+        //String[] weekDayCHN = {"周一","周二","周三","周四","周五","周六","周日"};
+        String[] weekDayCHN = {MessageUtils.message("week.Monday"),MessageUtils.message("week.Tuesday"),MessageUtils.message("week.Wednesday"),MessageUtils.message("week.Thursday"),MessageUtils.message("week.Friday"),MessageUtils.message("week.Saturday"),MessageUtils.message("week.Sunday")};
         HttpRespMsg msg = new HttpRespMsg();
         List<User> allRangeUserList = new ArrayList<>();
         List<Map<String, Object>> list = null;
@@ -2884,13 +2890,14 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                 Optional<Map<String, Object>> find = worktimeList.stream().filter(w->((String)w.get("createDate")).equals(leaveDateStr)).findFirst();
                 if (find.isPresent()) {
                     //打卡的有记录,加上请假
-                    String newStr = (double)find.get().get("workingTime")+"(请假"+(corpTime.get("ask_leave_time"))+"h)";
+                    String newStr = (double)find.get().get("workingTime")+"("+MessageUtils.message("leave.leave")+(corpTime.get("ask_leave_time"))+"h)";
                     find.get().put("workingTime", newStr);
                 } else {
                     //没有对应的打卡记录,直接加上当天请假
                     Map<String, Object> leaveMap = new HashMap<>();
                     leaveMap.put("createDate", leaveDateStr);
-                    leaveMap.put("workingTime", "当天请假"+corpTime.get("ask_leave_time")+"h");
+                    //leaveMap.put("workingTime", "当天请假"+corpTime.get("ask_leave_time")+"h");
+                    leaveMap.put("workingTime", MessageUtils.message("leave.leaveOfDay")+corpTime.get("ask_leave_time")+"h");
                     worktimeList.add(leaveMap);
                 }
             });
@@ -2910,14 +2917,15 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                             //打卡的有记录,加上请假
                             Object str = find.get().get("workingTime");
                             if (str instanceof Double) {
-                                String newStr = (double)find.get().get("workingTime")+"(请假)";
+                                //String newStr = (double)find.get().get("workingTime")+"(请假)";
+                                String newStr = (double)find.get().get("workingTime")+"("+MessageUtils.message("leave.leave")+")";
                                 find.get().put("workingTime", newStr);
                             }
                         } else {
                             //没有对应的打卡记录,直接加上当天请假
                             Map<String, Object> leaveMap = new HashMap<>();
                             leaveMap.put("createDate", leaveDateStr);
-                            leaveMap.put("workingTime", "当天请假");
+                            leaveMap.put("workingTime", MessageUtils.message("leave.leaveOfDay"));
                             worktimeList.add(leaveMap);
                         }
 
@@ -2953,15 +2961,19 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
     @Override
     public HttpRespMsg exportUserDailyWorkTime(HttpServletRequest request, String startDate, String endDate) {
         HttpRespMsg msg = getUserDailyWorkTime(request, startDate, endDate);
-        String[] weekDayCHN = {"周一","周二","周三","周四","周五","周六","周日"};
+        //String[] weekDayCHN = {"周一","周二","周三","周四","周五","周六","周日"};
+        String[] weekDayCHN = {MessageUtils.message("week.Monday"),MessageUtils.message("week.Tuesday"),MessageUtils.message("week.Wednesday"),MessageUtils.message("week.Thursday"),MessageUtils.message("week.Friday"),MessageUtils.message("week.Saturday"),MessageUtils.message("week.Sunday")};
         HashMap map = (HashMap) msg.data;
         List<HashMap> days = (List<HashMap>)map.get("days");
         List<UserMonthWork> userMonthWorks = (List<UserMonthWork>) map.get("list");
         List<List<String>> dataList = new ArrayList<>();
         List<String> titleList = new ArrayList<>();
-        titleList.add("序号");
-        titleList.add("姓名");
-        titleList.add("部门");
+//        titleList.add("序号");
+//        titleList.add("姓名");
+//        titleList.add("部门");
+        titleList.add(MessageUtils.message("entry.serialNo"));
+        titleList.add(MessageUtils.message("entry.name"));
+        titleList.add(MessageUtils.message("excel.department"));
         days.forEach(d->{
 //            String dateStr = (String)d.get("date");
 //            LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
@@ -2976,7 +2988,8 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             dataItem.add(""+(i+1));
 
             List<Map<String, Object>> worktimeList = userMonthWork.worktimeList;
-            dataItem.add(userMonthWork.name+(worktimeList.size()==0?"(未填)":""));
+            //dataItem.add(userMonthWork.name+(worktimeList.size()==0?"(未填)":""));
+            dataItem.add(userMonthWork.name+(worktimeList.size()==0?"("+MessageUtils.message("entry.noFill")+")":""));
             dataItem.add(userMonthWork.departmentName);
             //找到那一天的工作时间
             days.forEach(d->{
@@ -2996,7 +3009,8 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             dataList.add(dataItem);
         }
         //生成excel文件导出
-        String fileName = "人员每日工时统计_"+startDate+"至"+endDate+"_"+System.currentTimeMillis();
+        //String fileName = "人员每日工时统计_"+startDate+"至"+endDate+"_"+System.currentTimeMillis();
+        String fileName = MessageUtils.message("fileName.dailyManHour",startDate,endDate)+"_"+System.currentTimeMillis();
         String resp = ExcelUtil.exportGeneralExcelByTitleAndList(fileName , dataList, path);
         HttpRespMsg httpRespMsg = new HttpRespMsg();
         httpRespMsg.data = resp;
@@ -3314,31 +3328,46 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
             //准备导出
             HSSFWorkbook workbook = new HSSFWorkbook();
-            HSSFSheet sheet = workbook.createSheet("工作日报");
+            //HSSFSheet sheet = workbook.createSheet("工作日报");
+            HSSFSheet sheet = workbook.createSheet(MessageUtils.message("excel.workReport"));
             sheet.createFreezePane(0,1);
             List<String> titles = new ArrayList<String>();
-            titles.add("序号");
-            titles.add("工号");
-            titles.add("员工");
-            titles.add("所在部门");
-            titles.add("项目编号");
-            titles.add("项目名称");
-            titles.add("项目分类");
+//            titles.add("序号");
+//            titles.add("工号");
+//            titles.add("员工");
+//            titles.add("所在部门");
+//            titles.add("项目编号");
+//            titles.add("项目名称");
+//            titles.add("项目分类");
+            titles.add(MessageUtils.message("entry.serialNo"));
+            titles.add(MessageUtils.message("entry.No"));
+            titles.add(MessageUtils.message("excel.staff"));
+            titles.add(MessageUtils.message("entry.department"));
+            titles.add(MessageUtils.message("entry.projectId"));
+            titles.add(MessageUtils.message("entry.projectName"));
+            titles.add(MessageUtils.message("entry.projectType"));
             if(timeType.getMainProjectState()==1){
-                titles.add("主项目名称");
+                //titles.add("主项目名称");
+                titles.add(MessageUtils.message("excel.mainProName"));
             }else {
-                titles.add("子项目名称");
+                //titles.add("子项目名称");
+                titles.add(MessageUtils.message("excel.sonProName"));
             }
             //项目管理专业版以上,包括任务
             if (company.getPackageProject() == 1) {
-                titles.add("关联任务");
+                //titles.add("关联任务");
+                titles.add(MessageUtils.message("excel.assTask"));
             }
-            titles.add("工作日期");
-            titles.add("工作时长(小时)");
+//            titles.add("工作日期");
+//            titles.add("工作时长(小时)");
+            titles.add(MessageUtils.message("entry.workDate"));
+            titles.add(MessageUtils.message("excel.WorkHours"));
             if (timeType.getMultiWorktime() == 1) {
-                titles.add("工时时间");
+                //titles.add("工时时间");
+                titles.add(MessageUtils.message("excel.hours"));
             }
-            titles.add("加班");
+            //titles.add("加班");
+            titles.add(MessageUtils.message("excel.workOvertime"));
             //是否启用自定义的维度了
             if (timeType.getCustomDegreeActive() == 1) {
                 titles.add(timeType.getCustomDegreeName());
@@ -3353,25 +3382,34 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             }
             //项目管理专业版,需要显示任务分组和投入阶段
             if (company.getPackageProject() == 1) {
-                titles.add("任务分组");
-                titles.add("投入阶段");
+//                titles.add("任务分组");
+//                titles.add("投入阶段");
+                titles.add(MessageUtils.message("excel.taskGroup"));
+                titles.add(MessageUtils.message("excel.inputStage"));
             }
             //每个日报的审批流程记录
             List<ReportLogDetail> logDetails = new ArrayList<>();
             if (timeType.getShowFillauditTime() == 1) {
-                titles.add("填写时间");
-                titles.add("项目审核人");
-                titles.add("审核时间");
-                titles.add("审核流程");
+//                titles.add("填写时间");
+//                titles.add("项目审核人");
+//                titles.add("审核时间");
+//                titles.add("审核流程");
+                titles.add(MessageUtils.message("excel.fillTime"));
+                titles.add(MessageUtils.message("excel.proReviewer"));
+                titles.add(MessageUtils.message("excel.auditTime"));
+                titles.add(MessageUtils.message("excel.auditProcess"));
                 logDetails = reportLogDetailMapper.selectList(new QueryWrapper<ReportLogDetail>().eq("company_id", company.getId()).between("work_date", startDate, endDate));
             }
 
-            titles.add("工作事项");
+            //titles.add("工作事项");
+            titles.add(MessageUtils.message("excel.workItems"));
             if(stateKey==1){
-                titles.add("审核状态");
+                //titles.add("审核状态");
+                titles.add(MessageUtils.message("excel.auditStatus"));
             }
             if(timeType.getSyncCorpwxTime()==1){
-                titles.add("考勤时长");
+                //titles.add("考勤时长");
+                titles.add(MessageUtils.message("excel.attDuration"));
             }
             //创建表头
             HSSFRow headRow = sheet.createRow(0);
@@ -3611,9 +3649,11 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                 if(stateKey==1){
                     Integer state = (Integer) map.get("state");
                     switch (state){
-                        case 0:row.createCell(index).setCellValue("待审核");
+                        //case 0:row.createCell(index).setCellValue("待审核");
+                        case 0:row.createCell(index).setCellValue(MessageUtils.message("stages.reviewed"));
                             break;
-                        case 1:row.createCell(index).setCellValue("已通过");
+                        //case 1:row.createCell(index).setCellValue("已通过");
+                        case 1:row.createCell(index).setCellValue(MessageUtils.message("stages.passed"));
                             break;
                     }
                     index++;
@@ -3625,7 +3665,8 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                             String s = DateTimeFormatter.ofPattern("yyyy-MM-dd").format(userCorpwxTime.getCreateDate());
                             String s1 = timeDf.format(map.get("createDate"));
                             if(map.get("corpwxUserId").equals(userCorpwxTime.getCorpwxUserid())&&s.equals(s1)){
-                                cellValue = userCorpwxTime.getStartTime()+"-"+userCorpwxTime.getEndTime()+",工作时长"+userCorpwxTime.getWorkHours();
+                                //cellValue = userCorpwxTime.getStartTime()+"-"+userCorpwxTime.getEndTime()+",工作时长"+userCorpwxTime.getWorkHours();
+                                cellValue = userCorpwxTime.getStartTime()+"-"+userCorpwxTime.getEndTime()+","+MessageUtils.message("entry.workingHours")+userCorpwxTime.getWorkHours();
                                 break;
                             }
                         }
@@ -3635,7 +3676,8 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                 rowNum++;
             }
             //生成Excel文件
-            String fileUrlSuffix = (startDate==null?"":(startDate+"至"+endDate))+"工作日报" + System.currentTimeMillis() + ".xls";
+            //String fileUrlSuffix = (startDate==null?"":(startDate+"至"+endDate))+"工作日报" + System.currentTimeMillis() + ".xls";
+            String fileUrlSuffix = (startDate==null?"":(startDate+MessageUtils.message("leave.to")+endDate))+MessageUtils.message("excel.workReport") + System.currentTimeMillis() + ".xls";
             FileOutputStream fos = new FileOutputStream(path + fileUrlSuffix);
             workbook.write(fos);
             fos.flush();
@@ -3813,8 +3855,9 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
         double waiting = reportList.stream().filter(r -> r.getState() == 0).mapToDouble(Report::getWorkingTime).sum();
         double reject = reportList.stream().filter(r -> r.getState() == 2).mapToDouble(Report::getWorkingTime).sum();
         double pass = reportList.stream().filter(r -> r.getState() == 1).mapToDouble(Report::getWorkingTime).sum();
-        String str = "您上周共参与了" + projectList.size()+"个项目,总工时为" + sum+"小时。其中审核通过"+pass
-                    +"小时, 待审核"+waiting+"小时,驳回"+reject+"小时。";
+//        String str = "您上周共参与了" + projectList.size()+"个项目,总工时为" + sum+"小时。其中审核通过"+pass
+//                    +"小时, 待审核"+waiting+"小时,驳回"+reject+"小时。";
+        String str = MessageUtils.message("report.hourAll",projectList.size(),sum,pass,waiting,reject);
         msg.data = str;
         return msg;
     }
@@ -3916,23 +3959,28 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                                 && mapList.get("corpwx_userid").equals(curUser.getCorpwxUserid())).collect(Collectors.toList());
                         noRecord.createDate = dtf.format(date);
                         //默认为未填写
-                        noRecord.status = "未填写";
+                        //noRecord.status = "未填写";
+                        noRecord.status = MessageUtils.message("leave.notFill");
                         if(!userCorpwxListOn.isEmpty()){
-                            noRecord.status = "请假";
+                            //noRecord.status = "请假";
+                            noRecord.status = MessageUtils.message("leave.leave");
                         }else{
                             //检查是否是驳回或者待提交的
                             if (deniedReportList.stream().anyMatch(deny->deny.getCreatorId().equals(curUser.getId()) && date.isEqual(deny.getCreateDate()))) {
-                                noRecord.status = "已驳回";
+                                //noRecord.status = "已驳回";
+                                noRecord.status = MessageUtils.message("stages.reject");
                             }
                             if (waitingSubmitReportList.stream().anyMatch(deny->deny.getCreatorId().equals(curUser.getId()) && date.isEqual(deny.getCreateDate()))) {
-                                noRecord.status = "待提交";
+                                //noRecord.status = "待提交";
+                                noRecord.status = MessageUtils.message("stages.toBeSub");
                             }
                         }
 
                         if (curUser.getDepartmentId() != null && curUser.getDepartmentId() != 0) {
                             noRecord.department = departmentList.stream().filter(d->d.getDepartmentId().equals(curUser.getDepartmentId())).findFirst().get().getDepartmentName();
                         } else {
-                            noRecord.department = "无";
+                            //noRecord.department = "无";
+                            noRecord.department = MessageUtils.message("entry.none");
                         }
                         noRecord.name = curUser.getName();
                         //请假的
@@ -3994,17 +4042,24 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
         HttpRespMsg msg = getNoReportUserList(request, startDate, endDate);
         String token = request.getHeader("TOKEN");
         TimeType timeType = timeTypeMapper.selectById(userMapper.selectById(token).getCompanyId());
-        String[] weekDayCHN = {"周一","周二","周三","周四","周五","周六","周日"};
+        //String[] weekDayCHN = {"周一","周二","周三","周四","周五","周六","周日"};
+        String[] weekDayCHN = {MessageUtils.message("week.Monday"),MessageUtils.message("week.Tuesday"),MessageUtils.message("week.Wednesday"),MessageUtils.message("week.Thursday"),MessageUtils.message("week.Friday"),MessageUtils.message("week.Saturday"),MessageUtils.message("week.Sunday")};
         List<UserDailyWorkItem> dailyWorkItems = (List<UserDailyWorkItem>) msg.data;
         List<List<String>> dataList = new ArrayList<>();
+//        List<String> titleList = new ArrayList<>();
+//        titleList.add("部门");
+//        titleList.add("姓名");
+//        titleList.add("日期");
+//        titleList.add("状态");
         List<String> titleList = new ArrayList<>();
-        titleList.add("部门");
-        titleList.add("姓名");
-        titleList.add("日期");
-        titleList.add("状态");
+        titleList.add(MessageUtils.message("excel.department"));
+        titleList.add(MessageUtils.message("entry.name"));
+        titleList.add(MessageUtils.message("excel.date"));
+        titleList.add(MessageUtils.message("leave.status"));
         if (timeType.getSyncCorpwxTime() == 1) {
             //企业微信同步考勤打卡的,需要加上这一列
-            titleList.add("考勤打卡");
+            //titleList.add("考勤打卡");
+            titleList.add(MessageUtils.message("leave.clockIn"));
         }
         dataList.add(titleList);
 
@@ -4021,7 +4076,8 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             dataList.add(line);
         }
         //生成excel文件导出
-        String fileName = "未填人员统计_"+startDate+"至"+endDate+"_"+System.currentTimeMillis();
+        //String fileName = "未填人员统计_"+startDate+"至"+endDate+"_"+System.currentTimeMillis();
+        String fileName = MessageUtils.message("fileName.perNoFill")+startDate+MessageUtils.message("leave.to")+endDate+"_"+System.currentTimeMillis();
         String resp = ExcelUtil.exportGeneralExcelByTitleAndList(fileName , dataList, path);
         HttpRespMsg httpRespMsg = new HttpRespMsg();
         httpRespMsg.data = resp;
@@ -4113,7 +4169,8 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             List<Integer> collect = list.stream().map(Report::getProjectId).collect(Collectors.toList());
             List<Project> projectList = projectMapper.selectList(new QueryWrapper<Project>().in("id", collect));
             String pNames = projectList.stream().map(Project::getProjectName).collect(Collectors.joining(", ", "[", "]"));
-            String str = "您"+createDate+"填写的日报中"+pNames+"项目被["+user.getName()+"]驳回。原因:" + reason;;
+            //String str = "您"+createDate+"填写的日报中"+pNames+"项目被["+user.getName()+"]驳回。原因:" + reason;;
+            String str = MessageUtils.message("report.dailyReject",createDate,pNames,user.getName(),reason);
             String fillUserId = oneReport.getCreatorId();
 
             informationMapper.insert(new Information().setType(0).setContent(createDate).setUserId(fillUserId).setMsg(str));
@@ -4257,14 +4314,16 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
         List<Report> updateList = new ArrayList<>();
         for (Report report : auditWorkflowReportList) {
             int count = reportLogMapper.selectCount(new QueryWrapper<ReportLog>()
-                    .like("msg", "审核通过了日报").eq("operator_id", report.getProjectAuditorId())
+                    //.like("msg", "审核通过了日报").eq("operator_id", report.getProjectAuditorId())
+                    .like("msg", MessageUtils.message("report.reportApp")).eq("operator_id", report.getProjectAuditorId())
                     .eq("report_ids", report.getId()));
             boolean findLog = false;
 
             if (count == 0) {
                 //模糊匹配一下
                 List<ReportLog> reportLogs = reportLogMapper.selectList(new QueryWrapper<ReportLog>().select("id, report_ids")
-                        .like("msg", "审核通过了日报").eq("operator_id", report.getProjectAuditorId())
+                        //.like("msg", "审核通过了日报").eq("operator_id", report.getProjectAuditorId())
+                        .like("msg", MessageUtils.message("report.reportApp")).eq("operator_id", report.getProjectAuditorId())
                         .eq("company_id", report.getCompanyId())
                         .eq("creator_id", report.getCreatorId())
                         .eq("create_date", report.getCreateDate()));
@@ -4348,6 +4407,20 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
         return msg;
     }
 
+    @Override
+    public HttpRespMsg getUploadThirdReportData(String yearMonth,HttpServletRequest request) {
+        HttpRespMsg httpRespMsg=new HttpRespMsg();
+        Integer companyId = userMapper.selectById(request.getHeader("token")).getCompanyId();
+        DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+        String dateStr = yearMonth+"-01";
+        LocalDate startDate = LocalDate.parse(dateStr,df);
+        LocalDate endDate = LocalDate.parse(dateStr,df);
+        endDate=endDate.plusMonths(1);
+        List<Map<String,Object>> resultList=reportMapper.getUploadThirdReportData(companyId,startDate,endDate);
+        httpRespMsg.data=resultList;
+        return httpRespMsg;
+    }
+
     private void selfUpdateToNextWorkFlow(Integer companyId, User auditTargetUser, List<Integer> targetRids, List<Department> allDepts) {
         List<AuditWorkflowTimeSetting> settings = auditWorkflowTimeSettingMapper.selectList(
                 new QueryWrapper<AuditWorkflowTimeSetting>().eq("company_id", companyId)

+ 13 - 7
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/SimpleReportServiceImpl.java

@@ -398,14 +398,19 @@ public class SimpleReportServiceImpl extends ServiceImpl<SimpleReportMapper, Sim
         List<List<String>> dataList = new ArrayList<>();
         List<String> titleList = new ArrayList<>();
         if ("按项目".equals(type)) {
-            titleList.add("项目");
+            //titleList.add("项目");
+            titleList.add(MessageUtils.message("entry.project"));
         } else if ("按岗位".equals(type)) {
-            titleList.add("岗位");
+            //titleList.add("岗位");
+            titleList.add(MessageUtils.message("excel.post"));
         } else {
-            titleList.add("部门");
+            //titleList.add("部门");
+            titleList.add(MessageUtils.message("excel.department"));
         }
-        titleList.add("工时(h)");
-        titleList.add("成本(元)");
+        //titleList.add("工时(h)");
+        titleList.add(MessageUtils.message("entry.workHours")+"(h)");
+        //titleList.add("成本(元)");
+        titleList.add(MessageUtils.message("entry.cost")+"(元)");
         dataList.add(titleList);
         //数据
         double time = 0;
@@ -425,7 +430,8 @@ public class SimpleReportServiceImpl extends ServiceImpl<SimpleReportMapper, Sim
         }
         //合计
         List<String> sumRow = new ArrayList<String>();
-        sumRow.add("合计");
+        //sumRow.add("合计");
+        sumRow.add(MessageUtils.message("entry.total"));
 
         sumRow.add(df.format(time));
         cost.setScale(2, BigDecimal.ROUND_HALF_UP);
@@ -433,7 +439,7 @@ public class SimpleReportServiceImpl extends ServiceImpl<SimpleReportMapper, Sim
 
         dataList.add(sumRow);
         //生成excel文件导出
-        String fileName = yearMonth+"_"+type+"报表_"+System.currentTimeMillis();
+        String fileName = yearMonth+"_"+type+MessageUtils.message("report.report")+"_"+System.currentTimeMillis();
         String resp = ExcelUtil.exportGeneralExcelByTitleAndList(fileName , dataList, path);
         HttpRespMsg httpRespMsg = new HttpRespMsg();
         httpRespMsg.data = resp;

+ 5 - 2
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/TaskGroupServiceImpl.java

@@ -10,6 +10,7 @@ import com.management.platform.service.TaskGroupService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.management.platform.service.TaskService;
 import com.management.platform.util.HttpRespMsg;
+import com.management.platform.util.MessageUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.StringUtils;
@@ -63,10 +64,12 @@ public class TaskGroupServiceImpl extends ServiceImpl<TaskGroupMapper, TaskGroup
             Project project = projectMapper.selectById(taskGroup.getProjectId());
             OperationRecord operationRecord=new OperationRecord();
             operationRecord.setOperationTime(LocalDateTime.now());
-            operationRecord.setContent("修改了分组负责人,修改前["+select.getInchargerId()+",修改后["+taskGroup.getInchargerId()+"]");
+            //operationRecord.setContent("修改了分组负责人,修改前["+select.getInchargerId()+",修改后["+taskGroup.getInchargerId()+"]");
+            operationRecord.setContent(MessageUtils.message("other.modGroupCharge",select.getInchargerId(),taskGroup.getInchargerId()));
             operationRecord.setOperatorName(user.getName());
             operationRecord.setCompanyId(user.getCompanyId());
-            operationRecord.setModuleName("任务分组");
+            //operationRecord.setModuleName("任务分组");
+            operationRecord.setModuleName(MessageUtils.message("excel.taskGroup"));
             operationRecord.setProjectName(project.getProjectName());
             operationRecordMapper.insert(operationRecord);
         }

+ 4 - 2
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/TaskProgressServiceImpl.java

@@ -42,7 +42,8 @@ public class TaskProgressServiceImpl extends ServiceImpl<TaskProgressMapper, Tas
     private ProjectMapper projectMapper;
     @Resource
     private TaskCommentMapper taskCommentMapper;
-    String[] statusList = new String[]{"状态正常", "存在风险", "进展逾期"};
+    //String[] statusList = new String[]{"状态正常", "存在风险", "进展逾期"};
+    String[] statusList = new String[]{MessageUtils.message("excel.staNormal"), MessageUtils.message("excel.atRisk"), MessageUtils.message("excel.overduePro")};
     @Override
     public HttpRespMsg addProgress(TaskProgress progress, String participatorIds, HttpServletRequest request) {
         HttpRespMsg msg = new HttpRespMsg();
@@ -56,7 +57,8 @@ public class TaskProgressServiceImpl extends ServiceImpl<TaskProgressMapper, Tas
         comment.setUserId(progress.getCreatorId());
         comment.setUserName(creator.getName());
         comment.setType(2);
-        String updateStr = creator.getName()+"更新任务进展为 " + statusList[progress.getStatus()];
+        //String updateStr = creator.getName()+"更新任务进展为 " + statusList[progress.getStatus()];
+        String updateStr = creator.getName()+MessageUtils.message("stages.upTask") + statusList[progress.getStatus()];
         comment.setContent(updateStr);
         taskCommentMapper.insert(comment);
 

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

@@ -114,7 +114,8 @@ public class TaskServiceImpl extends ServiceImpl<TaskMapper, Task> implements Ta
         try {
             //准备导出
             HSSFWorkbook workbook = new HSSFWorkbook();
-            HSSFSheet sheet = workbook.createSheet("实际工时VS计划工时");
+            //HSSFSheet sheet = workbook.createSheet("实际工时VS计划工时");
+            HSSFSheet sheet = workbook.createSheet(MessageUtils.message("excel.actualWork")+"VS"+MessageUtils.message("excel.plannedWork"));
             //创建表头
             HSSFRow headRow = sheet.createRow(0);
             //设置列宽 setColumnWidth的第二个参数要乘以256 这个参数的单位是1/256个字符宽度
@@ -135,19 +136,24 @@ public class TaskServiceImpl extends ServiceImpl<TaskMapper, Task> implements Ta
             //表头
             HSSFCell headCell;
             headCell = headRow.createCell(0);
-            headCell.setCellValue("序号");
+            //headCell.setCellValue("序号");
+            headCell.setCellValue(MessageUtils.message("entry.serialNo"));
             headCell.setCellStyle(headStyle);
             headCell = headRow.createCell(1);
-            headCell.setCellValue("任务标题");
+            //headCell.setCellValue("任务标题");
+            headCell.setCellValue(MessageUtils.message("excel.taskTitle"));
             headCell.setCellStyle(headStyle);
             headCell = headRow.createCell(2);
-            headCell.setCellValue("实际工时(h)");
+            //headCell.setCellValue("实际工时(h)");
+            headCell.setCellValue(MessageUtils.message("excel.actualWork"));
             headCell.setCellStyle(headStyle);
             headCell = headRow.createCell(3);
-            headCell.setCellValue("计划工时(h)");
+            //headCell.setCellValue("计划工时(h)");
+            headCell.setCellValue(MessageUtils.message("excel.plannedWork"));
             headCell.setCellStyle(headStyle);
             headCell = headRow.createCell(4);
-            headCell.setCellValue("偏差");
+            //headCell.setCellValue("偏差");
+            headCell.setCellValue(MessageUtils.message("entry.deviation"));
             headCell.setCellStyle(headStyle);
             int rowNum = 1;
             for (Map<String, Object> map : list) {
@@ -172,7 +178,7 @@ public class TaskServiceImpl extends ServiceImpl<TaskMapper, Task> implements Ta
                 rowNum++;
             }
             //生成Excel文件
-            String fileUrlSuffix = project.getProjectName()+"工时对比" + System.currentTimeMillis() + ".xls";
+            String fileUrlSuffix = project.getProjectName()+MessageUtils.message("fileName.laborHour") + System.currentTimeMillis() + ".xls";
             FileOutputStream fos = new FileOutputStream(path + fileUrlSuffix);
             workbook.write(fos);
             fos.flush();
@@ -201,7 +207,8 @@ public class TaskServiceImpl extends ServiceImpl<TaskMapper, Task> implements Ta
             DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
             //准备导出
             HSSFWorkbook workbook = new HSSFWorkbook();
-            HSSFSheet sheet = workbook.createSheet("任务数据");
+            //HSSFSheet sheet = workbook.createSheet("任务数据");
+            HSSFSheet sheet = workbook.createSheet(MessageUtils.message("excel.taskData"));
             //创建表头
             HSSFRow headRow = sheet.createRow(0);
             //设置列宽 setColumnWidth的第二个参数要乘以256 这个参数的单位是1/256个字符宽度
@@ -227,34 +234,44 @@ public class TaskServiceImpl extends ServiceImpl<TaskMapper, Task> implements Ta
             //表头
             HSSFCell headCell;
             headCell = headRow.createCell(0);
-            headCell.setCellValue("任务内容");
+            //headCell.setCellValue("任务内容");
+            headCell.setCellValue(MessageUtils.message("excel.taskContent"));
             headCell.setCellStyle(headStyle);
             headCell = headRow.createCell(1);
-            headCell.setCellValue("项目");
+            //headCell.setCellValue("项目");
+            headCell.setCellValue(MessageUtils.message("entry.project"));
             headCell.setCellStyle(headStyle);
             headCell = headRow.createCell(2);
-            headCell.setCellValue("执行人");
+            //headCell.setCellValue("执行人");
+            headCell.setCellValue(MessageUtils.message("excel.executor"));
             headCell.setCellStyle(headStyle);
             headCell = headRow.createCell(3);
-            headCell.setCellValue("创建时间");
+            //headCell.setCellValue("创建时间");
+            headCell.setCellValue(MessageUtils.message("excel.creatTime"));
             headCell.setCellStyle(headStyle);
             headCell = headRow.createCell(4);
-            headCell.setCellValue("截止时间");
+            //headCell.setCellValue("截止时间");
+            headCell.setCellValue(MessageUtils.message("excel.deadline"));
             headCell.setCellStyle(headStyle);
             headCell = headRow.createCell(5);
-            headCell.setCellValue("完成时间");
+            //headCell.setCellValue("完成时间");
+            headCell.setCellValue(MessageUtils.message("excel.comTime"));
             headCell.setCellStyle(headStyle);
             headCell = headRow.createCell(6);
-            headCell.setCellValue("是否完成");
+            //headCell.setCellValue("是否完成");
+            headCell.setCellValue(MessageUtils.message("excel.whetherCom"));
             headCell.setCellStyle(headStyle);
             headCell = headRow.createCell(7);
-            headCell.setCellValue("是否逾期");
+            //headCell.setCellValue("是否逾期");
+            headCell.setCellValue(MessageUtils.message("excel.overdueNot"));
             headCell.setCellStyle(headStyle);
             headCell = headRow.createCell(8);
-            headCell.setCellValue("计划工时(h)");
+            //headCell.setCellValue("计划工时(h)");
+            headCell.setCellValue(MessageUtils.message("excel.plannedWork"));
             headCell.setCellStyle(headStyle);
             headCell = headRow.createCell(9);
-            headCell.setCellValue("实际工时(h)");
+            //headCell.setCellValue("实际工时(h)");
+            headCell.setCellValue(MessageUtils.message("excel.actualWork"));
             headCell.setCellStyle(headStyle);
             int rowNum = 1;
             for (TimeTask task : list) {
@@ -276,7 +293,8 @@ public class TaskServiceImpl extends ServiceImpl<TaskMapper, Task> implements Ta
                 rowNum++;
             }
             //生成Excel文件
-            String fileUrlSuffix = "【"+project.getProjectName()+"】任务数据" + System.currentTimeMillis() + ".xls";
+            //String fileUrlSuffix = "【"+project.getProjectName()+"】任务数据" + System.currentTimeMillis() + ".xls";
+            String fileUrlSuffix = "【"+project.getProjectName()+"】"+MessageUtils.message("excel.taskData") + System.currentTimeMillis() + ".xls";
             FileOutputStream fos = new FileOutputStream(path + fileUrlSuffix);
             workbook.write(fos);
             fos.flush();
@@ -307,13 +325,19 @@ public class TaskServiceImpl extends ServiceImpl<TaskMapper, Task> implements Ta
         Integer companyId = creator.getCompanyId();
         List<User> allUserList = userMapper.selectList(new QueryWrapper<User>().eq("company_id", companyId));
         HashMap<String, Integer> taskTypeMap = new HashMap<>();
-        taskTypeMap.put("任务", 0);
-        taskTypeMap.put("里程碑", 1);
-        taskTypeMap.put("风险", 2);
+        //taskTypeMap.put("任务", 0);
+        taskTypeMap.put(MessageUtils.message("excel.task"), 0);
+        //taskTypeMap.put("里程碑", 1);
+        taskTypeMap.put(MessageUtils.message("excel.milepost"), 1);
+        //taskTypeMap.put("风险", 2);
+        taskTypeMap.put(MessageUtils.message("excel.risk"), 2);
         HashMap<String, Integer> taskLevelMap = new HashMap<>();
-        taskTypeMap.put("一般", 0);
-        taskTypeMap.put("重要", 1);
-        taskTypeMap.put("紧急", 2);
+        //taskTypeMap.put("一般", 0);
+        taskTypeMap.put(MessageUtils.message("excel.general"), 0);
+        //taskTypeMap.put("重要", 1);
+        taskTypeMap.put(MessageUtils.message("excel.important"), 1);
+        //taskTypeMap.put("紧急", 2);
+        taskTypeMap.put(MessageUtils.message("excel.urgent"), 2);
         //然后处理文件
         String fileName = multipartFile.getOriginalFilename();
         File file = new File(fileName == null ? "file" : fileName);

+ 96 - 42
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/UserServiceImpl.java

@@ -685,27 +685,46 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
             //生成费用报销默认条目
             String[] expenseTypes = Constant.EXPENSE_TYPES;
             List<String> commonly = new ArrayList<>();
-            commonly.add("材料费");
-            commonly.add("办公用品");
-            commonly.add("培训费");
-            commonly.add("打印费");
-            commonly.add("快递费");
-            commonly.add("制作费");
-            commonly.add("律师费");
-            commonly.add("水费");
-            commonly.add("电费");
-            commonly.add("团建费");
-            commonly.add("其他");
+            //commonly.add("材料费");
+            commonly.add(MessageUtils.message("entry.materialCost"));
+            //commonly.add("办公用品");
+            commonly.add(MessageUtils.message("entry.workCost"));
+            //commonly.add("培训费");
+            commonly.add(MessageUtils.message("entry.trainCost"));
+            //commonly.add("打印费");
+            commonly.add(MessageUtils.message("entry.printCost"));
+            //commonly.add("快递费");
+            commonly.add(MessageUtils.message("entry.expressCost"));
+            //commonly.add("制作费");
+            commonly.add(MessageUtils.message("entry.makeCost"));
+            //commonly.add("律师费");
+            commonly.add(MessageUtils.message("entry.lawyerCost"));
+            //commonly.add("水费");
+            commonly.add(MessageUtils.message("entry.waterCost"));
+            //commonly.add("电费");
+            commonly.add(MessageUtils.message("entry.electricCost"));
+            //commonly.add("团建费");
+            commonly.add(MessageUtils.message("entry.leagueCost"));
+            //commonly.add("其他");
+            commonly.add(MessageUtils.message("entry.other"));
             List<String> travel  = new ArrayList<>();
-            travel.add("城市间交通费");
-            travel.add("住宿费");
-            travel.add("伙食补助费");
-            travel.add("市内交通费");
-            travel.add("其他差旅费");
+//            travel.add("城市间交通费");
+//            travel.add("住宿费");
+//            travel.add("伙食补助费");
+//            travel.add("市内交通费");
+//            travel.add("其他差旅费");
+            travel.add(MessageUtils.message("entry.cityTrafficCost"));
+            travel.add(MessageUtils.message("entry.liveCost"));
+            travel.add(MessageUtils.message("entry.eatCost"));
+            travel.add(MessageUtils.message("entry.insideCityCost"));
+            travel.add(MessageUtils.message("entry.otherLiveTraCost"));
             List<String> outsource = new ArrayList<>();
-            outsource.add("项目外包费");
-            outsource.add("劳务外包费");
-            outsource.add("其他外包费");
+//            outsource.add("项目外包费");
+//            outsource.add("劳务外包费");
+//            outsource.add("其他外包费");
+            outsource.add(MessageUtils.message("entry.projectCost"));
+            outsource.add(MessageUtils.message("entry.labourCost"));
+            outsource.add(MessageUtils.message("entry.OtherOutsourceCost"));
             List<ExpenseType> expenseTypeList=new ArrayList<>();
             for (String expenseType : expenseTypes) {
                 ExpenseType item=new ExpenseType();
@@ -1088,7 +1107,8 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
                 name = name.trim();
                 //检验手机号,不能为空
                 if (StringUtils.isEmpty(phone)) {
-                    httpRespMsg.setError("手机号不能为空");
+                    //httpRespMsg.setError("手机号不能为空");
+                    httpRespMsg.setError(MessageUtils.message("other.phoneNull"));
                     return httpRespMsg;
                 }
                 Integer deptId;
@@ -1146,7 +1166,8 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
                             List<User> jobNumUsers = userMapper.selectList(new QueryWrapper<User>().eq("company_id", companyId).in("job_number", jobNumList));
                             String duplicateJobNums = jobNumUsers.stream().map(User::getJobNumber).collect(Collectors.joining(","));
 
-                            httpRespMsg.setError("工号已存在:"+duplicateJobNums);
+                            //httpRespMsg.setError("工号已存在:"+duplicateJobNums);
+                            httpRespMsg.setError(MessageUtils.message("register.jobNoExist")+duplicateJobNums);
                         } else {
                             saveBatch(userList);
                         }
@@ -1357,10 +1378,11 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
         try {
             String userId = request.getHeader("Token");
             User user = userMapper.selectById(userId);
-
+            WxCorpInfo wxCorpInfo = wxCorpInfoMapper.selectOne(new QueryWrapper<WxCorpInfo>().eq("company_id", user.getCompanyId()));
             //准备导出
             HSSFWorkbook workbook = new HSSFWorkbook();
-            HSSFSheet sheet = workbook.createSheet("全部员工列表");
+            //HSSFSheet sheet = workbook.createSheet("全部员工列表");
+            HSSFSheet sheet = workbook.createSheet(MessageUtils.message("excel.allPeopleList"));
             //创建表头
             HSSFRow headRow = sheet.createRow(0);
             //设置列宽 setColumnWidth的第二个参数要乘以256 这个参数的单位是1/256个字符宽度
@@ -1382,31 +1404,40 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
             //表头
             HSSFCell headCell;
             headCell = headRow.createCell(0);
-            headCell.setCellValue("序号");
+            //headCell.setCellValue("序号");
+            headCell.setCellValue(MessageUtils.message("entry.serialNo"));
             headCell.setCellStyle(headStyle);
             headCell = headRow.createCell(1);
-            headCell.setCellValue("姓名");
+            //headCell.setCellValue("姓名");
+            headCell.setCellValue(MessageUtils.message("entry.name"));
             headCell.setCellStyle(headStyle);
             headCell = headRow.createCell(2);
-            headCell.setCellValue("角色");
+            //headCell.setCellValue("角色");
+            headCell.setCellValue(MessageUtils.message("role.role"));
             headCell.setCellStyle(headStyle);
             headCell = headRow.createCell(3);
-            headCell.setCellValue("手机号");
+            //headCell.setCellValue("手机号");
+            headCell.setCellValue(MessageUtils.message("excel.phoneNumber"));
             headCell.setCellStyle(headStyle);
             headCell = headRow.createCell(4);
-            headCell.setCellValue("部门");
+            //headCell.setCellValue("部门");
+            headCell.setCellValue(MessageUtils.message("excel.department"));
             headCell.setCellStyle(headStyle);
             headCell = headRow.createCell(5);
-            headCell.setCellValue("月薪");
+            //headCell.setCellValue("月薪");
+            headCell.setCellValue(MessageUtils.message("excel.MonSalary"));
             headCell.setCellStyle(headStyle);
             headCell = headRow.createCell(6);
-            headCell.setCellValue("时薪");
+            //headCell.setCellValue("时薪");
+            headCell.setCellValue(MessageUtils.message("excel.hourlyWage"));
             headCell.setCellStyle(headStyle);
             headCell = headRow.createCell(7);
-            headCell.setCellValue("证书");
+            //headCell.setCellValue("证书");
+            headCell.setCellValue(MessageUtils.message("excel.certificate"));
             headCell.setCellStyle(headStyle);
             headCell = headRow.createCell(8);
-            headCell.setCellValue("状态");
+            //headCell.setCellValue("状态");
+            headCell.setCellValue(MessageUtils.message("leave.status"));
             headCell.setCellStyle(headStyle);
 
             //设置日期格式
@@ -1456,17 +1487,32 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
                 }else {
                     row.createCell(7).setCellValue("");
                 }
-                row.createCell(8).setCellValue(item.getIsActive()==1?"正常":"已停用");
+                row.createCell(8).setCellValue(item.getIsActive()==1?MessageUtils.message("excel.normal"):MessageUtils.message("access.deactivated"));
                 rowNum++;
             }
             //生成Excel文件
-            String fileUrlSuffix = "员工列表" + System.currentTimeMillis() + ".xls";
+            //String fileUrlSuffix = "员工列表" + System.currentTimeMillis() + ".xls";
+            String fileUrlSuffix = MessageUtils.message("excel.peopleList") + System.currentTimeMillis() + ".xls";
             FileOutputStream fos = new FileOutputStream(path + fileUrlSuffix);
             workbook.write(fos);
             fos.flush();
             fos.close();
-            //返回生成的文件地址/upload文件夹下
-            httpRespMsg.data = "/upload/" + fileUrlSuffix;
+            if(wxCorpInfo!=null&&wxCorpInfo.getSaasSyncContact()==1){
+                String mediaId = wxCorpInfoService.getTranslationMediaId(fileUrlSuffix);
+                String jobId = wxCorpInfoService.syncTranslation(mediaId,fileUrlSuffix, "pdf");
+            /*if(jobId!=null&&!jobId.equals("")){
+                File file=new File(path + fileUrlSuffix);
+                if(file.exists()){
+                    file.delete();
+                }
+            }*/
+                Thread.sleep(1500);
+                String syncTranslationResult = wxCorpInfoService.getSyncTranslationResult(jobId);
+                //返回生成的文件地址/upload文件夹下
+                httpRespMsg.data = syncTranslationResult;
+            }else {
+                httpRespMsg.data = "/upload/" + fileUrlSuffix;
+            }
         } catch (NullPointerException e) {
             e.printStackTrace();
             //httpRespMsg.setError("验证失败或缺少数据");
@@ -1477,6 +1523,8 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
             //httpRespMsg.setError("文件生成错误");
             httpRespMsg.setError(MessageUtils.message("file.generateError"));
             return httpRespMsg;
+        } catch (Exception e) {
+            e.printStackTrace();
         }
         return httpRespMsg;
     }
@@ -1548,7 +1596,8 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
                     Integer companyId = u.getCompanyId();
                     Long agentId = companyDingdingService.getOne(new QueryWrapper<CompanyDingding>().eq("company_id", companyId)).getAgentId();;
                     String dingUid = (String) u.getDingdingUserid();
-                    String alertMsg = "您"+(StringUtils.isEmpty(date)?"":date)+"的工时报告还未填写";
+                    //String alertMsg = "您"+(StringUtils.isEmpty(date)?"":date)+"的工时报告还未填写";
+                    String alertMsg = MessageUtils.message("report.hourReportNoFilled",StringUtils.isEmpty(date)?"":date);
                     companyDingdingService.sendFillReportAlertMsg(companyId, agentId, alertMsg, dingUid);
                 }
                 //微信公众号消息推送
@@ -1587,7 +1636,8 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
             });
             //准备导出
             HSSFWorkbook workbook = new HSSFWorkbook();
-            HSSFSheet sheet = workbook.createSheet("人员列表");
+            //HSSFSheet sheet = workbook.createSheet("人员列表");
+            HSSFSheet sheet = workbook.createSheet(MessageUtils.message("excel.perList"));
             //创建表头
             HSSFRow headRow = sheet.createRow(0);
             //设置列宽 setColumnWidth的第二个参数要乘以256 这个参数的单位是1/256个字符宽度
@@ -1602,13 +1652,16 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
             //表头
             HSSFCell headCell;
             headCell = headRow.createCell(0);
-            headCell.setCellValue("序号");
+            //headCell.setCellValue("序号");
+            headCell.setCellValue(MessageUtils.message("entry.serialNo"));
             headCell.setCellStyle(headStyle);
             headCell = headRow.createCell(1);
-            headCell.setCellValue("姓名");
+            //headCell.setCellValue("姓名");
+            headCell.setCellValue(MessageUtils.message("entry.name"));
             headCell.setCellStyle(headStyle);
             headCell = headRow.createCell(2);
-            headCell.setCellValue("部门");
+            //headCell.setCellValue("部门");
+            headCell.setCellValue(MessageUtils.message("excel.department"));
             headCell.setCellStyle(headStyle);
 
             //新增数据行 并且装填数据
@@ -1621,7 +1674,8 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
                 rowNum++;
             }
             //生成Excel文件
-            String fileUrlSuffix = date+(isFill?"已填":"未填")+"人员列表" + System.currentTimeMillis() + ".xls";
+            //String fileUrlSuffix = date+(isFill?"已填":"未填")+"人员列表" + System.currentTimeMillis() + ".xls";
+            String fileUrlSuffix = date+(isFill?MessageUtils.message("excel.Filled"):MessageUtils.message("excel.notFilled"))+MessageUtils.message("excel.perList") + System.currentTimeMillis() + ".xls";
             FileOutputStream fos = new FileOutputStream(path + fileUrlSuffix);
             workbook.write(fos);
             fos.flush();

+ 125 - 6
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/WxCorpInfoServiceImpl.java

@@ -1,9 +1,11 @@
 package com.management.platform.service.impl;
 
+import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.google.gson.JsonObject;
 import com.management.platform.controller.WeiXinCorpController;
 import com.management.platform.entity.*;
 import com.management.platform.mapper.SysConfigMapper;
@@ -13,23 +15,28 @@ import com.management.platform.mapper.WxCorpInfoMapper;
 import com.management.platform.service.WxCorpInfoService;
 import com.management.platform.util.*;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.http.client.utils.HttpClientUtils;
+import org.json.HTTP;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
+import org.springframework.core.io.FileSystemResource;
 import org.springframework.http.*;
 import org.springframework.stereotype.Service;
+import org.springframework.util.LinkedMultiValueMap;
+import org.springframework.util.MultiValueMap;
 import org.springframework.web.client.RestTemplate;
+import org.springframework.web.util.UriComponentsBuilder;
+import sun.net.www.http.HttpClient;
 
 import javax.annotation.Resource;
-import java.io.File;
-import java.io.FileOutputStream;
+import java.io.*;
 import java.lang.reflect.Array;
+import java.net.URI;
 import java.text.SimpleDateFormat;
 import java.time.*;
 import java.time.format.DateTimeFormatter;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
+import java.util.*;
+import java.util.concurrent.Executors;
 import java.util.stream.Collectors;
 
 /**
@@ -55,6 +62,11 @@ public class WxCorpInfoServiceImpl extends ServiceImpl<WxCorpInfoMapper, WxCorpI
     @Value("${suitSecret}")
     private String suitSecret;
 
+    @Value("${corpId}")
+    private String corpId;
+    @Value("${providerSecret}")
+    private String providerSecret;
+
     @Value(value = "${upload.path}")
     private String path;
 
@@ -75,6 +87,113 @@ public class WxCorpInfoServiceImpl extends ServiceImpl<WxCorpInfoMapper, WxCorpI
     @Resource
     UserCorpwxTimeMapper userCorpwxTimeMapper;
 
+
+    //获取服务商provider_access_token
+    @Override
+    public String getProviderAccessToken() throws Exception {
+        String access_token="";
+        String url = "https://qyapi.weixin.qq.com/cgi-bin/service/get_provider_token";
+        HttpHeaders headers = new HttpHeaders();
+        headers.setContentType(MediaType.APPLICATION_JSON);
+        JSONObject jsonObject=new JSONObject();
+        jsonObject.put("corpid",corpId);
+        jsonObject.put("provider_secret",providerSecret);
+        HttpEntity<String> requestEntity = new HttpEntity<String>(jsonObject.toJSONString(), headers);
+        ResponseEntity<String> responseEntity = this.restTemplate.exchange(url,
+                HttpMethod.POST, requestEntity, String.class);
+        if (responseEntity.getStatusCode() == HttpStatus.OK) {
+            String resp = responseEntity.getBody();
+            JSONObject json = JSONObject.parseObject(resp);
+            if(json.getIntValue("errcode")>0){
+                throw new Exception(json.toJSONString());
+            }
+            access_token= json.getString("provider_access_token");
+        }
+        return access_token;
+    }
+
+    //获取上传转移文件 获得的media_ia
+    @Override
+    public String getTranslationMediaId(String fileName) throws Exception {
+        String media_id="";
+        URI url = UriComponentsBuilder.fromHttpUrl("https://qyapi.weixin.qq.com/cgi-bin/service/media/upload")
+                .queryParam("provider_access_token", getProviderAccessToken())
+                .queryParam("type", "file")
+                .build().toUri();
+        HttpHeaders headers = new HttpHeaders();
+        headers.setContentType(MediaType.MULTIPART_FORM_DATA);
+        //然后处理文件 通讯录id转译
+        FileSystemResource fileSystemResource = new FileSystemResource(path+fileName);
+        ContentDisposition build = ContentDisposition.builder("form-data").filename(fileSystemResource.getFilename()).build();
+        headers.setContentDisposition(build);
+        MultiValueMap<String, Object> params = new LinkedMultiValueMap<>();
+        params.add("media", fileSystemResource);
+        HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<MultiValueMap<String, Object>>(params, headers);
+        MultiValueMap<String, Object> body = requestEntity.getBody();
+        ResponseEntity<String> responseEntity = this.restTemplate.exchange(url,
+                HttpMethod.POST, requestEntity, String.class);
+        if (responseEntity.getStatusCode() == HttpStatus.OK) {
+            String resp = responseEntity.getBody();
+            JSONObject json = JSONObject.parseObject(resp);
+            if(json.getIntValue("errcode")==0){
+                media_id= json.getString("media_id");
+            }else {
+                throw new Exception(json.toJSONString());
+            }
+        }
+        return media_id;
+    }
+
+    //异步通讯录id转译
+    @Override
+    public String syncTranslation(String mediaId,String outPutFileName,String outputFileFormat) throws Exception {
+        String url = "https://qyapi.weixin.qq.com/cgi-bin/service/contact/id_translate?provider_access_token=ACCESS_TOKEN".replaceAll("ACCESS_TOKEN",getProviderAccessToken());
+        HttpHeaders headers = new HttpHeaders();
+        List<String> list=new ArrayList<>();
+        list.add(mediaId);
+        String jobid="";
+        headers.setContentType(MediaType.APPLICATION_JSON);
+        JSONObject jsonObject=new JSONObject();
+        jsonObject.put("auth_corpid",corpId);
+        jsonObject.put("media_id_list",list);
+        jsonObject.put("output_file_name",outPutFileName);
+        jsonObject.put("output_file_format",outputFileFormat);
+        HttpEntity<String> requestEntity = new HttpEntity<String>(jsonObject.toJSONString(), headers);
+        ResponseEntity<String> responseEntity = this.restTemplate.exchange(url,
+                HttpMethod.POST, requestEntity, String.class);
+        if (responseEntity.getStatusCode() == HttpStatus.OK) {
+            String resp = responseEntity.getBody();
+            JSONObject json = JSONObject.parseObject(resp);
+            if(json.getIntValue("errcode")==0){
+                jobid= json.getString("jobid");
+            }else {
+                throw new Exception(json.toJSONString());
+            }
+        }
+        return jobid;
+    }
+
+    //获取异步任务结果
+    @Override
+    public String getSyncTranslationResult(String jobId) throws Exception {
+        String url = "https://qyapi.weixin.qq.com/cgi-bin/service/batch/getresult?provider_access_token=ACCESS_TOKEN&jobid=JOBID"
+                .replaceAll("ACCESS_TOKEN",getProviderAccessToken()).replaceAll("JOBID",jobId);
+        HttpHeaders headers = new HttpHeaders();
+        String resultUrl="";
+        HttpEntity<String> requestEntity = new HttpEntity<String>(null, headers);
+        ResponseEntity<String> responseEntity = this.restTemplate.exchange(url,
+                HttpMethod.GET, requestEntity, String.class);
+        String resp = responseEntity.getBody();
+        JSONObject json = JSONObject.parseObject(resp);
+        if(json.getIntValue("errcode")==0){
+            JSONObject result = (JSONObject) json.get("result");
+            JSONObject contact_id_translate = (JSONObject) result.get("contact_id_translate");
+            resultUrl = contact_id_translate.getString("url");
+        }else {
+            throw new Exception(json.toJSONString());
+        }
+        return resultUrl;
+    }
     @Override
     public void sendWXCorpMsg(WxCorpInfo corpInfo, String corpUserid, String msg) {
         try {

+ 1 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/resources/application.yml

@@ -15,7 +15,7 @@ spring:
       location: C:/upload/
   datasource:
     driver-class-name: com.mysql.cj.jdbc.Driver
-    url: jdbc:mysql://47.101.180.183:3306/man_dev?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&rewriteBatchedStatements=true&useSSL=false
+    url: jdbc:mysql://47.101.180.183:3306/man_hour_manager?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&rewriteBatchedStatements=true&useSSL=false
     username: root
     password: HuoshiDB@2022
     hikari:

+ 251 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/resources/i18n/messages.properties

@@ -40,6 +40,7 @@ access.addSuc=权限加入成功
 access.otherCompanyProject=无权查看其他公司的项目详情
 access.otherCompanyPeople=只能删除同一公司人员的账号
 access.staffStop={0}已停用,请先启用该员工再转让。
+access.deactivated=已停用
 #名称相关
 name.nullNameError=名称不能为空
 name.nameRepeat=该名称已存在
@@ -68,6 +69,11 @@ other.deleteErrorByAccess=只有创建人和项目经理可以删除
 other.ExecutorNull=执行人["{0}"]不存在
 other.pushFail=推送失败,请检查日志
 other.peopleNull=人员不能为空
+other.upPart=修改了参与人
+other.taskGroup=任务分组
+other.proDailyRep=项目,日报审批通过
+other.modGroupCharge=修改了分组负责人,修改前[{0},修改后[{1}]
+other.phoneNull=手机号不能为空
 # 请求相关
 request.countLimit=接口访问次数超过限制,请1分钟后重试。
 request.illegal=请求非法
@@ -80,6 +86,13 @@ department.modifyOtherError=不能修改其他公司的部门
 department.noDistribution=未分配
 department.notExist=部门["{0}"]不存在
 department.notExistAndCreat=部门["{0}"]不存在,请先创建该部门
+department.deleteOtherDep=不能删除其他公司的部门
+department.subDep=不能在有子级部门时删除部门
+department.dailyData=当前部门已被日报数据使用
+department.leaveDate=当前部门已被请假数据使用
+department.approvalProcess=当前部门已被工时审批流数据使用
+department.leaveAndTravel=当前部门已被请假出差审批流数据使用
+department.noExistentOrAccess=部门不存在或无查看权限
 # 日期相关
 date.dateNullError=开始日期和结束日期不能为空
 date.startDateError=开始日期不得早于{0}
@@ -158,6 +171,8 @@ profession.submitReplace={0}为{1}代填了日报
 profession.alreadyNull=日报已不存在
 profession.TypeError=操作错误,日报状态不对:{0}
 profession.alreadyRevoke=该日报已被撤销,无法重复操作
+profession.impProReject=您{0}导入的日报中{1}项目被[{2}]驳回。原因:{3},请重新导入。
+profession.fillProReject=您{0}填写的日报中{1}项目被[{2}]驳回。原因:{3}。
 # 项目相关
 project.deleteErrorByProject=删除失败,已绑定项目
 project.deleteErrorByMaster=删除失败,已绑定主项目
@@ -198,6 +213,9 @@ project.upSonSuc=成功更新"{0}"条项目子表数据
 project.deleteDate=成功删除"{0}"条项目数据
 project.masterError=请给["{0}"]项目设置项目负责人
 project.alreadyRelation={0}已被以下项目关联:{1}
+project.storesReserve=立项准备材料
+project.processDocuments=项目过程文档
+project.deliverable=项目交付件
 # 供货相关
 provider.noRepeat=供货商编号已存在
 provider.classNameRepeat=该分类下供货商名称已存在
@@ -227,9 +245,49 @@ wx.synError=同步失败:{0}
 wx.noNewMemberUp=无新成员更新
 wx.AssCompleted=处理完毕。当前无新人员需要关联企业微信身份
 wx.AssCompletedByParam=处理完毕。本次自动关联了:{0}位人员:{1}
+wx.noWXUser=仅企业微信用户支持该操作
 #请假相关
+leave.leave=请假
+leave.leaveOfDay=当天请假
 leave.businessRepeat=该时间段已有出差申请,不能重复提交
 leave.repeatedLeave=该时间段已有请假申请,不能重复请假
+leave.busTra=出差
+leave.people=出差人员
+leave.days=出差天数
+leave.details=出差详情
+leave.vehicle=交通工具
+leave.startTime=出差开始时间
+leave.endTime=出差结束时间
+leave.status=状态
+leave.task=备注
+leave.totalDays=总出差天数
+leave.to=至
+leave.plane=飞机
+leave.train=火车
+leave.car=汽车
+leave.ship=轮船
+leave.other=其他
+leave.travelDetails=人员出差详情表
+leave.travelStatistics=人员出差统计
+leave.perForLeave=请假人
+leave.telephone=电话
+leave.leaveType=请假类型
+leave.LStartTime=请假开始时间
+leave.LEndTime=请假结束时间
+leave.LDays=请假天数
+leave.duration=请假时长
+leave.state=状态
+leave.remark=备注
+leave.thing=事假
+leave.illness=病假
+leave.year=年假
+leave.maternity=产假
+leave.marry=婚假
+leave.die=丧假
+leave.compensatory=调休假
+leave.paternity=陪产假
+leave.notFill=未填写
+leave.clockIn=考勤打卡
 #报销相关
 Reimbursement.nameNull=报销人名称不能为空
 Reimbursement.costTypeNull=费用类型不能为空
@@ -240,6 +298,7 @@ Reimbursement.TypeError=当前费用类型["{0}"]中不存在["{1}"]类型
 salary.uploadErrorByAdopt={0}月薪资已审核通过,无法上传。
 salary.lackAndUpAgain=缺少["{0}"]的薪资成本,请修改数据重新上传
 #报表相关
+report.report=报表
 report.userNull=用户["{0}"]在财务报表中不存在,请重新导入
 report.warningType=已设置工时预警类型的成本预算,暂不支持导入工时
 report.data=请填写工时数据
@@ -248,16 +307,24 @@ report.dataNullError=工时数据不能为空
 report.hoursZero={0}工时为零,请检查
 report.typeErrorByHourAndSalary=表格格式不正确,需要月度工时和月薪薪资两个sheet={0}
 report.noExist={0}不存在于薪资表中,请检查后提交
+report.hourAll=您上周共参与了{0}个项目,总工时为{1}小时。其中审核通过{2}小时, 待审核{3}小时,驳回{4}小时。
+report.dailyReject=您{0}填写的日报中{1}项目被[{2}]驳回。原因:{3}
+report.reportApp=审核通过了日报
+report.hourReportNoFilled=您{0}的工时报告还未填写
 #模板相关
 Template.AlreadyExists=该模板名称已存在
 Template.lackSonProject=缺少子项目列,请下载最新模板
 Template.lackMasterRow=缺少主项目列,请下载最新模板
 Template.lackDepartment=缺少部门列,请下载最新模板进行导入
 Template.lackJobNumber=缺少工号列,请下载最新模板导入
+Template.creatProject=创建了项目
 Template.projectManage=项目管理
 Template.finishProject=完成了项目
 Template.revokeProject=撤销了项目
+Template.restart=重启了项目
+Template.projectSus=暂停了项目
 #角色相关
+role.role=角色
 role.noExist=该角色不存在
 role.deleteRootError=不可删除超级管理员
 role.deleteErrorByDefault=该角色为新增员工时的默认角色,请设置其他角色为默认后再尝试删除
@@ -270,6 +337,7 @@ staff.workingHoursNull=工号为"{0}"的员工在工时系统中不存在
 staff.deleteErrorByDaily=该员工存在填写的日报,无法删除。
 staff.deleteErrorByTask=该员工存在参与的任务,无法删除
 staff.deleteErrorByProject=该员工存在负责的项目,无法删除
+staff.jobNoNull=工号不能为空
 #数据相关
 data.importRepeat=请勿导入重复数据
 data.importSucRow=成功导入"{0}"条数据。
@@ -314,6 +382,9 @@ entry.contractNo=合同编号
 entry.projectType=项目分类
 entry.publicProject=是否为公共项目
 entry.projectName=项目名称
+entry.groupName=分组名称
+entry.groupCharge=分组负责人
+entry.groupPar=分组参与人
 entry.sonProject=子项目(多个用,隔开)
 entry.Participants=参与人
 entry.projectManager=项目经理
@@ -354,11 +425,53 @@ entry.create=创建
 entry.editedTask=编辑
 entry.task=了任务
 entry.copy=-复制
+entry.personnel=人员
+entry.project=项目
+entry.workHours=工时
+entry.cost=成本
+entry.total=合计
+entry.serialNo=序号
+entry.wages=工资
+entry.bonus=奖金
+entry.allowance=津贴
+entry.endowmentInsurance=养老保险
+entry.medicalInsurance=医疗保险
+entry.unemploymentInsurance=失业保险
+entry.injuryInsurance=工伤保险
+entry.housingProvidentFund=住房公积金
+entry.totalCost=总成本
+entry.noProject=无项目
+entry.taskName=任务名称
+entry.laborCost=人工成本
+entry.creator=创建人
+entry.creDate=创建日期
+entry.proLevel=项目级别
+entry.proCate=项目类别
+entry.totalBudget=当前总预算
+entry.curRemBud=当前剩余预算
+entry.totalRemBud=总剩余预算
+entry.totalLaborCostIncurred=已发生总工时成本
+entry.costBudget=成本预算
+entry.repCost=已填报成本
+entry.proFilledIn=已填报占比
+entry.GenProHours=普通项目工时
+entry.PubProHours=公共项目工时
+entry.totalManHours=总工时
+entry.PubProHoursProp=公共项目工时占比
+entry.timely=及时
+entry.NoTimely=不及时
+entry.SubTime=提交时间
+entry.quaAud=待审核数量
+entry.noFill=未填
+entry.workingHours=工作时长
+entry.none=无
+entry.deviation=偏差
 #文件名
 fileName.financialCost={0}_财务人员成本模板
 fileName.projectImport={0}_项目导入模板
 fileName.resourceDemand=资源需求统计报表_{0}
 fileName.workHour=_人员工时统计模板{0}至{1}
+fileName.travelers=出差统计导出_{0}
 fileName.reimburse=费用报销导入模板
 fileName.supplier=供应商导入模板
 fileName.people=人员导入模板
@@ -367,6 +480,36 @@ fileName.customer=新增客户导入模板
 fileName.researchCenter=研究中心导入模板
 fileName.allocation=员工项目分摊比例导入模板
 fileName.resImport=资源需求导入模板
+fileName.costStatistics=人员成本统计_{0}
+fileName.statistics={0}统计_{1}
+fileName.depHours=部门工时统计_{0}
+fileName.costFinancialPersonnel=财务人员成本_
+fileName.proClassCost=财务项目分类成本_
+fileName.perSal=人员薪资_
+fileName.leaveInfo=请假信息_
+fileName.projectCost=项目成本工时统计_
+fileName.projectReport=项目报表_
+fileName.projectTaskReport=项目任务报表_
+fileName.projectCostReport=项目成本报表_
+fileName.profitSta=项目收支平衡报表(利润表)_
+fileName.cusPro=客户项目利润报表_
+fileName.ProPeriodWork=项目阶段工时报表_
+fileName.OvertimeSta=加班统计报表_
+fileName.proExport=项目导出_
+fileName.proGroup=项目分组_
+fileName.hourCostAlert=工时成本预警表_
+fileName.proClassLaborCost=项目分类工时成本统计_
+fileName.perHoursAllSta=人员工时分配统计_
+fileName.timePerFill=人员填报及时率统计_
+fileName.perReviewed=人员待审核统计_
+fileName.perHoursSta=人员工时统计_
+fileName.taskGroupHours=任务分组工时统计
+fileName.proTaskGroup=项目任务分组工时统计
+fileName.hourCost =工时成本统计_
+fileName.supStat=供应商统计_
+fileName.dailyManHour=人员每日工时统计_{0}至{1}
+fileName.perNoFill=未填人员统计_
+fileName.laborHour=工时对比
 #excel
 excel.publicProject=是否为公共项目
 excel.projectName=项目名称必填
@@ -427,6 +570,7 @@ excel.milepost=里程碑
 excel.risk=风险
 excel.integer=整数不带单位
 excel.plannedWork=计划工时(h)
+excel.actualWork=实际工时(h)
 excel.description=详细描述
 excel.customerNo=客户编号
 excel.customerName=客户名称
@@ -444,8 +588,114 @@ excel.market=市场
 excel.technology=技术部
 excel.Marketing=市场部
 excel.empStatistics=员工工时统计模板
+excel.permissions=_权限表
+excel.modular=模块
+excel.function=功能
+excel.have=是否具有
+excel.remarks=备注
+excel.charge=负责人
+excel.projectAmount=项目金额
+excel.planStart=计划开始时间
+excel.planEnd=计划结束时间
+excel.degree=完成度
+excel.genExp=一般费用
+excel.traExp=差旅费用
+excel.OutExp=外包费用
+excel.totalExp=总费用
+excel.profit=利润
+excel.profitMargin=利润率
+excel.relatedPro=相关项目
+excel.WorkHours=工作时长(h)
+excel.OvertimeWork=加班工时(h)
+excel.overtimeCost=加班成本
+excel.lowRisk=低风险
+excel.MedRisk=中风险
+excel.highRisk=高风险
+excel.impData=导入了{0}条项目数据
+excel.planTime=计划完成时间
+excel.actualTime=实际完成时间
+excel.unclassified=未分类
+excel.timeFill=填报及时率
+excel.propActualTime=实际用时占比
+excel.classification=分类
+excel.name=名称
+excel.workReport=工作日报
+excel.mainProName=主项目名称
+excel.sonProName=子项目名称
+excel.assTask=关联任务
+excel.hours=工时时间
+excel.workOvertime=加班
+excel.taskGroup=任务分组
+excel.inputStage=投入阶段
+excel.fillTime=填写时间
+excel.proReviewer=项目审核人
+excel.auditTime=审核时间
+excel.auditProcess=审核流程
+excel.workItems=工作事项
+excel.auditStatus=审核状态
+excel.attDuration=考勤时长
+excel.staNormal=状态正常
+excel.atRisk=存在风险
+excel.overduePro=进展逾期
+excel.taskTitle=任务标题
+excel.taskData=任务数据
+excel.creatTime=创建时间
+excel.deadline=截止时间
+excel.comTime=完成时间
+excel.whetherCom=是否完成
+excel.overdueNot=是否逾期
+excel.allPeopleList=全部员工列表
+excel.MonSalary=月薪
+excel.hourlyWage=时薪
+excel.certificate=证书
+excel.peopleList=员工列表
+excel.perList=人员列表
+excel.Filled=已填
+excel.notFilled=未填
 #推送
 push.fillIn=您今天的工时填报还未完成
 push.name=屈跃庭
 push.Dep=市场部
-push.ASAP=请尽快填报
+push.ASAP=请尽快填报
+#阶段
+stages.engineering=工程设计
+stages.research=软硬件研发
+stages.service=客服工单处理
+stages.infoCollect=信息收集
+stages.plan=策划
+stages.proDrawing=原型图
+stages.designSketch=效果图
+stages.underReview=审核中
+stages.modify=修改调整
+stages.complete=完成
+stages.requirement=需求分析
+stages.design=设计中
+stages.development=研发中
+stages.test=测试中
+stages.BUG=修改BUG
+stages.release=已发布
+stages.userPro=用户问题
+stages.inSettlement=解决中
+stages.resolved=已解决
+stages.feedbackAndProblem=反馈用户&问题解决
+stages.approved=审核通过
+stages.reviewed=待审核
+stages.reject=驳回
+stages.withdrawn=已撤回
+stages.passed=已通过
+stages.toBeSub=待提交
+stages.upTask=更新任务进展为
+#统计表
+Statistics.tj=统计
+Statistics.OvertimeDet=加班情况明细表
+Statistics.ByPro=按项目统计
+Statistics.ByPeople=按人员统计
+Statistics.ProjectCostBase=项目成本基线表_
+#星期
+week.Monday=周一
+week.Tuesday=周二
+week.Wednesday=周三
+week.Thursday=周四
+week.Friday=周五
+week.Saturday=周六
+week.Sunday=周日

+ 252 - 2
fhKeeper/formulahousekeeper/management-platform/src/main/resources/i18n/messages_en_US.properties

@@ -40,6 +40,7 @@ access.addSuc=Permission joined successfully.
 access.otherCompanyProject=No right to view project details of other companies.
 access.otherCompanyPeople=You can only delete the account of a person in the same company.
 access.staffStop={0} has been deactivated. Please enable the employee before transferring.
+access.deactivated=deactivated
 #名称相关
 name.nullNameError=Name cannot be empty.
 name.nameRepeat=The name already exists.
@@ -68,6 +69,11 @@ other.deleteErrorByAccess=Only the creator and project manager can delete.
 other.ExecutorNull=Executor ["{0}"] does not exist.
 other.pushFail=Push failed, please check the log.
 other.peopleNull=Personnel cannot be empty.
+other.upPart=Modified participants
+other.taskGroup=Task grouping
+other.proDailyRep=Project, approved by daily report
+other.modGroupCharge=Modified the group leader, before [{0}, after [{1}]
+other.phoneNull=Mobile number cannot be empty
 # 请求相关
 request.countLimit=The number of interface accesses exceeds the limit. Please try again in 1 minute.
 request.illegal=Illegal request
@@ -80,6 +86,13 @@ department.modifyOtherError=Departments of other companies cannot be modified.
 department.noDistribution=Unassigned
 department.notExist=Department ["{0}"] does not exist
 department.notExistAndCreat=The department ["{0}"] does not exist. Please create it first.
+access.deleteOtherPar=Departments of other companies cannot be deleted.
+access.subDep=You cannot delete a department when there are child departments.
+department.dailyData=The current department has been used by daily report data.
+department.leaveDate=The current department has been used by leave data.
+department.approvalProcess=The current department has been used by hour approval process data.
+department.leaveAndTravel=The current department has been used by the leave and travel approval process data.
+department.noExistentOrAccess=Department does not exist or has no permission to view.
 # 日期相关
 date.dateNullError=Start date and end date cannot be blank.
 date.startDateError=Start date cannot be earlier than {0}.
@@ -158,6 +171,8 @@ profession.submitReplace={0} filled in the daily report for {1}.
 profession.alreadyNull=Daily report no longer exists
 profession.TypeError=Operation error, the daily report status is incorrect: {0}.
 profession.alreadyRevoke=The daily report has been canceled, and you cannot repeat the operation.
+profession.impProReject=The {1} project in the daily report you {0} imported was rejected by [{2}]. Reason: {3}, please import again.
+profession.fillProReject=The {1} project in the daily report you filled in by {0} was rejected by [{2}]. Reason: {3}.
 # 项目相关
 project.deleteErrorByProject=Failed to delete, bound item.
 project.deleteErrorByMaster=Failed to delete, the master project has been bound.
@@ -198,6 +213,9 @@ project.upSonSuc=Successfully updated "{0}" item sub table data.
 project.deleteDate=Successfully deleted '{0}' item data.
 project.masterError=Please set project leader for ["{0}"] project.
 project.alreadyRelation={0} is already associated with the following project: {1}
+project.storesReserve=Project preparation materials
+project.processDocuments=Project process documents
+project.deliverable=Project Deliverable
 # 供货相关
 provider.noRepeat=Vendor No. already exists.
 provider.classNameRepeat=The supplier name under this category already exists.
@@ -227,9 +245,49 @@ wx.synError=Synchronization failed: {0}.
 wx.noNewMemberUp=No new member updates
 wx.AssCompleted=Processing completed. Currently, no new personnel need WeChat identity of affiliated enterprises.
 wx.AssCompletedByParam=Processing completed. This time: {0} people are automatically associated:{1}.
+wx.noWXUser=Only enterprise WeChat users support this operation.
 #请假相关
+leave.leave=leave
+leave.leaveOfDay=Leave of the day
 leave.businessRepeat=There is already a travel application in this period, which cannot be submitted repeatedly.
 leave.repeatedLeave=There is already a leave application in this period, and you cannot ask for leave again.
+leave.busTra=business travel
+leave.people=Travelers
+leave.days=Travel days
+leave.details=Travel Details
+leave.vehicle=vehicle
+leave.startTime=Travel start time
+leave.endTime=End time of business trip
+leave.status=state
+leave.task=remarks
+leave.totalDays=Total travel days
+leave.to=to
+leave.plane=plane
+leave.train=train
+leave.car=car
+leave.ship=ship
+leave.other=other
+leave.travelDetails=Personnel travel details
+leave.travelStatistics=Personnel travel statistics
+leave.perForLeave=person for leave
+leave.telephone=Telephone
+leave.leaveType=Leave Type
+leave.LStartTime=Leave start time
+leave.LEndTime=End time of leave
+leave.LDays=Days of leave
+leave.duration=Leave duration
+leave.state=state
+leave.remark=remarks
+leave.thing=unpaid leave
+leave.illness=sick leave
+leave.year=annual leave
+leave.maternity=maternity leave
+leave.marry=Marriage leave
+leave.die=compassionate leave
+leave.compensatory=Compensatory leave
+leave.paternity=Paternity leave
+leave.notFill=Not filled in
+leave.clockIn=Clock in
 #报销相关
 Reimbursement.nameNull=The name of the reimbursement applicant cannot be blank.
 Reimbursement.costTypeNull=Expense type cannot be empty
@@ -240,6 +298,7 @@ Reimbursement.TypeError=The [{1}] type does not exist in the current expense typ
 salary.uploadErrorByAdopt={0} The monthly salary has been approved and cannot be uploaded.
 salary.lackAndUpAgain=The salary cost of ["{0}"] is missing, please modify the data and upload again.
 #报表相关
+report.report=report form
 report.userNull=User ["{0}"] does not exist in the financial statement, please import again.
 report.warningType=Cost budget with hour alert type has been set, and importing hours is not supported temporarily.
 report.data=Please fill in the working hour data.
@@ -248,16 +307,24 @@ report.dataNullError=Labor hour data cannot be empty.
 report.hoursZero={0} Work is zero, please check.
 report.typeErrorByHourAndSalary=The table format is incorrect. Two sheets of monthly man hours and monthly salary are required={0}.
 report.noExist={0} does not exist in the payroll, please check and submit.
+report.hourAll=You participated in {0} projects last week with a total of {1} hours. Among them, {2} hours for approval, {3} hours for approval and {4} hours for rejection.
+report.dailyReject=The {1} project in the daily report you filled in by {0} was rejected by [{2}]. Reason: {3}
+report.reportApp=Daily report approved
+report.hourReportNoFilled=Your work hour report for {0} has not been completed.
 #模板相关
 Template.AlreadyExists=The template name already exists.
 Template.lackSonProject=The sub item column is missing. Please download the latest template.
 Template.lackMasterRow=The main item column is missing. Please download the latest template.
 Template.lackDepartment=The department column is missing. Please download the latest template to import.
 Template.lackJobNumber=The job number column is missing. Please download the latest template to import.
+Template.creatProject=Created project
 Template.projectManage=project management
 Template.finishProject=completed the project
 Template.revokeProject=cancelled the project
+Template.restart=Restarted the project
+Template.projectSus=suspended the project
 #角色相关
+role.role=role
 role.noExist=The role does not exist
 role.deleteRootError=Cannot delete super administrator
 role.deleteErrorByDefault=This role is the default role when adding new employees. Please set other roles as default before attempting to delete
@@ -270,6 +337,7 @@ staff.workingHoursNull=The employee with job number "{0}" does not exist in the
 staff.deleteErrorByDaily=The employee has daily reports filled in and cannot be deleted.
 staff.deleteErrorByTask=The employee has a task and cannot be deleted.
 staff.deleteErrorByProject=The employee has a responsible project and cannot be deleted.
+staff.jobNoNull=The job number cannot be empty
 #数据相关
 data.importRepeat=Do not import duplicate data
 data.importSucRow=Successfully imported '{0}' pieces of data.
@@ -314,6 +382,9 @@ entry.contractNo=Contract No
 entry.projectType=Project classification
 entry.publicProject=Whether it is a public project
 entry.projectName=project name
+entry.groupName=Group Name
+entry.groupCharge=Group leader
+entry.groupPar=Group participants
 entry.sonProject=Subprojects(use,split)
 entry.Participants=Participants
 entry.projectManager=project manager
@@ -354,18 +425,91 @@ entry.create=create
 entry.editedTask=editedTask
 entry.task=the Task
 entry.copy=-copy
+entry.personnel=personnel
+entry.project=project
+entry.workHours=working hours
+entry.cost=cost
+entry.total=total
+entry.serialNo=Serial No
+entry.wages=wages
+entry.bonus=bonus
+entry.allowance=allowance
+entry.endowmentInsurance=endowment insurance
+entry.medicalInsurance=medical insurance
+entry.unemploymentInsurance=unemployment insurance
+entry.injuryInsurance=employment injury insurance
+entry.housingProvidentFund=Housing Provident Fund
+entry.totalCost=total cost
+entry.noProject=No project
+entry.taskName=Task Name
+entry.laborCost=Labor cost
+entry.creator=Creator
+entry.creDate=Creation Date
+entry.proLevel=Project level
+entry.proCate=Project category
+entry.totalBudget=Current total budget
+entry.curRemBud=Current remaining budget
+entry.totalRemBud=Total remaining budget
+entry.totalLaborCostIncurred=Total labor cost incurred
+entry.costBudget=Cost Budget
+entry.repCost=Reported cost
+entry.proFilledIn=Proportion filled in
+entry.GenProHours=General Project Hours
+entry.PubProHours=Public Project Hours
+entry.totalManHours=Total man hours
+entry.PubProHoursProp=Proportion of public project man hours
+entry.timely=timely
+entry.NoTimely=Not timely
+entry.SubTime=Submission time
+entry.quaAud=Quantity to be audited
+entry.noFill=Not filled
+entry.workingHours=Working hours
+entry.none=nothing
+entry.deviation=deviation
 #文件名
 fileName.financialCost={0}_ Financial Staff Cost Template
 fileName.projectImport={0}_ Project import Template
 fileName.resourceDemand=Resource demand statistics report_ {0}
 fileName.workHour=_ Personnel Hours Statistics Template {0} to {1}
+fileName.travelers=Export travel statistics_{0}
 fileName.reimburse=Expense Reimbursement import Template
 fileName.supplier=Supplier import Template
 fileName.people=Personnel import Template
 fileName.projectTask=Project task import Template
 fileName.customer=New customer import Template
 fileName.researchCenter=Research center import Template
+fileName.allocation=Employee  project allocation proportion import Template
 fileName.resImport=Resource demand import Template
+fileName.costStatistics=Personnel cost statistics_ {0}
+fileName.statistics={0} Statistics_ {1}
+fileName.depHours=Department Hours Statistics_ {0}
+fileName.costFinancialPersonnel=Cost of financial personnel_
+fileName.proClassCost=Classification cost of financial items_
+fileName.perSal=Personnel salary_
+fileName.leaveInfo=Leave information_
+fileName.projectCost=Project Cost Labor Hours Statistics_
+fileName.projectReport=Project Report_
+fileName.projectTaskSurface=Project Task Report_
+fileName.projectCostReport=Project Cost Report_
+fileName.profitSta=Project Balance Statement (Profit Statement)_
+fileName.cusPro=Customer Project Profit Statement_
+fileName.ProPeriodWork=Project Period Work Report_
+fileName.OvertimeSta=Overtime Statistics Report_
+fileName.proExport=Project export_
+fileName.proGroup=Project grouping_
+fileName.hourCostAlert=Hour Cost Alert_
+fileName.proClassLaborCost=Project Classification Labor Cost Statistics_
+fileName.perHoursAllSta=Personnel Hours Allocation Statistics_
+fileName.timePerFill=Statistics of timeliness rate of personnel filling_
+fileName.perReviewed=Statistics of personnel to be approved_
+fileName.perHoursSta=Personnel Hours Statistics_
+fileName.taskGroupHours=Task Grouping Work Statistics
+fileName.proTaskGroup=Work hour statistics of project task grouping
+fileName.hourCost =Hour cost statistics_
+fileName.supStat=Supplier statistics_
+fileName.dailyManHour=Daily man hour statistics_ {0} to {1}
+fileName.perNoFill=Personnel statistics not filled_
+fileName.laborHour=Labor hour comparison
 #excel
 excel.publicProject=Whether it is a public project
 excel.projectName=Project name is required
@@ -426,6 +570,7 @@ excel.milepost=milepost
 excel.risk=risk
 excel.integer=Integer without unit
 excel.plannedWork=Planned working hours (h)
+excel.actualWork=Actual working hours (h)
 excel.description=Detailed description
 excel.customerNo=Customer No
 excel.customerName=Customer Name
@@ -443,9 +588,114 @@ excel.market=market
 excel.technology=Technology Department
 excel.Marketing=Marketing Department
 excel.empStatistics=Employee hours statistics Template
-fileName.allocation=Employee  project allocation proportion import Template
+excel.permissions=_permissions
+excel.modular=modular
+excel.function=function
+excel.have=Yes No
+excel.remarks=remarks
+excel.charge=person in charge
+excel.projectAmount=Project amount
+excel.planStart=Planned start time
+excel.planEnd=Planned end time
+excel.degree=Degree of completion
+excel.genExp=General expenses
+excel.traExp=Travel expenses
+excel.OutExp=Outsourcing expenses
+excel.totalExp=Total expenses
+excel.profit=profit
+excel.profitMargin=profit margin
+excel.relatedPro=Related project
+excel.WorkHours=Working hours (h)
+excel.OvertimeWork=Overtime hours (h)
+excel.overtimeCost=overtime cost
+excel.lowRisk=Low risk
+excel.MedRisk=Medium risk
+excel.highRisk=high-risk
+excel.impData={0} Project data imported
+excel.planTime=Planned completion time
+excel.actualTime=Actual completion time
+excel.unclassified=Unclassified
+excel.timeFill=Timeliness rate of filling
+excel.propActualTime=Proportion of actual time
+excel.classification=classification
+excel.name=name
+excel.workReport=Daily work report
+excel.mainProName=Name of main project
+excel.sonProName=Name of subproject
+excel.assTask=Associated Tasks
+excel.hours= man-hour
+excel.workOvertime=work overtime
+excel.taskGroup=Task grouping
+excel.inputStage=Input stage
+excel.fillTime=Filling time
+excel.proReviewer=Project Reviewer
+excel.auditTime=Audit time
+excel.auditProcess=Audit process
+excel.workItems=Work items
+excel.auditStatus=Audit status
+excel.attDuration=Attendance duration
+excel.staNormal=Normal status
+excel.atRisk=Being risk
+excel.overduePro=Overdue progress
+excel.taskTitle=Task Title
+excel.taskData=Task data
+excel.creatTime=Creation time
+excel.deadline=deadline
+excel.comTime=Completion time
+excel.whetherCom=Whether it is completed
+excel.overdueNot=Overdue or not
+excel.allPeopleList=All Employees List
+excel.MonSalary=a monthly salary
+excel.hourlyWage=hourly wage
+excel.certificate=certificate
+excel.peopleList=Employee List
+excel.perList=Personnel list
+excel.Filled=Filled
+excel.notFilled=Not filled
 #推送
 push.fillIn=Your work hour report for today has not been completed.
 push.name=Qu Yue ting
 push.Dep=Marketing Department
-push.ASAP=Please fill in as soon as possible.
+push.ASAP=Please fill in as soon as possible.
+#阶段
+stages.engineering=engineering design
+stages.research=Software and hardware R&D
+stages.service=Customer service work order processing
+stages.infoCollect=information gathering
+stages.plan=plan
+stages.proDrawing=Prototype drawing
+stages.designSketch=design sketch
+stages.underReview=Under review
+stages.modify=Modify Adjustment
+stages.complete=complete
+stages.requirement=requirement analysis
+stages.design=Under design
+stages.development=Under development
+stages.test=Under test
+stages.BUG=Modify BUG
+stages.release=Published
+stages.userPro=User Questions
+stages.inSettlement=In settlement
+stages.resolved=resolved
+stages.feedbackAndProblem=Feedback to users&problem solving
+stages.approved=Approved
+stages.reviewed=To be reviewed
+stages.reject=reject
+stages.withdrawn=Withdrawn
+stages.passed=Passed
+stages.toBeSub=To be submitted
+stages.upTask=Update task progress to
+#统计表
+Statistics.tj=Statistics
+Statistics.OvertimeDet=Overtime Details
+Statistics.ByPro=Statistics by project
+Statistics.ByPeople=Statistics by personnel
+Statistics.ProjectCostBase=Project Cost Baseline Table_
+#星期
+week.Monday=Monday
+week.Tuesday=Tuesday
+week.Wednesday=Wednesday
+week.Thursday=Thursday
+week.Friday=Friday
+week.Saturday=Saturday
+week.Sunday=Sunday

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

@@ -550,6 +550,24 @@
         </if>
         GROUP BY project_id, report.creator_id;
     </select>
+
+    <select id="getUploadThirdReportData" resultType="java.util.Map">
+        select IFNULL(p.project_code,'其他') as projectCode,IFNULL(tg.task_group_code,'其他')as taskGroupCode,DATE_FORMAT(r.create_date, '%Y') as ofyear,
+        DATE_FORMAT(r.create_date, '%m') as ofmonth,u.name as userName,u.job_number as jobNumber,d.department_name as departmentName,SUM(r.cost) as cost
+        from report r
+        left join project p  on p.id=r.project_id
+        left join task_group tg on tg.project_id=p.id and  r.group_id=tg.id
+        left join user u on u.id=r.creator_id
+        left join department d on d.department_id=u.department_id
+        where p.company_id=#{companyId}
+        <if test="startDate != null">
+            AND r.create_date &gt;= #{startDate}
+        </if>
+        <if test="endDate != null">
+            AND r.create_date &lt; #{endDate}
+        </if>
+        group by p.id,u.id,tg.id
+    </select>
     <select id="getReportFillStatus" resultType="java.util.Map">
         SELECT DATE_FORMAT(create_date,'%Y-%m-%d') as createDate, MAX(state) AS state FROM report
         WHERE create_date BETWEEN #{startDate} AND #{endDate} AND creator_id = #{userId} GROUP BY create_date

Diff do ficheiro suprimidas por serem muito extensas
+ 3 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/TimeTypeMapper.xml


Diff do ficheiro suprimidas por serem muito extensas
+ 1397 - 10200
fhKeeper/formulahousekeeper/management-platform/workTime.log


+ 1 - 0
fhKeeper/formulahousekeeper/timesheet/src/views/team/index.vue

@@ -1088,6 +1088,7 @@ export default {
               message: '同步成功',
               type: "success",
             });
+            this.getDepartment();
             this.getUser();
             this.getUsers();
           } else {