读取Excel 和 显示预约人数

上传文件导入属性

上传文件

java 复制代码
<el-upload action="http://127.0.0.1/ordersetting/upload"
                     name="excelFile" :show-file-list="false"
                     :on-success="handleSuccess"
            :before-upload="beforeUpload">
            <el-button type="primary">上传文件</el-button>
          </el-upload>

action: 上传接口地址 http://127.0.0.1/ordersetting/upload

跳转: /ordersetting/upload

后端:读取媒体文件 获取里面的属性 装到集合里面

//Controller

java 复制代码
@RequestMapping("/upload")
    @ResponseBody
    public Result upload( MultipartFile excelFile){
        try {
            List<String[]> list = POIUtils.readExcel(excelFile);//读取Excel
            List<OrderSetting> data = new ArrayList();//创建集合
            for (String[] strings : list) {
                String orderDate = strings[0];//预约日期
                String number = strings[1];//可预约人数
                OrderSetting orderSetting = new OrderSetting(
                        OrderListDate(orderDate),
                        Integer.parseInt(number)
                );//封装数据
                data.add(orderSetting);//添加到集合
            }
            orderSettingService.addUpload(data);
            return new Result(true, MessageConstant.IMPORT_ORDERSETTING_SUCCESS);
        } catch (Exception e) {
            e.printStackTrace();
            return new Result(false,MessageConstant.IMPORT_ORDERSETTING_FAIL );
        }
    }

orderseetting

java 复制代码
    private Integer id ;

    @DateTimeFormat(pattern = "yyyy-MM-dd")  // 后端接收时用
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")  // JSON序列化时用
    private Date orderDate;//预约设置日期
    private int number;//可预约人数
    private int reservations ;//已预约人数

service

java 复制代码
  @Autowired
    private OrderSettingMapper orderSettingMapper ;
    @Override
    public void addUpload(List<OrderSetting>  data ) {
      
        orderSettingMapper.addUpload(data);
    }

判断预约日期是否过时

java 复制代码
  @Autowired
    private OrderSettingMapper orderSettingMapper ;
    @Override
    public void addUpload(List<OrderSetting>  data ) {
        //1、判断当前日期是否设置过
        for (OrderSetting orderSettingParam : data) {
            Date orderDate = orderSettingParam.getOrderDate();//预约日期
            OrderSetting orderSetting = orderSettingMapper.selectByDate(orderDate);
            if(orderSetting != null){
                //2、如果设置过则删除
                orderSettingMapper.delectNumber(orderDate);
            }
            //selectByDate 查询预约日期
            //delectNumber 删除预约人数
        }
        orderSettingMapper.addUpload(data);
    }

mapper

java 复制代码
  public void addUpload(@Param("data") List<OrderSetting> data);


    OrderSetting selectByDate(Date orderDate);

    void delectNumber(Date orderDate);

设置可预约人数

java 复制代码
  this.$ajax.post("/ordersetting/editNumberByDate", {
            number: value,//可预约人数
            orderDate: this.formatDate(day.getFullYear(), day.getMonth() + 1, day.getDate()) //日期
          }
java 复制代码
    void editNumberByDate(@Param("orderSetting") OrderSetting orderSetting);、


   <update id="editNumberByDate"  >
        UPDATE t_ordersetting
        SET number = #{orderSetting.number}
        WHERE orderDate = #{orderSetting.orderDate}
    </update>

前端显示可以预约的人数

// this.currentYear + "-" + this.currentMonth 前后发送后端的是年月

java 复制代码
     /*  this.leftobj = [
              { date: 1, number: 120, reservations: 1 },
              { date: 3, number: 120, reservations: 1 },
              { date: 4, number: 120, reservations: 120 },
              { date: 6, number: 120, reservations: 1 },
              { date: 8, number: 120, reservations: 1 }
          ];*/

        //发送ajax请求,根据当前页面对应的年月份查询数据库,封装成相应结果赋值给leftobj模型数据,用于页面展示  2020-6
        this.$ajax.post("/ordersetting/getOrderSettingByMonth?date=" + this.currentYear + "-" + this.currentMonth).
        then((res) => {
          if (res.flag) {
            this.leftobj = res.data;
            console.log(this.leftobj);
          } else {
            this.$message.error(res.message);
          }
        });
复制代码
Controller
java 复制代码
/**
     * 设置未来预约人数情况
     * @param date
     * @return
     */
        @RequestMapping("/getOrderSettingByMonth")
        @ResponseBody
    public Result getOrderSettingByMonth( String date){
        try {
            //返回的数据装到 lis 中 属性赋值到 map当中
            List<Map<String, Object>> OrderSettingList =  orderSettingService.getOrderSettingByMonth(date);
            return new Result(true,MessageConstant.GET_ORDERSETTING_SUCCESS,OrderSettingList);
        } catch (Exception e) {
            e.printStackTrace();
            return new Result(false,MessageConstant.GET_ORDERSETTING_FAIL);
        }
    }

数据库存储时间需要格式化一下在进行查询

java 复制代码
  <select id="getOrderSettingByMonth" resultType="java.util.Map">
        select
            DATE_FORMAT(orderDate,'%e') as date,number,reservations
        from t_ordersetting
        where DATE_FORMAT(orderDate ,'%Y-%c') = #{orderDate}
    </select>

图标

java 复制代码
 methods: {

            },
            tooltip: {},
            legend: {
              data: ['会员数量']
            },
            xAxis: {
              data: res.data.monthList //动态数据
            },
            yAxis: {
              type: 'value'
            },
            series: [{
              name: '会员数量',
              type: 'line',
              data: res.data.memberCount
            }]
          });

        });
java 复制代码
 this.$ajax.get("/report/getReportSetmeal").then(res => {
        myChart.setOption( {
          title: {
            text: '套餐预约占比',
            left: 'center'
          },
          tooltip: {
            trigger: 'item'
          },
          legend: {
            orient: 'vertical',
            left: 'left'
          },
          series: [
            {
              type: 'pie',
              radius: '50%',
              data: res.data,
              emphasis: {
           
                }
              }
            }
          ]
        });

查询结果放到一个对象里面 map

折线图

java 复制代码
   @RequestMapping("/getMemberReport")
//    @ResponseBody
    public Result getMemberReport(){
          Map<String , Object> map = reportMemberService.getMemberReport();
            return new Result(true, "成功" ,map);
       
    }

service

java 复制代码
 @Autowired
    private ReportMemberMapper reportMemberMapper;

    @Override
    public Map<String , Object> getMemberReport() {
        HashMap<String, Object> ReportMemberMap = new HashMap<>();// 创建一个Map集合
        List<Object> monthList = new ArrayList<>();  // 时间
        List<Object> memberReportList = new ArrayList<>(); //会员人数
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");// 设置时间格式
        Calendar c = Calendar.getInstance();// 创建一个日历对象
        c.add(Calendar.MONTH, -12);// 设置当前时间 一年钱
        for (int i = 0; i < 12; i++) {
            c.add(Calendar.MONTH, 1); //当前时间
            String format = sdf.format(c.getTime()); // 格式化时间
            monthList.add(format); // 添加时间集合
            Integer memberReport =  reportMemberMapper.getMemberReport(format);// 返回每个月会员的人数
            memberReportList.add(memberReport);// 添加会员人数
        }
        //x轴
        ReportMemberMap.put("monthList", monthList);// 添加时间
        //y轴
        ReportMemberMap.put("memberCount", memberReportList); // 添加会员人数


        return ReportMemberMap;
    }

查询数量

java 复制代码
    <select id="getMemberReport" resultType="int" parameterType="String">
        select  COUNT(*) from t_member where  DATE_FORMAT(regTime,'%Y-%m') = #{format}
    </select>

扇形图

java 复制代码
    @RequestMapping("/getReportSetmeal")
    @ResponseBody
    public Result getReportSetmeal(){
   
List<Map<String, Object>>  reportMemberlast = reportMemberService.getReportSetmeal();
            return new Result(true, GET_BUSINESS_REPORT_SUCCESS ,reportMemberlast);
       
    }

属性需要与前段的属性保持一致 orient: 'vertical',

java 复制代码
    <select id="getReportSetmeal" resultType="java.util.Map" >
        SELECT t1.`name`,count(*)   value  FROM t_setmeal t1 ,t_order t2 WHERE t1.id = t2.setmeal_id GROUP  BY t1.id
    </select>
相关推荐
callJJ16 小时前
Spring Data Redis 两种编程模型详解:同步 vs 响应式
java·spring boot·redis·python·spring
海兰16 小时前
【第27篇】Micrometer + Zipkin
人工智能·spring boot·alibaba·spring ai
开开心心就好17 小时前
仅168KB的桌面图标自动隐藏工具
windows·计算机视觉·计算机外设·excel·启发式算法·宽度优先·csdn开发云
海兰17 小时前
【第28篇】可观测性实战:LangFuse 方案详解
人工智能·spring boot·alibaba·spring ai
RuoyiOffice18 小时前
SpringBoot+Vue3 企业考勤如何处理法定假期?节假日方案、调休补班与工作日判断链路拆解
spring boot·后端·vue·anti-design-vue·ruoyioffice·假期·人力
xmjd msup18 小时前
spring security 超详细使用教程(接入springboot、前后端分离)
java·spring boot·spring
9523619 小时前
SpringBoot统一功能处理
java·spring boot·后端
rleS IONS19 小时前
SpringBoot中自定义Starter
java·spring boot·后端
TeDi TIVE21 小时前
springboot和springframework版本依赖关系
java·spring boot·后端
二哈赛车手21 小时前
新人笔记---ES和kibana启动问题以及一些常用的linux的错误排查方法,以及ES,数据库泄密解决方案[超详细]
java·linux·数据库·spring boot·笔记·elasticsearch