Browse Source

项目工时成本 主项目统计 项目下分组统计
自定义费用报销
工时日报修改
自定义项修改

yurk 2 years ago
parent
commit
63ca8cb5d0
25 changed files with 738 additions and 46 deletions
  1. 3 3
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/constant/Constant.java
  2. 58 2
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/CompanyController.java
  3. 68 2
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ExpenseTypeController.java
  4. 17 5
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ProjectCategoryController.java
  5. 27 3
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ProjectController.java
  6. 11 14
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ReportExtraDegreeController.java
  7. 43 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/WeiXinCorpController.java
  8. 11 4
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/ExpenseType.java
  9. 7 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/ReportExtraDegree.java
  10. 1 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/TimeType.java
  11. 5 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/ProjectMapper.java
  12. 6 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/ProjectService.java
  13. 45 4
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/DingDingServiceImpl.java
  14. 180 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java
  15. 19 3
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java
  16. 43 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/UserServiceImpl.java
  17. 2 1
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ExpenseTypeMapper.xml
  18. 44 0
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ProjectMapper.xml
  19. 3 2
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ReportExtraDegreeMapper.xml
  20. 21 0
      src/main/java/com/management/platform/controller/ExpenseTypeController.java
  21. 54 0
      src/main/java/com/management/platform/entity/ExpenseType.java
  22. 16 0
      src/main/java/com/management/platform/mapper/ExpenseTypeMapper.java
  23. 16 0
      src/main/java/com/management/platform/service/ExpenseTypeService.java
  24. 20 0
      src/main/java/com/management/platform/service/impl/ExpenseTypeServiceImpl.java
  25. 18 0
      src/main/resources/mapper/ExpenseTypeMapper.xml

+ 3 - 3
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/constant/Constant.java

@@ -2,9 +2,6 @@ package com.management.platform.constant;
 
 import org.springframework.stereotype.Component;
 
-import java.util.ArrayList;
-import java.util.List;
-
 /**
  * Author: 吴涛涛
  * Date : 2019 - 07 - 24 16:00
@@ -37,4 +34,7 @@ public class Constant {
     public static final String[] DEFAULT_BASE_COST_ITEMS = {"人工成本","一般费用","外包费用","其他"};
 
     public static final String[] LEAVE_TYPES = {"事假","病假","年假","产假","婚假","丧假","调休假","陪产假","其他"};
+
+    public static final String[] EXPENSE_TYPES = {"材料费","办公用品","培训费","打印费","快递费","制作费","律师费","水费","电费","团建费","其他",
+                                        "城市间交通费","住宿费","伙食补助费","市内交通费","其他差旅费","项目外包费","劳务外包费","其他外包费"};
 }

+ 58 - 2
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/CompanyController.java

@@ -2,14 +2,15 @@ package com.management.platform.controller;
 
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.management.platform.constant.Constant;
 import com.management.platform.entity.CompanyDingding;
+import com.management.platform.entity.ExpenseType;
 import com.management.platform.entity.User;
-import com.management.platform.entity.vo.UserMonthWork;
 import com.management.platform.mapper.CompanyDingdingMapper;
 import com.management.platform.mapper.UserMapper;
-import com.management.platform.service.CompanyDingdingService;
 import com.management.platform.service.CompanyService;
 import com.management.platform.service.DingDingService;
+import com.management.platform.service.ExpenseTypeService;
 import com.management.platform.util.HttpRespMsg;
 import com.taobao.api.ApiException;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -17,7 +18,9 @@ import org.springframework.web.bind.annotation.RestController;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
+import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.List;
 
 /**
  * <p>
@@ -41,6 +44,9 @@ public class CompanyController {
     private UserMapper userMapper;
     @Resource
     private CompanyDingdingMapper companyDingdingMapper;
+    @Resource
+    private ExpenseTypeService expenseTypeService;
+
     public static final HashMap<String, Long> syncLog = new HashMap();
 
 
@@ -105,6 +111,56 @@ public class CompanyController {
             return msg;
         }
     }
+    @RequestMapping("/settingExpenseType")
+    public HttpRespMsg settingExpenseType(){
+        HttpRespMsg httpRespMsg=new HttpRespMsg();
+        User user = userMapper.selectById(request.getHeader("token"));
+        //生成费用报销默认条目
+        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("其他");
+        List<String> travel  = new ArrayList<>();
+        travel.add("城市间交通费");
+        travel.add("住宿费");
+        travel.add("伙食补助费");
+        travel.add("市内交通费");
+        travel.add("其他差旅费");
+        List<String> outsource = new ArrayList<>();
+        outsource.add("项目外包费");
+        outsource.add("劳务外包费");
+        outsource.add("其他外包费");
+        List<ExpenseType> expenseTypeList=new ArrayList<>();
+        for (String expenseType : expenseTypes) {
+            ExpenseType item=new ExpenseType();
+            item.setCompanyId(user.getCompanyId());
+            item.setTypeName(expenseType);
+            if(commonly.contains(expenseType)){
+                item.setMainType(0);
+            }
+            if(travel.contains(expenseType)){
+                item.setMainType(1);
+            }
+            if(outsource.contains(expenseType)){
+                item.setMainType(2);
+            }
+            expenseTypeList.add(item);
+        }
+        if(!expenseTypeService.saveBatch(expenseTypeList)){
+            httpRespMsg.setError("验证失败");
+            return httpRespMsg;
+        }
+        return httpRespMsg;
+    }
 
 }
 

+ 68 - 2
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ExpenseTypeController.java

@@ -2,14 +2,19 @@ package com.management.platform.controller;
 
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.management.platform.entity.ExpenseItem;
 import com.management.platform.entity.ExpenseType;
+import com.management.platform.entity.User;
+import com.management.platform.mapper.ExpenseItemMapper;
 import com.management.platform.mapper.ExpenseTypeMapper;
+import com.management.platform.mapper.UserMapper;
 import com.management.platform.util.HttpRespMsg;
+import org.springframework.util.StringUtils;
 import org.springframework.web.bind.annotation.RequestMapping;
-
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
 
 /**
  * <p>
@@ -24,11 +29,72 @@ import javax.annotation.Resource;
 public class ExpenseTypeController {
     @Resource
     private ExpenseTypeMapper expenseTypeMapper;
+    @Resource
+    private UserMapper userMapper;
+    @Resource
+    private HttpServletRequest request;
+    @Resource
+    private ExpenseItemMapper expenseItemMapper;
 
     @RequestMapping("/getList")
     public HttpRespMsg getList() {
+        User user = userMapper.selectById(request.getHeader("token"));
+        HttpRespMsg msg = new HttpRespMsg();
+        msg.data=expenseTypeMapper.selectList(new QueryWrapper<ExpenseType>().eq("company_id",user.getCompanyId()));
+        return msg;
+    }
+
+    @RequestMapping("/addOrMod")
+    public HttpRespMsg addOrMod(ExpenseType setting) {
         HttpRespMsg msg = new HttpRespMsg();
-        msg.data = expenseTypeMapper.selectList(new QueryWrapper<>());
+        if (StringUtils.isEmpty(setting.getTypeName())) {
+            msg.setError("名称不能为空");
+            return msg;
+        }
+        Integer companyId = userMapper.selectById(request.getHeader("TOKEN")).getCompanyId();
+        if (setting.getId() == null) {
+            setting.setCompanyId(companyId);
+            int count = expenseTypeMapper.selectCount(new QueryWrapper<ExpenseType>().eq("type_name", setting.getTypeName()).eq("company_id", setting.getCompanyId()));
+            if (count > 0) {
+                msg.setError("该名称已存在");
+            } else {
+                expenseTypeMapper.insert(setting);
+                msg.data = expenseTypeMapper.selectList(new QueryWrapper<ExpenseType>().eq("company_id", companyId));
+            }
+        } else {
+            int count = expenseTypeMapper.selectCount(new QueryWrapper<ExpenseType>().eq("type_name", setting.getTypeName())
+                    .eq("company_id", companyId).ne("id", setting.getId()));
+            if (count > 0) {
+                msg.setError("该名称已存在");
+            } else {
+                //检查名称是否有变化
+                ExpenseType oldSetting = expenseTypeMapper.selectById(setting.getId());
+                if (!setting.getTypeName().equals(oldSetting.getTypeName())) {
+                    expenseTypeMapper.updateById(setting);
+                }
+                msg.data = expenseTypeMapper.selectList(new QueryWrapper<ExpenseType>().eq("company_id", companyId));
+            }
+        }
+
+        return msg;
+    }
+
+    @RequestMapping("/delete")
+    public HttpRespMsg delete(Integer id) {
+        HttpRespMsg msg = new HttpRespMsg();
+        ExpenseType expenseType = expenseTypeMapper.selectById(id);
+        Integer companyId = userMapper.selectById(request.getHeader("TOKEN")).getCompanyId();
+        Integer cut = expenseItemMapper.selectCount(new QueryWrapper<ExpenseItem>().eq("expense_type", expenseType.getTypeName()));
+        if(cut>0){
+            msg.setError("删除失败,已绑定费用报销数据");
+            return msg;
+        }
+        if (!expenseType.getCompanyId().equals(companyId)) {
+            msg.setError("无权操作");
+        } else {
+            expenseTypeMapper.deleteById(id);
+        }
+
         return msg;
     }
 

+ 17 - 5
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ProjectCategoryController.java

@@ -3,14 +3,15 @@ package com.management.platform.controller;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.management.platform.entity.Project;
-import com.management.platform.entity.ProjectBasecost;
 import com.management.platform.entity.ProjectCategory;
-import com.management.platform.entity.ProjectCategory;
-import com.management.platform.mapper.*;
+import com.management.platform.entity.ProjectMain;
+import com.management.platform.mapper.ProjectCategoryMapper;
+import com.management.platform.mapper.ProjectMainMapper;
+import com.management.platform.mapper.ProjectMapper;
+import com.management.platform.mapper.UserMapper;
 import com.management.platform.util.HttpRespMsg;
 import org.springframework.util.StringUtils;
 import org.springframework.web.bind.annotation.RequestMapping;
-
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.annotation.Resource;
@@ -35,6 +36,8 @@ public class ProjectCategoryController {
     UserMapper userMapper;
     @Resource
     ProjectCategoryMapper projectCategoryMapper;
+    @Resource
+    ProjectMainMapper projectMainMapper;
 
     @Resource
     ProjectMapper projectMapper;
@@ -93,12 +96,21 @@ public class ProjectCategoryController {
         HttpRespMsg msg = new HttpRespMsg();
         ProjectCategory ProjectCategory = projectCategoryMapper.selectById(id);
         Integer companyId = userMapper.selectById(request.getHeader("TOKEN")).getCompanyId();
+        Integer cut = projectMapper.selectCount(new QueryWrapper<Project>().eq("category", id));
+        Integer cnt = projectMainMapper.selectCount(new QueryWrapper<ProjectMain>().eq("category_id", id));
+        if(cut>0){
+            msg.setError("删除失败,已绑定项目");
+            return msg;
+        }
+        if(cnt>0){
+            msg.setError("删除失败,已绑定主项目");
+            return msg;
+        }
         if (!ProjectCategory.getCompanyId().equals(companyId)) {
             msg.setError("无权操作");
         } else {
             projectCategoryMapper.deleteById(id);
         }
-
         return msg;
     }
 

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

@@ -187,6 +187,14 @@ public class ProjectController {
         return projectService.getTimeCost(startDate, endDate, userId, request);
     }
 
+    /**
+     * 获取查询者所在公司每个主项目的工时成本
+     */
+    @RequestMapping("/getTimeCostByMainProject")
+    public HttpRespMsg getTimeCostByMainProject(String startDate, String endDate, String userId) {
+        return projectService.getTimeCostByMainProject(startDate, endDate, userId, request);
+    }
+
     /**
      * 获取查询者所在公司每个项目分类的工时成本
      */
@@ -245,6 +253,18 @@ public class ProjectController {
         return projectService.getCostInStage(startDate, endDate, id, request);
     }
 
+    /**
+     * 获取项目内的任务分组汇总统计工时成本
+     * @param startDate
+     * @param endDate
+     * @param id 项目id
+     * @return
+     */
+    @RequestMapping("/getCostByGroup")
+    public HttpRespMsg getCostByGroup(String startDate, String endDate, @RequestParam Integer id) {
+        return projectService.getCostByGroup(startDate, endDate, id, request);
+    }
+
     @RequestMapping("/getAllMembCost")
     public HttpRespMsg getAllMembCost(String startDate, String endDate, Integer id) {
         return projectService.getAllMembCost(startDate, endDate, id, request);
@@ -579,7 +599,7 @@ public class ProjectController {
             heads.add("子项目(多个用,隔开)");
         }
         heads.add("参与人");
-        heads.add("主要负责人");
+        heads.add("项目经理");
         heads.add("级别");
         if(company.getPackageCustomer()==1){
             heads.add("客户");
@@ -769,10 +789,10 @@ public class ProjectController {
                                     comment.setString(new HSSFRichTextString("多个参与人使用中文逗号(,)隔开"));
                                     cell.setCellComment(comment);
                                     break;
-                                case "主要负责人":
+                                case "项目经理":
                                     comment = drawing.createCellComment(anchor);
                                     // 输入批注信息
-                                    comment.setString(new HSSFRichTextString("负责人需存在于参与人中"));
+                                    comment.setString(new HSSFRichTextString("项目经理需存在于参与人中"));
                                     cell.setCellComment(comment);
                                     break;
                                 case "开始日期":
@@ -831,5 +851,9 @@ public class ProjectController {
     public HttpRespMsg modifyContract(Integer projectId,Double oldContractAmount,Double newContractAmount,String reason,HttpServletRequest request){
         return projectService.modifyContract(projectId,oldContractAmount,newContractAmount,reason,request);
     }
+    @RequestMapping("/getTimeCostByGroup")
+    public HttpRespMsg getTimeCostByGroup(String startDate,String endDate,Integer pageIndex,Integer pageSize,Integer groupId,Integer projectId){
+        return projectService.getTimeCostByGroup(startDate,endDate,pageIndex,pageSize,groupId,projectId);
+    }
 }
 

+ 11 - 14
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ReportExtraDegreeController.java

@@ -64,25 +64,23 @@ public class ReportExtraDegreeController {
         HttpRespMsg msg = new HttpRespMsg();
         String token = request.getHeader("TOKEN");
         User user = userMapper.selectById(token);
-        List<ReportExtraDegree> reportExtraDegreeMapperAll = reportExtraDegreeMapper.getAll(user.getCompanyId());
         TimeType timeType = timeTypeMapper.selectById(user.getCompanyId());
-        List<String> nameList=new ArrayList<>();
-        reportExtraDegreeMapperAll.forEach(re->{
-            nameList.add(re.getName());
-        });
-        if(nameList.contains(info.getName())){
-            msg.setError(timeType.getCustomDegreeName()+"名称重复");
-            return msg;
-        }
         if (info.getId() == null) {
+            info.setCompanyId(user.getCompanyId());
+            int cut = reportExtraDegreeMapper.selectCount(new QueryWrapper<ReportExtraDegree>().eq("name",info.getName()));
+            if(cut>0){
+                msg.setError(timeType.getCustomDegreeName()+"名称重复");
+                return msg;
+            }
             info.setCompanyId(user.getCompanyId());
             reportExtraDegreeMapper.insert(info);
         } else {
-            info.setCompanyId(user.getCompanyId());
+            int cut = reportExtraDegreeMapper.selectCount(new QueryWrapper<ReportExtraDegree>().eq("name",info.getName()).ne("id",info.getId()));
+            if(cut>0){
+                msg.setError(timeType.getCustomDegreeName()+"名称重复");
+                return msg;
+            }
             //检查名字是否发生变化
-            ReportExtraDegree reportExtraDegree = reportExtraDegreeMapper.selectById(info.getId());
-            if (!reportExtraDegree.getName().equals(info.getName())) {
-                //检查是否已经被使用
                 int id = info.getId();
                 List<Project> existsProjects = projectMapper.selectList(new QueryWrapper<Project>()
                         .eq("company_id", user.getCompanyId())
@@ -111,7 +109,6 @@ public class ReportExtraDegreeController {
                     projectService.updateBatchById(updateList);
                 }
                 reportExtraDegreeMapper.updateById(info);
-            }
         }
         return msg;
     }

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

@@ -111,6 +111,8 @@ public class WeiXinCorpController {
     SysRoleModuleMapper sysRoleModuleMapper;
     @Resource
     SysRoleFunctionMapper sysRoleFunctionMapper;
+    @Resource
+    ExpenseTypeService expenseTypeService;
 
     public static String SUITE_ACCESS_TOKEN = null;
     public static long suiteTokenExpireTime = 0L;
@@ -679,6 +681,47 @@ public class WeiXinCorpController {
                             setting.setCompanyId(company.getId());
                             projectBasecostSettingMapper.insert(setting);
                         }
+                        //生成费用报销默认条目
+                        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("其他");
+                        List<String> travel  = new ArrayList<>();
+                        travel.add("城市间交通费");
+                        travel.add("住宿费");
+                        travel.add("伙食补助费");
+                        travel.add("市内交通费");
+                        travel.add("其他差旅费");
+                        List<String> outsource = new ArrayList<>();
+                        outsource.add("项目外包费");
+                        outsource.add("劳务外包费");
+                        outsource.add("其他外包费");
+                        List<ExpenseType> expenseTypeList=new ArrayList<>();
+                        for (String expenseType : expenseTypes) {
+                            ExpenseType item=new ExpenseType();
+                            item.setCompanyId(company.getId());
+                            item.setTypeName(expenseType);
+                            if(commonly.contains(expenseType)){
+                                item.setMainType(0);
+                            }
+                            if(travel.contains(expenseType)){
+                                item.setMainType(1);
+                            }
+                            if(outsource.contains(expenseType)){
+                                item.setMainType(2);
+                            }
+                            expenseTypeList.add(item);
+                        }
+                        expenseTypeService.saveBatch(expenseTypeList);
 
                         //生成工作时长
                         TimeType timeType = new TimeType();

+ 11 - 4
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/ExpenseType.java

@@ -1,21 +1,22 @@
 package com.management.platform.entity;
 
 import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.extension.activerecord.Model;
-import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableField;
-import java.io.Serializable;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
 
+import java.io.Serializable;
+
 /**
  * <p>
  * 
  * </p>
  *
  * @author Seyason
- * @since 2021-06-18
+ * @since 2022-07-28
  */
 @Data
 @EqualsAndHashCode(callSuper = false)
@@ -39,6 +40,12 @@ public class ExpenseType extends Model<ExpenseType> {
     @TableField("type_name")
     private String typeName;
 
+    /**
+     * 公司id
+     */
+    @TableField("company_id")
+    private Integer companyId;
+
 
     @Override
     protected Serializable pkVal() {

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

@@ -16,7 +16,7 @@ import java.io.Serializable;
  * </p>
  *
  * @author Seyason
- * @since 2021-12-16
+ * @since 2022-07-28
  */
 @Data
 @EqualsAndHashCode(callSuper = false)
@@ -40,6 +40,12 @@ public class ReportExtraDegree extends Model<ReportExtraDegree> {
     @TableField("name")
     private String name;
 
+    /**
+     * 备注
+     */
+    @TableField("rmark")
+    private String rmark;
+
     @TableField(exist = false)
     private String projects;
 

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

@@ -17,7 +17,7 @@ import java.util.List;
  * </p>
  *
  * @author Seyason
- * @since 2022-07-25
+ * @since 2022-07-28
  */
 @Data
 @EqualsAndHashCode(callSuper = false)

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

@@ -107,4 +107,9 @@ public interface ProjectMapper extends BaseMapper<Project> {
     List<Map<String, Object>> getUserWorkingTimeStatic(Integer companyId,String startDate, String endDate, Integer start, Integer size, String userId, Integer departmentId, List<Integer> deptIds);
 
     long findCountWithUserWorkingTime(Integer companyId,String startDate, String endDate, Integer start, Integer size, String userId, Integer departmentId, List<Integer> deptIds);
+
+    List<Map<String, Object>> getTimeCostByMainProject(Integer companyId, String startDate, String endDate, Integer projectId, String userId, List<Integer> deptIds);
+
+    List<Map<String, Object>> getCostByGroup(String startDate, String endDate, Integer projectId);
+
 }

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

@@ -158,4 +158,10 @@ public interface ProjectService extends IService<Project> {
     HttpRespMsg batchDeleteProject(String projectIdArray, HttpServletRequest request);
 
     HttpRespMsg modifyContract(Integer projectId, Double oldContractAmount, Double newContractAmount,String reason,HttpServletRequest request);
+
+    HttpRespMsg getTimeCostByMainProject(String startDate, String endDate, String userId, HttpServletRequest request);
+
+    HttpRespMsg getCostByGroup(String startDate, String endDate, Integer id, HttpServletRequest request);
+
+    HttpRespMsg getTimeCostByGroup(String startDate, String endDate, Integer pageIndex, Integer pageSize, Integer groupId, Integer projectId);
 }

+ 45 - 4
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/DingDingServiceImpl.java

@@ -1,6 +1,5 @@
 package com.management.platform.service.impl;
 
-import ch.qos.logback.core.util.StringCollectionUtil;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.aliyun.dingtalkcontact_1_0.models.GetUserHeaders;
@@ -12,11 +11,8 @@ import com.dingtalk.api.DefaultDingTalkClient;
 import com.dingtalk.api.DingTalkClient;
 import com.dingtalk.api.request.*;
 import com.dingtalk.api.response.*;
-import com.google.gson.JsonObject;
 import com.management.platform.constant.Constant;
 import com.management.platform.entity.*;
-//import com.management.platform.entity.vo.LeaveQuotaNum;
-import com.management.platform.entity.vo.LeaveTypeVO;
 import com.management.platform.entity.vo.UserVO;
 import com.management.platform.mapper.*;
 import com.management.platform.service.*;
@@ -41,6 +37,8 @@ import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.stream.Collectors;
 
+//import com.management.platform.entity.vo.LeaveQuotaNum;
+
 @Service
 @Transactional
 public class DingDingServiceImpl implements DingDingService {
@@ -120,6 +118,8 @@ public class DingDingServiceImpl implements DingDingService {
     private LeaveSheetService leaveSheetService;
     @Resource
     private LeaveTypeService leaveTypeService;
+    @Resource
+    private ExpenseTypeService expenseTypeService;
 
     @Value("${configEnv.isPrivateDeploy}")
     private boolean isPrivateDeploy;//企业内部应用,私有化部署的情况
@@ -168,6 +168,47 @@ public class DingDingServiceImpl implements DingDingService {
                     setting.setCompanyId(company.getId());
                     projectBasecostSettingMapper.insert(setting);
                 }
+                //生成费用报销默认条目
+                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("其他");
+                List<String> travel  = new ArrayList<>();
+                travel.add("城市间交通费");
+                travel.add("住宿费");
+                travel.add("伙食补助费");
+                travel.add("市内交通费");
+                travel.add("其他差旅费");
+                List<String> outsource = new ArrayList<>();
+                outsource.add("项目外包费");
+                outsource.add("劳务外包费");
+                outsource.add("其他外包费");
+                List<ExpenseType> expenseTypeList=new ArrayList<>();
+                for (String expenseType : expenseTypes) {
+                    ExpenseType item=new ExpenseType();
+                    item.setCompanyId(company.getId());
+                    item.setTypeName(expenseType);
+                    if(commonly.contains(expenseType)){
+                        item.setMainType(0);
+                    }
+                    if(travel.contains(expenseType)){
+                        item.setMainType(1);
+                    }
+                    if(outsource.contains(expenseType)){
+                        item.setMainType(2);
+                    }
+                    expenseTypeList.add(item);
+                }
+                expenseTypeService.saveBatch(expenseTypeList);
 
                 //获取企业内部应用accessToken
                 String innerCorpToken = getInnerCorpToken(dingding);

+ 180 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java

@@ -4483,6 +4483,186 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
         return httpRespMsg;
     }
 
+    @Override
+    public HttpRespMsg getTimeCostByMainProject(String startDate, String endDate, String userId, HttpServletRequest request) {
+        HttpRespMsg httpRespMsg = new HttpRespMsg();
+        try {
+            //根据系统配置的员工成本计算方式,按固定时薪还是固定月薪,分情况计算。
+            User targetUser = userMapper.selectById(request.getHeader("Token"));
+            Integer companyId =targetUser.getCompanyId();
+            Map<String, Object> resultMap = new HashMap<>();
+            //当前用户管理部门
+            List<Integer> deptIds=null;
+            List<Department> allDepartmentList=departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id",companyId));
+            List<Department> departmentList = departmentMapper.selectList(new QueryWrapper<Department>().eq("manager_id", targetUser.getId()).eq("company_id", companyId));
+            List<DepartmentOtherManager> departmentOtherManagerList = departmentOtherManagerMapper.selectList(new QueryWrapper<DepartmentOtherManager>().eq("other_manager_id", targetUser.getId()));
+            List<SysRichFunction> functionAllList = sysFunctionMapper.getRoleFunctions(targetUser.getRoleId(), "查看全公司");
+            List<SysRichFunction> functionDpartList = sysFunctionMapper.getRoleFunctions(targetUser.getRoleId(), "查看负责部门");
+            List<SysRichFunction> functionTimeList = sysFunctionMapper.getRoleFunctions(targetUser.getRoleId(), "查看工时统计");
+            List<SysRichFunction> functionCostList = sysFunctionMapper.getRoleFunctions(targetUser.getRoleId(), "查看成本统计");
+            //判断查看权限
+            if(functionAllList.size()==0){
+                deptIds=new ArrayList<>();
+                deptIds.add(-1);
+                if(functionDpartList.size()>0){
+                    if(functionTimeList.size()>0||functionCostList.size()>0){
+                        List<Integer> collect = departmentList.stream().distinct().map(dm -> dm.getDepartmentId()).collect(Collectors.toList());
+                        List<Integer> otherCollect = departmentOtherManagerList.stream().distinct().map(dom -> dom.getDepartmentId()).collect(Collectors.toList());
+                        collect.addAll(otherCollect);
+                        for (Integer integer : collect) {
+                            List<Integer> branchDepartment = getBranchDepartment(integer, allDepartmentList);
+                            deptIds.addAll(branchDepartment);
+                        }
+                    }
+                }
+            }
+            TimeType timeType = timeTypeMapper.selectById(companyId);
+            if (timeType.getFixMonthcost() == 1) {
+                //每月固定月薪的方式计算,平摊到各个项目中
+                List<Map<String, Object>> list = projectMapper.getTimeCostReport(companyId, startDate+"-01", endDate+"-31", null,deptIds);
+                //检查财务表中是否已经导入成本
+                List<Finance> financeList = financeMapper.selectList(new QueryWrapper<Finance>().eq("ymonth", startDate).eq("company_id", companyId));
+                List<User> userList = userMapper.selectList(new QueryWrapper<User>().eq("company_id", companyId));
+                //计算人员总工时
+                for (Map<String, Object> map : list) {
+                    String creatorId = (String)map.get("creatorId");
+                    double cost = (double)map.get("cost");
+                    User user = userList.stream().filter(u -> u.getId().equals(creatorId)).findFirst().get();
+                    user.setTotalHours(user.getTotalHours() + cost);
+                }
+                //计算实际时薪
+                for (User user : userList) {
+                    if (user.getTotalHours() != 0) {
+                        Optional<Finance> first = financeList.stream().filter(f -> f.getUserId().equals(user.getId())).findFirst();
+                        BigDecimal monthCost = null;
+                        if (first.isPresent()) {
+                            monthCost = first.get().getTotalCost();
+                        } else {
+                            monthCost = user.getMonthCost();
+                        }
+                        user.setCost(monthCost.divide(new BigDecimal(user.getTotalHours()), 6, BigDecimal.ROUND_HALF_UP));
+                    } else {
+                        user.setCost(new BigDecimal(0));
+                    }
+                }
+
+                BigDecimal totalMoneyCost = BigDecimal.valueOf(0);
+                List<Map<String, Object>> retList = new ArrayList<>();
+                List<Project> projectList = projectMapper.selectList(new QueryWrapper<Project>().eq("company_id", companyId).orderByAsc("id"));
+                for (Project p : projectList) {
+                    Map<String, Object> projectMap = new HashMap<>();
+                    projectMap.put("id", p.getId());
+                    projectMap.put("name", p.getProjectName());
+                    //按照主项目汇总
+                    double pTotalTime = 0;
+                    BigDecimal pTotalMoney = new BigDecimal(0);
+                    for (Map<String, Object> map : list) {
+                        String creatorId = (String)map.get("creatorId");
+                        int projectId = (int)map.get("projectId");
+                        if (projectId == p.getId()) {
+                            double costTime = (double)map.get("cost");
+                            pTotalTime += costTime;
+                            User curUser = userList.stream().filter(u->u.getId().equals(creatorId)).findFirst().get();
+                            //该人员的成本
+                            pTotalMoney = pTotalMoney.add(curUser.getCost().multiply(new BigDecimal(costTime)));
+                        }
+                    }
+                    if (pTotalTime > 0) {
+                        projectMap.put("cost", pTotalTime);
+                        projectMap.put("costMoney", pTotalMoney);
+                        retList.add(projectMap);
+                        totalMoneyCost = totalMoneyCost.add(pTotalMoney);
+                    }
+                }
+
+                resultMap.put("costList", retList);
+                resultMap.put("totalMoneyCost", totalMoneyCost);
+                if(functionCostList.size()==0){
+                    resultMap.put("totalCostMoney",null);
+                    list.forEach(li->{
+                        li.put("costMoney",null);
+                    });
+                }
+                if(functionTimeList.size()==0){
+                    retList.forEach(li->{
+                        li.put("cost",null);
+                    });
+                }
+                httpRespMsg.data = resultMap;
+
+            } else {
+                List<Map<String, Object>> list = projectMapper.getTimeCostByMainProject(companyId, startDate, endDate, null, userId,deptIds);
+                BigDecimal totalMoneyCost = BigDecimal.valueOf(0);
+                for (Map<String, Object> map : list) {
+                    if (!map.containsKey("cost")) {
+                        map.put("cost", 0);
+                    }
+                    if (!map.containsKey("costMoney")) {
+                        map.put("costMoney", 0);
+                    } else {
+                        totalMoneyCost = totalMoneyCost.add((BigDecimal)map.get("costMoney"));
+                    }
+                }
+
+                resultMap.put("costList", list);
+                resultMap.put("totalMoneyCost", totalMoneyCost);
+                if(functionCostList.size()==0){
+                    resultMap.put("totalCostMoney",null);
+                    list.forEach(li->{
+                        li.put("costMoney",null);
+                    });
+                }
+                if(functionTimeList.size()==0){
+                    list.forEach(li->{
+                        li.put("cost",null);
+                    });
+                }
+                httpRespMsg.data = resultMap;
+            }
+        } catch (NullPointerException e) {
+            e.printStackTrace();
+            httpRespMsg.setError("验证失败");
+            return httpRespMsg;
+        }
+
+        return httpRespMsg;
+    }
+
+    @Override
+    public HttpRespMsg getCostByGroup(String startDate, String endDate, Integer projectId, HttpServletRequest request) {
+        HttpRespMsg httpRespMsg = new HttpRespMsg();
+        try {
+            Integer companyId = userMapper.selectById(request.getHeader("Token")).getCompanyId();
+            //首先查看有无浏览权限
+            if (!projectMapper.selectById(projectId).getCompanyId().equals(companyId)) {
+                httpRespMsg.setError("无权查看其他公司的项目详情");
+            } else {
+                Map<String, Object> resultMap = new HashMap<>();
+                List<Map<String, Object>> list = projectMapper.getCostByGroup(startDate, endDate, projectId);
+                BigDecimal totalMoneyCost = BigDecimal.valueOf(0);
+                for (Map<String, Object> map : list) {
+                    if (!map.containsKey("costMoney")) {
+                        map.put("costMoney", 0);
+                    } else {
+                        totalMoneyCost = totalMoneyCost.add((BigDecimal)map.get("costMoney"));
+                    }
+                }
+                resultMap.put("costList", list);
+                resultMap.put("totalMoneyCost", totalMoneyCost);
+                httpRespMsg.data = resultMap;
+            }
+        } catch (NullPointerException e) {
+            httpRespMsg.setError("验证失败");
+            return httpRespMsg;
+        }
+        return httpRespMsg;
+    }
+
+    @Override
+    public HttpRespMsg getTimeCostByGroup(String startDate, String endDate, Integer pageIndex, Integer pageSize, Integer groupId, Integer projectId) {
+        return null;
+    }
+
 
     private List<Department> getSubDepts(Department dp, List<Department> list) {
         List<Department> collect = list.stream().filter(l -> dp.getDepartmentId().equals(l.getSuperiorId())).collect(Collectors.toList());

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

@@ -23,7 +23,6 @@ import org.apache.poi.hssf.usermodel.*;
 import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
 import org.apache.poi.ss.usermodel.*;
 import org.springframework.beans.factory.annotation.Value;
-import org.springframework.core.task.AsyncTaskExecutor;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.StringUtils;
@@ -297,12 +296,14 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                             }
                         }
                     }
-                } else {
+                }
+                if(deptId==null&&targetUid==null){
                     //担任项目经理或者日报审核人,查找相关的人员的日报
                     List<Map<String, Object>> puserNames = reportMapper.getReportNameByDate(date, user.getCompanyId(), leaderId);
                     List<Map<String, Object>> inchargeReportList= reportMapper.getInchargeReportByDate(date, leaderId, null);
 
                     for (Map<String, Object> map2 : puserNames) {
+
                         if (nameList.size() > 0) {
                             String myUserId = (String)nameList.get(0).get("id");
                             if (myUserId.equals(map2.get("id"))) {
@@ -310,7 +311,10 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                                 continue;
                             }
                         }
-                        nameList.add(map2);
+                        List<Object> collect = nameList.stream().map(nl -> nl.get("")).collect(Collectors.toList());
+                        if(!collect.contains(map2.get("id"))){
+                            nameList.add(map2);
+                        }
                         //再根据人分别获取当天的报告
                         List<Map<String, Object>> list2 =
                                 inchargeReportList.stream().filter(i->i.get("creatorId").equals(map2.get("id"))).collect(Collectors.toList());
@@ -1674,6 +1678,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
         List<Map<String, Object>> reportNameByDate = reportMapper.getReportNameByDate(date, companyId, null);
 
         HttpRespMsg departmentList = departmentService.getDepartmentList(request);
+        List<Department> allDepartmentList = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id", curUser.getCompanyId()));
         List<DepartmentVO> list = (List<DepartmentVO>) departmentList.data;
         List<SysRichFunction> functionList = sysFunctionMapper.getRoleFunctions(curUser.getRoleId(), "查看全公司工时");
         boolean hasDeptWorktimePriv = sysFunctionMapper.getRoleFunctions(curUser.getRoleId(), "查看本部门工时").size() > 0;
@@ -1687,8 +1692,16 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
         } else if (hasDeptWorktimePriv || (manageDeptId != null && manageDeptId > 0)) {
             //指定查看某个部门下的,一个人可能负责多个部门
             List<Department> allMDeptList = departmentMapper.selectList(new QueryWrapper<Department>().eq("manager_id", token));
+            List<DepartmentOtherManager> departmentOtherManagerList = departmentOtherManagerMapper.selectList(new QueryWrapper<DepartmentOtherManager>().eq("other_manager_id", curUser.getId()));
             if (hasDeptWorktimePriv && curUser.getDepartmentId() != null) {
                 Department ownerDept = departmentMapper.selectById(curUser.getDepartmentId());
+                List<Integer> otherCollect = departmentOtherManagerList.stream().distinct().map(dom -> dom.getDepartmentId()).collect(Collectors.toList());
+                for (Integer integer : otherCollect) {
+                    Optional<Department> first = allDepartmentList.stream().filter(ad -> ad.getDepartmentId().equals(integer)).findFirst();
+                    if(first.isPresent()){
+                        allMDeptList.add(first.get());
+                    }
+                }
                 //要加上自己的部门,如果没有的话
                 if (!allMDeptList.stream().anyMatch(d->d.getDepartmentId().equals(ownerDept.getDepartmentId()))) {
                     allMDeptList.add(ownerDept);
@@ -3100,6 +3113,9 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                         allSubDepts.addAll(getSubDepts(dept, allDeptList));
                     }
                     List<Integer> collect = allSubDepts.stream().map(Department::getDepartmentId).collect(Collectors.toList());
+                    List<DepartmentOtherManager> departmentOtherManagerList = departmentOtherManagerMapper.selectList(new QueryWrapper<DepartmentOtherManager>().eq("other_manager_id", user.getId()));
+                    List<Integer> otherCollect = departmentOtherManagerList.stream().distinct().map(dom -> dom.getDepartmentId()).collect(Collectors.toList());
+                    collect.addAll(otherCollect);
                     allReportByDate = reportMapper.getDeptMembReportByDate(startDate, null, collect, endDate, projectId,stateKey,departmentId);
                 }
 

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

@@ -131,6 +131,8 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
     private WxCorpInfoService wxCorpInfoService;
     @Resource
     private UserCustomMapper userCustomMapper;
+    @Resource
+    private ExpenseTypeService expenseTypeService;
     //登录网页端
     @Override
     public HttpRespMsg loginAdmin(String username, String password) {
@@ -617,7 +619,47 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
                 setting.setCompanyId(company.getId());
                 projectBasecostSettingMapper.insert(setting);
             }
-
+            //生成费用报销默认条目
+            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("其他");
+            List<String> travel  = new ArrayList<>();
+            travel.add("城市间交通费");
+            travel.add("住宿费");
+            travel.add("伙食补助费");
+            travel.add("市内交通费");
+            travel.add("其他差旅费");
+            List<String> outsource = new ArrayList<>();
+            outsource.add("项目外包费");
+            outsource.add("劳务外包费");
+            outsource.add("其他外包费");
+            List<ExpenseType> expenseTypeList=new ArrayList<>();
+            for (String expenseType : expenseTypes) {
+                ExpenseType item=new ExpenseType();
+                item.setCompanyId(company.getId());
+                item.setTypeName(expenseType);
+                if(commonly.contains(expenseType)){
+                    item.setMainType(0);
+                }
+                if(travel.contains(expenseType)){
+                    item.setMainType(1);
+                }
+                if(outsource.contains(expenseType)){
+                    item.setMainType(2);
+                }
+                expenseTypeList.add(item);
+            }
+            expenseTypeService.saveBatch(expenseTypeList);
             if (userMapper.insert(user) == 0) {
                 httpRespMsg.setError("操作失败");
             } else {

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

@@ -7,11 +7,12 @@
         <id column="id" property="id" />
         <result column="main_type" property="mainType" />
         <result column="type_name" property="typeName" />
+        <result column="company_id" property="companyId" />
     </resultMap>
 
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
-        id, main_type, type_name
+        id, main_type, type_name, company_id
     </sql>
 
 </mapper>

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

@@ -145,6 +145,36 @@
     </select>
 
 
+
+    <!--获取查询者所在公司每个项目的工时成本-->
+    <select id="getTimeCostByMainProject" resultType="java.util.Map">
+        SELECT SUM(b.working_time) AS cost, SUM(b.cost) AS costMoney,a.category_name as categoryName,IFNULL(pm.name,'未分类') as mainProjectName
+        FROM project AS a
+        LEFT JOIN report AS b ON b.project_id = a.id
+        JOIN user AS c ON b.creator_id = c.id
+        LEFT JOIN project_main pm on pm.id=a.project_main_id
+        WHERE a.company_id = #{companyId}
+        <if test="projectId != null">
+            AND a.id = #{projectId}
+        </if>
+        <if test="userId != null">
+            AND b.creator_id = #{userId}
+        </if>
+        <if test="startDate != null and endDate != null">
+            AND b.create_date between #{startDate} and #{endDate}
+        </if>
+        <if test="deptIds!=null and deptIds.size()>0">
+            and b.dept_id in
+            <foreach collection="deptIds" open="(" item="item" separator="," close=")">
+                #{item}
+            </foreach>
+        </if>
+        AND b.state = 1
+        GROUP BY a.project_main_id
+        ORDER BY a.id ASC
+    </select>
+
+
     <!--获取查询者所在公司每个项目分类的工时成本-->
     <select id="getTimeCostByCategory" resultType="java.util.Map">
         SELECT  SUM(b.working_time) AS cost, SUM(b.cost) AS costMoney,IFNULL(a.category_name,'未分类')as categoryName,IFNULL(a.category,0) as category
@@ -380,6 +410,20 @@
         ORDER BY a.stage ASC
     </select>
 
+    <!--按照项目内的阶段名称分组统计工时-->
+    <select id="getCostByGroup" resultType="java.util.Map">
+        SELECT IFNULL(tg.name, "未分配") as GroupName, SUM(a.working_time) AS cost, SUM(a.cost) AS costMoney
+        FROM report AS a
+        left join task_group tg on tg.id=a.group_id
+        WHERE a.project_id = #{projectId}
+        AND a.state = 1
+        <if test="startDate != null and endDate != null">
+            AND a.create_date between #{startDate} and #{endDate}
+        </if>
+        GROUP BY a.group_id
+        ORDER BY a.group_id ASC
+    </select>
+
     <!--获取全部人员工时 -->
     <select id="getAllMembCost" resultType="java.util.Map">
         SELECT b.name, SUM(a.working_time) AS cost, SUM(a.cost) AS costMoney

+ 3 - 2
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ReportExtraDegreeMapper.xml

@@ -7,15 +7,16 @@
         <id column="id" property="id" />
         <result column="company_id" property="companyId" />
         <result column="name" property="name" />
+        <result column="rmark" property="rmark" />
     </resultMap>
 
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
-        id, company_id, name
+        id, company_id, name, rmark
     </sql>
 
     <select id="getAll" resultMap="BaseResultMap">
-        select id, name from report_extra_degree where company_id = #{companyId}
+        select id, name,rmark from report_extra_degree where company_id = #{companyId}
         ORDER BY id DESC
     </select>
 </mapper>

+ 21 - 0
src/main/java/com/management/platform/controller/ExpenseTypeController.java

@@ -0,0 +1,21 @@
+package com.management.platform.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author Seyason
+ * @since 2022-07-28
+ */
+@RestController
+@RequestMapping("/expense-type")
+public class ExpenseTypeController {
+
+}
+

+ 54 - 0
src/main/java/com/management/platform/entity/ExpenseType.java

@@ -0,0 +1,54 @@
+package com.management.platform.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableField;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author Seyason
+ * @since 2022-07-28
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+public class ExpenseType extends Model<ExpenseType> {
+
+    private static final long serialVersionUID=1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 主类型: 0-一般费用,1-差旅费用,2-外包费用
+     */
+    @TableField("main_type")
+    private Integer mainType;
+
+    /**
+     * 费用类型名称
+     */
+    @TableField("type_name")
+    private String typeName;
+
+    /**
+     * 公司id
+     */
+    @TableField("company_id")
+    private Integer companyId;
+
+
+    @Override
+    protected Serializable pkVal() {
+        return this.id;
+    }
+
+}

+ 16 - 0
src/main/java/com/management/platform/mapper/ExpenseTypeMapper.java

@@ -0,0 +1,16 @@
+package com.management.platform.mapper;
+
+import com.management.platform.entity.ExpenseType;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author Seyason
+ * @since 2022-07-28
+ */
+public interface ExpenseTypeMapper extends BaseMapper<ExpenseType> {
+
+}

+ 16 - 0
src/main/java/com/management/platform/service/ExpenseTypeService.java

@@ -0,0 +1,16 @@
+package com.management.platform.service;
+
+import com.management.platform.entity.ExpenseType;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author Seyason
+ * @since 2022-07-28
+ */
+public interface ExpenseTypeService extends IService<ExpenseType> {
+
+}

+ 20 - 0
src/main/java/com/management/platform/service/impl/ExpenseTypeServiceImpl.java

@@ -0,0 +1,20 @@
+package com.management.platform.service.impl;
+
+import com.management.platform.entity.ExpenseType;
+import com.management.platform.mapper.ExpenseTypeMapper;
+import com.management.platform.service.ExpenseTypeService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author Seyason
+ * @since 2022-07-28
+ */
+@Service
+public class ExpenseTypeServiceImpl extends ServiceImpl<ExpenseTypeMapper, ExpenseType> implements ExpenseTypeService {
+
+}

+ 18 - 0
src/main/resources/mapper/ExpenseTypeMapper.xml

@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.management.platform.mapper.ExpenseTypeMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.management.platform.entity.ExpenseType">
+        <id column="id" property="id" />
+        <result column="main_type" property="mainType" />
+        <result column="type_name" property="typeName" />
+        <result column="company_id" property="companyId" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id, main_type, type_name, company_id
+    </sql>
+
+</mapper>