wangguozhong 1 year ago
parent
commit
7d419087b8

+ 5 - 0
huike-admin/src/main/java/com/huike/web/controller/clues/TbClueTrackRecordController.java

@@ -4,6 +4,7 @@ package com.huike.web.controller.clues;
 import com.huike.clues.domain.TbClue;
 import com.huike.clues.domain.TbClueTrackRecord;
 import com.huike.clues.domain.vo.ClueTrackRecordVo;
+import com.huike.clues.service.ITbClueTrackRecordService;
 import com.huike.common.annotation.Log;
 import com.huike.common.core.controller.BaseController;
 import com.huike.common.core.domain.AjaxResult;
@@ -12,6 +13,7 @@ import com.huike.common.enums.BusinessType;
 import com.huike.common.utils.DateUtils;
 import com.huike.common.utils.SecurityUtils;
 import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
@@ -26,6 +28,8 @@ import java.util.List;
 @RequestMapping("/clues/record")
 public class TbClueTrackRecordController extends BaseController {
 
+    @Autowired
+    private ITbClueTrackRecordService iTbClueTrackRecordService;
     /**
      * 查询线索跟进记录列表
      */
@@ -43,6 +47,7 @@ public class TbClueTrackRecordController extends BaseController {
     @Log(title = "线索跟进记录", businessType = BusinessType.INSERT)
     @PostMapping
     public AjaxResult add(@RequestBody ClueTrackRecordVo tbClueTrackRecord) {
+        iTbClueTrackRecordService.addFollow(tbClueTrackRecord);
         return null;
     }
 }

+ 17 - 0
huike-admin/src/main/java/com/huike/web/controller/report/IndexController.java

@@ -1,6 +1,7 @@
 package com.huike.web.controller.report;
 
 
+import com.huike.report.domain.vo.IndexVo;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -29,4 +30,20 @@ public class IndexController {
                                   @RequestParam("endCreateTime") String endCreateTime){
         return AjaxResult.success(reportService.getBaseInfo(beginCreateTime,endCreateTime));
     }
+
+    /**
+     * 今日数据统计
+     */
+    @GetMapping("/getTodayInfo")
+    public AjaxResult getTodayInfo(){
+        return AjaxResult.success("操作成功",reportService.getTodayInfo());
+    }
+
+    /**
+     *
+     */
+    @GetMapping("/getTodoInfo")
+    public AjaxResult getTodoInfo(String beginCreateTime,String endCreateTime){
+        return AjaxResult.success("操作成功",reportService.getTodoInfo(beginCreateTime,endCreateTime));
+    }
 }

+ 18 - 0
huike-admin/src/main/java/com/huike/web/controller/report/ReportController.java

@@ -148,5 +148,23 @@ public class ReportController extends BaseController {
         return getDataTablePage(list);
     }
 
+    /**
+     * 客户统计-学科客户分布饼图
+     */
+    @GetMapping("/subjectStatistics/{beginCreateTime}/{endCreateTime}")
+    public AjaxResult subjectStatistics(@PathVariable String beginCreateTime, @PathVariable String endCreateTime){
+        return AjaxResult.success("操作成功",reportService.subjectStatistics(beginCreateTime,endCreateTime));
+    }
+
+    /**
+     * 折线图
+     * @param beginCreateTime
+     * @param endCreateTime
+     * @return
+     */
+    @GetMapping("/cluesStatistics/{beginCreateTime}/{endCreateTime}")
+    public AjaxResult cluesStatistics(@PathVariable String beginCreateTime, @PathVariable String endCreateTime){
 
+        return AjaxResult.success("操作成功",reportService.cluesStatistics(beginCreateTime,endCreateTime));
+    }
 }

+ 6 - 1
huike-clues/src/main/java/com/huike/clues/mapper/TbClueTrackRecordMapper.java

@@ -1,12 +1,17 @@
 package com.huike.clues.mapper;
 
 
+import com.huike.clues.domain.vo.ClueTrackRecordVo;
+
 /**
  * 线索跟进记录Mapper接口
  * @date 2021-04-19
  */
 public interface TbClueTrackRecordMapper {
 
+    //新增线索
+    void addFollow(ClueTrackRecordVo tbClueTrackRecord);
+
+
 
-    
 }

+ 4 - 0
huike-clues/src/main/java/com/huike/clues/service/ITbClueTrackRecordService.java

@@ -1,6 +1,9 @@
 package com.huike.clues.service;
 
 
+import com.huike.clues.domain.TbClue;
+import com.huike.clues.domain.vo.ClueTrackRecordVo;
+
 /**
  * 线索跟进记录Service接口
  * 
@@ -10,4 +13,5 @@ package com.huike.clues.service;
 public interface ITbClueTrackRecordService {
 
 
+    void addFollow(ClueTrackRecordVo tbClueTrackRecord);
 }

+ 1 - 1
huike-clues/src/main/java/com/huike/clues/service/impl/TbClueServiceImpl.java

@@ -266,7 +266,7 @@ public class TbClueServiceImpl implements ITbClueService {
 		int assignRecords = assignRecordMapper.countAssignCluesByUser(userId);
 		if (assignRecords >= rulePool.getMaxNunmber()) {
 			throw new CustomException("分配失败!最大保有量(" + rulePool.getMaxNunmber() + "),剩余可以分配"
-					+ (rulePool.getMaxNunmber() - assignRecords) + "条线索");
+					+ Math.abs(rulePool.getMaxNunmber() - assignRecords) + "条线索");
 		}
 		for (int i = 0; i < clueIds.length; i++) {
 			Long clueId = clueIds[i];

+ 10 - 1
huike-clues/src/main/java/com/huike/clues/service/impl/TbClueTrackRecordServiceImpl.java

@@ -1,7 +1,11 @@
 package com.huike.clues.service.impl;
 
 
+import com.huike.clues.domain.TbClue;
+import com.huike.clues.domain.vo.ClueTrackRecordVo;
+import com.huike.clues.mapper.TbClueTrackRecordMapper;
 import com.huike.clues.service.ITbClueTrackRecordService;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 /**
@@ -10,5 +14,10 @@ import org.springframework.stereotype.Service;
  */
 @Service
 public class TbClueTrackRecordServiceImpl implements ITbClueTrackRecordService {
-
+    @Autowired
+    private TbClueTrackRecordMapper tbClueTrackRecordMapper;
+    @Override
+    public void addFollow(ClueTrackRecordVo tbClueTrackRecord) {
+        tbClueTrackRecordMapper.addFollow(tbClueTrackRecord);
+    }
 }

+ 1 - 1
huike-clues/src/main/resources/mapper/clues/TbClueTrackRecordMapper.xml

@@ -16,5 +16,5 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="falseReason"    column="false_reason"    />
         <result property="nextTime"    column="next_time"    />
     </resultMap>
-
+    <select id=""
 </mapper>

+ 41 - 3
huike-report/src/main/java/com/huike/report/mapper/ReportMapper.java

@@ -1,11 +1,10 @@
 package com.huike.report.mapper;
 
+import java.util.List;
 import java.util.Map;
 
 import org.apache.ibatis.annotations.Param;
 
-import com.huike.clues.domain.vo.IndexStatisticsVo;
-
 /**
  * 首页统计分析的Mapper
  * @author Administrator
@@ -58,9 +57,48 @@ public interface ReportMapper {
 						  @Param("username") String username);
 
 	/**=========================================今日简报========================================*/
+	//获取线索数量
+	Integer getTodayCluesNum(@Param("startTime") String beginCreateTime,
+						@Param("endTime") String endCreateTime,
+						@Param("username") String username);
+	//
+	Integer getTodayBusinessNum(@Param("startTime") String beginCreateTime,
+						   @Param("endTime") String endCreateTime,
+						   @Param("username") String username);
+	//
+	Integer getTodayContractNum(@Param("startTime") String beginCreateTime,
+						   @Param("endTime") String endCreateTime,
+						   @Param("username") String username);
+	//
+	Double getTodaySalesAmount(@Param("startTime") String beginCreateTime,
+						  @Param("endTime") String endCreateTime,
+						  @Param("username") String username);
+	/**=========================================待办========================================*/
+	//
+	Integer getTofollowedCluesNum(@Param("startTime") String beginCreateTime,
+							 @Param("endTime") String endCreateTime,
+							 @Param("username") String username);
+	//
+	Integer getTofollowedBusinessNum(@Param("startTime") String beginCreateTime,
+								@Param("endTime") String endCreateTime,
+								@Param("username") String username);
+	//
+	Integer getToallocatedCluesNum(@Param("startTime") String beginCreateTime,
+								@Param("endTime") String endCreateTime,
+								@Param("username") String username);
+	//
+	Integer getToallocatedBusinessNum(@Param("startTime") String beginCreateTime,
+							   @Param("endTime") String endCreateTime,
+							   @Param("username") String username);
 
 
+	//=========================================================饼状图
 
-	/**=========================================待办========================================*/
+	List<Map<String,Object>> subjectStatistics(@Param("startTime") String beginCreateTime, @Param("endTime") String endCreateTime);
+
+
+
+	//============================================================折线图
 
+	List<Map<String,Object>> cluesStatistics(@Param("startTime") String beginCreateTime, @Param("endTime") String endCreateTime);
 }

+ 28 - 0
huike-report/src/main/java/com/huike/report/service/IReportService.java

@@ -1,5 +1,6 @@
 package com.huike.report.service;
 
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 
@@ -107,5 +108,32 @@ public interface IReportService {
      */
     IndexBaseInfoVO getBaseInfo(String beginCreateTime, String endCreateTime);
 
+    /**
+     * 今日简报
+     */
+    Map<String, Object> getTodayInfo();
+
+    /**
+     * 特办事项
+     * @param beginCreateTime
+     * @param endCreateTime
+     */
+    Map<String,Object> getTodoInfo(String beginCreateTime, String endCreateTime);
+
+
+    /**
+     * 客户统计-学科客户分布饼图
+     * @param beginCreateTime
+     * @param endCreateTime
+     */
+    List<Map<String,Object>> subjectStatistics(String beginCreateTime, String endCreateTime);
+
+    /**
+     * 折线图
+     * @param beginCreateTime
+     * @param endCreateTime
+     * @return
+     */
+    LineChartVO cluesStatistics(String beginCreateTime, String endCreateTime);
 
 }

+ 109 - 7
huike-report/src/main/java/com/huike/report/service/impl/ReportServiceImpl.java

@@ -3,16 +3,16 @@ package com.huike.report.service.impl;
 import java.math.BigDecimal;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
+import java.util.*;
 import java.util.concurrent.CompletableFuture;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
+import com.baomidou.mybatisplus.extension.api.R;
+import com.huike.clues.utils.JobUtils;
+import com.huike.common.utils.StringUtils;
 import com.huike.report.domain.vo.*;
+import lombok.SneakyThrows;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -368,4 +368,106 @@ public class ReportServiceImpl implements IReportService {
         return result;
     }
 
+    /**
+     * 今日简报
+     * @return
+     */
+    @Override
+    public Map<String, Object> getTodayInfo() {
+
+        IndexVo indexVo = new IndexVo();
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(new Date());
+        calendar.set(Calendar.HOUR_OF_DAY, 0);
+        calendar.set(Calendar.MINUTE, 0);
+        calendar.set(Calendar.SECOND, 0);
+        Date start = calendar.getTime();
+        calendar.add(Calendar.DAY_OF_MONTH, 1);
+        calendar.add(Calendar.SECOND, -1);
+        Date end = calendar.getTime();
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        String start1 = sdf.format(start);
+        String end1 = sdf.format(end);
+
+
+        Map<String, Object> map = new HashMap<>();
+
+        String username = SecurityUtils.getUsername();
+
+        map.put("todayCluesNum",reportMpper.getTodayCluesNum(start1,end1,username));
+        map.put("todayBusinessNum",reportMpper.getTodayBusinessNum(start1,end1,username));
+        map.put("todayContractNum",reportMpper.getTodayContractNum(start1,end1,username));
+        map.put("todaySalesAmount",reportMpper.getTodaySalesAmount(start1,end1,username));
+
+        return map;
+    }
+
+    /**
+     * 特办事项
+     * @param beginCreateTime
+     * @param endCreateTime
+     * @return
+     */
+    @Override
+    public Map<String, Object> getTodoInfo(String beginCreateTime, String endCreateTime) {
+        String username = SecurityUtils.getUsername();
+        Map<String, Object> map = new HashMap<>();
+        map.put("tofollowedCluesNum",reportMpper.getTofollowedCluesNum(beginCreateTime,endCreateTime,username));
+        map.put("tofollowedBusinessNum",reportMpper.getTofollowedBusinessNum(beginCreateTime,endCreateTime,username));
+        map.put("toallocatedCluesNum",reportMpper.getToallocatedCluesNum(beginCreateTime,endCreateTime,username));
+        map.put("toallocatedBusinessNum",reportMpper.getToallocatedBusinessNum(beginCreateTime,endCreateTime,username));
+        return map;
+    }
+
+    /**
+     * 饼图
+     * @param beginCreateTime
+     * @param endCreateTime
+     */
+    @Override
+    public List<Map<String,Object>> subjectStatistics(String beginCreateTime, String endCreateTime) {
+     return reportMpper.subjectStatistics(beginCreateTime,endCreateTime);
+    }
+
+
+    /**
+     * 折线图
+     * @param beginCreateTime
+     * @param endCreateTime
+     * @return
+     */
+    @SneakyThrows
+    @Override
+    public LineChartVO cluesStatistics(String beginCreateTime, String endCreateTime) {
+        List<String> dates = ReportServiceImpl.findDates(beginCreateTime, endCreateTime);
+        LineChartVO lineChartVO = new LineChartVO();
+        lineChartVO.setxAxis(dates);
+        List<Map<String, Object>> list = reportMpper.cluesStatistics(beginCreateTime, endCreateTime);
+        ArrayList<LineSeriesVO> lt = new ArrayList<>();
+        LineSeriesVO lineSeriesVO1 = new LineSeriesVO();
+        LineSeriesVO lineSeriesVO2 = new LineSeriesVO();
+        lineSeriesVO1.setName("新增线索数量");
+        lineSeriesVO2.setName("线索总数量");
+        List<Object> list1 = new ArrayList<>();
+        List<Object> list2 = new ArrayList<>();
+        int sum=0;
+        for (int i = 0; i < list.size(); i++) {
+            for (int j = 0; j < dates.size(); j++) {
+                if (dates.get(j).equals(list.get(i).get("t"))){
+                    list1.add(list.get(i).get("n"));
+                    sum+=Integer.parseInt(list.get(i).get("n").toString());
+                }else {
+                    list1.add(0);
+                }
+                list2.add(sum);
+            }
+        }
+        lineSeriesVO1.setData(list1);
+        lineSeriesVO2.setData(list2);
+        lt.add(lineSeriesVO1);
+        lt.add(lineSeriesVO2);
+        lineChartVO.setSeries(lt);
+        return lineChartVO;
+    }
+
 }

+ 121 - 0
huike-report/src/main/resources/mapper/report/ReportMapper.xml

@@ -65,4 +65,125 @@
 			AND #{endTime}
 	</select>
 
+
+	<!-- ========= ================ =========== 今日简报 ============== ========== ========-->
+	<select id="getTodayCluesNum"   resultType="Integer">
+		SELECT COUNT(id) AS todayCluesNum  FROM `tb_clue`
+		WHERE id IN (
+			SELECT assign_id
+			FROM `tb_assign_record`
+			WHERE
+				DATE_FORMAT(create_time,'%Y-%m-%d %H:%i:%S')  BETWEEN #{startTime}
+					AND #{endTime}
+			  AND `type` = 0
+			  AND `user_name` = #{username}
+		)
+	</select>
+
+	<select id="getTodayBusinessNum"   resultType="Integer">
+		SELECT COUNT(DISTINCT(id)) AS todayBusinessNum
+		FROM`tb_business`
+		WHERE id IN (
+				SELECT
+					assign_id
+				FROM
+					`tb_assign_record`
+				WHERE
+					DATE_FORMAT(`create_time`,'%Y-%m-%d %H:%i:%S') BETWEEN #{startTime}
+						AND #{endTime}
+				  AND `type` = 1
+				  AND `user_name` = #{username})
+
+	</select>
+
+	<select id="getTodayContractNum"   resultType="Integer">
+		SELECT COUNT(DISTINCT(id)) AS todayContractNum
+		FROM `tb_contract`
+		WHERE
+			DATE_FORMAT(`create_time`,'%Y-%m-%d %H:%i:%S') BETWEEN #{startTime}
+				AND #{endTime}
+		  AND create_by = #{username}
+	</select>
+
+	<select id="getTodaySalesAmount"   resultType="Double">
+		SELECT CAST(
+					IFNULL(SUM(h.`contract_order`),0) AS DECIMAL (30, 0)
+				) AS todaySalesAmount
+		FROM `tb_contract` h
+		WHERE
+			h.create_by = #{username}
+		  AND DATE_FORMAT(h.create_time,'%Y-%m-%d %H:%i:%S') BETWEEN #{startTime}
+			AND #{endTime}
+	</select>
+
+
+<!--============== ============================= 特办事项 =============================	-->
+
+	<select id="getTofollowedCluesNum"   resultType="Integer">
+		SELECT COUNT(id) AS tofollowedCluesNum  FROM `tb_clue`
+		WHERE id IN (SELECT assign_id FROM `tb_assign_record`
+			WHERE
+				DATE_FORMAT(create_time,'%Y-%m-%d')  BETWEEN #{startTime}
+					AND #{endTime}
+			  AND `type` = 0
+			  AND `user_name` = #{username}
+		)
+		  AND `status`=1
+	</select>
+
+	<select id="getTofollowedBusinessNum"   resultType="Integer">
+		SELECT COUNT(DISTINCT(id)) AS businessNum FROM `tb_business`
+		WHERE id IN (SELECT
+					assign_id
+				FROM
+					`tb_assign_record`
+				WHERE
+					DATE_FORMAT(`create_time`,'%Y-%m-%d') BETWEEN #{startTime}
+						AND #{endTime}
+				  AND `type` = 1
+				  AND `user_name` = #{username}) AND `status`=1
+	</select>
+
+	<select id="getToallocatedCluesNum"   resultType="Integer">
+		SELECT COUNT(distinct (id)) AS toallocatedCluesNum  FROM `tb_clue`
+		WHERE id IN (SELECT assign_id FROM
+				`tb_assign_record`
+			WHERE
+				DATE_FORMAT(create_time,'%Y-%m-%d')  BETWEEN #{startTime}
+					AND #{endTime}
+			  and `latest` = 1
+			  AND `user_name` = #{username}
+		)
+	</select>
+
+	<select id="getToallocatedBusinessNum"   resultType="Integer">
+		SELECT COUNT(DISTINCT(id)) AS toallocatedBusinessNum FROM
+			`tb_business`
+		WHERE id IN ( SELECT assign_id FROM
+					`tb_assign_record`
+				WHERE
+					DATE_FORMAT(`create_time`,'%Y-%m-%d') BETWEEN #{startTime}
+						AND #{endTime}
+				  and `latest` = 1
+				  AND `user_name` = #{username})
+	</select>
+<!--饼图-->
+	<select id="subjectStatistics" resultType="java.util.Map">
+		select a.dict_label as subject,b.w as num
+		from (select s.dict_label,s.dict_value
+			  from sys_dict_data s where s.dict_type="course_subject") a,
+		     (select  c2.subject c,count(c2.subject) w
+				from tb_contract c1,
+					tb_course c2
+					where c1.course_id = c2.id and DATE_FORMAT(c1.create_time,'%Y-%m-%d') BETWEEN #{startTime}
+						AND #{endTime}  group by c1.subject) b
+		where a.dict_value=b.c
+	</select>
+
+
+	<select id="cluesStatistics" resultType="java.util.Map">
+		select DATE_FORMAT(tc.create_time,'%Y-%m-%d') t,count(tc.create_time) n
+		from tb_clue tc
+		where DATE_FORMAT(tc.create_time,'%Y-%m-%d') BETWEEN #{startTime} and #{endTime} group by DATE_FORMAT(tc.create_time,'%Y-%m-%d');
+	</select>
 </mapper>