浏览代码

供应商开发,通讯录只看直属开发

seyason 2 年之前
父节点
当前提交
d75c252622
共有 28 个文件被更改,包括 803 次插入60 次删除
  1. 67 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/CompanyController.java
  2. 5 2
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ProjectController.java
  3. 1 2
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ProjectProfessionController.java
  4. 197 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ProviderInfoController.java
  5. 5 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ReportController.java
  6. 2 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/UserController.java
  7. 54 19
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/WeiXinCorpController.java
  8. 12 6
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/Company.java
  9. 21 8
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/Project.java
  10. 84 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/ProviderInfo.java
  11. 8 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/SysModule.java
  12. 16 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/ProviderInfoMapper.java
  13. 1 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/ProjectProfessionService.java
  14. 2 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/ProjectService.java
  15. 21 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/ProviderInfoService.java
  16. 2 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/ReportService.java
  17. 1 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/UserService.java
  18. 1 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/DingDingServiceImpl.java
  19. 6 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/PermissionServiceImpl.java
  20. 20 10
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectProfessionServiceImpl.java
  21. 8 2
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java
  22. 148 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProviderInfoServiceImpl.java
  23. 77 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java
  24. 14 2
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/UserServiceImpl.java
  25. 2 1
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/CompanyMapper.xml
  26. 3 2
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ProjectMapper.xml
  27. 23 0
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ProviderInfoMapper.xml
  28. 2 1
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/SysModuleMapper.xml

+ 67 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/CompanyController.java

@@ -1,12 +1,23 @@
 package com.management.platform.controller;
 
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.management.platform.entity.CompanyDingding;
+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.util.HttpRespMsg;
+import com.taobao.api.ApiException;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import java.util.HashMap;
 
 /**
  * <p>
@@ -19,11 +30,67 @@ import javax.annotation.Resource;
 @RestController
 @RequestMapping("/company")
 public class CompanyController {
+    @Resource
+    private HttpServletRequest request;
+
     @Resource
     private CompanyService companyService;
+    @Resource
+    private DingDingService dingDingService;
+    @Resource
+    private UserMapper userMapper;
+    @Resource
+    private CompanyDingdingMapper companyDingdingMapper;
+    public static final HashMap<String, Long> syncTimeLog = new HashMap();
+
+
     @RequestMapping("/dataMigration")
     public HttpRespMsg dataMigration(Integer oldCompanyId,Integer targetCompanyId){
        return companyService.dataMigration(oldCompanyId,targetCompanyId);
     }
+
+    //同步钉钉
+    @RequestMapping("/syncCorpMembs")
+    public HttpRespMsg syncCorpMembs() {
+        try {
+            HttpRespMsg msg = new HttpRespMsg();
+            String token = request.getHeader("TOKEN");
+            User user = userMapper.selectById(token);
+            //判断时间
+            long now = System.currentTimeMillis();
+            if (syncTimeLog.get(token) == null) {
+                syncTimeLog.put(token, now);
+            } else {
+                if (now - syncTimeLog.get(token) < 30*1000) {
+                    msg.setError("调用过于频繁,请稍后再试");
+                    return msg;
+                } else {
+                    //更新最近同步的时间
+                    syncTimeLog.put(token, now);
+                }
+            }
+
+            CompanyDingding companyDingding = companyDingdingMapper.selectOne(new QueryWrapper<CompanyDingding>().eq("company_id", user.getCompanyId()));
+            if (companyDingding != null) {
+                System.out.println("===========同步钉钉===========");
+                String rest = dingDingService.syncCorpMembs(companyDingding.getCorpid());
+                if (rest.startsWith("调用失败")) {
+                    msg.setError(rest);
+                } else {
+                    msg.data = rest;
+                }
+            } else {
+                msg.setError("非钉钉企业,无法同步");
+            }
+            return msg;
+        } catch (ApiException e) {
+            e.printStackTrace();
+            System.err.println(e.getMessage());
+            HttpRespMsg msg = new HttpRespMsg();
+            msg.setError(e.getMessage());
+            return msg;
+        }
+    }
+
 }
 

+ 5 - 2
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ProjectController.java

@@ -104,11 +104,14 @@ public class ProjectController {
                                    String auditUserIds,
                                    Integer category,
                                    String projectDesc,
-                                   Integer projectMainId
+                                   Integer projectMainId,
+                                   String providerIds,
+                                   String providerNames
                                    ) {
         return projectService.editProject(id, name, code, userId, inchargerId, isPublic, planStartDate, planEndDate, level, contractAmount,
                 projectBaseCostData,
-                 budget,customerId,chosenLeaders, associateDegrees, associateDegreeNames, taskGpIncharge,auditUserIds, category, projectDesc,projectMainId, request);
+                 budget,customerId,chosenLeaders, associateDegrees, associateDegreeNames,
+                taskGpIncharge,auditUserIds, category, projectDesc,projectMainId, providerIds, providerNames, request);
     }
 
     @RequestMapping("/adjustBase")

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

@@ -32,8 +32,7 @@ public class ProjectProfessionController {
     ProjectProfessionService projectProfessionService;
     @RequestMapping("/modify")
     public HttpRespMsg modify(Integer projectId, String json) {
-        projectProfessionService.modify(projectId, json);
-        return projectProfessionService.get(projectId);
+        return projectProfessionService.modify(projectId, json);
     }
 
     //获取项目相关的工程专业列表

+ 197 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ProviderInfoController.java

@@ -0,0 +1,197 @@
+package com.management.platform.controller;
+
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.management.platform.entity.ProviderInfo;
+import com.management.platform.entity.Project;
+import com.management.platform.entity.User;
+import com.management.platform.mapper.ProviderInfoMapper;
+import com.management.platform.mapper.ProjectMapper;
+import com.management.platform.mapper.ProviderInfoMapper;
+import com.management.platform.mapper.UserMapper;
+import com.management.platform.service.ProviderInfoService;
+import com.management.platform.service.ProviderInfoService;
+import com.management.platform.util.HttpRespMsg;
+import org.springframework.util.StringUtils;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author Seyason
+ * @since 2022-07-07
+ */
+@RestController
+@RequestMapping("/provider-info")
+public class ProviderInfoController {
+    @Resource
+    private HttpServletRequest request;
+    @Resource
+    UserMapper userMapper;
+    @Resource
+    ProjectMapper projectMapper;
+    @Resource
+    ProviderInfoMapper providerInfoMapper;
+    @Resource
+    ProviderInfoService providerInfoService;
+
+    @RequestMapping("/addOrMod")
+    public HttpRespMsg addOrMod(ProviderInfo info) {
+        HttpRespMsg msg = new HttpRespMsg();
+        String token = request.getHeader("TOKEN");
+        User user = userMapper.selectById(token);
+        List<ProviderInfo> providerInfoMapperAll = providerInfoMapper.selectList(new QueryWrapper<ProviderInfo>().select("id, provider_name,provider_code").eq("company_id", user.getCompanyId()).orderByDesc("id"));
+        List<String> nameList=new ArrayList<>();
+        List<String> codeList=new ArrayList<>();
+        providerInfoMapperAll.forEach(cu->{
+            nameList.add(cu.getProviderName());
+            if(cu.getProviderCode()!=null){
+                codeList.add(cu.getProviderCode());
+            }
+        });
+        if (info.getId() == null) {
+            if(nameList.contains(info.getProviderName())){
+                msg.setError("客户名称已存在");
+                return msg;
+            }
+            if(codeList.contains(info.getProviderCode())){
+                msg.setError("客户编号已存在");
+                return msg;
+            }
+            info.setCompanyId(user.getCompanyId());
+            providerInfoMapper.insert(info);
+        } else {
+            ProviderInfo customerInfo = providerInfoMapper.selectById(info.getId());
+            nameList.remove(customerInfo.getProviderName());
+            codeList.remove(customerInfo.getProviderCode());
+            if(nameList.contains(info.getProviderName())){
+                msg.setError("客户名称已存在");
+                return msg;
+            }
+            if(codeList.contains(info.getProviderCode())){
+                msg.setError("客户编号已存在");
+                return msg;
+            }
+            info.setCompanyId(user.getCompanyId());
+            providerInfoMapper.updateById(info);
+            //更新项目表中的客户名称
+            Project p = new Project();
+            p.setCustomerName(info.getProviderName());
+            projectMapper.update(p, new QueryWrapper<Project>().eq("customer_id", info.getId()));
+        }
+        return msg;
+    }
+
+    @RequestMapping("/delete")
+    public HttpRespMsg delete(Integer id) {
+        HttpRespMsg msg = new HttpRespMsg();
+        String token = request.getHeader("TOKEN");
+        User user = userMapper.selectById(token);
+        ProviderInfo providerInfo = providerInfoMapper.selectById(id);
+        List<Project> projectList = projectMapper.selectList(new QueryWrapper<Project>().select("id, project_name, provider_ids, provider_names").like("provider_ids", id+"").like("provider_names", providerInfo.getProviderName()));
+        if (projectList.size() > 0) {
+            String containProjectNames = projectList.stream().filter(p->{
+                String[] split = p.getProviderIds().split(",");
+                boolean containId = Arrays.stream(split).anyMatch(s->s.equals(id+""));
+                return containId;
+            }).map(Project::getProjectName).collect(Collectors.joining(","));
+            if (!StringUtils.isEmpty(containProjectNames)) {
+                msg.setError("无法删除,以下项目已关联此供应商:"+containProjectNames);
+            }
+        }
+        int r = providerInfoMapper.delete(new QueryWrapper<ProviderInfo>().eq("id", id).eq("company_id", user.getCompanyId()));
+        if (r <= 0) {
+            msg.setError("无权删除");
+        }
+        return msg;
+    }
+    @RequestMapping("/batchDelete")
+    public HttpRespMsg batchDelete(String batchIds) {
+        HttpRespMsg msg = new HttpRespMsg();
+        if(!StringUtils.isEmpty(batchIds)){
+            String[] split = batchIds.split(",");
+            List<String> list = Arrays.asList(split);
+            String token = request.getHeader("TOKEN");
+            User user = userMapper.selectById(token);
+
+            List<Project> projectList = projectMapper.selectList(new QueryWrapper<Project>().select("id, project_name, provider_ids, provider_names").eq("company_id", user.getCompanyId()));
+            if(projectList.size()>0){
+                String str = null;
+                for (String providerId: list) {
+                    String names = projectList.stream().filter(p->{
+                        String[] hasIds = p.getProviderIds().split(",");
+                        boolean containId = Arrays.stream(hasIds).anyMatch(s->s.equals(providerId+""));
+                        return containId;
+                    }).map(Project::getProjectName).collect(Collectors.joining(","));
+                    if (!StringUtils.isEmpty(names)) {
+                        str = providerInfoMapper.selectById(Integer.valueOf(providerId)).getProviderName()+"已被以下项目关联:"+ names;
+                        break;
+                    }
+                }
+                if (str != null) {
+                    msg.setError(str);
+                    return msg;
+                }
+
+            }
+            int r = providerInfoMapper.delete(new QueryWrapper<ProviderInfo>().eq("id", list.get(0)).eq("company_id", user.getCompanyId()));
+            if (r <= 0) {
+                msg.setError("无权删除");
+                return msg;
+            }
+            providerInfoMapper.deleteBatchIds(list);
+        }
+        return msg;
+    }
+
+
+    @RequestMapping("/list")
+    public HttpRespMsg list(@RequestParam Integer pageIndex, @RequestParam Integer pageSize, String keyword) {
+        HttpRespMsg msg = new HttpRespMsg();
+        String token = request.getHeader("TOKEN");
+        User user = userMapper.selectById(token);
+        QueryWrapper<ProviderInfo> queryWrapper = new QueryWrapper<ProviderInfo>().eq("company_id", user.getCompanyId()).orderByDesc("id");
+        if (!StringUtils.isEmpty(keyword)) {
+            queryWrapper.like("provider_name", keyword);
+        }
+        IPage<ProviderInfo> projectIPage = providerInfoMapper.selectPage(new Page<>(pageIndex, pageSize),
+                queryWrapper);
+        List<ProviderInfo> list = projectIPage.getRecords();
+        Long total = projectIPage.getTotal();
+        Map<String, Object> map = new HashMap<>();
+        map.put("records", list);
+        map.put("total", total);
+        msg.data = map;
+        return msg;
+    }
+
+    @RequestMapping("/getAll")
+    public HttpRespMsg getAll() {
+        HttpRespMsg msg = new HttpRespMsg();
+        String token = request.getHeader("TOKEN");
+        User user = userMapper.selectById(token);
+        List<ProviderInfo> all = providerInfoMapper.selectList(new QueryWrapper<ProviderInfo>().select("id, provider_name,provider_code").eq("company_id", user.getCompanyId()).orderByDesc("id"));
+        msg.data = all;
+        return msg;
+    }
+
+    @RequestMapping("/importData")
+    public HttpRespMsg importData(HttpServletRequest request, MultipartFile file){
+        return providerInfoService.importData(request,file);
+    }
+
+}
+

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

@@ -1186,5 +1186,10 @@ public class ReportController {
     public HttpRespMsg getReportListByToken(@RequestParam String token, @RequestParam String startDate, @RequestParam String endDate){
         return reportService.getReportListByToken(token,startDate,endDate);
     }
+
+    @GetMapping("/fixIssue")
+    public HttpRespMsg fixIssue(){
+        return reportService.fixIssue();
+    }
 }
 

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

@@ -66,8 +66,9 @@ public class UserController {
     @RequestMapping("/getEmployeeList")
     public HttpRespMsg getEmployeeList(@RequestParam Integer departmentId, String keyword,
                                        Integer status, Integer roleId,
+                                       Integer onlyDirect,
                                        @RequestParam Integer pageIndex, @RequestParam Integer pageSize) {
-        return userService.getEmployeeList(departmentId, keyword, status, roleId, pageIndex, pageSize, request);
+        return userService.getEmployeeList(departmentId, keyword, status, roleId, onlyDirect, pageIndex, pageSize, request);
     }
 
     /**

+ 54 - 19
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/WeiXinCorpController.java

@@ -35,6 +35,7 @@ public class WeiXinCorpController {
     //中转的服务器获取部门详情
     public static final String TRANSMIT_SERVER_GET_DEPTDETAIL = "http://47.101.180.183:10010/wxcorp/getCorpDeptDetail?accessToken=ACCESS_TOKEN&deptId=DEPTID";
     public static final String TRANSMIT_SERVER_GET_DEPTMEMBDETAIL = "http://47.101.180.183:10010/wxcorp/getDeptUserDetail?accessToken=ACCESS_TOKEN&deptId=DEPTID";
+    public static final String TRANSMIT_SERVER_GET_CONTACT_TOKEN = "http://47.101.180.183:10010/wxcorp/getCorpConcactAccessToken?corpid=CORPID&contactSecret=CONTACT_SECRET";
 
     public static final String POST_CONVERT_USERID = "https://qyapi.weixin.qq.com/cgi-bin/batch/userid_to_openuserid?access_token=ACCESS_TOKEN";
 
@@ -190,23 +191,6 @@ public class WeiXinCorpController {
         return msg;
     }
 
-    //获取企业通讯录的accessToken
-    private String getCorpConcactAccessToken(WxCorpInfo corpInfo) throws Exception {
-        String url = GET_CORP_TOKEN.replace("ID", corpInfo.getCorpid()).replace("SECRET", corpInfo.getContactSecret());
-        ResponseEntity<String> responseEntity = this.restTemplate.exchange(url,
-                HttpMethod.GET, null, String.class);
-        if (responseEntity.getStatusCode() == HttpStatus.OK) {
-            String resp = responseEntity.getBody();
-            JSONObject json = JSONObject.parseObject(resp);
-            if (json.getIntValue("errcode") == 0) {
-                String access_token = json.getString("access_token");
-                corpInfo.setAccessToken(access_token);
-            } else {
-                throw new Exception(json.toJSONString());
-            }
-        }
-        return corpInfo.getAccessToken();
-    }
 
     //获取企业AccessToken
     private String getCorpAccessToken(WxCorpInfo corpInfo) throws Exception {
@@ -1143,7 +1127,7 @@ public class WeiXinCorpController {
         Company company = companyMapper.selectById(wxCorpInfo.getCompanyId());
         String corpContactAccessToken = null;
         try {
-            corpContactAccessToken = getCorpConcactAccessToken(wxCorpInfo);
+            corpContactAccessToken = getRemoteCorpConcactAccessToken(wxCorpInfo);
         } catch (Exception exception) {
             exception.printStackTrace();
             msg.setError("同步失败:"+exception.getMessage());
@@ -1414,7 +1398,6 @@ public class WeiXinCorpController {
             }
         }
 
-
         return new HttpRespMsg();
     }
 
@@ -1648,6 +1631,58 @@ public class WeiXinCorpController {
         return obj;
     }
 
+    //通过中转服务器,调用通讯录的accessToken
+    private String getRemoteCorpConcactAccessToken(WxCorpInfo corpInfo) throws Exception {
+        String url = TRANSMIT_SERVER_GET_CONTACT_TOKEN.replace("CORPID", corpInfo.getCorpid()).replace("CONTACT_SECRET", corpInfo.getContactSecret());
+        String result = restTemplate.getForObject(url, String.class);
+        System.out.println("远程获取Contact AccessToken:"+result);
+        JSONObject obj = JSONObject.parseObject(result);
+        if (obj.getString("code").equals("ok")) {
+            return obj.getString("data");
+        } else {
+            throw new Exception(obj.getString("msg"));
+        }
+    }
+
+    //提供接口,用于中转获取企业通讯录accessToken,因为直接在sass上访问会被屏蔽
+    @RequestMapping("/getCorpConcactAccessToken")
+    public HttpRespMsg getCorpConcactAccessToken(String corpid, String contactSecret) {
+        String url = GET_CORP_TOKEN.replace("ID", corpid).replace("SECRET", contactSecret);
+        ResponseEntity<String> responseEntity = this.restTemplate.exchange(url,
+                HttpMethod.GET, null, String.class);
+        HttpRespMsg msg = new HttpRespMsg();
+        if (responseEntity.getStatusCode() == HttpStatus.OK) {
+            String resp = responseEntity.getBody();
+            JSONObject json = JSONObject.parseObject(resp);
+            if (json.getIntValue("errcode") == 0) {
+                String access_token = json.getString("access_token");
+                msg.data = access_token;
+            } else {
+                msg.setError(json.toJSONString());
+            }
+        }
+        return msg;
+    }
+
+    //获取企业通讯录的accessToken,在私有化部署的企业内部服务器上跑
+    private String getCorpConcactAccessToken(WxCorpInfo corpInfo) throws Exception {
+        String url = GET_CORP_TOKEN.replace("ID", corpInfo.getCorpid()).replace("SECRET", corpInfo.getContactSecret());
+        ResponseEntity<String> responseEntity = this.restTemplate.exchange(url,
+                HttpMethod.GET, null, String.class);
+        if (responseEntity.getStatusCode() == HttpStatus.OK) {
+            String resp = responseEntity.getBody();
+            JSONObject json = JSONObject.parseObject(resp);
+            if (json.getIntValue("errcode") == 0) {
+                String access_token = json.getString("access_token");
+                corpInfo.setAccessToken(access_token);
+            } else {
+                throw new Exception(json.toJSONString());
+            }
+        }
+        return corpInfo.getAccessToken();
+    }
+
+
     //用于从中转服务器获取企业通讯录的部门详情数据
     @RequestMapping("/getCorpDeptDetail")
     public HttpRespMsg getCorpDeptDetail(String accessToken, int deptId) {

+ 12 - 6
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/Company.java

@@ -1,23 +1,22 @@
 package com.management.platform.entity;
 
 import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.annotation.TableField;
+import java.io.Serializable;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
 
-import java.io.Serializable;
-import java.time.LocalDateTime;
-
 /**
  * <p>
  * 
  * </p>
  *
  * @author Seyason
- * @since 2022-04-01
+ * @since 2022-07-07
  */
 @Data
 @EqualsAndHashCode(callSuper = false)
@@ -117,6 +116,13 @@ public class Company extends Model<Company> {
     private Integer packageFinance;
 
 
+    /**
+     * 供应商模块
+     */
+    @TableField("package_provider")
+    private Integer packageProvider;
+
+
     @Override
     protected Serializable pkVal() {
         return this.id;

+ 21 - 8
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/Project.java

@@ -1,27 +1,27 @@
 package com.management.platform.entity;
 
 import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.extension.activerecord.Model;
+import java.time.LocalDate;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableField;
+import java.io.Serializable;
+import java.util.List;
+import java.util.Map;
+
 import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
 import org.springframework.format.annotation.DateTimeFormat;
 
-import java.io.Serializable;
-import java.time.LocalDate;
-import java.util.List;
-import java.util.Map;
-
 /**
  * <p>
  * 
  * </p>
  *
  * @author Seyason
- * @since 2022-06-28
+ * @since 2022-07-07
  */
 @Data
 @EqualsAndHashCode(callSuper = false)
@@ -264,6 +264,19 @@ public class Project extends Model<Project> {
     private Integer projectMainId;
 
 
+    /**
+     * 供应商id
+     */
+    @TableField("provider_ids")
+    private String providerIds;
+
+    /**
+     * 供应商名称
+     */
+    @TableField("provider_names")
+    private String providerNames;
+
+
     @Override
     protected Serializable pkVal() {
         return this.id;

+ 84 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/ProviderInfo.java

@@ -0,0 +1,84 @@
+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-07
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+public class ProviderInfo extends Model<ProviderInfo> {
+
+    private static final long serialVersionUID=1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 客户编码
+     */
+    @TableField("provider_code")
+    private String providerCode;
+
+    /**
+     * 客户公司名称
+     */
+    @TableField("provider_name")
+    private String providerName;
+
+    /**
+     * 联系人
+     */
+    @TableField("contact_name")
+    private String contactName;
+
+    /**
+     * 联系人电话
+     */
+    @TableField("contact_phone")
+    private String contactPhone;
+
+    /**
+     * 邮箱
+     */
+    @TableField("email")
+    private String email;
+
+    /**
+     * 地址
+     */
+    @TableField("address")
+    private String address;
+
+    /**
+     * 系统公司id
+     */
+    @TableField("company_id")
+    private Integer companyId;
+
+    /**
+     * 备注
+     */
+    @TableField("remark")
+    private String remark;
+
+
+    @Override
+    protected Serializable pkVal() {
+        return this.id;
+    }
+
+}

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

@@ -17,7 +17,7 @@ import lombok.experimental.Accessors;
  * </p>
  *
  * @author Seyason
- * @since 2022-04-05
+ * @since 2022-07-07
  */
 @Data
 @EqualsAndHashCode(callSuper = false)
@@ -151,6 +151,13 @@ public class SysModule extends Model<SysModule> {
     @TableField(exist = false)
     private List<SysFunction> functionList;
 
+    /**
+     * 是否属于供应商模块
+     */
+    @TableField("package_provider")
+    private Integer packageProvider;
+
+
     @Override
     protected Serializable pkVal() {
         return this.id;

+ 16 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/ProviderInfoMapper.java

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

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

@@ -14,7 +14,7 @@ import com.management.platform.util.HttpRespMsg;
  */
 public interface ProjectProfessionService extends IService<ProjectProfession> {
 
-    void modify(Integer projectId, String json);
+    HttpRespMsg modify(Integer projectId, String json);
 
     HttpRespMsg get(Integer projectId);
 

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

@@ -39,6 +39,8 @@ public interface ProjectService extends IService<Project> {
                             Integer category,
                             String projectDesc,
                             Integer projectMainId,
+                            String providerIds,
+                            String providerNames,
                             HttpServletRequest request);
 
     HttpRespMsg deleteProject(Integer id, Integer force);

+ 21 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/ProviderInfoService.java

@@ -0,0 +1,21 @@
+package com.management.platform.service;
+
+import com.management.platform.entity.ProviderInfo;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.management.platform.util.HttpRespMsg;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author Seyason
+ * @since 2022-07-07
+ */
+public interface ProviderInfoService extends IService<ProviderInfo> {
+
+    HttpRespMsg importData(HttpServletRequest request, MultipartFile file);
+}

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

@@ -88,4 +88,6 @@ public interface ReportService extends IService<Report> {
     HttpRespMsg denyHisReport(Integer hisId, String reason, HttpServletRequest request);
 
     HttpRespMsg getReportListByToken(String token, String startDate, String endDate);
+
+    HttpRespMsg fixIssue();
 }

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

@@ -23,7 +23,7 @@ public interface UserService extends IService<User> {
 
     HttpRespMsg getUserInfo(String id);
 
-    HttpRespMsg getEmployeeList(Integer departmentId, String keyword, Integer status, Integer roleId, Integer pageIndex, Integer pageSize, HttpServletRequest request);
+    HttpRespMsg getEmployeeList(Integer departmentId, String keyword, Integer status, Integer roleId, Integer onlyDirect, Integer pageIndex, Integer pageSize, HttpServletRequest request);
 
     HttpRespMsg deleteUser(String userId, HttpServletRequest request);
 

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

@@ -314,7 +314,7 @@ public class DingDingServiceImpl implements DingDingService {
 
         if (accessToken == null) {
             System.out.println("获取第三方企业accessToke失败");
-            return "调用失败";
+            return "调用失败:获取第三方企业accessToke失败";
         } else {
             System.out.println("syncCorpMembs 开始获取部门, accessToken="+accessToken);
             //获取授权的部门

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

@@ -186,6 +186,9 @@ public class PermissionServiceImpl extends ServiceImpl<PermissionMapper, Permiss
             if (company.getPackageFinance() == 1) {
                 wrapper.or().eq("package_finance", 1);
             }
+            if (company.getPackageProvider() == 1) {
+                wrapper.or().eq("package_provider", 1);
+            }
             if (timeType.getReportWorkflow() == 1) {
                 wrapper.or().eq("report_workflow", 1);
             }
@@ -229,6 +232,9 @@ public class PermissionServiceImpl extends ServiceImpl<PermissionMapper, Permiss
             if (company.getPackageFinance() == 1) {
                 wrapper.or().eq("package_finance", 1);
             }
+//            if (company.getPackageProvider() == 1) {
+//                wrapper.or().eq("package_provider", 1);
+//            }
             if (timeType.getSyncCorpwxTime() == 1) {
                 wrapper.or().eq("sync_corpwx_time", 1);
             }

+ 20 - 10
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectProfessionServiceImpl.java

@@ -3,14 +3,8 @@ package com.management.platform.service.impl;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.management.platform.entity.PpMembs;
-import com.management.platform.entity.Profession;
-import com.management.platform.entity.ProjectProfession;
-import com.management.platform.entity.User;
-import com.management.platform.mapper.PpMembsMapper;
-import com.management.platform.mapper.ProfessionMapper;
-import com.management.platform.mapper.ProjectProfessionMapper;
-import com.management.platform.mapper.UserMapper;
+import com.management.platform.entity.*;
+import com.management.platform.mapper.*;
 import com.management.platform.service.PpMembsService;
 import com.management.platform.service.ProjectProfessionService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -49,11 +43,13 @@ public class ProjectProfessionServiceImpl extends ServiceImpl<ProjectProfessionM
     PpMembsMapper ppMembsMapper;
     @Resource
     ProfessionMapper professionMapper;
+    @Resource
+    ReportProfessionProgressMapper reportProfessionProgressMapper;
+
 
 
     @Override
-    public void modify(Integer projectId, String json) {
-        System.out.println(json);
+    public HttpRespMsg modify(Integer projectId, String json) {
         List<ProjectProfession> professionList = new ArrayList<>();
         JSONArray array = JSONArray.parseArray(json);
         for (int i=0;i<array.size(); i++) {
@@ -62,6 +58,19 @@ public class ProjectProfessionServiceImpl extends ServiceImpl<ProjectProfessionM
             projectProfession.setProjectId(projectId);
             professionList.add(projectProfession);
         }
+        //比较差异
+        List<ProjectProfession> oldPPList = projectProfessionMapper.selectList(new QueryWrapper<ProjectProfession>().eq("project_id", projectId));
+        List<Integer> removedProfessionIds = oldPPList.stream().filter(old -> !professionList.stream().anyMatch(p -> p.getProfessionId().equals(old.getProfessionId()))).map(ProjectProfession::getProfessionId).collect(Collectors.toList());
+        //检查日报
+        if (removedProfessionIds.size() > 0) {
+            long cnt = reportProfessionProgressMapper.selectCount(new QueryWrapper<ReportProfessionProgress>().eq("project_id", projectId).in("profession_id", removedProfessionIds).eq("audit_state", 0));
+            if (cnt > 0) {
+                HttpRespMsg msg = new HttpRespMsg();
+                msg.setError("尚存在日报在该专业上待审核,审核通过后才能移除");
+                return msg;
+            }
+        }
+
 //        //之前的数据都删掉
         projectProfessionMapper.delete(new QueryWrapper<ProjectProfession>().eq("project_id", projectId));
 //        //插入新的数据
@@ -84,6 +93,7 @@ public class ProjectProfessionServiceImpl extends ServiceImpl<ProjectProfessionM
         if (ppList.size() > 0) {
             ppMembsService.saveBatch(ppList);
         }
+        return get(projectId);
     }
 
     @Override

+ 8 - 2
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java

@@ -258,6 +258,8 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                                    Integer category,
                                    String projectDesc,
                                    Integer projectMainId,
+                                   String providerIds,
+                                   String providerNames,
                                    HttpServletRequest request) {
         HttpRespMsg httpRespMsg = new HttpRespMsg();
         User user = userMapper.selectById(request.getHeader("Token"));
@@ -313,7 +315,9 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                             .setCustomerId(customerId)
                             .setProjectDesc(projectDesc)
                             .setProjectMainId(projectMainId)
-                            .setTaskGpIncharge(taskGpIncharge);
+                            .setTaskGpIncharge(taskGpIncharge)
+                            .setProviderIds(providerIds)
+                            .setProviderNames(providerNames);
                     if (category != null) {
                         ProjectCategory projectCategory = projectCategoryMapper.selectById(category);
                         if (projectCategory != null) {
@@ -381,7 +385,9 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                         .setCustomerId(customerId)
                         .setProjectDesc(projectDesc)
                         .setProjectMainId(projectMainId)
-                        .setTaskGpIncharge(taskGpIncharge);
+                        .setTaskGpIncharge(taskGpIncharge)
+                        .setProviderIds(providerIds)
+                        .setProviderNames(providerNames);
                 if (category != null) {
                     ProjectCategory projectCategory = projectCategoryMapper.selectById(category);
                     if (projectCategory != null) {

+ 148 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProviderInfoServiceImpl.java

@@ -0,0 +1,148 @@
+package com.management.platform.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.management.platform.entity.CustomerInfo;
+import com.management.platform.entity.ProviderInfo;
+import com.management.platform.mapper.CustomerInfoMapper;
+import com.management.platform.mapper.ProviderInfoMapper;
+import com.management.platform.mapper.UserMapper;
+import com.management.platform.service.ProviderInfoService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.management.platform.util.ExcelUtil;
+import com.management.platform.util.HttpRespMsg;
+import org.apache.poi.EncryptedDocumentException;
+import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
+import org.apache.poi.ss.usermodel.*;
+import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import java.io.*;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author Seyason
+ * @since 2022-07-07
+ */
+@Service
+public class ProviderInfoServiceImpl extends ServiceImpl<ProviderInfoMapper, ProviderInfo> implements ProviderInfoService {
+
+    @Resource
+    ProviderInfoMapper providerInfoMapper;
+    @Resource
+    UserMapper userMapper;
+    @Override
+    public HttpRespMsg importData(HttpServletRequest request, MultipartFile multipartFile) {
+        HttpRespMsg msg=new HttpRespMsg();
+        Integer companyId=userMapper.selectById(request.getHeader("token")).getCompanyId();
+        String fileName=multipartFile.getOriginalFilename();
+        File file=new File(fileName == null ? "file" : fileName);
+        InputStream inputStream=null;
+        OutputStream outputStream=null;
+        try {
+            inputStream= multipartFile.getInputStream();
+            outputStream=new FileOutputStream(file);
+            byte[] buffer = new byte[4096];
+            int temp = 0;
+            while ((temp = inputStream.read(buffer, 0, 4096)) != -1) {
+                outputStream.write(buffer, 0, temp);
+            }
+            inputStream.close();
+            outputStream.close();
+
+            //然后解析表格
+            Workbook workbook = WorkbookFactory.create(new FileInputStream(file));
+            DateFormat df = new SimpleDateFormat("yyyy-MM");
+            //获取公司所有客户
+            List<ProviderInfo> allCustomerInfo = providerInfoMapper.selectList(new QueryWrapper<ProviderInfo>().eq("company_id", companyId));
+            Sheet sheet = workbook.getSheetAt(0);
+            //由于第一行需要指明列对应的标题
+            int rowNum = sheet.getLastRowNum();
+            if (rowNum == 0) {
+                msg.setError("请填写供应商数据");
+                return msg;
+            }
+            List<String> nameList=new ArrayList<>();
+            int dataCount = 0;
+            for (int rowIndex = 1; rowIndex <= rowNum; rowIndex++) {
+                Row row = sheet.getRow(rowIndex);
+                dataCount++;
+                if (row == null) {
+                    continue;
+                }
+                if (ExcelUtil.isRowEmpty(row)) {
+                    continue;
+                }
+                if (row.getCell(1) == null) {
+                    msg.setError("第"+dataCount+"行缺少供应商名称");
+                    return msg;
+                }
+                if(nameList.contains(row.getCell(1).toString())){
+                    msg.setError("当前导入数据存在重复供应商名称["+row.getCell(1).toString()+"]");
+                    return msg;
+                }
+                nameList.add(row.getCell(1).toString());
+                ProviderInfo customerInfo=new ProviderInfo();
+                List<ProviderInfo> collect = allCustomerInfo.stream().filter(sv -> sv.getProviderName().equals(row.getCell(1).toString())).collect(Collectors.toList());
+                customerInfo.setProviderCode(StringUtils.isEmpty(row.getCell(0))?"":row.getCell(0).toString());
+                customerInfo.setProviderName(StringUtils.isEmpty(row.getCell(1))?"":row.getCell(1).toString());
+                customerInfo.setContactName(StringUtils.isEmpty(row.getCell(2))?"":row.getCell(2).toString());
+                if(StringUtils.isEmpty(row.getCell(3))){
+                    customerInfo.setContactPhone("");
+                }else {
+                    row.getCell(3).setCellType(CellType.STRING);
+                    customerInfo.setContactPhone(row.getCell(3).getStringCellValue());
+                }
+                customerInfo.setEmail(StringUtils.isEmpty(row.getCell(3))?"":row.getCell(3).toString());
+                customerInfo.setAddress(StringUtils.isEmpty(row.getCell(4))?"":row.getCell(4).toString());
+                customerInfo.setRemark(StringUtils.isEmpty(row.getCell(5))?"":row.getCell(5).toString());
+                customerInfo.setCompanyId(companyId);
+                if(collect.size()>0){
+                    Integer id=collect.get(0).getId();
+                    customerInfo.setId(id);
+                    providerInfoMapper.updateById(customerInfo);
+                }else{
+                    providerInfoMapper.insert(customerInfo);
+                }
+            }
+            msg.data=dataCount;
+            return msg;
+        } catch (IOException e){
+            e.printStackTrace();
+            msg.setError("文件处理出错");
+            return msg;
+        } catch (InvalidFormatException e) {
+            e.printStackTrace();
+            msg.setError("文件格式错误,如果安装了加密软件需要先解密再上传");
+            return msg;
+        } catch (EncryptedDocumentException e) {
+            e.printStackTrace();
+            msg.setError("文件加密状态,需要先解除加密状态再上传");
+            return msg;
+        }finally {
+            //关闭流
+            try {
+                if (outputStream != null && inputStream != null) {
+                    outputStream.close();
+                    inputStream.close();
+                    System.out.println("流已关闭");
+                }
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+//            file.deleteOnExit();//程序退出时删除临时文件
+            System.out.println(file.delete());
+        }
+    }
+
+}

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

@@ -497,6 +497,9 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                 r.setTaskList(taskList.stream().filter(t->t.getProjectId().equals(r.getProjectId()) && t.getUserId().equals(r.getCreatorId())).collect(Collectors.toList()));
                 //获取当前项目的工程专业进度
                 List<ReportProfessionProgress> progressList = reportProfessionProgressService.list(new QueryWrapper<ReportProfessionProgress>().eq("report_id", r.getId()));
+                //去掉当前项目上已经不存在的专业
+                List<ProjectProfession> projectProfessions = projectProfessionMapper.selectList(new QueryWrapper<ProjectProfession>().eq("project_id", r.getProjectId()));
+                progressList = progressList.stream().filter(p->projectProfessions.stream().anyMatch(pp->pp.getProfessionId().equals(p.getProfessionId()))).collect(Collectors.toList());
                 progressList.stream().forEach(p->{
                     p.setProfessionName(professions.stream().filter(m->m.getId().equals(p.getProfessionId())).findFirst().get().getName());
                 });
@@ -3522,4 +3525,78 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
         return msg;
     }
 
+    @Override
+    public HttpRespMsg fixIssue() {
+        Integer companyId = 862;
+        Company company = companyMapper.selectById(companyId);
+        System.out.println("========处理公司======="+company.getCompanyName());
+        //查找某日某天的日报,项目上已经都审核通过,但是state = 0,并且没有走到下一个阶段的
+        List<Report> reportList = reportMapper.selectList(new QueryWrapper<Report>().eq("company_id", companyId));
+        List<String> creatorIds = reportList.stream().map(Report::getCreatorId).distinct().collect(Collectors.toList());
+        List<LocalDate> dateList = reportList.stream().map(Report::getCreateDate).distinct().collect(Collectors.toList());
+        List<User> userList = userMapper.selectList(new QueryWrapper<User>().eq("company_id", companyId));
+        List<Department> allDepts = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id", companyId));
+        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+
+        for (String creator : creatorIds) {
+            User user = userList.stream().filter(u -> u.getId().equals(creator)).findFirst().get();
+            String creatorName = user.getName();
+            String dateStr = "";
+            for (LocalDate date : dateList) {
+                //某人某天的全部日报
+                List<Report> userDayReport = reportList.stream().filter(r -> r.getCreatorId().equals(creator) && r.getCreateDate().isEqual(date)).collect(Collectors.toList());
+                if (userDayReport.size() > 0) {
+                    //有当前的日报
+                    boolean isAllProjectAuditPass = !userDayReport.stream().anyMatch(r->r.getProjectAuditState() != 1);
+                    boolean isAllState0 = !userDayReport.stream().anyMatch(r->r.getState() != 0);
+
+                    if (isAllProjectAuditPass && isAllState0) {
+                        //当前的日报项目全部通过,但是日报本身还是待审核状态的,需要更新
+                        dateStr +=dtf.format(date) + ", ";
+                        List<Integer> rids = userDayReport.stream().map(Report::getId).collect(Collectors.toList());
+                        //测试: 翁浩勃
+//                        if ("翁浩勃".equals(creatorName)) {
+//
+//                        }
+                        selfUpdateToNextWorkFlow(companyId, user, rids, allDepts);
+                    }
+                }
+            }
+            if (!StringUtils.isEmpty(dateStr)) {
+                System.out.println(creatorName+"  " + dateStr);
+            }
+        }
+
+        return new 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)
+                        .orderByAsc("seq"));
+        LocalDateTime now = LocalDateTime.now();
+        List<AuditWorkflowTimeSetting> deptSettings = settings.stream().filter(s->s.getDeptId().equals(auditTargetUser.getDepartmentId())).collect(Collectors.toList());
+        Report upR = new Report();
+        if (deptSettings.size() == 0) {
+            //直接进行项目经理审核
+            upR.setState(1).setProjectAuditTime(now);
+        } else {
+            for (int m=0;m<deptSettings.size(); m++) {
+                if (deptSettings.get(m).getIsDeptAudit()== 0) {//找到项目审核的那个节点
+                    AuditWorkflowTimeSetting nextNode = deptSettings.get(m + 1);
+                    upR.setIsDeptAudit(nextNode.getIsDeptAudit());
+                    if (upR.getIsDeptAudit() == 1) {
+                        upR.setAuditDeptid(nextNode.getAuditDeptId());
+                        Department department = allDepts.stream()
+                                .filter(ad -> ad.getDepartmentId().equals(nextNode.getAuditDeptId())).findFirst().get();
+                        System.out.println("更新到下个部门审核的节点:" + department.getDepartmentName());
+                        upR.setAuditDeptManagerid(department.getManagerId());
+                    }
+                    upR.setIsFinalAudit(nextNode.getIsFinal());
+                    break;
+                }
+            }
+        }
+        reportMapper.update(upR, new QueryWrapper<Report>().in("id", targetRids));
+    }
 }

+ 14 - 2
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/UserServiceImpl.java

@@ -229,6 +229,9 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
         if (company.getPackageFinance() == 1) {
             queryWrapper.or().eq("package_finance", 1);
         }
+        if (company.getPackageProvider() == 1) {
+            queryWrapper.or().eq("package_provider", 1);
+        }
         if (timeType.getReportWorkflow() == 1) {
             queryWrapper.or().eq("report_workflow", 1);
         }
@@ -396,7 +399,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
 
     //获取员工的列表
     @Override
-    public HttpRespMsg getEmployeeList(Integer departmentId, String keyword, Integer status, Integer roleId, Integer pageIndex, Integer pageSize, HttpServletRequest request) {
+    public HttpRespMsg getEmployeeList(Integer departmentId, String keyword, Integer status, Integer roleId, Integer onlyDirect, Integer pageIndex, Integer pageSize, HttpServletRequest request) {
         HttpRespMsg httpRespMsg = new HttpRespMsg();
         try {
             Integer companyId = userMapper.selectById(request.getHeader("Token")).getCompanyId();
@@ -414,7 +417,16 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
                 total = page.getTotal();
             } else {
                 //范围查找
-                list = userMapper.getUserByDepartmentList(page, companyId, getBranchDepartment(departmentId, companyId), keyword, status, roleId);
+                List<Integer> ids = new ArrayList<>();
+                if (onlyDirect != null && onlyDirect == 1) {
+                    //只看直属的
+                    ids.add(departmentId);
+                } else {
+                    //查看当前部门包括子部门的人员
+                    ids = getBranchDepartment(departmentId, companyId);
+                }
+
+                list = userMapper.getUserByDepartmentList(page, companyId, ids, keyword, status, roleId);
                 total = page.getTotal();
             }
             Map<String, Object> resultMap = new HashMap<>();

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

@@ -19,11 +19,12 @@
         <result column="package_engineering" property="packageEngineering" />
         <result column="package_simple" property="packageSimple" />
         <result column="package_finance" property="packageFinance" />
+        <result column="package_provider" property="packageProvider" />
     </resultMap>
 
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
-        id, company_name, staff_count_max, expiration_date, set_meal, package_worktime, package_project, package_contract, package_oa, package_etimecard, package_expense, package_customer, package_engineering, package_simple, package_finance
+        id, company_name, staff_count_max, expiration_date, set_meal, package_worktime, package_project, package_contract, package_oa, package_etimecard, package_expense, package_customer, package_engineering, package_simple, package_finance, package_provider
     </sql>
 
 </mapper>

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

@@ -39,14 +39,15 @@
         <result column="category_name" property="categoryName" />
         <result column="project_desc" property="projectDesc" />
         <result column="project_main_id" property="projectMainId" />
+        <result column="provider_ids" property="providerIds" />
+        <result column="provider_names" property="providerNames" />
     </resultMap>
 
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
-        id, project_name, company_id, project_code, incharger_id, plan_start_date, plan_end_date, progress, level, status, finish_date, creator_id, creator_name, create_date, contract_amount, budget, base_man, base_outsourcing, base_risk1, base_risk2, base_fee, fee_normal, fee_travel, fee_outsourcing, fee_man, customer_id, customer_name, is_public, associate_degrees, associate_degree_names, task_gp_incharge, category, category_name, project_desc, project_main_id
+        id, project_name, company_id, project_code, incharger_id, plan_start_date, plan_end_date, progress, level, status, finish_date, creator_id, creator_name, create_date, contract_amount, budget, base_man, base_outsourcing, base_risk1, base_risk2, base_fee, fee_normal, fee_travel, fee_outsourcing, fee_man, customer_id, customer_name, is_public, associate_degrees, associate_degree_names, task_gp_incharge, category, category_name, project_desc, project_main_id, provider_ids, provider_names
     </sql>
 
-
     <resultMap id="BaseResultMap2" type="com.management.platform.entity.vo.ProjectWithStage">
         <result column="id" property="id" />
         <result column="project_name" property="projectName" />

+ 23 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ProviderInfoMapper.xml

@@ -0,0 +1,23 @@
+<?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.ProviderInfoMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.management.platform.entity.ProviderInfo">
+        <id column="id" property="id" />
+        <result column="provider_code" property="providerCode" />
+        <result column="provider_name" property="providerName" />
+        <result column="contact_name" property="contactName" />
+        <result column="contact_phone" property="contactPhone" />
+        <result column="email" property="email" />
+        <result column="address" property="address" />
+        <result column="company_id" property="companyId" />
+        <result column="remark" property="remark" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id, provider_code, provider_name, contact_name, contact_phone, email, address, company_id, remark
+    </sql>
+
+</mapper>

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

@@ -23,11 +23,12 @@
         <result column="report_workflow" property="reportWorkflow" />
         <result column="package_finance" property="packageFinance" />
         <result column="need_dept_audit" property="needDeptAudit" />
+        <result column="package_provider" property="packageProvider" />
     </resultMap>
 
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
-        id, name, path, parent_id, icon, orderitem, is_menu, use_state, package_time, package_project, package_oa, package_expense, package_customer, package_engineering, package_contract, package_etimecard, report_workflow, package_finance, need_dept_audit
+        id, name, path, parent_id, icon, orderitem, is_menu, use_state, package_time, package_project, package_oa, package_expense, package_customer, package_engineering, package_contract, package_etimecard, report_workflow, package_finance, need_dept_audit, package_provider
     </sql>
 
 </mapper>