Browse Source

首页数据 客户管家

Min 1 year ago
parent
commit
ef42dacd31

+ 13 - 3
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/controller/SalesOrderController.java

@@ -238,12 +238,22 @@ public class SalesOrderController {
     }
 
     /**
-     * 销售简报数据
-     */
-    @RequestMapping("salesKit")
+    * @Description: 首页 销售简报数据
+    * @Param: [queryType, dateType, startDate, endDate]
+    * @return: com.management.platform.util.HttpRespMsg
+    * @Author: yurk
+    * @Date: 2024/5/16
+    */
+    @RequestMapping("/salesKit")
     public HttpRespMsg salesKit(Integer queryType,Integer dateType,String startDate,String endDate){
         return salesOrderService.salesKit(queryType,dateType,startDate,endDate);
     }
 
+
+    @RequestMapping("/dataSummary")
+    public HttpRespMsg dataSummary(Integer queryType,Integer dateType,String startDate,String endDate){
+        return salesOrderService.dataSummary(queryType,dateType,startDate,endDate);
+    }
+
 }
 

+ 3 - 0
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/mapper/ClueMapper.java

@@ -6,6 +6,7 @@ import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * <p>
@@ -35,4 +36,6 @@ public interface ClueMapper extends BaseMapper<Clue> {
             "(select `name` from user where id = create_id ) createName" +
             " from clue where id = #{id}")
     Clue selectById2Info(@Param("id") Integer id);
+
+    Map<String, Object> getDataSummary(Integer companyId, String startDate, String endDate, String userId, List<String> targetUserIds);
 }

+ 3 - 0
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/BusinessOpportunityService.java

@@ -8,6 +8,7 @@ import org.springframework.web.multipart.MultipartFile;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.util.List;
+import java.util.Map;
 
 /**
  * <p>
@@ -52,4 +53,6 @@ public interface BusinessOpportunityService extends IService<BusinessOpportunity
     void isDelete(List<Integer> ids);
 
     void isRollBack(List<Integer> ids);
+
+    Map<String, Object> getDataSummary(Integer companyId, String startDate, String endDate, String userId, List<String> targetUserIds);
 }

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

@@ -5,11 +5,13 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import com.management.platform.entity.UploadFile;
 import com.management.platform.entity.User;
 import com.management.platform.util.HttpRespMsg;
+import org.apache.ibatis.annotations.Param;
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.util.List;
+import java.util.Map;
 
 /**
  * <p>
@@ -48,4 +50,6 @@ public interface CustomService extends IService<Custom> {
     Object reFileName(UploadFile uploadFile, HttpServletRequest request);
 
     HttpRespMsg getAllCustom(HttpServletRequest request);
+
+    Map<String, Object> getDataSummary(Integer companyId,String startDate, String endDate, String userId,@Param("list") List<String> targetUserIds);
 }

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

@@ -24,4 +24,6 @@ public interface SalesOrderService extends IService<SalesOrder> {
     HttpRespMsg exportData(String userId, String orderName, String orderCode, String productCode) throws Exception;
 
     HttpRespMsg salesKit(Integer queryType,Integer dateType, String startDate, String endDate);
+
+    HttpRespMsg dataSummary(Integer queryType, Integer dateType, String startDate, String endDate);
 }

+ 87 - 2
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/impl/SalesOrderServiceImpl.java

@@ -79,6 +79,8 @@ public class SalesOrderServiceImpl extends ServiceImpl<SalesOrderMapper, SalesOr
     private BusinessOpportunityService businessOpportunityService;
     @Resource
     private ContactsService contactsService;
+    @Resource
+    private ClueMapper clueMapper;
     @Value(value = "${upload.path}")
     private String path;
 
@@ -424,6 +426,8 @@ public class SalesOrderServiceImpl extends ServiceImpl<SalesOrderMapper, SalesOr
         LambdaQueryWrapper<BusinessOpportunity> businessOpportunityLambdaQueryWrapper1 = new LambdaQueryWrapper<>();
         LambdaQueryWrapper<SalesOrder> salesOrderLambdaQueryWrapper = new LambdaQueryWrapper<>();
         LambdaQueryWrapper<SalesOrder> salesOrderLambdaQueryWrapper1 = new LambdaQueryWrapper<>();
+        LambdaQueryWrapper<Clue> clueLambdaQueryWrapper = new LambdaQueryWrapper<>();
+        LambdaQueryWrapper<Clue> clueLambdaQueryWrapper1 = new LambdaQueryWrapper<>();
         User user = userMapper.selectById(request.getHeader("token"));
         List<Department> allDeptList = departmentMapper.selectList(new LambdaQueryWrapper<Department>().eq(Department::getCompanyId, user.getCompanyId()));
         if(!StringUtils.isEmpty(startDate)&&!StringUtils.isEmpty(endDate)){
@@ -431,6 +435,7 @@ public class SalesOrderServiceImpl extends ServiceImpl<SalesOrderMapper, SalesOr
             contactsLambdaQueryWrapper.between(Contacts::getCreateTime,startDate,endDate);
             businessOpportunityLambdaQueryWrapper.between(BusinessOpportunity::getCreateTime,startDate,endDate);
             salesOrderLambdaQueryWrapper.between(SalesOrder::getCreateTime,startDate,endDate);
+            clueLambdaQueryWrapper.between(Clue::getCreateTime,startDate,endDate);
         }
         if(dateType!=null){
             switch (dateType){
@@ -447,6 +452,8 @@ public class SalesOrderServiceImpl extends ServiceImpl<SalesOrderMapper, SalesOr
                     businessOpportunityLambdaQueryWrapper1.between(BusinessOpportunity::getCreateTime,dateStartOfMonth.minusMonths(1),dateEndOfMonth.minusMonths(1));
                     salesOrderLambdaQueryWrapper.between(SalesOrder::getCreateTime,dateStartOfMonth,dateEndOfMonth);
                     salesOrderLambdaQueryWrapper1.between(SalesOrder::getCreateTime,dateStartOfMonth.minusMonths(1),dateEndOfMonth.minusMonths(1));
+                    clueLambdaQueryWrapper.between(Clue::getCreateTime,dateStartOfMonth,dateEndOfMonth);
+                    clueLambdaQueryWrapper1.between(Clue::getCreateTime,dateStartOfMonth.minusMonths(1),dateEndOfMonth.minusMonths(1));
                     break;
                 case 1:
                     //本周
@@ -461,6 +468,8 @@ public class SalesOrderServiceImpl extends ServiceImpl<SalesOrderMapper, SalesOr
                     businessOpportunityLambdaQueryWrapper1.between(BusinessOpportunity::getCreateTime,dateStartOfWeek.minusWeeks(1),dateEndOfWeek.minusWeeks(1));
                     salesOrderLambdaQueryWrapper.between(SalesOrder::getCreateTime,dateStartOfWeek,dateEndOfWeek);
                     salesOrderLambdaQueryWrapper1.between(SalesOrder::getCreateTime,dateStartOfWeek.minusWeeks(1),dateEndOfWeek.minusWeeks(1));
+                    clueLambdaQueryWrapper.between(Clue::getCreateTime,dateStartOfWeek,dateEndOfWeek);
+                    clueLambdaQueryWrapper1.between(Clue::getCreateTime,dateStartOfWeek.minusWeeks(1),dateEndOfWeek.minusWeeks(1));
                     break;
                 case 2:
                     //本年
@@ -475,6 +484,8 @@ public class SalesOrderServiceImpl extends ServiceImpl<SalesOrderMapper, SalesOr
                     businessOpportunityLambdaQueryWrapper1.between(BusinessOpportunity::getCreateTime,dateStartOfYear.minusYears(1),dateEndOfYear.minusYears(1));
                     salesOrderLambdaQueryWrapper.between(SalesOrder::getCreateTime,dateStartOfYear,dateEndOfYear);
                     salesOrderLambdaQueryWrapper1.between(SalesOrder::getCreateTime,dateStartOfYear.minusYears(1),dateEndOfYear.minusYears(1));
+                    clueLambdaQueryWrapper.between(Clue::getCreateTime,dateStartOfYear,dateEndOfYear);
+                    clueLambdaQueryWrapper1.between(Clue::getCreateTime,dateStartOfYear.minusYears(1),dateEndOfYear.minusYears(1));
                     break;
             }
         }
@@ -486,11 +497,13 @@ public class SalesOrderServiceImpl extends ServiceImpl<SalesOrderMapper, SalesOr
                     contactsLambdaQueryWrapper.eq(Contacts::getCreatorId,user.getId());
                     businessOpportunityLambdaQueryWrapper.eq(BusinessOpportunity::getCreatorId,user.getId());
                     salesOrderLambdaQueryWrapper.eq(SalesOrder::getCreatorId,user.getId());
+                    clueLambdaQueryWrapper.eq(Clue::getCreateId,user.getId());
 
                     customLambdaQueryWrapper1.eq(Custom::getCreatorId,user.getId());
                     contactsLambdaQueryWrapper1.eq(Contacts::getCreatorId,user.getId());
                     businessOpportunityLambdaQueryWrapper1.eq(BusinessOpportunity::getCreatorId,user.getId());
                     salesOrderLambdaQueryWrapper1.eq(SalesOrder::getCreatorId,user.getId());
+                    clueLambdaQueryWrapper1.eq(Clue::getCreateId,user.getId());
                     break;
                 case 1:
                     //本人及下属
@@ -504,11 +517,13 @@ public class SalesOrderServiceImpl extends ServiceImpl<SalesOrderMapper, SalesOr
                     contactsLambdaQueryWrapper.in(Contacts::getCreatorId,userIds);
                     businessOpportunityLambdaQueryWrapper.in(BusinessOpportunity::getCreatorId,userIds);
                     salesOrderLambdaQueryWrapper.in(SalesOrder::getCreatorId,userIds);
+                    clueLambdaQueryWrapper.in(Clue::getCreateId,userIds);
 
                     customLambdaQueryWrapper1.in(Custom::getCreatorId,userIds);
                     contactsLambdaQueryWrapper1.in(Contacts::getCreatorId,userIds);
                     businessOpportunityLambdaQueryWrapper1.in(BusinessOpportunity::getCreatorId,userIds);
                     salesOrderLambdaQueryWrapper1.in(SalesOrder::getCreatorId,userIds);
+                    clueLambdaQueryWrapper1.in(Clue::getCreateId,userIds);
                     break;
                 case 2:
                     //仅本部门
@@ -520,15 +535,16 @@ public class SalesOrderServiceImpl extends ServiceImpl<SalesOrderMapper, SalesOr
                     contactsLambdaQueryWrapper.in(Contacts::getCreatorId,targetUserIds);
                     businessOpportunityLambdaQueryWrapper.in(BusinessOpportunity::getCreatorId,targetUserIds);
                     salesOrderLambdaQueryWrapper.in(SalesOrder::getCreatorId,targetUserIds);
+                    clueLambdaQueryWrapper.in(Clue::getCreateId,targetUserIds);
 
                     customLambdaQueryWrapper1.in(Custom::getCreatorId,targetUserIds);
                     contactsLambdaQueryWrapper1.in(Contacts::getCreatorId,targetUserIds);
                     businessOpportunityLambdaQueryWrapper1.in(BusinessOpportunity::getCreatorId,targetUserIds);
                     salesOrderLambdaQueryWrapper1.in(SalesOrder::getCreatorId,targetUserIds);
+                    clueLambdaQueryWrapper1.in(Clue::getCreateId,targetUserIds);
                     break;
                 case 3:
                     //本部门及下属部门
-                    //仅本部门
                     Integer targetDeptId1 = user.getDepartmentId();
                     List<Integer> branchDepartment = getBranchDepartment(targetDeptId1, allDeptList);
                     List<User> users1 = userMapper.selectList(new LambdaQueryWrapper<User>().in(User::getDepartmentId, branchDepartment));
@@ -538,11 +554,13 @@ public class SalesOrderServiceImpl extends ServiceImpl<SalesOrderMapper, SalesOr
                     contactsLambdaQueryWrapper.in(Contacts::getCreatorId,targetUserIds1);
                     businessOpportunityLambdaQueryWrapper.in(BusinessOpportunity::getCreatorId,targetUserIds1);
                     salesOrderLambdaQueryWrapper.in(SalesOrder::getCreatorId,targetUserIds1);
+                    clueLambdaQueryWrapper.in(Clue::getCreateId,targetUserIds1);
 
                     customLambdaQueryWrapper1.in(Custom::getCreatorId,targetUserIds1);
                     contactsLambdaQueryWrapper1.in(Contacts::getCreatorId,targetUserIds1);
                     businessOpportunityLambdaQueryWrapper1.in(BusinessOpportunity::getCreatorId,targetUserIds1);
                     salesOrderLambdaQueryWrapper1.in(SalesOrder::getCreatorId,targetUserIds1);
+                    clueLambdaQueryWrapper1.in(Clue::getCreateId,targetUserIds1);
                     break;
             }
         }
@@ -552,11 +570,13 @@ public class SalesOrderServiceImpl extends ServiceImpl<SalesOrderMapper, SalesOr
         int contactsCount = contactsService.count(contactsLambdaQueryWrapper);
         int businessOpportunityCount = businessOpportunityService.count(businessOpportunityLambdaQueryWrapper);
         Integer salesOrderCount = salesOrderMapper.selectCount(salesOrderLambdaQueryWrapper);
+        Integer clueCount = clueMapper.selectCount(clueLambdaQueryWrapper);
 
         int customCount1 = customService.count(customLambdaQueryWrapper1);
         int contactsCount1 = contactsService.count(contactsLambdaQueryWrapper1);
         int businessOpportunityCount1 = businessOpportunityService.count(businessOpportunityLambdaQueryWrapper1);
         Integer salesOrderCount1 = salesOrderMapper.selectCount(salesOrderLambdaQueryWrapper1);
+        Integer clueCount1 = clueMapper.selectCount(clueLambdaQueryWrapper1);
         Map<String,Object> customMap=new HashMap<>();
         customMap.put("customCount",customCount);
         customMap.put("customPromote",getPromote(customCount,customCount1));
@@ -573,10 +593,69 @@ public class SalesOrderServiceImpl extends ServiceImpl<SalesOrderMapper, SalesOr
         salesOrderMap.put("salesOrderCount",salesOrderCount);
         salesOrderMap.put("salesOrderPromote",getPromote(salesOrderCount,salesOrderCount1));
         resultMap.put("salesOrder",salesOrderMap);
+        Map<String,Object> clueMap=new HashMap<>();
+        clueMap.put("clueCount",clueCount);
+        clueMap.put("cluePromote",getPromote(clueCount,clueCount1));
+        resultMap.put("clue",clueMap);
         msg.setData(resultMap);
         return msg;
     }
 
+    @Override
+    public HttpRespMsg dataSummary(Integer queryType, Integer dateType, String startDate, String endDate) {
+        HttpRespMsg msg=new HttpRespMsg();
+        User user = userMapper.selectById(request.getHeader("token"));
+        Integer companyId =user.getCompanyId();
+        List<Department> allDeptList = departmentMapper.selectList(new LambdaQueryWrapper<Department>().eq(Department::getCompanyId, companyId));
+        String userId=null;
+        List<String> targetUserIds=new ArrayList<>();
+        if(queryType!=null){
+            switch (queryType){
+                case 0:
+                    //仅本人
+                    userId=user.getId();
+                break;
+                case 1:
+                    //本人及下属
+                    List<Department> departmentList = departmentMapper.selectList(new LambdaQueryWrapper<Department>().eq(Department::getManagerId, user.getId()));
+                    List<Integer> deptIds = departmentList.stream().map(Department::getDepartmentId).distinct().collect(Collectors.toList());
+                    deptIds.add(-1);
+                    List<User> userList = userMapper.selectList(new LambdaQueryWrapper<User>().in(User::getDepartmentId, deptIds));
+                    List<String> userIds = userList.stream().map(User::getId).distinct().collect(Collectors.toList());
+                    userIds.add("-1");
+                    targetUserIds=userIds;
+                break;
+                case 2:
+                    //本部门
+                    Integer targetDeptId1 = user.getDepartmentId();
+                    List<User> users1 = userMapper.selectList(new LambdaQueryWrapper<User>().eq(User::getDepartmentId, targetDeptId1));
+                    List<String> targetUserIds1 = users1.stream().map(User::getId).distinct().collect(Collectors.toList());
+                    targetUserIds1.add("-1");
+                    targetUserIds=targetUserIds1;
+                break;
+                case 3:
+                    Integer targetDeptId2 = user.getDepartmentId();
+                    List<Integer> branchDepartment = getBranchDepartment(targetDeptId2, allDeptList);
+                    List<User> users2 = userMapper.selectList(new LambdaQueryWrapper<User>().in(User::getDepartmentId, branchDepartment));
+                    List<String> targetUserIds2 = users2.stream().map(User::getId).distinct().collect(Collectors.toList());
+                    targetUserIds2.add("-1");
+                    targetUserIds=targetUserIds2;
+            }
+        }
+        Map<String, Object> customDataSummary = customService.getDataSummary(companyId, startDate, endDate, userId, targetUserIds);
+        Map<String, Object> businessOpportunityDataSummary =businessOpportunityService.getDataSummary(companyId, startDate, endDate, userId, targetUserIds);
+        Map<String, Object> clueDataSummary =clueMapper.getDataSummary(companyId, startDate, endDate, userId, targetUserIds);
+        return null;
+    }
+
+
+    /**
+    * @Description:计算同比增长率
+    * @Param: [num, oldNum]
+    * @return: java.lang.String
+    * @Author: yurk
+    * @Date: 2024/5/16
+    */
     private String getPromote(int num, int oldNum) {
         BigDecimal numBd = new BigDecimal(num);
         BigDecimal oldNumBd = new BigDecimal(oldNum);
@@ -589,7 +668,13 @@ public class SalesOrderServiceImpl extends ServiceImpl<SalesOrderMapper, SalesOr
         return percentInstance.format(numBd.doubleValue());
     }
 
-    //递归获取子部门
+    /**
+    * @Description:递归获取部门列表
+    * @Param: [departmentId, departmentList]
+    * @return: java.util.List<java.lang.Integer>
+    * @Author: yurk
+    * @Date: 2024/5/16
+    */
     public List<Integer> getBranchDepartment(Integer departmentId, List<Department> departmentList) {
         List<Integer> list = new ArrayList<>();
         list.add(departmentId);

+ 18 - 0
fhKeeper/formulahousekeeper/management-crm/src/main/resources/mapper/BusinessOpportunityMapper.xml

@@ -242,5 +242,23 @@
         where id = #{id}
     </select>
 
+    <select id="getDataSummary" resultType="java.util.Map">
+        SELECT COUNT(*) newNum,SUM(bo.amount_of_money) AS allAmountOfMoney,SUM(s.name='赢单'),SUM(s.name='输单') FROM business_opportunity bo
+        LEFT JOIN stage s ON bo.stage_id=s.id
+        WHERE company_id=#{companyId} and is_delete=0
+        <if test="startDate!=null and startDate!='' and endDate!=null and endDate!=''">
+            and DATE_FORMAT(bo.create_time,'%Y-%m-%d') BETWEEN #{startDate} AND #{endDate}
+        </if>
+        <if test="userId!=null and userId!=''">
+            and incharger_id=#{userId}
+        </if>
+        <if test="list!=null and list.size()>0">
+            and incharger_id in
+            <foreach collection="list" separator="," open="(" close=")" item="item">
+                item
+            </foreach>
+        </if>
+    </select>
+
 
 </mapper>

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

@@ -287,4 +287,21 @@
         where id = #{id}
     </select>
 
+    <select id="getDataSummary" resultType="java.util.Map">
+        SELECT COUNT(*) newNum,SUM(close_deal=1) AS closeDealNum FROM custom
+        WHERE company_id=#{companyId} and is_delete=0
+        <if test="startDate!=null and startDate!='' and endDate!=null and endDate!=''">
+            and DATE_FORMAT(create_time,'%Y-%m-%d') BETWEEN #{startDate} AND #{endDate}
+        </if>
+        <if test="userId!=null and userId!=''">
+            and incharger_id=#{userId}
+        </if>
+        <if test="list!=null and list.size()>0">
+            and incharger_id in
+            <foreach collection="list" separator="," open="(" close=")" item="item">
+                item
+            </foreach>
+        </if>
+    </select>
+
 </mapper>

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

@@ -1759,7 +1759,15 @@ public class ReportController {
         for (int i = 0; i < array.size(); i++) {
             JSONObject jsonObject = array.getJSONObject(i);
             LocalDate date = LocalDate.parse(jsonObject.getString("date"), df);
-            double workingTime = jsonObject.getDouble("workingTime");
+            double workingTime;
+            if(jsonObject.getString("workingTime").contains("h")){
+                String workingTimeStr = jsonObject.getString("workingTime");
+                workingTimeStr=workingTimeStr.substring(0,workingTimeStr.indexOf("h"));
+                workingTime=Double.valueOf(workingTimeStr);
+            }else {
+                workingTime = jsonObject.getDouble("workingTime");
+            }
+
             Optional<UserFvTime> first = userFvTimeList.stream().filter(u -> u.getWorkDate().isEqual(date) && u.getUserId().equals(userId)).findFirst();
             if(first.isPresent()){
                 if(first.get().getWorkHours()!=null){