Преглед изворни кода

大屏接口以及供应商不能重复添加

zxf пре 2 дана
родитељ
комит
f70834f954

+ 22 - 0
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/annotation/LargeDataScope.java

@@ -0,0 +1,22 @@
+package com.ruoyi.logistics.annotation;
+
+import java.lang.annotation.*;
+
+/**
+ * 大屏专用数据权限注解
+ */
+@Target(ElementType.METHOD)
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+public @interface LargeDataScope {
+
+    /**
+     * 部门表别名
+     */
+    String deptAlias() default "d";
+
+    /**
+     * 是否开启权限
+     */
+    boolean enabled() default true;
+}

+ 80 - 0
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/config/LargeDataScopeAspect.java

@@ -0,0 +1,80 @@
+package com.ruoyi.logistics.config;
+
+import com.ruoyi.common.security.utils.SecurityUtils;
+import com.ruoyi.logistics.annotation.LargeDataScope;
+import com.ruoyi.logistics.domain.LargeRequest;
+import com.ruoyi.system.api.domain.SysRole;
+import com.ruoyi.system.api.domain.SysUser;
+import com.ruoyi.system.api.model.LoginUser;
+import org.aspectj.lang.JoinPoint;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Before;
+import org.aspectj.lang.reflect.MethodSignature;
+import org.springframework.stereotype.Component;
+
+import java.lang.reflect.Method;
+
+@Aspect
+@Component
+public class LargeDataScopeAspect {
+
+    // 数据权限常量(保持你项目原有一致即可)
+    public static final String DATA_SCOPE_CUSTOM = "2";
+    public static final String DATA_SCOPE_DEPT = "3";
+    public static final String DATA_SCOPE_DEPT_AND_CHILD = "4";
+
+    /**
+     * 大屏专用数据权限切面
+     */
+    @Before("@annotation(com.ruoyi.logistics.annotation.LargeDataScope)")
+    public void dataScopeBefore(JoinPoint point) {
+        MethodSignature signature = (MethodSignature) point.getSignature();
+        Method method = signature.getMethod();
+        LargeDataScope dataScope = method.getAnnotation(LargeDataScope.class);
+
+        if (!dataScope.enabled()) {
+            return;
+        }
+
+        // 获取入参 LargeRequest
+        Object[] args = point.getArgs();
+        LargeRequest largeRequest = null;
+        for (Object arg : args) {
+            if (arg instanceof LargeRequest) {
+                largeRequest = (LargeRequest) arg;
+                break;
+            }
+        }
+        if (largeRequest == null) {
+            return;
+        }
+
+        largeRequest.getParams().put("dataScope", "");
+        LoginUser loginUser = SecurityUtils.getLoginUser();
+        SysUser user = loginUser.getSysUser();
+
+        if (user.isAdmin()) {
+            return;
+        }
+
+        StringBuilder sql = new StringBuilder();
+        String deptAlias = dataScope.deptAlias();
+
+        for (SysRole role : user.getRoles()) {
+            String ds = role.getDataScope();
+
+            if (DATA_SCOPE_CUSTOM.equals(ds)) {
+                sql.append(" OR ").append(deptAlias).append(".dept_id IN (SELECT dept_id FROM sys_role_dept WHERE   role_id = ").append(role.getRoleId()).append(")");
+            } else if (DATA_SCOPE_DEPT.equals(ds)) {
+                sql.append(" OR ").append(deptAlias).append(".dept_id = ").append(user.getDeptId());
+            } else if (DATA_SCOPE_DEPT_AND_CHILD.equals(ds)) {
+                sql.append(" OR ").append(deptAlias).append(".dept_id IN (SELECT dept_id FROM sys_dept WHERE dept_id = ").append(user.getDeptId()).append(" OR find_in_set(").append(user.getDeptId()).append(", ancestors))");
+            }
+        }
+
+        if (sql.length() > 0) {
+            largeRequest.getParams().put("dataScope", " AND (" + sql.substring(4) + ")");
+        }
+    }
+}
+

+ 189 - 0
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/controller/LargeScreenReportController.java

@@ -0,0 +1,189 @@
+package com.ruoyi.logistics.controller;
+import com.ruoyi.common.core.web.controller.BaseController;
+import com.ruoyi.common.core.web.domain.AjaxResult;
+import com.ruoyi.common.security.annotation.RequiresPermissions;
+import com.ruoyi.logistics.domain.LargeRequest;
+import com.ruoyi.logistics.service.LargeScreenReportService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 大屏展示报表
+ *
+ * @author RuiJing
+ * @date 2026-04-07
+ */
+@RestController
+@RequestMapping("/large")
+public class LargeScreenReportController  extends BaseController {
+
+    private static final Logger logger = LoggerFactory.getLogger(LargeScreenReportController.class);
+
+    @Autowired
+    LargeScreenReportService largeScreenReportService;
+
+    /**
+     * 京东顺丰下单量
+     * 参数: 开始结束时间
+     * 供应商
+     */
+
+    @PostMapping("/queryOrderTypeReport")
+    public AjaxResult queryOrderTypeReport(@RequestBody LargeRequest largeRequest) {
+        try {
+            List<Map> result = largeScreenReportService.queryOrderTypeReport(largeRequest);
+            return AjaxResult.success(result);
+        } catch (Exception e) {
+            return AjaxResult.error("系统错误!");
+        }
+    }
+
+
+    /**
+     * 每日订单量
+     * 参数: 开始结束时间
+     *       供应商
+     */
+    @PostMapping("/queryDayOrdersReport")
+    public AjaxResult queryDayOrdersReport(@RequestBody LargeRequest largeRequest) {
+        try {
+            Map result = largeScreenReportService.queryDayOrdersReport(largeRequest);
+            return AjaxResult.success(result);
+        } catch (Exception e) {
+            return AjaxResult.error("系统错误!");
+        }
+    }
+
+    /**
+     * 各省份发货订单量
+     * 参数: 开始结束时间
+     *       供应商
+     */
+    @PostMapping("/queryProvinceOrdersReport")
+    public AjaxResult queryProvinceOrdersReport(@RequestBody LargeRequest largeRequest) {
+        try {
+            Map result = largeScreenReportService.queryProvinceOrdersReport(largeRequest);
+            return AjaxResult.success(result);
+        } catch (Exception e) {
+            return AjaxResult.error("系统错误!");
+        }
+    }
+
+    /**
+     * 运输类型统计
+     * 参数: 开始结束时间
+     *       供应商
+     */
+
+
+
+
+    @PostMapping("/queryTransportTypeReport")
+    public AjaxResult queryTransportTypeReport(@RequestBody LargeRequest largeRequest) {
+        try {
+            List<Map> result = largeScreenReportService.queryTransportTypeReport(largeRequest);
+            return AjaxResult.success(result);
+        } catch (Exception e) {
+            return AjaxResult.error("系统错误!");
+        }
+    }
+
+    /**
+     * 物流费用统计
+     * 参数: 开始结束时间
+     *       供应商
+     */
+    @PostMapping("/queryFreeOrdersReport")
+    public AjaxResult queryFreeOrdersReport(@RequestBody LargeRequest largeRequest) {
+        try {
+            List<Map> result = largeScreenReportService.queryFreeOrdersReport(largeRequest);
+            return AjaxResult.success(result);
+        } catch (Exception e) {
+            return AjaxResult.error("系统错误!");
+        }
+    }
+
+    /**
+     * 供应商排名  金额 下单量
+     * 参数: 开始结束时间
+     *       供应商
+     *       类型  1 金额  2 下单量
+     */
+    @PostMapping("/queryOrdersReportByType")
+    public AjaxResult queryOrdersReportByType(@RequestBody LargeRequest largeRequest) {
+        try {
+            List<Map> result = largeScreenReportService.queryOrdersReportByType(largeRequest);
+            return AjaxResult.success(result);
+        } catch (Exception e) {
+            return AjaxResult.error("系统错误!");
+        }
+    }
+
+
+
+
+
+    /**
+     * 供应商月份金额统计
+     * 参数: 开始结束时间
+     *       供应商
+     */
+    @PostMapping("/queryDeptMonthlyGrowthRate")
+    public AjaxResult queryDeptMonthlyGrowthRate(@RequestBody LargeRequest largeRequest) {
+        try {
+            Map result = largeScreenReportService.queryDeptMonthlyGrowthRate(largeRequest);
+            return AjaxResult.success(result);
+        } catch (Exception e) {
+            return AjaxResult.error("系统错误!"+e.getMessage());
+        }
+    }
+
+
+    /**
+     * 供应商下拉查询列表
+     *
+     */
+
+    @PostMapping("/queryDeptList")
+    public AjaxResult queryDeptList(@RequestBody LargeRequest largeRequest) {
+        try {
+            List<Map> result = largeScreenReportService.queryDeptList( largeRequest);
+            return AjaxResult.success(result);
+        } catch (Exception e) {
+            return AjaxResult.error("系统错误!");
+        }
+    }
+
+
+    /**
+     * 省份下拉列表
+     *
+     */
+    @PostMapping("/queryProvinceList")
+    public AjaxResult queryProvinceList(@RequestBody LargeRequest largeRequest) {
+        try {
+            List<Map> result = largeScreenReportService.queryProvinceList(largeRequest);
+            return AjaxResult.success(result);
+        } catch (Exception e) {
+            return AjaxResult.error("系统错误!");
+        }
+    }
+
+
+    @PostMapping("/queryLogisticsTrajectory")
+    public AjaxResult queryLogisticsTrajectory(@RequestBody LargeRequest largeRequest) {
+        try {
+            Map result = largeScreenReportService.queryLogisticsTrajectory(largeRequest);
+            return AjaxResult.success(result);
+        } catch (Exception e) {
+            return AjaxResult.error("系统错误!"+e.getMessage());
+        }
+    }
+}

+ 23 - 0
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/domain/LargeRequest.java

@@ -0,0 +1,23 @@
+package com.ruoyi.logistics.domain;
+
+
+import com.ruoyi.common.core.web.domain.BaseEntity;
+import lombok.Data;
+
+
+
+@Data
+public class LargeRequest extends BaseEntity  {
+   private String orderType;    //订单类型  1  京东 2 顺丰
+   private String startTime;    //开始时间
+   private String endTime;       //结束时间
+   private Long deptId;      //供应商id   根据下拉接口返回的
+   private String rankType;      //排名类型  1 金额  2 下单量
+   private String searchProvince; //搜索省份
+   //经纬度信息
+   private double longitude;
+   private double latitude;
+   private Long userId;
+
+
+}

+ 32 - 0
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/mapper/LargeScreenReportMapper.java

@@ -0,0 +1,32 @@
+package com.ruoyi.logistics.mapper;
+
+import com.ruoyi.logistics.domain.LargeRequest;
+
+import java.util.List;
+import java.util.Map;
+
+public interface LargeScreenReportMapper {
+    List<Map> queryOrderTypeReport(LargeRequest largeRequest);
+
+    List<Map<String,Object>> queryDayOrdersReport(LargeRequest largeRequest);
+
+    List<Map<String,Object>> queryProvinceOrdersReport(LargeRequest largeRequest);
+
+    List<Map> queryFreeOrdersReport(LargeRequest largeRequest);
+
+    List<Map> queryOrdersReportByFree(LargeRequest largeRequest);
+
+    List<Map> queryOrdersReportByNum(LargeRequest largeRequest);
+
+    List<Map<String,Object>> queryDeptMonthlyGrowthRate(LargeRequest largeRequest);
+
+    List<Map> queryTransportTypeReport(LargeRequest largeRequest);
+
+    List<Map> queryDeptList(LargeRequest largeRequest);
+
+    List<Map> queryProvinceList(LargeRequest largeRequest);
+
+    List<Map<String, Object>> queryLogisticsTrajectoryOutflow(LargeRequest largeRequest);
+
+    List<Map<String, Object>> queryLogisticsTrajectoryinflow(LargeRequest largeRequest);
+}

+ 29 - 0
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/service/LargeScreenReportService.java

@@ -0,0 +1,29 @@
+package com.ruoyi.logistics.service;
+
+import com.ruoyi.logistics.domain.LargeRequest;
+
+import java.util.List;
+import java.util.Map;
+
+
+public interface LargeScreenReportService {
+    List<Map> queryOrderTypeReport(LargeRequest largeRequest);
+
+    Map queryDayOrdersReport(LargeRequest largeRequest);
+
+    Map queryProvinceOrdersReport(LargeRequest largeRequest);
+
+    List<Map> queryFreeOrdersReport(LargeRequest largeRequest);
+
+    List<Map> queryOrdersReportByType(LargeRequest largeRequest);
+
+    Map queryDeptMonthlyGrowthRate(LargeRequest largeRequest);
+
+    List<Map> queryTransportTypeReport(LargeRequest largeRequest);
+
+    List<Map> queryDeptList(LargeRequest largeRequest);
+
+    List<Map> queryProvinceList(LargeRequest largeRequest);
+
+    Map queryLogisticsTrajectory(LargeRequest largeRequest);
+}

+ 235 - 0
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/service/impl/LargeScreenReportServiceImpl.java

@@ -0,0 +1,235 @@
+package com.ruoyi.logistics.service.impl;
+
+import com.ruoyi.common.datascope.annotation.DataScope;
+import com.ruoyi.common.datascope.aspect.DataScopeAspect;
+import com.ruoyi.common.security.utils.SecurityUtils;
+import com.ruoyi.logistics.annotation.LargeDataScope;
+import com.ruoyi.logistics.domain.LargeRequest;
+import com.ruoyi.logistics.mapper.BizWaybillOrderMapper;
+import com.ruoyi.logistics.mapper.LargeScreenReportMapper;
+import com.ruoyi.logistics.service.LargeScreenReportService;
+import com.ruoyi.system.api.domain.SysRole;
+import com.ruoyi.system.api.domain.SysUser;
+import com.ruoyi.system.api.model.LoginUser;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
+import java.util.*;
+
+@Slf4j
+@Service
+public class LargeScreenReportServiceImpl  implements LargeScreenReportService {
+
+    @Autowired
+    private LargeScreenReportMapper largeScreenReportMapper;
+
+
+    @Override
+    @LargeDataScope
+    public List<Map> queryOrderTypeReport(LargeRequest largeRequest) {
+        return largeScreenReportMapper.queryOrderTypeReport(largeRequest);
+    }
+
+    @Override
+    @LargeDataScope
+    public Map queryDayOrdersReport(LargeRequest largeRequest) {
+        Map<String,Object> result=new HashMap<>();
+        List<String> month= new ArrayList<>();
+        List<String> orderNum= new ArrayList<>();  //订单
+        List<String> deliveryNum= new ArrayList<>();  //配送中
+        List<String> properNum= new ArrayList<>();  //妥投
+
+        //年月日拿到最近三十天起始日期
+        largeRequest.setStartTime(get30DaysAgo());
+        largeRequest.setEndTime( LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
+        List<Map<String,Object>> list= largeScreenReportMapper.queryDayOrdersReport(largeRequest);
+        for(int i=0;i<list.size();i++){
+            month.add(list.get(i).get("time").toString()) ;
+            orderNum.add(list.get(i).get("order_num").toString()) ;
+            deliveryNum.add(list.get(i).get("delivery_num").toString()) ;
+            properNum.add(list.get(i).get("proper_num").toString()) ;
+        }
+        result.put("month",month);
+        result.put("orderNum",orderNum);
+        result.put("deliveryNum",deliveryNum);
+        result.put("properNum",properNum);
+
+        return result;
+
+    }
+
+    @Override
+    @LargeDataScope
+    public Map queryProvinceOrdersReport(LargeRequest largeRequest) {
+        Map<String,Object> result=new HashMap<>();
+        List<String> allProvince= new ArrayList<>();
+        List<String> allMergerProvince= new ArrayList<>();
+        List<Integer> orderNum= new ArrayList<>();
+        List<Map<String,Object>> list= largeScreenReportMapper.queryProvinceOrdersReport(largeRequest);
+        for(int i=0;i<list.size();i++){
+            allProvince.add(list.get(i).get("province_name").toString()) ;
+            orderNum.add(Integer.parseInt(list.get(i).get("num").toString())) ;
+            allMergerProvince.add(list.get(i).get("merger_name").toString());
+        }
+        result.put("allProvince",allProvince);
+        result.put("allMergerProvince",allMergerProvince);
+        result.put("orderNum",orderNum);
+        return result;
+
+    }
+
+    @Override
+    @LargeDataScope
+    public List<Map> queryFreeOrdersReport(LargeRequest largeRequest) {
+        return largeScreenReportMapper.queryFreeOrdersReport(largeRequest);
+
+    }
+
+    @Override
+    public List<Map> queryOrdersReportByType(LargeRequest largeRequest) {
+        if("1".equals(largeRequest.getRankType())){
+            return largeScreenReportMapper.queryOrdersReportByFree(largeRequest);
+        }
+        if("2".equals(largeRequest.getRankType())){
+            return largeScreenReportMapper.queryOrdersReportByNum(largeRequest);
+        }
+       return null ;
+
+    }
+
+    @Override
+    public Map queryDeptMonthlyGrowthRate(LargeRequest largeRequest) {
+
+        Map<String,Object> result=new HashMap<>();
+        List<String> month= new ArrayList<>();
+        List<BigDecimal> rateAmount= new ArrayList<>();
+        List<BigDecimal> growthRate= new ArrayList<>();
+        List<Map<String,Object>> list= largeScreenReportMapper.queryDeptMonthlyGrowthRate(largeRequest);
+        for(int i=0;i<list.size();i++){
+            month.add(list.get(i).get("month").toString()) ;
+            rateAmount.add(new BigDecimal(list.get(i).get("rate_amount").toString()));
+            growthRate.add(new BigDecimal(list.get(i).get("growth_rate").toString()));
+        }
+        result.put("month",month);
+        result.put("rateAmount",rateAmount);
+        result.put("growthRate",growthRate);
+        return result;
+
+
+
+
+    }
+
+    @Override
+    @LargeDataScope
+    public List<Map> queryTransportTypeReport(LargeRequest largeRequest) {
+        return largeScreenReportMapper.queryTransportTypeReport(largeRequest);
+    }
+
+    @Override
+    @LargeDataScope
+    public List<Map> queryDeptList(LargeRequest largeRequest) {
+     /*   largeRequest.getParams().put("dataScope", "");
+        LoginUser loginUser = SecurityUtils.getLoginUser();
+        SysUser user = loginUser.getSysUser();
+
+        if (!user.isAdmin()) {
+            StringBuilder sql = new StringBuilder();
+
+            // 只拼接【部门权限】,彻底忽略【本人权限】
+            for (SysRole role : user.getRoles()) {
+                String ds = role.getDataScope();
+
+                if (DataScopeAspect.DATA_SCOPE_CUSTOM.equals(ds)) {
+                    // 自定义部门权限
+                    sql.append(" OR d.dept_id IN (SELECT dept_id FROM sys_role_dept WHERE role_id = ").append(role.getRoleId()).append(")");
+                } else if (DataScopeAspect.DATA_SCOPE_DEPT.equals(ds)) {
+                    // 本部门
+                    sql.append(" OR d.dept_id = ").append(user.getDeptId());
+                } else if (DataScopeAspect.DATA_SCOPE_DEPT_AND_CHILD.equals(ds)) {
+                    // 本部门及子级
+                    sql.append(" OR d.dept_id IN (SELECT dept_id FROM sys_dept WHERE dept_id = ").append(user.getDeptId()).append(" OR find_in_set(").append(user.getDeptId()).append(", ancestors))");
+                }
+
+
+                // 关键:这里 不处理 仅本人权限!
+            }
+
+            if (sql.length() > 0) {
+                largeRequest.getParams().put("dataScope", " AND (" + sql.substring(4) + ")");
+            }
+        }*/
+
+
+
+        return largeScreenReportMapper.queryDeptList(largeRequest);
+    }
+
+    @Override
+    @LargeDataScope
+    public List<Map> queryProvinceList(LargeRequest largeRequest) {
+        return largeScreenReportMapper.queryProvinceList(largeRequest);
+
+    }
+
+    @Override
+    public Map queryLogisticsTrajectory(LargeRequest largeRequest) {
+        //根据传入的 时间  物流公司 供应商 省份 进行查询 流入和流出省份轨迹
+        Map<String,Object> result=new HashMap<>();
+        List<Map<String,Object>> OutflowProvince= new ArrayList<>();
+        List<Map<String,Object>> InflowProvince= new ArrayList<>();
+        Map location=new HashMap<>();
+        //先把查询的省份经纬度存一下
+        List<Double> searchProvinceLocation = new ArrayList<>();
+        searchProvinceLocation.add(largeRequest.getLongitude());
+        searchProvinceLocation.add(largeRequest.getLatitude());
+        location.put(largeRequest.getSearchProvince(),searchProvinceLocation);
+        //流出
+        List<Map<String,Object>> Outflow= largeScreenReportMapper.queryLogisticsTrajectoryOutflow(largeRequest);
+        for(int i=0;i<Outflow.size();i++){
+            //定义流出省份
+            Map<String,Object> outflowProvince=new HashMap<>();
+            outflowProvince.put("form",largeRequest.getSearchProvince());
+            outflowProvince.put("to",Outflow.get(i).get("provinceName"));
+            outflowProvince.put("value",Outflow.get(i).get("num"));
+            OutflowProvince.add(outflowProvince);
+            //给经纬度也加上
+            List<Double> locationOn = new ArrayList<>();
+            locationOn.add(Double.parseDouble( Outflow.get(i).get("lng").toString()));
+            locationOn.add(Double.parseDouble(Outflow.get(i).get("lat").toString()));
+            location.put(Outflow.get(i).get("provinceName"),locationOn);
+        }
+        //流入
+        List<Map<String,Object>> inflow= largeScreenReportMapper.queryLogisticsTrajectoryinflow(largeRequest);
+        for(int i=0;i<inflow.size();i++){
+            //定义流入省份
+            Map<String,Object> inflowProvince=new HashMap<>();
+            inflowProvince.put("form",inflow.get(i).get("provinceName"));
+            inflowProvince.put("to",largeRequest.getSearchProvince());
+            inflowProvince.put("value",inflow.get(i).get("num"));
+            InflowProvince.add(inflowProvince);
+            //给经纬度也加上
+            List<Double> locationOn = new ArrayList<>();
+            locationOn.add(Double.parseDouble( inflow.get(i).get("lng").toString()));
+            locationOn.add(Double.parseDouble( inflow.get(i).get("lat").toString()));
+            location.put(inflow.get(i).get("provinceName"),locationOn);
+        }
+
+        result.put("outflow",OutflowProvince);
+        result.put("inflow",InflowProvince);
+        result.put("loaction",location);
+        return  result;
+    }
+
+
+    public static String get30DaysAgo() {
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+        LocalDate now = LocalDate.now();
+        LocalDate before30Days = now.minusDays(15);
+        return before30Days.format(formatter);
+    }
+}

+ 451 - 0
jd-logistics-modules/jd-logistics-system/src/main/resources/mapper/logistics/LargeScreenReportMapper.xml

@@ -0,0 +1,451 @@
+<?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.ruoyi.logistics.mapper.LargeScreenReportMapper">
+
+
+
+   <!-- 按照订单类型查询订单量-->
+    <select id="queryOrderTypeReport"  parameterType="java.util.Map" resultType="java.util.HashMap"  >
+
+        SELECT dict_label orderTypeName ,dict_value orderType,ifnull(num,0) num  FROM (
+
+        SELECT dict_label, dict_value FROM sys_dict_data WHERE dict_type = 'logistics_type') a
+        left join (
+        SELECT
+            order_type,
+            count(1) num
+        FROM
+            biz_waybill_order d
+        WHERE   order_status != 6
+
+        <if test="orderType != null and orderType != ''">
+            and d.order_type = #{orderType}
+        </if>
+        <if test="startTime != null and startTime != ''">
+            and DATE_FORMAT(d.create_time, '%Y-%m-%d') >= #{startTime}
+        </if>
+        <if test="endTime != null and endTime != ''">
+            and DATE_FORMAT(d.create_time, '%Y-%m-%d')<![CDATA[<=]]>  #{endTime}
+        </if>
+        <if test="deptId != null and deptId != ''">
+            and d.dept_id = #{deptId}
+        </if>
+        <!-- 数据范围过滤 -->
+        ${params.dataScope}
+
+        GROUP BY
+            order_type) b ON a.dict_value = b.order_type
+        </select>
+
+
+
+
+    <!-- 每日订单量-->
+    <select id="queryDayOrdersReport"  parameterType="java.util.Map" resultType="java.util.HashMap"  >
+        SELECT
+        date_list.day_time AS time,
+        IFNULL(t.order_num, 0) AS order_num,
+        IFNULL(t.delivery_num, 0) AS delivery_num,
+        IFNULL(t.proper_num, 0) AS proper_num
+        FROM
+        (
+        SELECT
+        DATE_FORMAT(
+        DATE_ADD(#{startTime}, INTERVAL (a + 10*b + 100*c) DAY),
+        '%Y-%m-%d'
+        ) AS day_time
+        FROM
+        (SELECT 0 a UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) ta,
+        (SELECT 0 b UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) tb,
+        (SELECT 0 c UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) tc
+        HAVING
+        day_time<![CDATA[<=]]>#{endTime}
+        ) date_list
+        LEFT JOIN (
+        SELECT
+        DATE_FORMAT(create_time, '%Y-%m-%d') AS time,
+        SUM(order_status != 6) AS order_num,
+        SUM(order_status != 6 AND order_status != 5) AS delivery_num,
+        SUM(order_status = 5) AS proper_num
+        FROM biz_waybill_order d
+        WHERE d.create_time >=#{startTime} AND d.create_time <![CDATA[<=]]> #{endTime}
+        <if test="orderType != null and orderType != ''">
+            and d.order_type = #{orderType}
+        </if>
+      <!--  <if test="deptId != null and deptId != ''">
+            and d.dept_id = #{deptId}
+        </if>-->
+        <!-- 数据范围过滤 -->
+        ${params.dataScope}
+
+        GROUP BY DATE_FORMAT(d.create_time, '%Y-%m-%d')
+        ) t ON date_list.day_time = t.time
+        ORDER BY date_list.day_time;
+
+    </select>
+
+
+
+
+   <!-- 按照省份查询订单量-->
+    <select id="queryProvinceOrdersReport"  parameterType="java.util.Map" resultType="java.util.HashMap"  >
+        SELECT
+        a.province_name,
+        a.merger_name,
+        ifnull( b.num, 0 ) num
+        FROM
+        ( SELECT NAME province_name, merger_name FROM sys_city WHERE `level` = 0 ) a
+        LEFT JOIN ( SELECT sender_province, count( 1 ) num FROM biz_waybill_order d WHERE d.order_status != 6
+
+        <if test="orderType != null and orderType != ''">
+            and d.order_type = #{orderType}
+        </if>
+        <if test="startTime != null and startTime != ''">
+            and DATE_FORMAT(d.create_time, '%Y-%m-%d') >= #{startTime}
+        </if>
+        <if test="endTime != null and endTime != ''">
+            and DATE_FORMAT(d.create_time, '%Y-%m-%d')<![CDATA[<=]]>  #{endTime}
+        </if>
+        <if test="deptId != null and deptId != ''">
+            and d.dept_id = #{deptId}
+        </if>
+        <!-- 数据范围过滤 -->
+        ${params.dataScope}
+
+    GROUP BY sender_province ) b ON a.province_name = b.sender_province
+    order by num desc
+    </select>
+
+    <!-- 供应商列表-->
+    <select id="queryDeptList"  parameterType="java.util.Map" resultType="java.util.HashMap"  >
+        select d.dept_id deptId,d.dept_name deptName
+        from  sys_dept d
+        where  d.status=0 and d.del_flag=0
+        <!-- 数据范围过滤 -->
+        ${params.dataScope}
+    </select>
+
+
+    <!-- 省份列表-->
+    <select id="queryProvinceList"  parameterType="java.util.Map" resultType="java.util.HashMap"  >
+        SELECT
+        a.name AS provinceName,
+        a.lng,
+        a.lat,
+        IFNULL(SUM(CASE WHEN a.name = d.sender_province THEN 1 ELSE 0 END), 0) AS sendCount,
+        IFNULL(SUM(CASE WHEN a.name = d.receiver_province THEN 1 ELSE 0 END), 0) AS recvCount
+        FROM sys_city a
+        LEFT JOIN biz_waybill_order d
+        ON (a.name = d.sender_province OR a.name = d.receiver_province)
+
+        <if test="orderType != null and orderType != ''">
+            and d.order_type = #{orderType}
+        </if>
+        <if test="startTime != null and startTime != ''">
+            and DATE_FORMAT(d.create_time, '%Y-%m-%d') >= #{startTime}
+        </if>
+        <if test="endTime != null and endTime != ''">
+            and DATE_FORMAT(d.create_time, '%Y-%m-%d')<![CDATA[<=]]>  #{endTime}
+        </if>
+        <if test="deptId != null and deptId != ''">
+            and d.dept_id = #{deptId}
+        </if>
+        <!-- 数据范围过滤 -->
+        ${params.dataScope}
+        WHERE a.level = 0
+        GROUP BY a.name, a.lng, a.lat
+        ORDER BY sendCount DESC, recvCount DESC;
+
+
+
+
+    </select>
+
+
+
+
+
+    <!-- 物流轨迹省份查询流出-->
+    <select id="queryLogisticsTrajectoryOutflow"  parameterType="java.util.Map" resultType="java.util.HashMap"  >
+        SELECT
+            receiver_province provinceName,
+            lng,
+            lat,count(1) num
+        FROM
+            biz_waybill_order a
+                LEFT JOIN sys_city b ON a.receiver_province = b.NAME
+        WHERE
+            b.LEVEL = 0
+       and   a.order_status != 6
+        <if test="orderType != null and orderType != ''">
+            and  a.order_type = #{orderType}
+        </if>
+        <if test="startDate != null and startDate != ''">
+            and DATE_FORMAT(a.create_time, '%Y-%m-%d') >= #{startDate}
+        </if>
+        <if test="endDate != null and endDate != ''">
+            and DATE_FORMAT(a.create_time, '%Y-%m-%d')<![CDATA[<=]]>  #{endDate}
+        </if>
+        <if test="deptId != null and deptId != ''">
+            and  a.dept_id = #{deptId}
+        </if>
+        <if test="searchProvince != null and searchProvince != ''">
+            and  a.sender_province = #{searchProvince}
+        </if>
+        group by receiver_province
+    </select>
+    <!-- 物流轨迹省份查询流入-->
+    <select id="queryLogisticsTrajectoryinflow"  parameterType="java.util.Map" resultType="java.util.HashMap"  >
+        SELECT
+            sender_province provinceName,
+            lng,
+            lat ,count(1) num
+        FROM
+            biz_waybill_order a
+                LEFT JOIN sys_city b ON a.sender_province = b.NAME
+        WHERE
+            b.LEVEL = 0
+        and  a.order_status != 6
+        <if test="orderType != null and orderType != ''">
+            and  a.order_type = #{orderType}
+        </if>
+        <if test="startDate != null and startDate != ''">
+            and DATE_FORMAT(a.create_time, '%Y-%m-%d') >= #{startDate}
+        </if>
+        <if test="endDate != null and endDate != ''">
+            and DATE_FORMAT(a.create_time, '%Y-%m-%d')<![CDATA[<=]]>  #{endDate}
+        </if>
+        <if test="deptId != null and deptId != ''">
+            and  a.dept_id = #{deptId}
+        </if>
+        <if test="searchProvince != null and searchProvince != ''">
+            and  a.receiver_province = #{searchProvince}
+        </if>
+        group by sender_province
+
+    </select>
+    <!-- 按照快递快运区分统计-->
+    <select id="queryTransportTypeReport"  parameterType="java.util.Map" resultType="java.util.HashMap"  >
+        SELECT
+            c.dict_label typeName,
+            ifnull( d.num, 0 ) num
+        FROM
+            ( SELECT DISTINCT dict_label FROM sys_dict_data WHERE dict_type = 'rjsd_logistics_product' ) c
+                LEFT JOIN (
+                SELECT
+                    dict_label typeName,
+                    count( 1 ) num
+                FROM
+                    biz_waybill_order d
+                        LEFT JOIN ( SELECT dict_label, dict_value FROM sys_dict_data WHERE dict_type = 'rjsd_logistics_product' ) b ON d.product_code = b.dict_value
+                WHERE
+                    d.order_status != 6
+        <if test="orderType != null and orderType != ''">
+            and  d.order_type = #{orderType}
+        </if>
+        <if test="startTime != null and startTime != ''">
+            and DATE_FORMAT(d.create_time, '%Y-%m-%d') >= #{startTime}
+        </if>
+        <if test="endTime != null and endTime != ''">
+            and DATE_FORMAT(d.create_time, '%Y-%m-%d')<![CDATA[<=]]>  #{endTime}
+        </if>
+        <if test="deptId != null and deptId != ''">
+            and  d.dept_id = #{deptId}
+        </if>
+        <!-- 数据范围过滤 -->
+        ${params.dataScope}
+                GROUP BY
+                    dict_label
+            ) d ON c.dict_label = d.typeName
+    </select>
+
+    <!-- 物流费用统计-->
+    <select id="queryFreeOrdersReport"  parameterType="java.util.Map" resultType="java.util.HashMap"  >
+        SELECT
+        w.dict_label typeName,
+        ifnull( q.rate_amount, 0.00 ) rateAmount
+        FROM
+        ( SELECT dict_label, dict_value FROM sys_dict_data WHERE dict_type = 'logistics_type' ) w
+        LEFT JOIN (
+        SELECT
+        sum(
+        ifnull( a.adjust_amount, a.rate_amount )) rate_amount,
+        order_type
+        FROM
+        biz_waybill_cost_details a
+        LEFT JOIN biz_waybill_order d ON a.external_waybill_no = d.external_waybill_no
+        WHERE
+        d.order_status != 6
+        <if test="orderType != null and orderType != ''">
+            and  d.order_type = #{orderType}
+        </if>
+        <if test="startDate != null and startDate != ''">
+            and DATE_FORMAT(d.create_time, '%Y-%m-%d') >= #{startDate}
+        </if>
+        <if test="endDate != null and endDate != ''">
+            and DATE_FORMAT(d.create_time, '%Y-%m-%d')<![CDATA[<=]]>  #{endDate}
+        </if>
+        <if test="deptId != null and deptId != ''">
+            and  d.dept_id = #{deptId}
+        </if>
+
+        <!-- 数据范围过滤 -->
+        ${params.dataScope}
+        GROUP BY
+        order_type
+        ) q ON w.dict_value = q.order_type
+ </select>
+
+
+    <!--供应商按照金额排名-->
+    <select id="queryOrdersReportByFree"  parameterType="java.util.Map" resultType="java.util.HashMap"  >
+        SELECT
+            t.dept_name deptName,
+            t.rate_amount rateAmount,
+            (@rank := @rank + 1) AS rankNum
+        FROM (
+                 SELECT
+                     dept_name,
+                     IFNULL(rate_amount, 0) AS rate_amount
+                 FROM
+                     sys_dept w
+                         LEFT JOIN (
+                         SELECT
+                             SUM(IFNULL(a.adjust_amount, a.rate_amount)) AS rate_amount,
+                             a.dept_id
+                         FROM
+                             biz_waybill_cost_details a
+                                 LEFT JOIN biz_waybill_order b
+                                           ON a.external_waybill_no = b.external_waybill_no
+                         WHERE
+                             b.order_status != 6
+        <if test="orderType != null and orderType != ''">
+            and  b.order_type = #{orderType}
+        </if>
+        <if test="startTime != null and startTime != ''">
+            and DATE_FORMAT(b.create_time, '%Y-%m-%d') >= #{startTime}
+        </if>
+        <if test="endTime != null and endTime != ''">
+            and DATE_FORMAT(b.create_time, '%Y-%m-%d')<![CDATA[<=]]>  #{endTime}
+        </if>
+        <if test="deptId != null and deptId != ''">
+            and  a.dept_id = #{deptId}
+        </if>
+                         GROUP BY
+                             a.dept_id
+                     ) q ON w.dept_id = q.dept_id
+                 where w.del_flag='0'
+                   and w.status='0'
+                 ORDER BY
+                     rate_amount DESC
+             ) t,
+             (SELECT @rank := 0) r
+            LIMIT 10;
+
+
+    </select>
+
+
+    <!--供应商按照订单量排名-->
+    <select id="queryOrdersReportByNum"  parameterType="java.util.Map" resultType="java.util.HashMap"  >
+        SELECT
+            t.dept_name deptName,
+            t.num,
+            (@rank := @rank + 1) AS rankNum
+        FROM (
+                 SELECT
+                     dept_name,
+                     IFNULL(num, 0) AS num
+                 FROM
+                     sys_dept w
+                         LEFT JOIN (
+                         SELECT
+                             COUNT(external_waybill_no) AS num,
+                             dept_id
+                         FROM
+                             biz_waybill_order
+                         WHERE
+                             order_status != 6
+        <if test="orderType != null and orderType != ''">
+            and  order_type = #{orderType}
+        </if>
+        <if test="startDate != null and startDate != ''">
+            and DATE_FORMAT(create_time, '%Y-%m-%d') >= #{startDate}
+        </if>
+        <if test="endDate != null and endDate != ''">
+            and DATE_FORMAT(create_time, '%Y-%m-%d')<![CDATA[<=]]>  #{endDate}
+        </if>
+        <if test="deptId != null and deptId != ''">
+            and  dept_id = #{deptId}
+        </if>
+                         GROUP BY
+                             dept_id
+                     ) q ON w.dept_id = q.dept_id
+                 ORDER BY
+                     num DESC
+             ) t,
+             (SELECT @rank := 0) r
+            LIMIT 10;
+
+    </select>
+
+
+
+    <!--供应商月度增长率-->
+    <select id="queryDeptMonthlyGrowthRate"  parameterType="java.util.Map" resultType="java.util.HashMap"  >
+        SELECT
+            t1.month,
+            t1.rate_amount,
+            IFNULL(t2.rate_amount, 0) AS last_month_amount,
+            CASE
+                WHEN IFNULL(t2.rate_amount, 0) = 0 THEN 0
+                ELSE ROUND((t1.rate_amount - t2.rate_amount) / t2.rate_amount * 100, 2)
+                END AS growth_rate
+        FROM (
+                 SELECT
+                     months.month,
+                     IFNULL(data.rate_amount, 0) AS rate_amount
+                 FROM (
+                          SELECT DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL (a) MONTH), '%Y-%m') AS month
+                          FROM (
+                              SELECT 0 a UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5
+                              ) t
+                      ) months
+                          LEFT JOIN (
+                     SELECT
+                         SUM(IFNULL(a.adjust_amount, a.rate_amount)) rate_amount,
+                         DATE_FORMAT(b.create_time, '%Y-%m') AS month
+                     FROM biz_waybill_cost_details a
+                         LEFT JOIN biz_waybill_order b ON a.external_waybill_no = b.external_waybill_no
+                     WHERE b.order_status != 6
+                       AND b.dept_id = #{deptId}
+                     GROUP BY DATE_FORMAT(b.create_time, '%Y-%m')
+                 ) data ON months.month = data.month
+             ) t1
+                 LEFT JOIN (
+            SELECT
+                months.month,
+                IFNULL(data.rate_amount, 0) AS rate_amount
+            FROM (
+                     SELECT DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL (a) MONTH), '%Y-%m') AS month
+                     FROM (
+                         SELECT 0 a UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5
+                         ) t
+                 ) months
+                     LEFT JOIN (
+                SELECT
+                    SUM(IFNULL(a.adjust_amount, a.rate_amount)) rate_amount,
+                    DATE_FORMAT(b.create_time, '%Y-%m') AS month
+                FROM biz_waybill_cost_details a
+                    LEFT JOIN biz_waybill_order b ON a.external_waybill_no = b.external_waybill_no
+                WHERE b.order_status != 6
+                  AND b.dept_id = #{deptId}
+                GROUP BY DATE_FORMAT(b.create_time, '%Y-%m')
+            ) data ON months.month = data.month
+        ) t2 ON t1.month = DATE_FORMAT(STR_TO_DATE(CONCAT(t2.month, '-01'), '%Y-%m-%d') + INTERVAL 1 MONTH, '%Y-%m')
+        ORDER BY t1.month;
+
+    </select>
+</mapper>

+ 1 - 1
jd-logistics-modules/jd-logistics-system/src/main/resources/mapper/system/SysDeptMapper.xml

@@ -93,7 +93,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 	
 	<select id="checkDeptNameUnique" resultMap="SysDeptResult">
 	    <include refid="selectDeptVo"/>
-		where dept_name=#{deptName} and parent_id = #{parentId} and del_flag = '0' limit 1
+		where dept_name=#{deptName} and del_flag = '0' limit 1
 	</select>
 
 	<select id="checkDeptCodeUnique" resultMap="SysDeptResult">