zhu преди 2 години
родител
ревизия
b423dceb86

+ 109 - 0
zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/dashboard/DashBoardController.java

@@ -0,0 +1,109 @@
+package com.zhongzheng.controller.dashboard;
+
+import com.zhongzheng.common.core.controller.BaseController;
+import com.zhongzheng.modules.dashBoard.service.DashBoardService;
+import com.zhongzheng.modules.top.system.service.ITopInstitutionService;
+import com.zhongzheng.modules.top.util.DateUtil;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.StringUtils;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @program: saas_entrepot
+ * @description: DashBoardController
+ * 数据分块获取
+ * @author: zhu
+ * @create: 2023-09-19 15:09
+ */
+@Api(value = "仪表盘数据", tags = {"仪表盘数据"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/dashBoard/Organ")
+public class DashBoardController extends BaseController {
+
+    private final DashBoardService dashBoardService;
+
+    /**
+     * @Author zhu
+     * @Description //TODO zhu
+     * @Date 15:30 2023-09-19
+     * @Param
+     * @return
+     * type:1=机构,2=业务类型,3=下单客户,4=公海客户
+     **/
+
+    @ApiOperation("机构订单数据获取")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "reqtime",value = "查询时间,默认为2,本月。reqTime:1=本周,2=本月,3=本年,如果以上不存在就是时间区段"),
+            @ApiImplicitParam(name = "sorts",value = "排序条件,默认为1,。1=金额,2=数量"),
+            @ApiImplicitParam(name = "orgam",value = "机构。空为全部,机构ID")
+    })
+    @GetMapping("/getOrganData")
+    public Object getOrganData(@RequestParam(name = "reqtime" ,required = false)String reqtime,
+                                 @RequestParam(name = "sorts" ,defaultValue = "1" ,required = false)String sorts,
+                                 @RequestParam(name = "orgam" ,required = false)String orgam,
+                                 HttpServletRequest request)
+    {
+        System.out.println("reqtime:::"+reqtime);
+        Map<String,Object> maps = new HashMap<>();
+        //默认本月
+        Long startTime = DateUtil.getStaMonthDate();
+        Long endTime = DateUtil.getEndMonthDate();
+        if (!StringUtils.isEmpty(reqtime))
+        {
+            if (reqtime.contains(","))
+            {
+                startTime = Long.valueOf(reqtime.split(",")[0]);
+                endTime = Long.valueOf(reqtime.split(",")[1]);
+            }
+            else
+            {
+                switch (reqtime){
+                    case "1":
+                        startTime = DateUtil.getStaWeekDate();
+                        endTime = DateUtil.getEndWeekDate();
+                        break;
+                    case "2":
+                        startTime = DateUtil.getStaMonthDate();
+                        endTime = DateUtil.getEndMonthDate();
+                        break;
+                    case "3":
+                        startTime = DateUtil.getBeginDayOfYear();
+                        endTime = DateUtil.getEndDayOfYear();
+                        break;
+                }
+            }
+        }
+        maps.put("startTime",startTime);
+        maps.put("endTime",endTime);
+        //环比时间
+        maps.put("upTimeSta",DateUtil.getUpTime(startTime,Integer.parseInt(reqtime)));
+        maps.put("upTimeEnd",DateUtil.getUpTime(endTime,Integer.parseInt(reqtime)));
+        //同比时间
+        maps.put("beTimeSta",DateUtil.getBeTime(startTime));
+        maps.put("beTimeEnd",DateUtil.getBeTime(endTime));
+        //排名条件
+        maps.put("sorts",sorts);
+        //机构排名
+        maps.put("orgam",orgam);
+
+        System.out.println(maps.toString());
+
+        return dashBoardService.getOrganList(maps);
+    }
+
+
+
+
+}

+ 15 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/dashBoard/mapper/DashBoardMapper.java

@@ -0,0 +1,15 @@
+package com.zhongzheng.modules.dashBoard.mapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zhongzheng.modules.dashBoard.vo.DashBoardVo;
+import com.zhongzheng.modules.order.domain.Order;
+import org.apache.ibatis.annotations.Param;
+import java.util.List;
+import java.util.Map;
+
+public interface DashBoardMapper extends BaseMapper<Order> {
+
+    Map getOrganDataM(@Param("paramMap") Map paramMap);
+
+    Map getSumData(@Param("paramMap") Map paramMap);
+
+}

+ 14 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/dashBoard/service/DashBoardService.java

@@ -0,0 +1,14 @@
+package com.zhongzheng.modules.dashBoard.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zhongzheng.modules.dashBoard.vo.DashBoardVo;
+import com.zhongzheng.modules.top.goods.domain.TopOldOrder;
+
+import java.util.List;
+import java.util.Map;
+
+public interface DashBoardService
+        {
+    //获取机构排名
+    List<DashBoardVo> getOrganList(Map<String,Object> maps);
+}

+ 56 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/dashBoard/service/impl/DashBoardServiceImpl.java

@@ -0,0 +1,56 @@
+package com.zhongzheng.modules.dashBoard.service.impl;
+
+import com.zhongzheng.modules.dashBoard.mapper.DashBoardMapper;
+import com.zhongzheng.modules.dashBoard.service.DashBoardService;
+import com.zhongzheng.modules.dashBoard.vo.DashBoardVo;
+import com.zhongzheng.modules.top.util.DateUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @program: saas_entrepot
+ * @description: DashBoardServiceImpl
+ * @author: zhu
+ * @create: 2023-09-19 17:58
+ */
+@Service
+public class DashBoardServiceImpl implements DashBoardService {
+
+    @Resource
+    private DashBoardMapper dashBoardMapper;
+
+    /**
+     * @Author zhu
+     * @Description //TODO zhu
+     * @Date 14:52 2023-09-21
+     * @Param
+     * @return  纯SQL数据拿环比,同比,占比资料在XML中,这里使用内存处理,可读写比较强
+     **/
+
+    @Override
+    public List<DashBoardVo> getOrganList(Map<String, Object> maps) {
+        //获取当前区段数据
+        Map thisData = dashBoardMapper.getOrganDataM(maps);
+        //获取上个时间区段数据
+        maps.put("startTime",maps.get("upTimeSta"));
+        maps.put("endTime",maps.get("upTimeEnd"));
+        Map beforeMonthData = dashBoardMapper.getOrganDataM(maps);
+        //获取去年这个时间段数据
+        maps.put("startTime",maps.get("beTimeSta"));
+        maps.put("endTime",maps.get("beTimeEnd"));
+        Map beforeYearData = dashBoardMapper.getOrganDataM(maps);
+        //获取当前时间区段总数据
+        Map sumDatas = dashBoardMapper.getSumData(maps);
+        //组装数据开始
+        /*thisData.entrySet().stream().filter((Map.Entry<String,Object> entry) ->{
+
+        });*/
+
+
+        return null;
+    }
+}

+ 38 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/dashBoard/vo/DashBoardVo.java

@@ -0,0 +1,38 @@
+package com.zhongzheng.modules.dashBoard.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * 微信模板消息点击数据视图对象 mall_package
+ *
+ * @author hjl
+ * @date 2022-08-09
+ */
+@Data
+@ApiModel("数据仪表盘对象")
+public class DashBoardVo {
+    @ApiModelProperty("机构ID")
+    private Long organId;
+    @ApiModelProperty("机构名称")
+    private String organName;
+    @ApiModelProperty("业务员ID")
+    private Long salesmanId;
+    @ApiModelProperty("业务员名称")
+    private String salesmanName;
+    @ApiModelProperty("金额")
+    private BigDecimal orderMoneys;
+    @ApiModelProperty("环比")
+    private String momRatio;
+    @ApiModelProperty("同比")
+    private String nonRatio;
+    @ApiModelProperty("占比")
+    private String occupyRatio;
+    @ApiModelProperty("订单数量")
+    private Integer orderNumber;
+    @ApiModelProperty("时间")
+    private Long time;
+}

+ 179 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/util/DateUtil.java

@@ -0,0 +1,179 @@
+package com.zhongzheng.modules.top.util;
+
+import java.sql.Timestamp;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.GregorianCalendar;
+import java.util.List;
+
+/**
+ * @program: saas_entrepot
+ * @description: DateUtil
+ * @author: zhu
+ * @create: 2023-09-20 13:52
+ */
+public class DateUtil {
+
+    public static final  SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
+
+    //获取当天开始时间截
+    public static Long getStaDate()
+    {
+        Calendar cal = new GregorianCalendar();
+        cal.set(Calendar.HOUR_OF_DAY, 0);
+        cal.set(Calendar.MINUTE, 0);
+        cal.set(Calendar.SECOND, 0);
+        cal.set(Calendar.MILLISECOND, 0);
+        return cal.getTimeInMillis()/1000;
+    }
+    //获取当天结束时间截
+    public static Long getEndDate()
+    {
+        Calendar cal = new GregorianCalendar();
+        cal.set(Calendar.HOUR_OF_DAY, 23);
+        cal.set(Calendar.MINUTE, 59);
+        cal.set(Calendar.SECOND, 59);
+        return cal.getTimeInMillis();
+    }
+
+    public static Timestamp getBeginDayOfWeek() {
+        Date date = new Date();
+        if (date == null) {
+            return null;
+        }
+        Calendar cal = Calendar.getInstance();
+        cal.setTime(date);
+        int dayofweek = cal.get(Calendar.DAY_OF_WEEK);
+        if (dayofweek == 1) {
+            dayofweek += 7;
+        }
+        cal.add(Calendar.DATE, 2 - dayofweek);
+        return getDayStartTime(cal.getTime());
+    }
+
+    //获取当前周开始时间截
+    public static Long getStaWeekDate()
+    {
+        return getBeginDayOfWeek().getTime()/1000;
+    }
+    //获取当前周结束时间截
+    public static Long getEndWeekDate()
+    {
+        Calendar cal = Calendar.getInstance();
+        cal.setTime(getBeginDayOfWeek());
+        cal.add(Calendar.DAY_OF_WEEK, 6);
+        Date weekEndSta = cal.getTime();
+        return getDayEndTime(weekEndSta).getTime()/1000;
+    }
+    //获取当前月开始时间截
+    public static Long getStaMonthDate()
+    {
+        Calendar calendar = Calendar.getInstance();
+        calendar.set(getNowYear(), getNowMonth() - 1, 1);
+        return getDayStartTime(calendar.getTime()).getTime()/1000;
+    }
+    //获取当前月结束时间截
+    public static Long getEndMonthDate()
+    {
+        Calendar calendar = Calendar.getInstance();
+        calendar.set(getNowYear(), getNowMonth() - 1, 1);
+        int day = calendar.getActualMaximum(5);
+        calendar.set(getNowYear(), getNowMonth() - 1, day);
+        return getDayEndTime(calendar.getTime()).getTime()/1000;
+    }
+    // 获取本年的开始时间
+    public static Long getBeginDayOfYear() {
+        Calendar cal = Calendar.getInstance();
+        cal.set(Calendar.YEAR, getNowYear());
+        // cal.set
+        cal.set(Calendar.MONTH, Calendar.JANUARY);
+        cal.set(Calendar.DATE, 1);
+        return getDayStartTime(cal.getTime()).getTime()/1000;
+    }
+
+    // 获取本年的结束时间
+    public static Long getEndDayOfYear() {
+        Calendar cal = Calendar.getInstance();
+        cal.set(Calendar.YEAR, getNowYear());
+        cal.set(Calendar.MONTH, Calendar.DECEMBER);
+        cal.set(Calendar.DATE, 31);
+        return getDayEndTime(cal.getTime()).getTime()/1000;
+    }
+
+    //获取当前时间上次(周,月,年)---type=1周,2月,3年
+    public static Long getUpTime(Long time,Integer type)
+    {
+        Date dates = new Date(time*1000);
+        System.out.println("时间截时间:::"+formatter.format(dates));
+        System.out.println(dates.getMonth());
+        Calendar cal = Calendar.getInstance();
+        cal.setTime(dates);
+        switch (type){
+            /*case 1:
+                cal.add(Calendar.DATE,-1);
+                break;*/
+            case 1:
+                cal.add(Calendar.WEDNESDAY,-1);
+                break;
+            case 2:
+                cal.add(Calendar.MONTH,-1);
+                break;
+            case 3:
+                cal.add(Calendar.YEAR,-1);
+                break;
+        }
+        System.out.println("操作后"+formatter.format(cal.getTime()));
+        return cal.getTimeInMillis()/1000;
+    }
+    public static void main(String[] args){
+        Long t = Long.valueOf(1695265459);
+        getUpTime(t,4);
+    }
+    //获取去年当前时间
+    public static Long getBeTime(Long time)
+    {
+        Date dates = new Date(time*1000);
+        Calendar cal = Calendar.getInstance();
+        cal.setTime(dates);
+        cal.add(Calendar.YEAR,-1);
+        return cal.getTimeInMillis()/1000;
+    }
+    // 获取某个日期的开始时间
+    public static Timestamp getDayStartTime(Date d) {
+        Calendar calendar = Calendar.getInstance();
+        if (null != d)
+            calendar.setTime(d);
+        calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), 0,
+                0, 0);
+        calendar.set(Calendar.MILLISECOND, 0);
+        return new Timestamp(calendar.getTimeInMillis());
+    }
+
+    // 获取某个日期的结束时间
+    public static Timestamp getDayEndTime(Date d) {
+        Calendar calendar = Calendar.getInstance();
+        if (null != d)
+            calendar.setTime(d);
+        calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), 23,
+                59, 59);
+        calendar.set(Calendar.MILLISECOND, 999);
+        return new Timestamp(calendar.getTimeInMillis());
+    }
+    // 获取今年是哪一年
+    public static Integer getNowYear() {
+        Date date = new Date();
+        GregorianCalendar gc = (GregorianCalendar) Calendar.getInstance();
+        gc.setTime(date);
+        return Integer.valueOf(gc.get(1));
+    }
+
+    // 获取本月是哪个月
+    public static int getNowMonth() {
+        Date date = new Date();
+        GregorianCalendar gc = (GregorianCalendar) Calendar.getInstance();
+        gc.setTime(date);
+        return gc.get(2) + 1;
+    }
+}

+ 83 - 0
zhongzheng-system/src/main/resources/mapper/modules/dashBoard/DashBoardMapper.xml

@@ -0,0 +1,83 @@
+<?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.zhongzheng.modules.dashBoard.mapper.DashBoardMapper">
+    <select id="getOrganDataM" parameterType="map" resultType="java.util.HashMap">
+SELECT
+    t.tenant_name as organName,
+    t.tenant_id as organId,
+    IFNULL(SUM(too.order_received - too.pretax_brokerage-too.order_refunded),0) as orderMoneys,
+    COUNT(too.order_id) as orderNumber
+FROM sys_tenant as t LEFT JOIN top_old_order AS too ON t.tenant_id = too.tenant_id
+  WHERE too.check_status=1 and (too.check_time BETWEEN ${paramMap.startTime} and ${paramMap.endTime})
+        <choose>
+            <when test="paramMap.orgam != null">
+                and too.tenant_id = ${paramMap.orgam}
+                GROUP BY too.create_sys_user_id
+            </when>
+            <otherwise>
+                GROUP BY too.tenant_id
+            </otherwise>
+        </choose>
+
+        <if test="paramMap.sorts == 1">
+            ORDER BY orderMoneys DESC
+        </if>
+        <if test="paramMap.sorts == 2">
+            ORDER BY orderNumber ASC
+        </if>
+    </select>
+
+    <select id="getSumData" parameterType="map" resultType="java.util.HashMap">
+        SELECT
+        IFNULL(SUM(too.order_received - too.pretax_brokerage-too.order_refunded),0) as orderMoneys,
+        COUNT(too.order_id) as orderNumber
+        FROM  top_old_order AS too
+        WHERE too.check_status=1 and (too.check_time BETWEEN ${paramMap.startTime} and ${paramMap.endTime})
+          <if test="paramMap.orgam != null">and too.tenant_id = ${paramMap.orgam}</if>
+    </select>
+</mapper>
+<!--
+//使用数据计算环比,同比,占比SQL语句,备用
+select newTalbe.organName as organName,newTalbe.organId as organId,
+ newTalbe.orderMoneys as m1,
+ jTalbe.orderMoneys AS m2,
+ concat(ifnull(abs(round((newTalbe.orderMoneys-jTalbe.orderMoneys)/jTalbe.orderMoneys*100,2)),0),'%') AS 环比,
+ concat(ifnull(abs(round((newTalbe.orderMoneys-tb.orderMoneys)/jTalbe.orderMoneys*100,2)),0),'%') AS 同比,
+ concat(ifnull(abs(round(newTalbe.orderMoneys/ttt.orderMoneys*100,2)),0),'%') AS 占比,
+ ttt.orderMoneys as 总值
+ from
+(
+(SELECT
+t.tenant_name AS organName,
+t.tenant_id AS organId,
+IFNULL(SUM(too.order_received - too.pretax_brokerage - too.order_refunded), 0) AS orderMoneys,
+COUNT(too.order_id) AS orderNumber
+ FROM sys_tenant AS t LEFT JOIN top_old_order AS too ON t.tenant_id = too.tenant_id
+ WHERE too.check_status = 1
+ AND (too.check_time BETWEEN 1690444189 AND 1704038399)
+ GROUP BY too.tenant_id ORDER BY orderMoneys DESC) AS newTalbe LEFT JOIN (SELECT
+t.tenant_name AS organName,
+t.tenant_id AS organId,
+IFNULL(SUM(too.order_received - too.pretax_brokerage - too.order_refunded), 0) AS orderMoneys,
+COUNT(too.order_id) AS orderNumber
+ FROM sys_tenant AS t LEFT JOIN top_old_order AS too ON t.tenant_id = too.tenant_id
+ WHERE too.check_status = 1
+ AND (too.check_time BETWEEN 1672502400 AND 1704038399)
+ GROUP BY too.tenant_id ORDER BY orderMoneys DESC ) AS jTalbe ON newTalbe.organId = jTalbe.organId
+ LEFT JOIN (SELECT
+t.tenant_name AS organName,
+t.tenant_id AS organId,
+IFNULL(SUM(too.order_received - too.pretax_brokerage - too.order_refunded), 0) AS orderMoneys,
+COUNT(too.order_id) AS orderNumber
+ FROM sys_tenant AS t LEFT JOIN top_old_order AS too ON t.tenant_id = too.tenant_id
+ WHERE too.check_status = 1
+ AND (too.check_time BETWEEN 1672502400 AND 1704038399)
+ GROUP BY too.tenant_id ORDER BY orderMoneys DESC ) AS tb ON newTalbe.organId = tb.organId),(SELECT
+IFNULL(SUM(too.order_received - too.pretax_brokerage - too.order_refunded), 0) AS orderMoneys,
+COUNT(too.order_id) AS orderNumber
+ FROM sys_tenant AS t LEFT JOIN top_old_order AS too ON t.tenant_id = too.tenant_id
+ WHERE too.check_status = 1
+ AND (too.check_time BETWEEN 1672502400 AND 1704038399) ) as ttt
+-->