Procházet zdrojové kódy

数据大屏接口

785834757 před 2 roky
rodič
revize
d38691c25e

+ 3 - 0
src/main/java/com/ydtech/components/TokenInterceptor.java

@@ -64,6 +64,9 @@ public class TokenInterceptor {
         notMatchList.add("/order/qrCode/getQrCode**");
         notMatchList.add("/order/qrCode/destructionQrCode**");
 
+        // 数据大屏接口
+        notMatchList.add("/screen/data/**");
+
         return new SaInterceptor(handler -> {
             // 指定一条 match 规则
             SaRouter

+ 125 - 0
src/main/java/com/ydtech/modules/largescreen/controller/DataController.java

@@ -0,0 +1,125 @@
+package com.ydtech.modules.largescreen.controller;
+
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.ydtech.core.page.HttpResult;
+import com.ydtech.modules.largescreen.model.AgreementData;
+import com.ydtech.modules.largescreen.model.MapData;
+import com.ydtech.modules.largescreen.model.OrderStatusData;
+import com.ydtech.modules.largescreen.model.ToDayData;
+import com.ydtech.modules.largescreen.model.query.DataQuery;
+import com.ydtech.modules.largescreen.service.IAgreementDataService;
+import io.swagger.annotations.Api;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.time.LocalDate;
+import java.util.List;
+
+@Api(tags = "数据大屏")
+@RestController
+@RequestMapping("screen/data")
+@Slf4j
+public class DataController {
+
+    @Autowired
+    IAgreementDataService dataService;
+
+    /**
+     * 保险公司成交数据
+     * @param dataQuery
+     * @return
+     */
+    @PostMapping("companySumData")
+    public HttpResult sumData(@RequestBody(required=false) DataQuery dataQuery) {
+        List<AgreementData> sumData = dataService.getCompanySumData(dataQuery);
+        //转换格式
+        int rows = 6;
+        int columns = sumData.size();
+        String[][] result = new String[rows][columns];
+        sumData.forEach(item->{
+            int i = sumData.indexOf(item);
+            result[0][i] = item.getInsuranceCompany();
+            result[1][i] = item.getJqPremium();
+            result[2][i] = item.getSyPremium();
+            result[3][i] = item.getTaxPremium();
+            result[4][i] = item.getSumPremium();
+            result[5][i] = item.getSumOrderNum().toString();
+        });
+        return HttpResult.ok(result);
+    }
+
+    /**
+     * 订单状态数据
+     * @param dataQuery
+     * @return
+     */
+    @PostMapping("orderStatusData")
+    public HttpResult orderStatusData(@RequestBody(required=false) DataQuery dataQuery) {
+        List<OrderStatusData> sumData = dataService.getOrderStatusData(dataQuery);
+        return HttpResult.ok(sumData);
+    }
+
+    /**
+     * 获取山西地图数据
+     * @param dataQuery
+     * @return
+     */
+    @PostMapping("mapData")
+    public HttpResult mapData(@RequestBody(required=false) DataQuery dataQuery){
+        List<MapData> mapData = dataService.getMapData(dataQuery);
+        return HttpResult.ok(mapData);
+    }
+
+    /**
+     * 获取一周内的数据
+     * @return
+     */
+    @PostMapping("weekData")
+    public HttpResult weekData(){
+        List<OrderStatusData> weekData = dataService.getWeekData();
+        //转换格式
+        int rows = 6;
+        int columns = weekData.size();
+        String[][] result = new String[rows][columns];
+        weekData.forEach(item->{
+            int i = weekData.indexOf(item);
+            result[0][i] = item.getDate();
+            result[1][i] = item.getJqPremium();
+            result[2][i] = item.getSyPremium();
+            result[3][i] = item.getTaxPremium();
+            result[4][i] = item.getSumPremium();
+            result[5][i] = item.getSumOrderNum().toString();
+        });
+        return HttpResult.ok(result);
+    }
+
+    /**
+     * 获取当天已承包数据
+     */
+    @PostMapping("todayData")
+    public HttpResult todayData(){
+        DataQuery dataQuery = new DataQuery();
+        dataQuery.startDate = LocalDate.now().toString() + " 00:00:00";
+        dataQuery.endDate = LocalDate.now().toString() + " 23:59:59";
+        dataQuery.orderStatus = "3";
+        List<OrderStatusData> orderStatusData = dataService.getOrderStatusData(dataQuery);
+        ToDayData toDayData = JSON.parseObject(JSON.toJSONString(orderStatusData.get(0)), ToDayData.class);
+        toDayData.setCbOrderNum(toDayData.getSumOrderNum());
+        Integer orderNumber = dataService.getOrderNumber(dataQuery);
+        toDayData.setSumOrderNum(orderNumber);
+        return HttpResult.ok(toDayData);
+    }
+
+
+    /**
+     * 获取公司数据
+     * @return
+     */
+    @PostMapping("companys")
+    public HttpResult companys(){
+        return HttpResult.ok(dataService.getCompanys());
+    }
+}

+ 26 - 0
src/main/java/com/ydtech/modules/largescreen/dao/AgreementDataMapper.java

@@ -0,0 +1,26 @@
+package com.ydtech.modules.largescreen.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ydtech.modules.largescreen.model.*;
+import com.ydtech.modules.largescreen.model.query.DataQuery;
+import org.apache.ibatis.annotations.Mapper;
+
+
+import java.util.List;
+
+@Mapper
+public interface AgreementDataMapper{
+
+    List<AgreementData> getCompanySumData(DataQuery dataQuery);
+
+    List<OrderStatusData> getOrderStatusData(DataQuery dataQuery);
+
+    List<MapData> getMapData(DataQuery dataQuery);
+
+    Integer getOrderNumber(DataQuery dataQuery);
+
+    List<CompanyData> getCompanys();
+
+    List<Agreement> getAgreements();
+
+}

+ 19 - 0
src/main/java/com/ydtech/modules/largescreen/model/Agreement.java

@@ -0,0 +1,19 @@
+package com.ydtech.modules.largescreen.model;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class Agreement {
+    @ApiModelProperty(value = "协议id")
+    public String id;
+
+    @ApiModelProperty(value = "保险公司id")
+    public String companyId;
+
+    @ApiModelProperty(value = "协议Code")
+    public String agreementCode;
+
+    @ApiModelProperty(value = "协议Code")
+    public String agreementName;
+}

+ 41 - 0
src/main/java/com/ydtech/modules/largescreen/model/AgreementData.java

@@ -0,0 +1,41 @@
+package com.ydtech.modules.largescreen.model;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+@ApiModel(value = "大屏 综合数据")
+public class AgreementData implements Serializable {
+    private static final long serialVersionUID = 6098565535096545432L;
+
+
+
+    @ApiModelProperty(value = "保险公司id")
+    public String insuranceCompanyId;
+
+    @ApiModelProperty(value = "保险公司名称")
+    public String insuranceCompany;
+
+    @ApiModelProperty(value = "总订单数")
+    public Integer sumOrderNum;
+
+    @ApiModelProperty(value = "总保费")
+    public String sumPremium;
+
+    @ApiModelProperty(value = "交强总保费")
+    public String jqPremium;
+
+    @ApiModelProperty(value = "商业总保费")
+    public String syPremium;
+
+    @ApiModelProperty(value = "车船税总费用")
+    public String taxPremium;
+
+    @ApiModelProperty(value = "日期")
+    public String date;
+}

+ 24 - 0
src/main/java/com/ydtech/modules/largescreen/model/CompanyData.java

@@ -0,0 +1,24 @@
+package com.ydtech.modules.largescreen.model;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 已有协议的保险公司
+ */
+@Data
+public class CompanyData {
+    @ApiModelProperty(value = "保险公司id")
+    public String companyId;
+
+    @ApiModelProperty(value = "保险公司名称")
+    public String companyName;
+
+
+    @ApiModelProperty(value = "协议列表")
+    public List<Agreement> agreementList;
+
+
+}

+ 34 - 0
src/main/java/com/ydtech/modules/largescreen/model/MapData.java

@@ -0,0 +1,34 @@
+package com.ydtech.modules.largescreen.model;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel(value = "大屏 地图数据 综合数据")
+public class MapData {
+
+    @ApiModelProperty(value = "三级机构id")
+    public String deptId;
+
+    @ApiModelProperty(value = "部门名称")
+    public String deptName;
+
+    @ApiModelProperty(value = "区划id")
+    public String areaId;
+
+    @ApiModelProperty(value = "总订单数")
+    public Integer sumOrderNum;
+
+    @ApiModelProperty(value = "总保费")
+    public String sumPremium;
+
+    @ApiModelProperty(value = "交强总保费")
+    public String jqPremium;
+
+    @ApiModelProperty(value = "商业总保费")
+    public String syPremium;
+
+    @ApiModelProperty(value = "车船税总费用")
+    public String taxPremium;
+}

+ 34 - 0
src/main/java/com/ydtech/modules/largescreen/model/OrderStatusData.java

@@ -0,0 +1,34 @@
+package com.ydtech.modules.largescreen.model;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel(value = "大屏 订单状态 综合数据")
+public class OrderStatusData {
+
+    @ApiModelProperty(value = "订单状态code")
+    public String orderStatusCode;
+
+    @ApiModelProperty(value = "订单状态名称")
+    public String orderStatusName;
+
+    @ApiModelProperty(value = "总订单数")
+    public Integer sumOrderNum;
+
+    @ApiModelProperty(value = "总保费")
+    public String sumPremium;
+
+    @ApiModelProperty(value = "交强总保费")
+    public String jqPremium;
+
+    @ApiModelProperty(value = "商业总保费")
+    public String syPremium;
+
+    @ApiModelProperty(value = "车船税总费用")
+    public String taxPremium;
+
+    @ApiModelProperty(value = "日期")
+    public String date;
+}

+ 37 - 0
src/main/java/com/ydtech/modules/largescreen/model/ToDayData.java

@@ -0,0 +1,37 @@
+package com.ydtech.modules.largescreen.model;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel(value = "大屏 订单状态 综合数据")
+public class ToDayData {
+
+    @ApiModelProperty(value = "订单状态code")
+    public String orderStatusCode;
+
+    @ApiModelProperty(value = "订单状态名称")
+    public String orderStatusName;
+
+    @ApiModelProperty(value = "总订单数")
+    public Integer sumOrderNum;
+
+    @ApiModelProperty(value = "承保订单数")
+    public Integer cbOrderNum;
+
+    @ApiModelProperty(value = "承保总保费")
+    public String sumPremium;
+
+    @ApiModelProperty(value = "承保交强总保费")
+    public String jqPremium;
+
+    @ApiModelProperty(value = "承保商业总保费")
+    public String syPremium;
+
+    @ApiModelProperty(value = "承保车船税总费用")
+    public String taxPremium;
+
+    @ApiModelProperty(value = "日期")
+    public String date;
+}

+ 19 - 0
src/main/java/com/ydtech/modules/largescreen/model/query/DataQuery.java

@@ -0,0 +1,19 @@
+package com.ydtech.modules.largescreen.model.query;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel(value = "大屏 统计数据查询条件")
+public class DataQuery {
+
+    @ApiModelProperty(value = "起始日期")
+    public String startDate;
+
+    @ApiModelProperty(value = "结束日期")
+    public String endDate;
+
+    @ApiModelProperty(value = "订单状态")
+    public String orderStatus;
+}

+ 52 - 0
src/main/java/com/ydtech/modules/largescreen/service/IAgreementDataService.java

@@ -0,0 +1,52 @@
+package com.ydtech.modules.largescreen.service;
+
+import com.ydtech.modules.largescreen.model.AgreementData;
+import com.ydtech.modules.largescreen.model.CompanyData;
+import com.ydtech.modules.largescreen.model.MapData;
+import com.ydtech.modules.largescreen.model.OrderStatusData;
+import com.ydtech.modules.largescreen.model.query.DataQuery;
+
+import java.util.List;
+
+public interface IAgreementDataService {
+    /**
+     * 获取保险公司数据统计
+     * @param dataQuery
+     * @return
+     */
+    List<AgreementData> getCompanySumData(DataQuery dataQuery);
+
+    /**
+     * 根据条件查询订单状态数据
+     * @param dataQuery
+     * @return
+     */
+    List<OrderStatusData> getOrderStatusData(DataQuery dataQuery);
+
+    /**
+     * 获取地图数据
+     * @param dataQuery
+     * @return
+     */
+    List<MapData> getMapData(DataQuery dataQuery);
+
+    /**
+     * 获取订单数量
+     * @param dataQuery
+     * @return
+     */
+    Integer getOrderNumber(DataQuery dataQuery);
+
+    /**
+     * 获取一周的出单数据
+     * @return
+     */
+    List<OrderStatusData> getWeekData();
+
+    /**
+     * 获取保险公司
+     * @return
+     */
+    List<CompanyData> getCompanys();
+
+}

+ 119 - 0
src/main/java/com/ydtech/modules/largescreen/service/impl/AgreementDataService.java

@@ -0,0 +1,119 @@
+package com.ydtech.modules.largescreen.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ydtech.constants.enums.dict.InsOrderStatusEnum;
+import com.ydtech.modules.largescreen.dao.AgreementDataMapper;
+import com.ydtech.modules.largescreen.model.*;
+import com.ydtech.modules.largescreen.model.query.DataQuery;
+import com.ydtech.modules.largescreen.service.IAgreementDataService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
+import java.util.List;
+
+@Service
+public class AgreementDataService implements IAgreementDataService {
+    @Autowired
+    AgreementDataMapper agreementDataMapper;
+
+    @Override
+    public List<AgreementData> getCompanySumData(DataQuery dataQuery) {
+        return agreementDataMapper.getCompanySumData(dataQuery);
+    }
+
+    @Override
+    public List<OrderStatusData> getOrderStatusData(DataQuery dataQuery) {
+        List<OrderStatusData> orderStatusData = agreementDataMapper.getOrderStatusData(dataQuery);
+        List<OrderStatusData> newOrderStatusData = new ArrayList<>();
+        orderStatusData.forEach(item -> {
+            InsOrderStatusEnum insOrderStatusEnum = InsOrderStatusEnum.matchKey(item.getOrderStatusCode());
+            if (insOrderStatusEnum != null) {
+                item.setOrderStatusName(insOrderStatusEnum.getDesc());
+                newOrderStatusData.add(item);
+            }
+        });
+        return newOrderStatusData;
+    }
+
+    @Override
+    public List<MapData> getMapData(DataQuery dataQuery) {
+        return agreementDataMapper.getMapData(dataQuery);
+    }
+
+    @Override
+    public Integer getOrderNumber(DataQuery dataQuery) {
+        return agreementDataMapper.getOrderNumber(dataQuery);
+    }
+
+    /**
+     * 获取一周内的数据
+     * @return
+     */
+    @Override
+    public List<OrderStatusData> getWeekData() {
+        //获取一周内的起始日期
+        List<String> weekDate = this.getWeekDate();
+        List<OrderStatusData> resultList = new ArrayList<>();
+        weekDate.forEach(date -> {
+            DataQuery dataQuery = new DataQuery();
+            dataQuery.startDate = date + " 00:00:00";
+            dataQuery.endDate = date + " 23:59:59";
+            dataQuery.orderStatus = "3";
+            List<OrderStatusData> orderStatusData = agreementDataMapper.getOrderStatusData(dataQuery);
+            if(orderStatusData.isEmpty()){
+                OrderStatusData orderStatusData1 = new OrderStatusData();
+                orderStatusData1.setOrderStatusName("已完成");
+                orderStatusData1.setOrderStatusCode("3");
+                orderStatusData1.setDate(date);
+                orderStatusData.add(orderStatusData1);
+            }else{
+                orderStatusData.get(0).setDate(date);
+            }
+            resultList.addAll(orderStatusData);
+        });
+        return resultList;
+    }
+
+    @Override
+    public List<CompanyData> getCompanys() {
+        List<CompanyData> companys = agreementDataMapper.getCompanys();
+        List<Agreement> agreements = agreementDataMapper.getAgreements();
+        companys.forEach(companyData -> {
+            List<Agreement> agreements1 = new ArrayList<>();
+            agreements.forEach(agreement -> {
+                if(agreement.getCompanyId().equals(companyData.getCompanyId())){
+                    agreements1.add(agreement);
+                }
+            });
+            companyData.setAgreementList(agreements1);
+        });
+        return companys;
+    }
+
+
+    //获取一周内的日期
+    public static List<String> getWeekDate(){
+        List<String> list = new ArrayList<>();
+        //获取一周内的起始日期
+        // 获取当前日期
+        LocalDate currentDate = LocalDate.now();
+
+        // 获取前一周的起始日期
+        LocalDate oneWeekAgo = currentDate.minusWeeks(1);
+        // 包括今天 去除1天
+        oneWeekAgo = oneWeekAgo.plusDays(1);
+        // 输出前一周每天的起始日期
+        for (int i = 0; i < 6; i++) {
+            // 获取每天的起始日期时间
+            LocalDateTime startOfDay = oneWeekAgo.atStartOfDay();
+            list.add(startOfDay.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
+            oneWeekAgo = oneWeekAgo.plusDays(1);
+        }
+        list.add(currentDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
+        return list;
+    }
+}

+ 118 - 0
src/main/resources/mapper/modules/largescreen/AgreementDataMapper.xml

@@ -0,0 +1,118 @@
+<?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.ydtech.modules.largescreen.dao.AgreementDataMapper">
+
+    <select id="getCompanySumData" parameterType="com.ydtech.modules.largescreen.model.query.DataQuery" resultType="com.ydtech.modules.largescreen.model.AgreementData">
+        SELECT
+            pa.insurance_company_id,
+            pa.insurance_company,
+            COALESCE(SUM(jqpremium), 0) AS jqPremium,
+            COALESCE(SUM(sypremium), 0) AS syPremium,
+            COALESCE(SUM(taxamount), 0) AS taxPremium,
+            COALESCE(SUM(sumpremium), 0) AS sumPremium,
+            COALESCE(COUNT(iac.id), 0) as sumOrderNum
+        FROM
+            ptl_agreement pa
+                LEFT JOIN
+            ins_area_company iac on iac.agreement_id = pa.id
+            <if test="orderStatus != null and orderStatus != ''">
+                and iac.orderstatus = #{orderStatus}
+            </if>
+            <if test="startDate != null and startDate != ''">
+                and iac.createtime BETWEEN #{startDate} and #{endDate}
+            </if>
+        GROUP BY
+            pa.insurance_company_id, pa.insurance_company
+        order by
+            sumPremium desc
+    </select>
+
+    <select id="getOrderStatusData" parameterType="com.ydtech.modules.largescreen.model.query.DataQuery" resultType="com.ydtech.modules.largescreen.model.OrderStatusData">
+        SELECT
+            iac.orderstatus as orderStatusCode,
+            COALESCE(SUM(jqpremium), 0) AS jqPremium,
+            COALESCE(SUM(sypremium), 0) AS syPremium,
+            COALESCE(SUM(taxamount), 0) AS taxPremium,
+            COALESCE(SUM(sumpremium), 0) AS sumPremium,
+            COALESCE(COUNT(iac.id), 0) as sumOrderNum
+        FROM
+            ins_area_company iac
+        WHERE
+            1=1
+        <if test="orderStatus != null and orderStatus != ''">
+            and iac.orderstatus = #{orderStatus}
+        </if>
+        <if test="startDate != null and startDate != ''">
+            and iac.createtime BETWEEN #{startDate} and #{endDate}
+        </if>
+        GROUP BY
+            iac.orderstatus
+        order by
+            sumPremium desc
+    </select>
+
+    <select id="getMapData" parameterType="com.ydtech.modules.largescreen.model.query.DataQuery" resultType="com.ydtech.modules.largescreen.model.MapData">
+        SELECT
+            sd.id as deptId,
+            sd.NAME as deptName,
+            sd.city as areaId,
+            COALESCE(SUM(jqpremium), 0) AS jqPremium,
+            COALESCE(SUM(sypremium), 0) AS syPremium,
+            COALESCE(SUM(taxamount), 0) AS taxPremium,
+            COALESCE(SUM(sumpremium), 0) AS sumPremium,
+            COALESCE(COUNT(iac.id), 0) as sumOrderNum
+        FROM
+            sys_dept sd
+                LEFT JOIN
+            ins_orders io on (io.userid like CONCAT(sd.id,'%') or io.operatorid = CONCAT(sd.id,'%')) and orderstatus = 3
+                LEFT JOIN
+            ins_area_company iac on iac.orderno = io.orderno and iac.orderstatus = 3
+            <if test="startDate != null and startDate != ''">
+                and iac.createtime BETWEEN #{startDate} and #{endDate}
+            </if>
+        WHERE
+            sd.comlevel = 3
+        AND
+            sd.id != 9991401
+        group by
+            sd.id
+        order by
+            sumPremium desc
+    </select>
+
+
+    <select id="getOrderNumber" parameterType="com.ydtech.modules.largescreen.model.query.DataQuery" resultType="Integer">
+        SELECT
+            count( orderno )
+        FROM
+            ins_orders
+        WHERE
+            1=1
+        <if test="startDate != null and startDate != ''">
+            and createtime BETWEEN #{startDate} and #{endDate}
+        </if>
+    </select>
+
+
+    <select id="getCompanys" resultType="com.ydtech.modules.largescreen.model.CompanyData">
+        SELECT
+            insurance_company_id AS company_id,
+            insurance_company AS company_name
+        FROM
+            ptl_agreement
+        GROUP BY
+            insurance_company_id,
+            insurance_company
+    </select>
+
+    <select id="getAgreements" resultType="com.ydtech.modules.largescreen.model.Agreement">
+        SELECT
+            id,
+            insurance_company_id as company_id,
+            agreement_code,
+            agreement_name
+        FROM
+            ptl_agreement
+    </select>
+
+</mapper>