Przeglądaj źródła

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

Lijy 1 rok temu
rodzic
commit
e9efdeafdc
37 zmienionych plików z 959 dodań i 71 usunięć
  1. 21 0
      fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/controller/ActionLogController.java
  2. 8 5
      fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/controller/BusinessOpportunityController.java
  3. 6 2
      fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/controller/ClueController.java
  4. 23 0
      fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/controller/CustomController.java
  5. 21 0
      fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/controller/UploadFileController.java
  6. 68 0
      fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/entity/ActionLog.java
  7. 2 2
      fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/entity/Clue.java
  8. 26 2
      fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/entity/Custom.java
  9. 73 0
      fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/entity/UploadFile.java
  10. 16 0
      fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/mapper/ActionLogMapper.java
  11. 14 0
      fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/mapper/CustomMapper.java
  12. 16 0
      fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/mapper/UploadFileMapper.java
  13. 16 0
      fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/ActionLogService.java
  14. 7 0
      fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/CustomService.java
  15. 16 0
      fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/UploadFileService.java
  16. 20 0
      fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/impl/ActionLogServiceImpl.java
  17. 13 8
      fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/impl/ClueServiceImpl.java
  18. 71 3
      fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/impl/CustomServiceImpl.java
  19. 20 0
      fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/impl/UploadFileServiceImpl.java
  20. 20 0
      fhKeeper/formulahousekeeper/management-crm/src/main/resources/mapper/ActionLogMapper.xml
  21. 8 8
      fhKeeper/formulahousekeeper/management-crm/src/main/resources/mapper/ClueMapper.xml
  22. 220 0
      fhKeeper/formulahousekeeper/management-crm/src/main/resources/mapper/CustomMapper.xml
  23. 21 0
      fhKeeper/formulahousekeeper/management-crm/src/main/resources/mapper/UploadFileMapper.xml
  24. 4 4
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ProjectController.java
  25. 0 2
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/TaskGroupController.java
  26. 78 6
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/UserWithBeisenController.java
  27. 0 6
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/TaskGroup.java
  28. 2 2
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/ProjectService.java
  29. 27 7
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java
  30. 1 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/task/TimingTask.java
  31. 66 2
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/util/BeiSenUtils.java
  32. 2 2
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ProjectMapper.xml
  33. 1 2
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/TaskGroupMapper.xml
  34. 1 0
      fhKeeper/formulahousekeeper/timesheet/src/i18n/en.json
  35. 1 0
      fhKeeper/formulahousekeeper/timesheet/src/i18n/zh.json
  36. 12 4
      fhKeeper/formulahousekeeper/timesheet/src/views/corpreport/list.vue
  37. 38 3
      fhKeeper/formulahousekeeper/timesheet/src/views/workReport/daily.vue

+ 21 - 0
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/controller/ActionLogController.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 2024-03-26
+ */
+@RestController
+@RequestMapping("/action-log")
+public class ActionLogController {
+
+}
+

+ 8 - 5
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/controller/BusinessOpportunityController.java

@@ -58,7 +58,7 @@ public class BusinessOpportunityController {
     }
 
     @RequestMapping("list")
-    public HashMap<Object, Object> list(@RequestBody BusinessOpportunity bo, HttpServletRequest request) {
+    public HttpRespMsg list(@RequestBody BusinessOpportunity bo, HttpServletRequest request) {
         HashMap<Object, Object> r = new HashMap<>();
         User user = userMapper.selectById(request.getHeader("Token"));
         bo.setIsDelete(0);
@@ -78,11 +78,13 @@ public class BusinessOpportunityController {
         }
         r.put("data", list);
         r.put("total",i);
-        return r;
+        HttpRespMsg msg = new HttpRespMsg();
+        msg.setData(r);
+        return msg;
 
     }
     @RequestMapping("deleterList")
-    public HashMap<Object, Object> deleterList(@RequestBody BusinessOpportunity bo, HttpServletRequest request) {
+    public HttpRespMsg deleterList(@RequestBody BusinessOpportunity bo, HttpServletRequest request) {
         HashMap<Object, Object> r = new HashMap<>();
         User user = userMapper.selectById(request.getHeader("Token"));
         bo.setIsDelete(1);
@@ -102,8 +104,9 @@ public class BusinessOpportunityController {
         }
         r.put("data", list);
         r.put("total",i);
-        return r;
-
+        HttpRespMsg msg = new HttpRespMsg();
+        msg.setData(r);
+        return msg;
     }
 
 

+ 6 - 2
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/controller/ClueController.java

@@ -87,7 +87,9 @@ public class ClueController {
         HashMap<Object, Object> map = new HashMap<>();
         map.put("data", list);
         map.put("total", i);
-        return map;
+        HttpRespMsg msg = new HttpRespMsg();
+        msg.setData(map);
+        return msg;
     }
 
     @RequestMapping("listDeleterClue")
@@ -115,7 +117,9 @@ public class ClueController {
         HashMap<Object, Object> map = new HashMap<>();
         map.put("data", list);
         map.put("total",i);
-        return map;
+        HttpRespMsg httpRespMsg = new HttpRespMsg();
+        httpRespMsg.setData(map);
+        return httpRespMsg;
     }
 
     @RequestMapping("/insertAndUpdate")

+ 23 - 0
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/controller/CustomController.java

@@ -3,6 +3,8 @@ package com.management.platform.controller;
 
 import com.management.platform.entity.Clue;
 import com.management.platform.entity.Custom;
+import com.management.platform.entity.User;
+import com.management.platform.mapper.UserMapper;
 import com.management.platform.service.CustomService;
 import com.management.platform.util.HttpRespMsg;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -28,12 +30,23 @@ public class CustomController {
 
     @Autowired
     private CustomService customService;
+    @Autowired
+    private UserMapper userMapper;
+
+    @RequestMapping("list")
+    public HttpRespMsg list(Custom custom , HttpServletRequest request){
+        return customService.getList(custom,request);
+    }
 
 
     @RequestMapping("insertAndUpdate")
     public HttpRespMsg insertAndUpdate(Custom custom , HttpServletRequest request){
         return customService.insertAndUpdate(custom,request);
     }
+    @RequestMapping("getInfo")
+    public HttpRespMsg getInfo(Custom custom , HttpServletRequest request){
+        return customService.getInfo(custom,request);
+    }
     // 批量放入回收站
     @RequestMapping("deleter")
     public Object delete(Custom custom) {
@@ -89,6 +102,16 @@ public class CustomController {
         return msg;
     }
 
+    // 认领&转移线索
+    @RequestMapping("claim")
+    public Object claim( Custom custom, HttpServletRequest request) {
+        User user = userMapper.selectById(request.getHeader("Token"));
+        HttpRespMsg msg = new HttpRespMsg();
+        msg.setMsg("操作成功");
+        customService.getAndTransfer(custom, user);
+        return msg;
+    }
+
 
 }
 

+ 21 - 0
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/controller/UploadFileController.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 2024-03-26
+ */
+@RestController
+@RequestMapping("/upload-file")
+public class UploadFileController {
+
+}
+

+ 68 - 0
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/entity/ActionLog.java

@@ -0,0 +1,68 @@
+package com.management.platform.entity;
+
+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 java.util.Date;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author Seyason
+ * @since 2024-03-26
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+public class ActionLog extends Model<ActionLog> {
+
+    private static final long serialVersionUID=1L;
+
+    @TableId("id")
+    private Long id;
+
+    /**
+     * 模块id
+     */
+    @TableField("item_id")
+    private Integer itemId;
+
+    /**
+     * 操作时间
+     */
+    @TableField("creat_time")
+    private Date creatTime;
+
+    /**
+     * 操作内容
+     */
+    @TableField("name")
+    private String name;
+
+    /**
+     * 创建人id
+     */
+    @TableField("user_id")
+    private String userId;
+
+    /**
+     * 模块代码
+     */
+    @TableField("code")
+    private String code;
+
+
+    @Override
+    protected Serializable pkVal() {
+        return this.id;
+    }
+
+}

+ 2 - 2
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/entity/Clue.java

@@ -161,9 +161,9 @@ public class Clue extends Model<Clue> {
     @TableField(exist = false)
     private Integer pageFrom;
     @TableField(exist = false)
-    private List<ClueLog> clueLogList;
+    private List<ActionLog> clueLogList;
     @TableField(exist = false)
-    private List<ClueUploadfile> clueUploadfileList;
+    private List<UploadFile> files;
 
 
 

+ 26 - 2
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/entity/Custom.java

@@ -3,8 +3,11 @@ 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 java.time.LocalDateTime;
+
 import com.baomidou.mybatisplus.annotation.TableField;
+
 import java.io.Serializable;
 import java.util.Date;
 import java.util.List;
@@ -15,7 +18,7 @@ import lombok.experimental.Accessors;
 
 /**
  * <p>
- * 
+ *
  * </p>
  *
  * @author Seyason
@@ -26,7 +29,7 @@ import lombok.experimental.Accessors;
 @Accessors(chain = true)
 public class Custom extends Model<Custom> {
 
-    private static final long serialVersionUID=1L;
+    private static final long serialVersionUID = 1L;
 
     @TableId(value = "id", type = IdType.AUTO)
     private Integer id;
@@ -44,6 +47,7 @@ public class Custom extends Model<Custom> {
      */
     @TableField("incharger_id")
     private String inchargerId;
+    private String inchargerName;
 
     /**
      * 公司电话
@@ -56,18 +60,24 @@ public class Custom extends Model<Custom> {
      */
     @TableField("custom_source_id")
     private Integer customSourceId;
+    @TableField(exist = false)
+    private String customSourceValue;
 
     /**
      * 客户行业id
      */
     @TableField("customer_industry_id")
     private Integer customerIndustryId;
+    @TableField(exist = false)
+    private Integer customerIndustryValue;
 
     /**
      * 客户级别id
      */
     @TableField("customer_level_id")
     private Integer customerLevelId;
+    @TableField(exist = false)
+    private String customerLevelValue;
 
     /**
      * 邮箱
@@ -104,6 +114,8 @@ public class Custom extends Model<Custom> {
      */
     @TableField("country_billing")
     private String countryBilling;
+    @TableField(exist = false)
+    private String userId;
 
     /**
      * 开单地址-省/市
@@ -202,6 +214,18 @@ public class Custom extends Model<Custom> {
     private Integer isDelete;
     @TableField(exist = false)
     private String ids;
+    @TableField(exist = false)
+    private String startTime;
+    @TableField(exist = false)
+    private String endTime;
+    @TableField(exist = false)
+    private Integer pageIndex;
+    @TableField(exist = false)
+    private Integer pageFrom;
+    @TableField(exist = false)
+    private List<UploadFile> files;
+    @TableField(exist = false)
+    private List<BusinessOpportunity> BusinessOpportunitys;
 
 
     @Override

+ 73 - 0
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/entity/UploadFile.java

@@ -0,0 +1,73 @@
+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 java.time.LocalDateTime;
+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 2024-03-26
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+public class UploadFile extends Model<UploadFile> {
+
+    private static final long serialVersionUID=1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 名称
+     */
+    @TableField("name")
+    private String name;
+
+    /**
+     * 文件地址
+     */
+    @TableField("path")
+    private String path;
+
+    /**
+     * 对应模块id
+     */
+    @TableField("item_id")
+    private Integer itemId;
+
+    /**
+     * 创建时间
+     */
+    @TableField("create_time")
+    private LocalDateTime createTime;
+
+    /**
+     * 创建人id
+     */
+    @TableField("create_id")
+    private String createId;
+
+    /**
+     * 模块码clue线索 business商户 custom客户
+     */
+    @TableField("code")
+    private String code;
+
+
+    @Override
+    protected Serializable pkVal() {
+        return this.id;
+    }
+
+}

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

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

+ 14 - 0
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/mapper/CustomMapper.java

@@ -1,8 +1,11 @@
 package com.management.platform.mapper;
 
+import com.management.platform.entity.Clue;
 import com.management.platform.entity.Custom;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 
+import java.util.List;
+
 /**
  * <p>
  *  Mapper 接口
@@ -13,4 +16,15 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  */
 public interface CustomMapper extends BaseMapper<Custom> {
 
+    List<Custom> getList(Custom custom);
+
+    int getTotal(Custom custom);
+
+    List<Custom> getList1(Custom custom);
+
+    int getTotal1(Custom custom);
+
+    List<Custom> getList2(Custom custom);
+
+    int getTotal2(Custom custom);
 }

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

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

+ 16 - 0
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/ActionLogService.java

@@ -0,0 +1,16 @@
+package com.management.platform.service;
+
+import com.management.platform.entity.ActionLog;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author Seyason
+ * @since 2024-03-26
+ */
+public interface ActionLogService extends IService<ActionLog> {
+
+}

+ 7 - 0
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/CustomService.java

@@ -2,6 +2,7 @@ package com.management.platform.service;
 
 import com.management.platform.entity.Custom;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.management.platform.entity.User;
 import com.management.platform.util.HttpRespMsg;
 
 import javax.servlet.http.HttpServletRequest;
@@ -25,4 +26,10 @@ public interface CustomService extends IService<Custom> {
     void isRollback(List<Integer> ids);
 
     void isReallyDelete(List<Integer> ids);
+
+    void getAndTransfer(Custom custom, User user);
+
+    HttpRespMsg getInfo(Custom custom, HttpServletRequest request);
+
+    HttpRespMsg getList(Custom custom, HttpServletRequest request);
 }

+ 16 - 0
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/UploadFileService.java

@@ -0,0 +1,16 @@
+package com.management.platform.service;
+
+import com.management.platform.entity.UploadFile;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author Seyason
+ * @since 2024-03-26
+ */
+public interface UploadFileService extends IService<UploadFile> {
+
+}

+ 20 - 0
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/impl/ActionLogServiceImpl.java

@@ -0,0 +1,20 @@
+package com.management.platform.service.impl;
+
+import com.management.platform.entity.ActionLog;
+import com.management.platform.mapper.ActionLogMapper;
+import com.management.platform.service.ActionLogService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author Seyason
+ * @since 2024-03-26
+ */
+@Service
+public class ActionLogServiceImpl extends ServiceImpl<ActionLogMapper, ActionLog> implements ActionLogService {
+
+}

+ 13 - 8
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/impl/ClueServiceImpl.java

@@ -52,11 +52,15 @@ public class ClueServiceImpl extends ServiceImpl<ClueMapper, Clue> implements Cl
     @Autowired
     private ClueLogMapper clueLogMapper;
     @Autowired
+    private UploadFileMapper uploadFileMapper;
+    @Autowired
     private SysFormMapper SysFormMapper;
     @Autowired
     private UserMapper userMapper;
     @Autowired
     private UserService userService;
+    @Autowired
+    private ActionLogMapper actionLogMapper;
     @Resource
     private ExcelExportServiceImpl excelExportService;
 
@@ -151,11 +155,11 @@ public class ClueServiceImpl extends ServiceImpl<ClueMapper, Clue> implements Cl
     @Override
     public Clue getInfo(Clue clue) {
         Clue clue1 = clueMapper.selectById(clue.getId());
-        clue1.setClueLogList(clueLogMapper.selectList(
-                new QueryWrapper<ClueLog>().eq("clue_id", clue.getId())
+        clue1.setClueLogList(actionLogMapper.selectList(
+                new QueryWrapper<ActionLog>().eq("item_id", clue.getId()).eq("code","clue")
         ));
-        clue1.setClueUploadfileList(clueUploadfileMapper.selectList(
-                    new QueryWrapper<ClueUploadfile>().eq("clue_id", clue.getId())));
+        clue1.setFiles(uploadFileMapper.selectList(
+                    new QueryWrapper<UploadFile>().eq("code","clue").eq("item_id", clue.getId())));
         return clue1;
     }
 
@@ -180,20 +184,21 @@ public class ClueServiceImpl extends ServiceImpl<ClueMapper, Clue> implements Cl
         UpdateWrapper<Clue> updateWrapper = new UpdateWrapper<>();
         updateWrapper.eq("id", clue.getId());
         String inchargerId = clue.getInchargerId();
-        ClueLog clueLog = new ClueLog();
+        ActionLog clueLog = new ActionLog();
         clueLog.setUserId(user.getId());
-        clueLog.setClueId(clue.getId());
+        clueLog.setItemId(clue.getId());
         clueLog.setCreatTime(new Date());
+        clueLog.setCode("clue");
         if (inchargerId == null) {
             //认领
             clueLog.setName("认领了线索");
             clue.setInchargerId(user.getId());
-            clueLogMapper.insert(clueLog);
+            actionLogMapper.insert(clueLog);
         } else {
             //转移
             clueLog.setName("转移了线索");
             clue.setInchargerId(clue.getInchargerId());
-            clueLogMapper.insert(clueLog);
+            actionLogMapper.insert(clueLog);
         }
         clueMapper.update(clue, updateWrapper);
 

+ 71 - 3
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/impl/CustomServiceImpl.java

@@ -2,20 +2,23 @@ package com.management.platform.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
-import com.management.platform.entity.Clue;
-import com.management.platform.entity.Custom;
-import com.management.platform.entity.User;
+import com.management.platform.entity.*;
+import com.management.platform.mapper.BusinessOpportunityMapper;
 import com.management.platform.mapper.CustomMapper;
+import com.management.platform.mapper.UploadFileMapper;
 import com.management.platform.mapper.UserMapper;
 import com.management.platform.service.CustomService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.management.platform.service.SysFunctionService;
 import com.management.platform.util.HttpRespMsg;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.servlet.http.HttpServletRequest;
+import java.util.ArrayList;
 import java.util.Date;
+import java.util.HashMap;
 import java.util.List;
 
 /**
@@ -33,6 +36,14 @@ public class CustomServiceImpl extends ServiceImpl<CustomMapper, Custom> impleme
     @Autowired
     private CustomMapper customMapper;
 
+    @Autowired
+    private UploadFileMapper uploadFileMapper;
+
+    @Autowired
+    private BusinessOpportunityMapper businessOpportunityMapper;
+    @Autowired
+    private SysFunctionService sysFunctionService;
+
     @Override
     public HttpRespMsg insertAndUpdate(Custom custom, HttpServletRequest request) {
         HttpRespMsg msg = new HttpRespMsg();
@@ -102,6 +113,63 @@ public class CustomServiceImpl extends ServiceImpl<CustomMapper, Custom> impleme
         customMapper.deleteBatchIds(ids);
     }
 
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void getAndTransfer(Custom custom, User user) {
+        UpdateWrapper<Custom> updateWrapper = new UpdateWrapper<>();
+        updateWrapper.eq("id", custom.getId());
+        String inchargerId = custom.getInchargerId();
+        if (inchargerId == null) {
+            //认领
+        } else {
+            //转移
+        }
+        customMapper.update(custom, updateWrapper);
+    }
+
+    @Override
+    public HttpRespMsg getInfo(Custom custom, HttpServletRequest request) {
+        Custom custom1 = customMapper.selectById(custom.getId());
+        custom1.setFiles(uploadFileMapper.selectList(new QueryWrapper<UploadFile>().eq("code", "custom").eq("item_id",custom1.getId())));
+        custom1.setBusinessOpportunitys(businessOpportunityMapper.selectList(new QueryWrapper<BusinessOpportunity>().eq("customer_id",custom1.getId())));
+        HttpRespMsg httpRespMsg = new HttpRespMsg();
+        httpRespMsg.setData(custom1);
+        return httpRespMsg;
+    }
+
+    @Override
+    public HttpRespMsg getList(Custom custom, HttpServletRequest request) {
+        User user = userMapper.selectById(request.getHeader("Token"));
+        custom.setCompanyId(user.getCompanyId());
+        custom.setIsDelete(0);
+        custom.setUserId(user.getId());
+        custom.setEndTime(custom.getEndTime() + " 23:59:59");
+        custom.setPageIndex((custom.getPageIndex()-1) * custom.getPageFrom() );
+        boolean isAll = sysFunctionService.hasPriviledge(user.getRoleId(), "查看全部客户");
+        boolean isNotAll = sysFunctionService.hasPriviledge(user.getRoleId(), "查看负责部门客户");
+        List<Custom> list = new ArrayList<>();
+        int i = 0;
+        if (!isAll) {
+            //查看全部线索
+            list = customMapper.getList(custom);
+            i = customMapper.getTotal(custom);
+        } else if (!isNotAll) {
+            //查看负责部门线索 找出所处部门下所有的负责人
+            list = customMapper.getList1(custom);
+            i = customMapper.getTotal1(custom);
+        } else {
+            // 查看负责人为 自己 和 null的数据
+            list = customMapper.getList2(custom);
+            i = customMapper.getTotal2(custom);
+        }
+        HashMap<Object, Object> map = new HashMap<>();
+        map.put("data", list);
+        map.put("total", i);
+        HttpRespMsg msg = new HttpRespMsg();
+        msg.setData(map);
+        return msg;
+    }
+
 
     private Custom setNull(Custom clue) {
         if (clue.getPlate1() == "") {

+ 20 - 0
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/impl/UploadFileServiceImpl.java

@@ -0,0 +1,20 @@
+package com.management.platform.service.impl;
+
+import com.management.platform.entity.UploadFile;
+import com.management.platform.mapper.UploadFileMapper;
+import com.management.platform.service.UploadFileService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author Seyason
+ * @since 2024-03-26
+ */
+@Service
+public class UploadFileServiceImpl extends ServiceImpl<UploadFileMapper, UploadFile> implements UploadFileService {
+
+}

+ 20 - 0
fhKeeper/formulahousekeeper/management-crm/src/main/resources/mapper/ActionLogMapper.xml

@@ -0,0 +1,20 @@
+<?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.ActionLogMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.management.platform.entity.ActionLog">
+        <id column="id" property="id" />
+        <result column="item_id" property="itemId" />
+        <result column="creat_time" property="creatTime" />
+        <result column="name" property="name" />
+        <result column="user_id" property="userId" />
+        <result column="code" property="code" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id, item_id, creat_time, name, user_id, code
+    </sql>
+
+</mapper>

+ 8 - 8
fhKeeper/formulahousekeeper/management-crm/src/main/resources/mapper/ClueMapper.xml

@@ -56,7 +56,7 @@
                (select name from sys_dict where c.clue_source_id = id and code = 'ClueSources') clueSourceValue,
                (select name from sys_dict where c.customer_industry_id = id and code = 'CustomIndustry') customerIndustryValue,
                (select name from sys_dict where c.customer_level_id = id and code = 'CustomLevel') customerLevelValue
-        from Clue c
+        from clue c
         where
             c.company_id = #{companyId} and is_delete = #{isDelete}
         <if test="inchargerId != null and inchargerId != ''  ">
@@ -111,7 +111,7 @@
         (select name from sys_dict where c.clue_source_id = id and code = 'ClueSources') clueSourceValue,
         (select name from sys_dict where c.customer_industry_id = id and code = 'CustomIndustry') customerIndustryValue,
         (select name from sys_dict where c.customer_level_id = id and code = 'CustomLevel') customerLevelValue
-        from Clue c
+        from clue c
         where
         c.company_id = #{clue.companyId} and is_delete = #{clue.isDelete}
         and c.incharger_id in
@@ -169,7 +169,7 @@
         (select name from sys_dict where c.clue_source_id = id and code = 'ClueSources') clueSourceValue,
         (select name from sys_dict where c.customer_industry_id = id and code = 'CustomIndustry') customerIndustryValue,
         (select name from sys_dict where c.customer_level_id = id and code = 'CustomLevel') customerLevelValue
-        from Clue c
+        from clue c
         where
         c.company_id = #{clue.companyId} and is_delete = #{clue.isDelete}
         and c.incharger_id = #{userId} or c.incharger_id is null
@@ -225,7 +225,7 @@
         (select name from sys_dict where c.clue_source_id = id and code = 'ClueSources') clueSourceValue,
         (select name from sys_dict where c.customer_industry_id = id and code = 'CustomIndustry') customerIndustryValue,
         (select name from sys_dict where c.customer_level_id = id and code = 'CustomLevel') customerLevelValue
-        from Clue c
+        from clue c
         where
             c.company_id = #{companyId} and is_delete = 1
         <if test="startTime != null and endTime != null ">
@@ -247,7 +247,7 @@
     </select>
     <select id="getTotal" resultType="java.lang.Integer">
         select count(*)
-        from Clue c
+        from clue c
         where
         c.company_id = #{companyId} and is_delete = #{isDelete}
         <if test="clue.startTime != null and clue.endTime != null ">
@@ -268,7 +268,7 @@
     </select>
     <select id="getDeleterTotal" resultType="java.lang.Integer">
         select count(*)
-        from Clue c
+        from clue c
         where
         c.company_id = #{companyId} and is_delete = 1
         <if test="inchargerId != null and inchargerId != ''  ">
@@ -290,7 +290,7 @@
     <select id="getTotal1" resultType="java.lang.Integer">
         select c.id,
         COUNT(c.company_id)
-        from Clue c
+        from clue c
         where
         c.company_id = #{clue.companyId} and is_delete = #{clue.isDelete}
         and c.incharger_id in
@@ -324,7 +324,7 @@
     <select id="getTotal2" resultType="java.lang.Integer">
         select
         COUNT(c.id)
-        from Clue c
+        from clue c
         where
         c.company_id = #{clue.companyId} and is_delete = #{clue.isDelete}
         <if test="clue.inchargerId != null and clue.inchargerId != ''  ">

+ 220 - 0
fhKeeper/formulahousekeeper/management-crm/src/main/resources/mapper/CustomMapper.xml

@@ -38,5 +38,225 @@
     <sql id="Base_Column_List">
         id, company_id, custom_name, custom_source_id, customer_industry_id, customer_level_id, email, owner_id, custom_code, tel_phone, fax, country_billing, province_billing, city_billing, street_billing, country_delivery, province_delivery, city_delivery, street_delivery, create_time, plate1, plate2, plate3, plate4, plate5, creator_id, custom_desc, is_delete
     </sql>
+    <select id="getList" resultType="com.management.platform.entity.Custom">
+        select id,
+        custom_name,
+        email,
+        company_phone,
+        create_time,
+        (select name from sys_dict where customer_level_id = id and code = 'CustomLevel') customerLevelValue,
+        (select name from sys_dict where customer_industry_id = id and code = 'CustomIndustry') customerIndustryValue,
+        (select name from sys_dict where custom_source_id = id and code = 'CustomSources') customSourceValue,
+        (select `name` from `user` where id = incharger_id) inchargerName,
+        (select `name` from `user` where id = creator_id) creatorName
+        from custom
+        where company_id = #{companyId}
+          and is_delete =#{isDelete}
+        <if test="inchargerId != null and inchargerId != ''  ">
+            and incharger_id =#{inchargerId}
+        </if>
+        <if test="startTime != null and endTime != null ">
+            and create_time BETWEEN #{startTime} and #{endTime}
+        </if>
+        <if test="customName != null and customName != '' ">
+            and custom_name = #{customName}
+        </if>
+        <if test="email != null and email != '' ">
+            and email = #{email}
+        </if>
+        <if test="companyPhone != null ">
+            and company_phone = #{companyPhone}
+        </if>
+        <if test="customerLevelId != null ">
+            and customer_level_id = #{customerLevelId}
+        </if>
+        <if test="customSourceId != null ">
+            and custom_source_id = #{customSourceId}
+        </if>
+          <if test="customerIndustryId != null ">
+            and customer_industry_id = #{customerIndustryId}
+        </if>
+        Limit #{pageIndex},#{pageFrom}
+    </select>
+    <select id="getTotal" resultType="java.lang.Integer">
+        select count(id)
+        from custom
+        where company_id = #{companyId}
+        and is_delete =#{isDelete}
+        <if test="inchargerId != null and inchargerId != ''  ">
+            and incharger_id =#{inchargerId}
+        </if>
+        <if test="startTime != null and endTime != null ">
+            and create_time BETWEEN #{startTime} and #{endTime}
+        </if>
+        <if test="customName != null and customName != '' ">
+            and custom_name = #{customName}
+        </if>
+        <if test="email != null and email != '' ">
+            and email = #{email}
+        </if>
+        <if test="companyPhone != null ">
+            and company_phone = #{companyPhone}
+        </if>
+        <if test="customerLevelId != null ">
+            and customer_level_id = #{customerLevelId}
+        </if>
+        <if test="customSourceId != null ">
+            and custom_source_id = #{customSourceId}
+        </if>
+        <if test="customerIndustryId != null ">
+            and customer_industry_id = #{customerIndustryId}
+        </if>
+    </select>
+    <select id="getList1" resultType="com.management.platform.entity.Custom">
+        select id,
+        custom_name,
+        email,
+        company_phone,
+        create_time,
+        (select name from sys_dict where customer_level_id = id and code = 'CustomLevel') customerLevelValue,
+        (select name from sys_dict where customer_industry_id = id and code = 'CustomIndustry') customerIndustryValue,
+        (select name from sys_dict where custom_source_id = id and code = 'CustomSources') customSourceValue,
+        (select `name` from `user` where id = incharger_id) inchargerName,
+        (select `name` from `user` where id = creator_id) creatorName
+        from custom
+        where company_id = #{companyId}
+        and is_delete =#{isDelete}
+        and incharger_id in
+        (SELECT id from `user` WHERE department_id = (SELECT department_id from `user` WHERe id = #{userId}))
+        or incharger_id is null
+        <if test="inchargerId != null and inchargerId != ''  ">
+            and incharger_id =#{inchargerId}
+        </if>
+        <if test="startTime != null and endTime != null ">
+            and create_time BETWEEN #{startTime} and #{endTime}
+        </if>
+        <if test="customName != null and customName != '' ">
+            and custom_name = #{customName}
+        </if>
+        <if test="email != null and email != '' ">
+            and email = #{email}
+        </if>
+        <if test="companyPhone != null ">
+            and company_phone = #{companyPhone}
+        </if>
+        <if test="customerLevelId != null ">
+            and customer_level_id = #{customerLevelId}
+        </if>
+        <if test="customSourceId != null ">
+            and custom_source_id = #{customSourceId}
+        </if>
+        <if test="customerIndustryId != null ">
+            and customer_industry_id = #{customerIndustryId}
+        </if>
+        Limit #{pageIndex},#{pageFrom}
+    </select>
+    <select id="getTotal1" resultType="java.lang.Integer">
+        select count(id)
+        from custom
+        where company_id = #{companyId}
+        and is_delete =#{isDelete}
+        and incharger_id in
+        (SELECT id from `user` WHERE department_id = (SELECT department_id from `user` WHERe id = #{userId}))
+        or incharger_id is null
+        <if test="inchargerId != null and inchargerId != ''  ">
+            and incharger_id =#{inchargerId}
+        </if>
+        <if test="startTime != null and endTime != null ">
+            and create_time BETWEEN #{startTime} and #{endTime}
+        </if>
+        <if test="customName != null and customName != '' ">
+            and custom_name = #{customName}
+        </if>
+        <if test="email != null and email != '' ">
+            and email = #{email}
+        </if>
+        <if test="companyPhone != null ">
+            and company_phone = #{companyPhone}
+        </if>
+        <if test="customerLevelId != null ">
+            and customer_level_id = #{customerLevelId}
+        </if>
+        <if test="customSourceId != null ">
+            and custom_source_id = #{customSourceId}
+        </if>
+        <if test="customerIndustryId != null ">
+            and customer_industry_id = #{customerIndustryId}
+        </if>
+    </select>
+    <select id="getList2" resultType="com.management.platform.entity.Custom">
+        select id,
+        custom_name,
+        email,
+        company_phone,
+        create_time,
+        (select name from sys_dict where customer_level_id = id and code = 'CustomLevel') customerLevelValue,
+        (select name from sys_dict where customer_industry_id = id and code = 'CustomIndustry') customerIndustryValue,
+        (select name from sys_dict where custom_source_id = id and code = 'CustomSources') customSourceValue,
+        (select `name` from `user` where id = incharger_id) inchargerName,
+        (select `name` from `user` where id = creator_id) creatorName
+        from custom
+        where company_id = #{companyId}
+        and is_delete =#{isDelete}
+        and incharger_id = #{inchargerId}
+        or incharger_id is null
+        <if test="inchargerId != null and inchargerId != ''  ">
+            and incharger_id =#{inchargerId}
+        </if>
+        <if test="startTime != null and endTime != null ">
+            and create_time BETWEEN #{startTime} and #{endTime}
+        </if>
+        <if test="customName != null and customName != '' ">
+            and custom_name = #{customName}
+        </if>
+        <if test="email != null and email != '' ">
+            and email = #{email}
+        </if>
+        <if test="companyPhone != null ">
+            and company_phone = #{companyPhone}
+        </if>
+        <if test="customerLevelId != null ">
+            and customer_level_id = #{customerLevelId}
+        </if>
+        <if test="customSourceId != null ">
+            and custom_source_id = #{customSourceId}
+        </if>
+        <if test="customerIndustryId != null ">
+            and customer_industry_id = #{customerIndustryId}
+        </if>
+        Limit #{pageIndex},#{pageFrom}
+    </select>
+    <select id="getTotal2" resultType="java.lang.Integer">
+        select count(id)
+        from custom
+        where company_id = #{companyId}
+        and is_delete = #{isDelete}
+        and incharger_id = #{inchargerId}
+        or incharger_id is null
+        <if test="inchargerId != null and inchargerId != ''  ">
+            and incharger_id =#{inchargerId}
+        </if>
+        <if test="startTime != null and endTime != null ">
+            and create_time BETWEEN #{startTime} and #{endTime}
+        </if>
+        <if test="customName != null and customName != '' ">
+            and custom_name = #{customName}
+        </if>
+        <if test="email != null and email != '' ">
+            and email = #{email}
+        </if>
+        <if test="companyPhone != null ">
+            and company_phone = #{companyPhone}
+        </if>
+        <if test="customerLevelId != null ">
+            and customer_level_id = #{customerLevelId}
+        </if>
+        <if test="customSourceId != null ">
+            and custom_source_id = #{customSourceId}
+        </if>
+        <if test="customerIndustryId != null ">
+            and customer_industry_id = #{customerIndustryId}
+        </if>
+    </select>
 
 </mapper>

+ 21 - 0
fhKeeper/formulahousekeeper/management-crm/src/main/resources/mapper/UploadFileMapper.xml

@@ -0,0 +1,21 @@
+<?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.UploadFileMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.management.platform.entity.UploadFile">
+        <id column="id" property="id" />
+        <result column="name" property="name" />
+        <result column="path" property="path" />
+        <result column="item_id" property="itemId" />
+        <result column="create_time" property="createTime" />
+        <result column="create_id" property="createId" />
+        <result column="code" property="code" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id, name, path, item_id, create_time, create_id, code
+    </sql>
+
+</mapper>

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

@@ -1470,14 +1470,14 @@ public class ProjectController {
 
     //依斯倍定制 分组耗用进度表
     @RequestMapping("/groupExpendProcessList")
-    public HttpRespMsg groupExpendProcessList(String startDate,String endDate,Integer pageIndex,Integer pageSize){
-        return projectService.groupExpendProcessList(startDate,endDate,pageIndex,pageSize);
+    public HttpRespMsg groupExpendProcessList(String startDate,String endDate,Integer projectId,Integer pageIndex,Integer pageSize){
+        return projectService.groupExpendProcessList(startDate,endDate,projectId,pageIndex,pageSize);
     }
 
     //依斯倍定制 导出分组耗用进度表
     @RequestMapping("/exportGroupExpendProcessList")
-    public HttpRespMsg exportGroupExpendProcessList(String startDate,String endDate){
-        return projectService.exportGroupExpendProcessList(startDate,endDate);
+    public HttpRespMsg exportGroupExpendProcessList(String startDate,String endDate,Integer projectId){
+        return projectService.exportGroupExpendProcessList(startDate,endDate,projectId);
     }
 
     //依斯倍定制 项目耗用进度表

+ 0 - 2
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/TaskGroupController.java

@@ -201,10 +201,8 @@ public class TaskGroupController {
             item.setId(taskGroup.getId());
             if (taskGroup.getManDay() == null) {
                 item.setManDay(0.0);
-                item.setFirstManDay(0.0);
             } else {
                 item.setManDay(taskGroup.getManDay());
-                item.setFirstManDay(taskGroup.getManDay());
                 totalManDay += taskGroup.getManDay();
             }
             addList.add(item);

+ 78 - 6
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/UserWithBeisenController.java

@@ -68,13 +68,9 @@ public class UserWithBeisenController {
             httpRespMsg.setError("北森基础数据配置未完成,请联系服务商完成配置");
             return httpRespMsg;
         }
-//        if(companyId==5978){
-//            beisenConfig.setAppKey("70FD83474FB946E5A6A122BB2989E8D9");
-//            beisenConfig.setAppSecret("F494856D0BCC49D18C63429D4F2CB42EDE9480D5C075449E9C97E7AEA5C7D9E1");
-//        }
         List<UserWithBeisen> allBeisenList = userWithBeisenService.list(new LambdaQueryWrapper<UserWithBeisen>().eq(UserWithBeisen::getCompanyId, companyId));
         List<UserWithBeisen> userWithBeisenList=new ArrayList<>();
-        List<JSONArray> byTimeWindow = BeiSenUtils.getByTimeWindow("",startTime,stopTime,beisenConfig.getAppKey(),beisenConfig.getAppSecret());
+        List<JSONArray> byTimeWindow = BeiSenUtils.getByTimeWindow("",startTime,stopTime,companyId,beisenConfig.getAppKey(),beisenConfig.getAppSecret());
         for (JSONArray array : byTimeWindow) {
             for (int i = 0; i < array.size(); i++) {
                 UserWithBeisen userWithBeisen=new UserWithBeisen();
@@ -140,14 +136,16 @@ public class UserWithBeisenController {
             return msg;
         }
         //todo 获取到指定日期的考勤数据
-        JSONArray attendanceStatistics = BeiSenUtils.getAttendanceStatistics(startDate, endDate, beisenConfig.getAppKey(), beisenConfig.getAppSecret(), 1, 100);
+        JSONArray attendanceStatistics=new JSONArray();
         //todo 获取到指定日期的加班数据
         List<LocalDate> workDaysListInRange = WorkDayCalculateUtils.getWorkDaysListInRange(startDate, endDate, 1);
         JSONArray allOverTimeList=new JSONArray();
         List<UserFvTime> userFvTimeList=new ArrayList<>();
         for (LocalDate localDate : workDaysListInRange) {
+            JSONArray statisticList = BeiSenUtils.getAttendanceStatistics(df.format(localDate), df.format(localDate), beisenConfig.getAppKey(), beisenConfig.getAppSecret(), 1, 100);
             JSONArray overTimeList = BeiSenUtils.getOverTimeList(df.format(localDate), beisenConfig.getAppKey(), beisenConfig.getAppSecret(), 1, 100);
             allOverTimeList.addAll(overTimeList);
+            attendanceStatistics.addAll(statisticList);
         }
         for (LocalDate localDate : workDaysListInRange) {
             Stream<JSONObject> swipingCardsStream = attendanceStatistics.stream().map(item -> (JSONObject) item);
@@ -209,5 +207,79 @@ public class UserWithBeisenController {
         return msg;
     }
 
+
+    @RequestMapping("/getAttendanceStatisticWithUser")
+    public HttpRespMsg getAttendanceStatisticWithUser(String createDate){
+        HttpRespMsg msg=new HttpRespMsg();
+        DateTimeFormatter df=DateTimeFormatter.ofPattern("yyyy-MM-dd");
+        DateTimeFormatter df1=DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+        DateTimeFormatter df2=DateTimeFormatter.ofPattern("HH:mm");
+        User user = userMapper.selectById(request.getHeader("token"));
+        Integer companyId = user.getCompanyId();
+        TimeType timeType = timeTypeMapper.selectById(companyId);
+        List<User> userList = userMapper.selectList(new LambdaQueryWrapper<User>().eq(User::getCompanyId, companyId));
+        List<UserWithBeisen> userWithBeisenList = userWithBeisenService.list(new LambdaQueryWrapper<UserWithBeisen>().eq(UserWithBeisen::getCompanyId, companyId));
+        BeisenConfig beisenConfig = beisenConfigMapper.selectById(companyId);
+        if(beisenConfig==null){
+            msg.setError("北森基础数据配置未完成,请联系服务商完成配置");
+            return msg;
+        }
+        //todo 获取到指定日期的考勤数据
+        //todo 获取到指定日期的加班数据
+        Optional<UserWithBeisen> withBeisen = userWithBeisenList.stream().filter(u ->u.getJobNumber()!=null&& u.getJobNumber().equals(user.getJobNumber())).findFirst();
+        if(!withBeisen.isPresent()){
+            msg.setError("当前员工在北森系统中不存在,请完成录入员工信息");
+            return msg;
+        }
+        JSONObject item = BeiSenUtils.getAttendanceStatisticWithUser(createDate,withBeisen.get().getUserId(), beisenConfig.getAppKey(), beisenConfig.getAppSecret());
+        JSONArray allOverTimeList = BeiSenUtils.getScheduledOverTimeRangeList(createDate,createDate,withBeisen.get().getUserId(), beisenConfig.getAppKey(), beisenConfig.getAppSecret());
+        //获取当前数据下的人员工号对应到工时管家
+        Optional<User> first = userList.stream().filter(f -> f.getJobNumber().equals(withBeisen.get().getJobNumber())).findFirst();
+        System.out.println("考勤数据:"+item.toString());
+        //todo: 获取早晚打卡时间
+        String firstCard = item.getString("firstCardIncludeFillCheck").split(" ")[1];
+        String lastCard = item.getString("lastCardIncludeFillCheck").split(" ")[1];
+        //获取最晚下班时间
+        if(first.isPresent()){
+            boolean workDay = WorkDayCalculateUtils.isWorkDay(LocalDate.parse(createDate,df));
+            //todo:针对景昱 工作日默认以8小时工作制度加上加班时长 非工作日以加班时长为准
+            Double workTime=8.0;
+            Stream<JSONObject> overTimeStream = allOverTimeList.stream().map(elment -> (JSONObject) elment);
+            Optional<UserWithBeisen> beisen = userWithBeisenList.stream().filter(u -> u.getJobNumber() != null && u.getJobNumber().equals(first.get().getJobNumber())).findFirst();
+            if(beisen.isPresent()){
+                List<JSONObject> overTimeList = overTimeStream.filter(a -> a.getString("StaffId").equals(beisen.get().getUserId())
+                        && a.getIntValue("ApproveStatus") == 2).collect(Collectors.toList());
+                System.out.println("加班时长数据:"+overTimeList.toString());
+                for (JSONObject jsonObject : overTimeList) {
+                    System.out.println("加班时长:"+jsonObject.getDouble("ActualOverTimeDuration"));
+                }
+                if(overTimeList.size()>0){
+                    double actualOverTimeDuration = overTimeList.stream().mapToDouble(i -> i.getDouble("ActualOverTimeDuration")).sum();
+                    if(workDay){
+                        workTime= workTime+actualOverTimeDuration;
+                    }else {
+                        workTime= actualOverTimeDuration;
+                    }
+                }
+            }
+            UserFvTime userFvTime=new UserFvTime();
+            userFvTime.setWorkDate(LocalDate.parse(createDate,df));
+            userFvTime.setStartTime(!StringUtils.isEmpty(firstCard)?firstCard:"08:30");
+            userFvTime.setEndTime(!StringUtils.isEmpty(lastCard)?lastCard:"17:30");
+            userFvTime.setUserId(first.get().getId());
+            userFvTime.setCompanyId(companyId);
+            userFvTime.setWorkHours(workTime.floatValue());
+            UserFvTime one = userFvTimeService.getOne(new LambdaQueryWrapper<UserFvTime>().eq(UserFvTime::getCompanyId, companyId).eq(UserFvTime::getUserId, first.get().getId()).eq(UserFvTime::getWorkDate, LocalDate.parse(createDate,df)));
+            if(one!=null){
+                userFvTime.setId(one.getId());
+            }
+            userFvTimeService.saveOrUpdate(userFvTime);
+            msg.setData(userFvTime);
+        } else {
+            msg.setError("未找到对应员工信息:staffId="+withBeisen.get().getUserId());
+        }
+        return msg;
+    }
+
 }
 

+ 0 - 6
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/TaskGroup.java

@@ -76,12 +76,6 @@ public class TaskGroup extends Model<TaskGroup> {
     @TableField(exist = false)
     private String estimatedWorkTime;
 
-    /**
-     * 首次设置的预估工时:人天
-     */
-    @TableField("first_man_day")
-    private Double firstManDay;
-
 
     @Override
     protected Serializable pkVal() {

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

@@ -279,9 +279,9 @@ public interface ProjectService extends IService<Project> {
 
     HttpRespMsg exportUserProjectProcessList(Integer deptId, String userId, Integer projectId);
 
-    HttpRespMsg groupExpendProcessList(String startDate, String endDate,Integer pageIndex,Integer pageSize);
+    HttpRespMsg groupExpendProcessList(String startDate, String endDate,Integer projectId,Integer pageIndex,Integer pageSize);
 
-    HttpRespMsg exportGroupExpendProcessList(String startDate, String endDate);
+    HttpRespMsg exportGroupExpendProcessList(String startDate, String endDate,Integer projectId);
 
     HttpRespMsg projectExpendProcessList(String startDate,String endDate,Integer projectId, Integer categoryId, String userId, Integer pageIndex, Integer pageSize);
 

+ 27 - 7
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java

@@ -12737,7 +12737,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
     }
 
     @Override
-    public HttpRespMsg groupExpendProcessList(String startDate, String endDate,Integer pageIndex,Integer pageSize) {
+    public HttpRespMsg groupExpendProcessList(String startDate, String endDate,Integer projectId,Integer pageIndex,Integer pageSize) {
         HttpRespMsg msg=new HttpRespMsg();
         User user = userMapper.selectById(request.getHeader("token"));
         NumberFormat percentFormat = NumberFormat.getPercentInstance();
@@ -12777,7 +12777,11 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
             pageIndex=-1;
             pageSize=-1;
         }
-        IPage<Project> projectIPage = projectMapper.selectPage(new Page<>(pageIndex, pageSize), new LambdaQueryWrapper<Project>().in(Project::getId, projectIds).eq(Project::getCompanyId, companyId));
+        LambdaQueryWrapper<Project> queryWrapper = new LambdaQueryWrapper<Project>().in(Project::getId, projectIds).eq(Project::getCompanyId, companyId);
+        if(projectId!=null){
+            queryWrapper.eq(Project::getId,projectId);
+        }
+        IPage<Project> projectIPage = projectMapper.selectPage(new Page<>(pageIndex, pageSize),queryWrapper);
         List<Project> projectList = projectIPage.getRecords();
         //是否具有查看全部数据的权限
         //针对依斯呗 指定部门
@@ -12853,8 +12857,12 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                                     item.put("overHour",new BigDecimal(mapList.stream().mapToDouble(m-> Double.valueOf(String.valueOf(m.get("overHour")))).sum()).setScale(2,RoundingMode.HALF_UP));
                                     item.put("normalHour",new BigDecimal(mapList.stream().mapToDouble(m-> Double.valueOf(String.valueOf(m.get("normalHour")))).sum()).setScale(2,RoundingMode.HALF_UP));
                                     item.put("afterSetPlanHour",mapList.get(0).get("afterSetPlanHour"));
+                                    double afterSetPlanHour = Double.valueOf(String.valueOf(mapList.get(0).get("afterSetPlanHour"))).doubleValue();
                                     double realHour = mapList.stream().mapToDouble(m -> Double.valueOf(String.valueOf(m.get("realHour")))).sum();
                                     double planHour =  Double.valueOf(String.valueOf( mapList.get(0).get("planHour"))).doubleValue();
+                                    if(afterSetPlanHour>0){
+                                        planHour=planHour-afterSetPlanHour;
+                                    }
                                     item.put("process",percentFormat.format(realHour/planHour));
                                 }else {
                                     item.put("planHour",0);
@@ -12903,8 +12911,12 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                                     item.put("overHour",new BigDecimal(mapList.stream().mapToDouble(m-> Double.valueOf(String.valueOf(m.get("overHour")))).sum()).setScale(2,RoundingMode.HALF_UP));
                                     item.put("normalHour",new BigDecimal(mapList.stream().mapToDouble(m-> Double.valueOf(String.valueOf(m.get("normalHour")))).sum()).setScale(2,RoundingMode.HALF_UP));
                                     item.put("afterSetPlanHour",mapList.get(0).get("afterSetPlanHour"));
+                                    double afterSetPlanHour = Double.valueOf(String.valueOf(mapList.get(0).get("afterSetPlanHour"))).doubleValue();
                                     double realHour = mapList.stream().mapToDouble(m -> Double.valueOf(String.valueOf(m.get("realHour")))).sum();
                                     double planHour =  Double.valueOf(String.valueOf( mapList.get(0).get("planHour"))).doubleValue();
+                                    if(afterSetPlanHour>0){
+                                        planHour=planHour-afterSetPlanHour;
+                                    }
                                     item.put("process",percentFormat.format(realHour/planHour));
                                 }else {
                                     item.put("planHour",0);
@@ -12957,8 +12969,12 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                                     item.put("overHour",new BigDecimal(mapList.stream().mapToDouble(m-> Double.valueOf(String.valueOf(m.get("overHour")))).sum()).setScale(2,RoundingMode.HALF_UP));
                                     item.put("normalHour",new BigDecimal(mapList.stream().mapToDouble(m-> Double.valueOf(String.valueOf(m.get("normalHour")))).sum()).setScale(2,RoundingMode.HALF_UP));
                                     item.put("afterSetPlanHour",mapList.get(0).get("afterSetPlanHour"));
+                                    double afterSetPlanHour = Double.valueOf(String.valueOf(mapList.get(0).get("afterSetPlanHour"))).doubleValue();
                                     double realHour = mapList.stream().mapToDouble(m -> Double.valueOf(String.valueOf(m.get("realHour")))).sum();
                                     double planHour =  Double.valueOf(String.valueOf( mapList.get(0).get("planHour"))).doubleValue();
+                                    if(afterSetPlanHour>0){
+                                        planHour=planHour-afterSetPlanHour;
+                                    }
                                     item.put("process",percentFormat.format(realHour/planHour));
                                 }else {
                                     item.put("planHour",0);
@@ -12992,11 +13008,11 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
     }
 
     @Override
-    public HttpRespMsg exportGroupExpendProcessList(String startDate, String endDate) {
+    public HttpRespMsg exportGroupExpendProcessList(String startDate, String endDate,Integer projectId) {
         HttpRespMsg httpRespMsg=new HttpRespMsg();
         NumberFormat percentFormat = NumberFormat.getPercentInstance();
         percentFormat.setMaximumFractionDigits(2);
-        HttpRespMsg resultMsg = groupExpendProcessList(startDate,endDate,null,null);
+        HttpRespMsg resultMsg = groupExpendProcessList(startDate,endDate,projectId,null,null);
         Map<String, Object> msgData = (Map<String, Object>) resultMsg.getData();
         List<Map<String, Object>> mapList = (List<Map<String, Object>>) msgData.get("record");
         Integer companyId = userMapper.selectById(request.getHeader("token")).getCompanyId();
@@ -13124,8 +13140,8 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
         List<String> projectIdList = mapList.stream().map(m -> String.valueOf(m.get("projectId"))).distinct().collect(Collectors.toList());
         //根据每个项目合并项目列表
         Integer projectNum=rowNum;
-        for (String projectId : projectIdList) {
-            List<Map<String, Object>> maps = listMapGroupList.get(projectId);
+        for (String pid : projectIdList) {
+            List<Map<String, Object>> maps = listMapGroupList.get(pid);
             if(maps.size()>1){
                 sheet.addMergedRegion(new CellRangeAddress(projectNum,projectNum+maps.size()-1,0,0));
             }
@@ -13143,7 +13159,11 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
         }
         for (Map<String, Object> map : mapList) {
             list.add(String.valueOf(map.get("projectName")));
-            list.add(String.valueOf(map.get("corpwxDeptId")));
+            if(wxCorpInfo!=null&&wxCorpInfo.getSaasSyncContact()==1){
+                list.add("$departmentName="+map.get("corpwxDeptId")+"$");
+            }else {
+                list.add(String.valueOf(map.get("department_name")));
+            }
             list.add(String.valueOf(map.get("groupName")));
             list.add(String.valueOf(map.get("planHour")));
             list.add(String.valueOf(map.get("normalHour")));

+ 1 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/task/TimingTask.java

@@ -2009,7 +2009,7 @@ public class TimingTask {
         List<BeisenConfig> beisenConfigs = beisenConfigMapper.selectList(null);
         for (BeisenConfig beisenConfig : beisenConfigs) {
             if(beisenConfig!=null){
-                List<JSONArray> byTimeWindow = BeiSenUtils.getByTimeWindow("",time,time,beisenConfig.getAppKey(),beisenConfig.getAppSecret());
+                List<JSONArray> byTimeWindow = BeiSenUtils.getByTimeWindow("",time,time,beisenConfig.getCompanyId(),beisenConfig.getAppKey(),beisenConfig.getAppSecret());
                 for (JSONArray array : byTimeWindow) {
                     for (int i = 0; i < array.size(); i++) {
                         UserWithBeisen userWithBeisen=new UserWithBeisen();

+ 66 - 2
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/util/BeiSenUtils.java

@@ -83,7 +83,7 @@ public class BeiSenUtils {
     /**
      * 获取人员数据
      * */
-    public static List<JSONArray> getByTimeWindow(String scrollId,String startTime,String stopTime,String appkey,String appSecret){
+    public static List<JSONArray> getByTimeWindow(String scrollId,String startTime,String stopTime,Integer companyId,String appkey,String appSecret){
         List<JSONArray> resultList=new ArrayList<>();
         String url = "https://openapi.italent.cn/TenantBaseExternal/api/v5/Employee/GetByTimeWindow";
         HttpHeaders headers = new HttpHeaders();
@@ -97,6 +97,15 @@ public class BeiSenUtils {
         requestMap.put("timeWindowQueryType",1);
         requestMap.put("startTime",startTime+"T00:00:00");
         requestMap.put("stopTime",stopTime+"T23:59:59");
+        List<String> columns=new ArrayList<>();
+        columns.add("JobNumber");
+        columns.add("MobilePhone");
+        columns.add("Name");
+        columns.add("StaffID");
+        columns.add("UserID");
+        if(companyId!=null && companyId==5789){
+            requestMap.put("columns",columns);
+        }
         System.out.println("--------headers请求头数据-------"+headers);
         if(!StringUtils.isEmpty(scrollId)){
             requestMap.put("scrollId",scrollId);
@@ -111,7 +120,7 @@ public class BeiSenUtils {
                 resultList.add(respJson.getJSONArray("data"));
                 String nextScrollId = respJson.getString("scrollId");
                 if(!StringUtils.isEmpty(nextScrollId)&&respJson.getJSONArray("data").size()>0){
-                    List<JSONArray> byTimeWindow = getByTimeWindow(nextScrollId,startTime,stopTime,appkey,appSecret);
+                    List<JSONArray> byTimeWindow = getByTimeWindow(nextScrollId,startTime,stopTime,companyId,appkey,appSecret);
                     resultList.addAll(byTimeWindow);
                 }
             }
@@ -242,4 +251,59 @@ public class BeiSenUtils {
         return lastJSONArray;
     }
 
+
+    /**
+     * 获取指定人员指定日期考勤数据
+     * */
+    public static JSONObject getAttendanceStatisticWithUser(String date,String userId,String appkey,String appSecret){
+        String url = "https://openapi.italent.cn/AttendanceOpen/api/v1/AttendanceStatistics/GetAttendanceStatistics";
+        HttpHeaders headers = new HttpHeaders();
+        RestTemplate restTemplate = new RestTemplate();
+        MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8");
+        headers.setContentType(type);
+        String accessToken = getToken(appkey,appSecret);
+        System.out.println("--------Bearer TOKEN--------"+accessToken);
+        headers.add("Authorization","Bearer "+accessToken);
+        JSONObject requestMap = new JSONObject();
+        requestMap.put("date",date);
+        requestMap.put("staffId",userId);
+        System.out.println("--------headers请求头数据-------"+headers);
+        System.out.println("--------requestMap请求参数-------"+requestMap);
+        HttpEntity<JSONObject> entity = new HttpEntity<>(requestMap, headers);
+        ResponseEntity<String> ResponseEntity = restTemplate.postForEntity(url, entity, String.class);
+        String resp= ResponseEntity.getBody();
+        JSONObject respJson = JSONObject.parseObject(resp);
+        JSONObject data = respJson.getJSONObject("data");
+        return data;
+    }
+
+
+    /**
+     * 获取指定人员指定日期加班数据
+     * */
+    public static JSONArray getScheduledOverTimeRangeList(String startDate,String endDate,String userId,String appkey,String appSecret){
+        String url = "https://openapi.italent.cn/AttendanceOpen/api/v1/AttendanceOvertime/GetScheduledOverTimeRangeList";
+        HttpHeaders headers = new HttpHeaders();
+        RestTemplate restTemplate = new RestTemplate();
+        MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8");
+        headers.setContentType(type);
+        String accessToken = getToken(appkey,appSecret);
+        System.out.println("--------Bearer TOKEN--------"+accessToken);
+        headers.add("Authorization","Bearer "+accessToken);
+        JSONObject requestMap = new JSONObject();
+        requestMap.put("startDate",startDate);
+        List<String> staffIds=new ArrayList<>();
+        staffIds.add(userId);
+        requestMap.put("stopDate",endDate);
+        requestMap.put("staffIds",staffIds);
+        System.out.println("--------headers请求头数据-------"+headers);
+        System.out.println("--------requestMap请求参数-------"+requestMap);
+        HttpEntity<JSONObject> entity = new HttpEntity<>(requestMap, headers);
+        ResponseEntity<String> ResponseEntity = restTemplate.postForEntity(url, entity, String.class);
+        String resp= ResponseEntity.getBody();
+        JSONObject respJson = JSONObject.parseObject(resp);
+        JSONArray data = respJson.getJSONArray("data");
+        return data;
+    }
+
 }

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

@@ -1897,7 +1897,7 @@
     <select id="groupExpendProcessList" resultType="java.util.Map">
         SELECT p.project_name AS projectName,p.id AS projectId,tg.id AS groupId,d.department_name,d.department_id AS deptId,d.corpwx_deptid AS corpwxDeptId,tg.name AS groupName,
         IFNULL(r.realHour,0) AS realHour,IFNULL(r.realCost,0) AS realCost,IFNULL(r.normalHour,0) as normalHour,IFNULL(r.overHour,0) as overHour,
-        IFNULL(tg.first_man_day*8,0) AS planHour,IFNULL((SELECT SUM(change_man_day*8) FROM `group_budget_review` WHERE group_id=tg.`id` AND `status`=1),0) AS afterSetPlanHour
+        IFNULL(tg.man_day*8,0) AS planHour,IFNULL((SELECT SUM(change_man_day*8) FROM `group_budget_review` WHERE group_id=tg.`id` AND `status`=1),0) AS afterSetPlanHour
         FROM task_executor te
         LEFT JOIN task t ON t.id=te.task_id
         LEFT JOIN user u ON te.executor_id=u.id
@@ -1906,7 +1906,7 @@
         LEFT JOIN department d ON d.department_id=u.department_id
         LEFT JOIN (
         SELECT SUM(working_time) AS realHour,SUM(cost) AS realCost,(SUM(working_time)-SUM(overtime_hours)) AS normalHour,SUM(overtime_hours) AS overHour,group_id,dept_id
-        FROM report  WHERE create_date BETWEEN #{startDate} AND #{endDate} AND state=1 AND project_id IS NOT NULL AND company_id=#{companyId} GROUP BY group_id,dept_id) r ON r.group_id=tg.`id` and r.dept_id=u.department_id
+        FROM report  WHERE state=1 <if test="startDate!=null and startDate!='' and endDate!=null and endDate!=''"> AND create_date BETWEEN #{startDate} AND #{endDate} </if>AND project_id IS NOT NULL AND company_id=#{companyId} GROUP BY group_id,dept_id) r ON r.group_id=tg.`id` and r.dept_id=u.department_id
         WHERE u.company_id=#{companyId}
         AND tg.name IN ('生产部电气','生产部车间','工程部现场安装施工','工程部配合调试','研发部工艺设计','研发部结构设计','研发部BIM设计','研发部电气设计','研发部工艺调试验收','研发部电气调试验收')
         <if test="userId!=null and userId!=''">

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

@@ -11,12 +11,11 @@
         <result column="incharger_id" property="inchargerId" />
         <result column="wbs_code" property="wbsCode" />
         <result column="man_day" property="manDay" />
-        <result column="first_man_day" property="firstManDay" />
     </resultMap>
 
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
-        id, project_id, task_group_code, name, incharger_id, wbs_code, man_day, first_man_day
+        id, project_id, task_group_code, name, incharger_id, wbs_code, man_day
     </sql>
 
     <select id="selectReallyTimeWithMap" resultType="java.util.Map">

+ 1 - 0
fhKeeper/formulahousekeeper/timesheet/src/i18n/en.json

@@ -182,6 +182,7 @@
     "exportingTimeStatistics": "Export labor statistics"
   },
   "other": {
+    "kaoqingTimeTip": "not include pending overtime and holiday time",
     "customerService": "Customer service",
     "sweepWeChatYards": "Sweep WeChat yards",
     "messageCenter": "message center",

+ 1 - 0
fhKeeper/formulahousekeeper/timesheet/src/i18n/zh.json

@@ -184,6 +184,7 @@
     "exportingTimeStatistics": "导出工时统计"
   },
   "other": {
+    "kaoqingTimeTip": "工作时长不包含未审批加班及休假",
     "customerService": "咨询客服",
     "sweepWeChatYards": "微信扫码",
     "messageCenter": "消息中心",

+ 12 - 4
fhKeeper/formulahousekeeper/timesheet/src/views/corpreport/list.vue

@@ -1505,7 +1505,7 @@ export default {
   data() {
     return {
       screeningCondition: { // 筛选条件的判断
-        project: [4, 8, 9, 10, 11, 14, 15, 17, 19, 20, 21, 22, 24], // 项目筛选条件 (不等于)
+        project: [4, 8, 9, 10, 11, 14, 15, 17, 19, 20, 21, 22], // 项目筛选条件 (不等于)
         months: [14, 15], // 月份筛选条件 (等于)
         monthRange: [19], // 月份区间筛选条件 (等于)
         staff: [6, 8, 9, 19, 11, 14, 18, 23, 25, 26], // 人员筛选条件 (等于)
@@ -2080,7 +2080,9 @@ export default {
             },
             getList(e) {
               let noUserList = [16, 17, 18, 19, 20, 21, 22, 24, 25, 26,27]
-              if(this.ins == 15) {
+              if(this.ins == 24) {
+                this.rangeDatas = []
+              } else if(this.ins == 15) {
                 this.rangeDatas = null
               } else if(!e){
                 this.rangeDatas = this.getCurrentRangeTime()
@@ -2336,6 +2338,7 @@ export default {
         } else if(this.ins == 24) {
           fName = '分组耗用进度表' + '.xlsx'
           url = "/project/exportGroupExpendProcessList"
+          this.proJuctId ? sl.projectId = this.proJuctId : ''
           sl.startDate = this.rangeDatas[0]
           sl.endDate = this.rangeDatas[1]
         } else if(this.ins == 25) {
@@ -3876,11 +3879,16 @@ export default {
     // 分组耗用进度表
     async getConsumptionSchedule() {
       let parameter = {
-        startDate: this.rangeDatas[0],
-        endDate: this.rangeDatas[1],
+        // startDate: this.rangeDatas[0],
+        // endDate: this.rangeDatas[1],
         pageIndex: this.page,
         pageSize: this.size,
       }
+      if( this.rangeDatas &&  this.rangeDatas.length > 0) {
+        parameter.startDate = this.rangeDatas[0]
+        parameter.endDate = this.rangeDatas[1]
+      }
+      this.proJuctId ? parameter.projectId = this.proJuctId : ''
       this.listLoading = true
       let { data } = await this.postData('/project/groupExpendProcessList', {
         ...parameter

+ 38 - 3
fhKeeper/formulahousekeeper/timesheet/src/views/workReport/daily.vue

@@ -18,6 +18,9 @@
                                 <br>
                                 <span style="font-size:10px;text-align:center;color:#999;">{{item.weekDay}}</span>
                                 <span class="chooseDate" v-if="index == choseDay"></span>
+                                <!-- <el-tooltip v-if="index == choseDay" effect="dark" content="填报时长超过北森考勤时长" placement="top-start">
+                                <i class="el-icon-warning" style="color:red;"></i>
+                                </el-tooltip> -->
                                 </div>
                             </div>
                             </span>
@@ -401,7 +404,13 @@
                         <span v-if="reportTimeType.type == 3 && user.company.companyName != mingyiName">{{$t('time.hour')}}</span>
                         <!-- <span v-if="isBatch && user.company.companyName != mingyiName">, {{$t('other.fillInTheTotal')}} {{jsTime.toFixed(1)}} {{$t('time.hour')}}</span> -->
                         <span v-if="isBatch && user.company.companyName != mingyiName">, {{$t('other.fillInTheTotal')}} <el-input v-model="jsTime" @change="onBatchTimeChange" style="width:80px;"/> {{$t('time.hour')}}</span>
-                        <span v-if="workForm.time">{{$t('other.attendancePunch')}}: {{workForm.time.startTime}}-{{workForm.time.endTime}}, 工作{{workForm.time.workHours}}{{$t('time.hour')}}
+                        
+                        <!-- AI智能填报 -->
+                        <el-button type="primary" @click="getAIReport()" v-if="!hasWrittenReport" style="margin-left:5px;" >智能填报</el-button>
+                    </el-form-item>
+                    <!--考勤时长显示-->
+                    <el-form-item :label="$t('other.attendancePunch')" v-if="workForm.time || user.companyId == 5978">
+                        <span v-if="workForm.time">{{workForm.time.startTime}}-{{workForm.time.endTime}}, 工作{{workForm.time.workHours}}{{$t('time.hour')}}
                         <span v-if="workForm.time.askLeaveTime">|&nbsp;请假{{ workForm.time.askLeaveTime }}小时</span>
                         </span>
                         <!--批量填报和批量代填不显示考勤记录-->
@@ -414,8 +423,10 @@
                         <el-button type="default" style="margin-left:5px;" size="small" :loading="syncTimeLoading" 
                         v-if="isBatch && user.company.companyName === mingyiName" icon="el-icon-refresh" 
                                 @click="refreshAttendance(workForm.createDate)"></el-button>
-                        <!-- AI智能填报 -->
-                        <el-button type="primary" @click="getAIReport()" v-if="!hasWrittenReport" style="margin-left:5px;" >智能填报</el-button>
+                        <el-button type="default" style="margin-left:5px;" size="small" :loading="syncTimeLoading" 
+                        v-if="!isBatch && user.companyId === 5978" icon="el-icon-refresh" 
+                                @click="refreshBeiSengAttendance(workForm.createDate)"></el-button>
+                        <span v-if="user.companyId==5978" style="margin-left:5px;color:#20a0ff;"><i class="el-icon-warning"></i>{{$t('other.kaoqingTimeTip')}}</span>
                     </el-form-item>
                     <!-- 000000 -->
                     <div v-for="(domain, index) in workForm.domains" :key="domain.id" :style="index>0?'margin-top:10px;':''">
@@ -2800,6 +2811,30 @@
                     })
                 })
             },
+            refreshBeiSengAttendance(workdate) {
+                 if (!workdate) return;
+                this.syncTimeLoading = true;
+                this.http.post('/user-with-beisen/syncAttendanceFromBeisen',{
+                    startDate: workdate,
+                    endDate: workdate
+                },res => {
+                    this.syncTimeLoading = false;
+                    if(res.code == 'ok'){
+                        this.workForm.time = res.data;
+                    }else {
+                        this.$message({
+                            message: res.msg,
+                            type: 'error'
+                        })
+                    }
+                },err => {
+                    this.syncTimeLoading = false;
+                    this.$message({
+                        message: err,
+                        type: 'error'
+                    })
+                })
+            },
             weeklyFilledTimeClick(parameterDate){ //按周填报-已填工时-点击
                 this.weeklyFilledTimeDialog = true
                 this.weeklyFilledTimeLoading = true