Explorar o código

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

# Conflicts:
#	fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/ProjectService.java
#	fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java
seyason %!s(int64=2) %!d(string=hai) anos
pai
achega
f81a062b4c

+ 3 - 3
fhKeeper/formulahousekeeper/inva_4_tivo/index.html

@@ -3,9 +3,9 @@
 <head>
     <meta charset="utf-8">
     <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
-    <meta name="keywords" content="工时管理,项目成本管理,工时统计,项目成本统计,工时记录表,工时统计表," />
-    <meta name="description" content="工时管家是专业的工时管理软件,提供专业的工时填报,审核和统计功能。引进现代工时管理和项目管理的理念,核算项目投入成本准确便捷,企业IPO利器"/>
-    <title>工时管理|工时记录表|项目成本管理-工时管家是强大易用的工时管理系统。工时填报|工时统计|手机移动填报|核算项目成本|企业IPO利器!</title>
+    <meta name="keywords" content="工时管理,项目工时管理,项目成本管理,工时统计,项目成本统计,工时记录表,工时统计表" />
+    <meta name="description" content="工时管家是专业的工时管理和项目管理软件。提供工时填报,审核和工时统计功能。引进现代工时管理和项目管理的理念,核算项目投入成本准确便捷,企业IPO项目成本分摊好帮手"/>
+    <title>工时管理|工时记录表|项目成本管理-工时管家是强大易用的项目工时管理系统。工时填报|工时统计|手机移动填报|核算项目成本|企业IPO利器!</title>
 	<link href="css/styles.css" rel="stylesheet">
     <!-- <link href="css/bootstrap.css" rel="stylesheet"> -->
     <link rel="stylesheet" href="./css/reset.css">

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

@@ -5,8 +5,10 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.management.platform.entity.Company;
 import com.management.platform.entity.Project;
 import com.management.platform.entity.ProviderCategory;
+import com.management.platform.entity.TimeType;
 import com.management.platform.mapper.CompanyMapper;
 import com.management.platform.mapper.ProviderCategoryMapper;
+import com.management.platform.mapper.TimeTypeMapper;
 import com.management.platform.service.ProjectService;
 import com.management.platform.util.HttpRespMsg;
 import org.apache.poi.hssf.usermodel.*;
@@ -51,6 +53,8 @@ public class ProjectController {
     private CompanyMapper companyMapper;
     @Resource
     private ProviderCategoryMapper providerCategoryMapper;
+    @Resource
+    private TimeTypeMapper timeTypeMapper;
 
     /**
      * 获取我参与的全部项目的负责人列表
@@ -560,11 +564,16 @@ public class ProjectController {
         Company company = companyMapper.selectById(companyId);
         List<ProviderCategory> providerCategoryList = providerCategoryMapper.selectList(new QueryWrapper<ProviderCategory>().eq("company_id", companyId));
         List<String> collect = providerCategoryList.stream().distinct().map(pc -> pc.getProviderCategoryName()).collect(Collectors.toList());
+        TimeType timeType = timeTypeMapper.selectById(companyId);
         heads.add("项目编号");
         heads.add("项目分类");
         heads.add("是否为公共项目");
         heads.add("项目名称");
-        heads.add("子项目(多个用,隔开)");
+        if(timeType.getMainProjectState()==1){
+            heads.add("主项目");
+        }else {
+            heads.add("子项目(多个用,隔开)");
+        }
         heads.add("参与人");
         heads.add("主要负责人");
         heads.add("级别");
@@ -798,5 +807,9 @@ public class ProjectController {
         return msg;
 //        return "";
     }
+    @RequestMapping("/getUserWorkingTimeStatic")
+    public HttpRespMsg getUserWorkingTimeStatic(String startDate,String endDate,Integer pageIndex,Integer pageSize,String userId,Integer departmentId){
+        return projectService.getUserWorkingTimeStatic(startDate,endDate,pageIndex,pageSize,request,userId,departmentId);
+    }
 }
 

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

@@ -103,4 +103,8 @@ public interface ProjectMapper extends BaseMapper<Project> {
 
     @Update("update project set status=4 where id=#{id}")
     void suspendProject(Integer id);
+
+    List<Map<String, Object>> getUserWorkingTimeStatic(String startDate, String endDate, Integer pageIndex, Integer pageSize, String userId, Integer departmentId, List<Integer> deptIds);
+
+    long findCountWithUserWorkingTime(String startDate, String endDate, Integer pageIndex, Integer pageSize, String userId, Integer departmentId, List<Integer> deptIds);
 }

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

@@ -150,6 +150,6 @@ public interface ProjectService extends IService<Project> {
     HttpRespMsg batchSetParticipation(HttpServletRequest request,String projectIdArray , String userIds);
 
     HttpRespMsg suspendProject(Integer id);
+	HttpRespMsg getUserWorkingTimeStatic(String startDate, String endDate, Integer pageIndex, Integer pageSize, HttpServletRequest request,String userId,Integer departmentId);
 
-    HttpRespMsg batchDeleteProject(String projectIdArray, HttpServletRequest request);
-}
+	HttpRespMsg batchDeleteProject(String projectIdArray, HttpServletRequest request);}

+ 85 - 20
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java

@@ -136,6 +136,8 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
     ProviderCategoryMapper providerCategoryMapper;
     @Resource
     ProviderInfoMapper providerInfoMapper;
+    @Resource
+    ProjectMainMapper projectMainMapper;
 
     @Resource
     private HttpServletResponse response;
@@ -2432,6 +2434,9 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                 List<CustomerInfo> customerInfoList = customerInfoMapper.selectList(new QueryWrapper<CustomerInfo>().eq("company_id", user.getCompanyId()));
                 //获取全部供货商
                 List<ProviderInfo> providerInfoList = providerInfoMapper.selectList(new QueryWrapper<ProviderInfo>().eq("company_id", user.getCompanyId()));
+                //获取主项目
+                List<ProjectMain> projectMainList = projectMainMapper.selectList(new QueryWrapper<ProjectMain>().eq("company_id", user.getCompanyId()));
+                TimeType timeType = timeTypeMapper.selectById(company.getId());
                 List<Project> projectList = new ArrayList<Project>();
                 //由于第一行需要指明列对应的标题
                 int rowNum = sheet.getLastRowNum();
@@ -2459,7 +2464,13 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                     HSSFCell categoryCell = row.getCell(1);
                     HSSFCell isPublicCell = row.getCell(2);
                     HSSFCell nameCell = row.getCell(3);
-                    HSSFCell subNameCell = row.getCell(4);
+                    HSSFCell subNameCell=null;
+                    HSSFCell mainNameCell=null;
+                    if(timeType.getMainProjectState()==1){
+                        mainNameCell = row.getCell(4);
+                    }else {
+                        subNameCell = row.getCell(4);
+                    }
                     HSSFCell participatorCell = row.getCell(5);
                     HSSFCell inchargerCell = row.getCell(6);
                     HSSFCell levelCell = row.getCell(7);
@@ -2487,6 +2498,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                     if (categoryCell != null)categoryCell.setCellType(CellType.STRING);
                     if (isPublicCell != null)isPublicCell.setCellType(CellType.STRING);
                     if (subNameCell != null)subNameCell.setCellType(CellType.STRING);
+                    if (mainNameCell != null)mainNameCell.setCellType(CellType.STRING);
                     if (participatorCell != null)participatorCell.setCellType(CellType.STRING);
                     if (inchargerCell != null)inchargerCell.setCellType(CellType.STRING);
                     if (levelCell != null)levelCell.setCellType(CellType.STRING);
@@ -2502,9 +2514,13 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                         String code = codeCell.getStringCellValue().trim().replaceAll("\\u00a0", "");
                         if (code.equals("项目编号") && rowIndex == 0) {
                             //检查是否有子项目列
-                            if (!subNameCell.getStringCellValue().trim().startsWith("子项目")) {
+                            if (subNameCell!=null&&!subNameCell.getStringCellValue().trim().startsWith("子项目")&&timeType.getMainProjectState()!=1) {
                                 throw new Exception("缺少子项目列,请下载最新模板");
                             }
+                            //检查是否有主项目列
+                            if (mainNameCell!=null&&!mainNameCell.getStringCellValue().trim().startsWith("主项目")&&timeType.getMainProjectState()==1) {
+                                throw new Exception("缺少主项目列,请下载最新模板");
+                            }
                             //跳过第一行标题
                             continue;
                         }
@@ -2634,6 +2650,40 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                     if (isPublicCell != null && !StringUtils.isEmpty(isPublicCell.getStringCellValue())) {
                         project.setIsPublic("是".equals(isPublicCell.getStringCellValue())?1:0);
                     }
+                    if(timeType.getMainProjectState()!=1){
+                        //处理子项目
+                        if (subNameCell != null) {
+                            //兼容中英文逗号
+                            String[] subNames = subNameCell.getStringCellValue().trim().split(",|\\,");
+                            if (subNames != null) {
+                                for (String s : subNames) {
+                                    if (!StringUtils.isEmpty(s)) {
+                                        SubProject sp = new SubProject();
+                                        sp.setName(s);
+                                        sp.setProjectId(project.getId());
+                                        subProjectMapper.insert(sp);
+                                    }
+                                }
+                            }
+                        }
+                    }else {
+                        //处理主项目
+                        if (mainNameCell != null) {
+                            //兼容中英文逗号
+                            String mainName = mainNameCell.getStringCellValue();
+                            if (mainName != null) {
+                                    if (!StringUtils.isEmpty(mainName)) {
+                                        Optional<ProjectMain> first = projectMainList.stream().filter(pm -> pm.getName().equals(mainName)).findFirst();
+                                        if(first.isPresent()){
+                                            project.setProjectMainId(first.get().getId());
+                                        }else {
+                                            msg.setError("主项目["+mainName+"]不存在");
+                                            return msg;
+                                        }
+                                    }
+                            }
+                        }
+                    }
                     if(projectMapper.insert(project)>0){
                         ProjectAuditor projectAuditor=new ProjectAuditor();
                         projectAuditor.setAuditorId(project.getInchargerId());
@@ -2642,21 +2692,6 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                         projectAuditorMapper.insert(projectAuditor);
                     }
                     importCount++;
-                    //处理子项目
-                    if (subNameCell != null) {
-                        //兼容中英文逗号
-                        String[] subNames = subNameCell.getStringCellValue().trim().split(",|\\,");
-                        if (subNames != null) {
-                            for (String s : subNames) {
-                                if (!StringUtils.isEmpty(s)) {
-                                    SubProject sp = new SubProject();
-                                    sp.setName(s);
-                                    sp.setProjectId(project.getId());
-                                    subProjectMapper.insert(sp);
-                                }
-                            }
-                        }
-                    }
                     //参与人
                     if (participatorCell != null) {
                         String part = participatorCell.getStringCellValue().trim();
@@ -4021,7 +4056,38 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
         return new HttpRespMsg();
     }
 
-    @Override
+	@Override
+    public HttpRespMsg getUserWorkingTimeStatic(String startDate, String endDate, Integer pageIndex, Integer pageSize, HttpServletRequest request,String userId,Integer departmentId) {
+        User targetUser = userMapper.selectById(request.getHeader("token"));
+        List<SysRichFunction> functionAllList = sysFunctionMapper.getRoleFunctions(targetUser.getRoleId(), "查看全部人员工时统计");
+        List<SysRichFunction> functionDeptList = sysFunctionMapper.getRoleFunctions(targetUser.getRoleId(), "查看负责部门人员工时统计");
+        List<Integer> deptIds=null;
+        List<Department> userDepartmentList = departmentMapper.selectList(new QueryWrapper<Department>().eq("manager_id", targetUser.getId()).eq("company_id",targetUser.getCompanyId()));
+        //判断查看权限
+        if(functionAllList.size()==0){
+            if(functionDeptList.size()>0){
+                deptIds = userDepartmentList.stream().map(dp -> dp.getDepartmentId()).distinct().collect(Collectors.toList());
+            }else {
+                deptIds=new ArrayList<>();
+                deptIds.add(-1);
+            }
+        }
+        long total;
+        List<Map<String,Object>> resultList=projectMapper.getUserWorkingTimeStatic(startDate,endDate,pageIndex,pageSize,userId,departmentId,deptIds);
+        if(pageIndex!=null&&pageSize!=null){
+            total=projectMapper.findCountWithUserWorkingTime(startDate,endDate,pageIndex,pageSize,userId,departmentId,deptIds);
+        }else{
+            total=projectMapper.findCountWithUserWorkingTime(startDate,endDate,null,null,userId,departmentId,deptIds);
+        }
+        Map<String,Object> map=new HashMap<>();
+        map.put("result",resultList);
+        map.put("total",total);
+        return null;
+    }
+
+
+
+	@Override
     public HttpRespMsg batchDeleteProject(String projectIdArray, HttpServletRequest request) {
         String token = request.getHeader("TOKEN");
         User user = userMapper.selectById(token);
@@ -4038,12 +4104,11 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                 deleteProData(id);
             }
         }
-
         return httpRespMsg;
     }
 
 
-    private List<Department> getSubDepts(Department dp, List<Department> list) {
+	private List<Department> getSubDepts(Department dp, List<Department> list) {
         List<Department> collect = list.stream().filter(l -> dp.getDepartmentId().equals(l.getSuperiorId())).collect(Collectors.toList());
         List<Department> allList = new ArrayList<>();
         allList.addAll(collect);

+ 4 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ProjectMapper.xml

@@ -741,4 +741,8 @@
             limit #{start},#{size}
         </if>) total
     </select>
+
+    <select id="getUserWorkingTimeStatic" resultType="java.util.Map">
+
+    </select>
 </mapper>

BIN=BIN
fhKeeper/formulahousekeeper/management-platform/项目导入模板.xlsx


+ 10 - 10
fhKeeper/formulahousekeeper/timesheet/config/index.js

@@ -2,17 +2,17 @@ var path = require('path')
 
 //  var ip = '127.0.0.1'
 // var ip = '47.101.180.183'
-var ip = '192.168.2.7'
+// var ip = '192.168.2.7'
 
-// var os = require('os'), ip = '', ifaces = os.networkInterfaces() // 获取本机ip
-// for (var i in ifaces) {
-//     for (var j in ifaces[i]) {
-//         var val = ifaces[i][j]
-//         if (val.family === 'IPv4' && val.address !== '127.0.0.1') {
-//             ip = val.address
-//         }
-//     }
-// }
+var os = require('os'), ip = '', ifaces = os.networkInterfaces() // 获取本机ip
+for (var i in ifaces) {
+    for (var j in ifaces[i]) {
+        var val = ifaces[i][j]
+        if (val.family === 'IPv4' && val.address !== '127.0.0.1') {
+            ip = val.address
+        }
+    }
+}
 
 module.exports = {
   build: {

+ 1 - 1
fhKeeper/formulahousekeeper/timesheet/src/views/awayOffice/awayOffice.vue

@@ -576,7 +576,7 @@
                     placeholder="请选择日期"></el-date-picker>
                 </el-form-item><br>
                 <el-form-item label="关联项目" prop="projectId">
-                    <el-select v-model="relationItem.projectId" placeholder="请选择项目" @change="getwuduList(2)" style="width:220px">
+                    <el-select v-model="relationItem.projectId" placeholder="请选择项目" @change="getwuduList(2)" style="width:220px" filterable>
                         <el-option
                         v-for="item in projectList"
                         :key="item.id"

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

@@ -74,7 +74,7 @@
                                 </el-upload>
                             </el-dropdown-item>
                             <el-dropdown-item v-if="permissions.projectImport">
-                                <el-link type="primary" :underline="false" @click="downloadmb" v-if="user.company.packageCustomer == 1 || user.company.packageProvider == 1">模板下载</el-link>
+                                <el-link type="primary" :underline="false" @click="downloadmb" v-if="user.company.packageCustomer == 1 || user.company.packageProvider == 1 || user.timeType.mainProjectState == 1">模板下载</el-link>
                                 <el-link type="primary" :underline="false" href="./upload/项目导入模板.xlsx" download="项目导入模板.xlsx" v-else>模板下载</el-link>
                             </el-dropdown-item>
                             <el-dropdown-item v-if="permissions.projectExport">