Selaa lähdekoodia

新增jxls文件导出

赵冬冬 4 vuotta sitten
vanhempi
sitoutus
37c8e2d78b

+ 28 - 1
pom.xml

@@ -18,6 +18,12 @@
         <java.version>1.8</java.version>
         <shardingsphere.version>4.0.0</shardingsphere.version>
         <shardingsphere.spi.impl.version>4.0.0</shardingsphere.spi.impl.version>
+        <jxls.version>2.3.0</jxls.version>
+        <jxls-poi.version>1.0.11</jxls-poi.version>
+        <jxls-jexcel.version>1.0.6</jxls-jexcel.version>
+        <jxls-reader.version>2.0.2</jxls-reader.version>
+        <apache.poi.version>3.15</apache.poi.version>
+        <poi.ooxml.version>3.15</poi.ooxml.version>
     </properties>
 
     <dependencies>
@@ -71,7 +77,16 @@
                 </exclusion>
             </exclusions>
         </dependency>
-
+        <dependency>
+            <groupId>org.jxls</groupId>
+            <artifactId>jxls</artifactId>
+            <version>2.10.0</version>
+        </dependency>
+        <dependency>
+            <groupId>org.jxls</groupId>
+            <artifactId>jxls-poi</artifactId>
+            <version>2.10.0</version>
+        </dependency>
         <!--get set-->
         <dependency>
             <groupId>org.projectlombok</groupId>
@@ -83,6 +98,18 @@
             <artifactId>pagehelper-spring-boot-starter</artifactId>
             <version>1.2.10</version>
         </dependency>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-test</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-test</artifactId>
+        </dependency>
     </dependencies>
     <repositories>
         <repository>

+ 60 - 50
src/main/java/com/xin/shardingspherejdbcdemo/config/sharding/MyShardingDataSourceConfig.java

@@ -4,75 +4,85 @@ import com.alibaba.druid.pool.DruidDataSource;
 import org.apache.shardingsphere.api.config.sharding.ShardingRuleConfiguration;
 import org.apache.shardingsphere.api.config.sharding.TableRuleConfiguration;
 import org.apache.shardingsphere.api.config.sharding.strategy.InlineShardingStrategyConfiguration;
+import org.apache.shardingsphere.api.config.sharding.strategy.ShardingStrategyConfiguration;
 import org.apache.shardingsphere.shardingjdbc.api.ShardingDataSourceFactory;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 
 import javax.sql.DataSource;
 import java.sql.SQLException;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Properties;
+import java.util.*;
 
 @Configuration
 public class MyShardingDataSourceConfig {
 
 
-//    // 配置真实数据源
-//    Map<String, DataSource> createDataSourceMap() {
-//        // 配置真实数据源
-//        Map<String, DataSource> dataSourceMap = new HashMap<>();
-//        // 配置第一个数据源
-//        DruidDataSource dataSource1 = new DruidDataSource();
-//        dataSource1.setDbType("mysql");
-//        dataSource1.setDriverClassName("com.mysql.jdbc.Driver");
-//        dataSource1.setUrl("jdbc:mysql://192.168.29.131:3306/study");
-//        dataSource1.setUsername("root");
-//        dataSource1.setPassword("123456");
-//        dataSourceMap.put("master0", dataSource1);
-//        return dataSourceMap;
-//    }
-//
-//     TableRuleConfiguration createTableRuleConfiguration() {
-//        // 配置Order表规则
-//        TableRuleConfiguration orderTableRuleConfig = new TableRuleConfiguration("user", "master0.user$->{0..2}");
-//        // 配置分库 + 分表策略
-//        orderTableRuleConfig.setTableShardingStrategyConfig(new InlineShardingStrategyConfiguration("id", "user$->{id%3}"));
-//        return orderTableRuleConfig;
-//    }
-//
-//     ShardingRuleConfiguration createShardingRuleConfiguration() {
-//        ShardingRuleConfiguration shardingRuleConfig = new ShardingRuleConfiguration();
-//        shardingRuleConfig.getTableRuleConfigs().add(createTableRuleConfiguration());
-//        return shardingRuleConfig;
-//    }
-
-    /**
-     * @return
-     * @throws SQLException
-     */
-    @Bean
-    public DataSource getShardingDataSource() throws SQLException {
+    // 配置真实数据源
+    Map<String, DataSource> createDataSourceMap() {
         // 配置真实数据源
         Map<String, DataSource> dataSourceMap = new HashMap<>();
         // 配置第一个数据源
-        DruidDataSource dataSource1 = new DruidDataSource();
-        dataSource1.setDbType("mysql");
-        dataSource1.setDriverClassName("com.mysql.cj.jdbc.Driver");
-        dataSource1.setUrl("jdbc:mysql://192.168.29.131:3306/study");
-        dataSource1.setUsername("root");
-        dataSource1.setPassword("123456");
-        dataSourceMap.put("master0", dataSource1);
+        DruidDataSource order0 = new DruidDataSource();
+        order0.setDbType("mysql");
+        order0.setDriverClassName("com.mysql.cj.jdbc.Driver");
+        order0.setUrl("jdbc:mysql://192.168.29.131:3306/sharding_order0");
+        order0.setUsername("root");
+        order0.setPassword("123456");
+        dataSourceMap.put("sharding_order0", order0);
+        // 配置第一个数据源
+        DruidDataSource order1 = new DruidDataSource();
+        order1.setDbType("mysql");
+        order1.setDriverClassName("com.mysql.cj.jdbc.Driver");
+        order1.setUrl("jdbc:mysql://192.168.29.131:3306/sharding_order1");
+        order1.setUsername("root");
+        order1.setPassword("123456");
+        dataSourceMap.put("sharding_order1", order1);
+        // 配置第一个数据源
+        DruidDataSource user = new DruidDataSource();
+        user.setDbType("mysql");
+        user.setDriverClassName("com.mysql.cj.jdbc.Driver");
+        user.setUrl("jdbc:mysql://192.168.29.131:3306/sharding_user");
+        user.setUsername("root");
+        user.setPassword("123456");
+        dataSourceMap.put("sharding_user", user);
+        return dataSourceMap;
+    }
+
+    //分片规则
+    List<TableRuleConfiguration> createTableRuleConfiguration() {
+        List<TableRuleConfiguration> data = new ArrayList<>();
+      // 配置Order表规则
+
+        // 水平分表
+        TableRuleConfiguration userConfig = new TableRuleConfiguration("user", "sharding_user.t_user$->{0..2}");
+        // 配置分库 + 分表策略
+        userConfig.setTableShardingStrategyConfig(new InlineShardingStrategyConfiguration("id", "t_user$->{id%3}"));
 
-        // 配置Order表规则
-        TableRuleConfiguration orderTableRuleConfig = new TableRuleConfiguration("user", "master0.user$->{0..2}");
         // 配置分库 + 分表策略
-        orderTableRuleConfig.setTableShardingStrategyConfig(new InlineShardingStrategyConfiguration("id", "user$->{id%3}"));
+        data.add(userConfig);
+
+        return data;
+    }
 
+    ShardingRuleConfiguration createShardingRuleConfiguration() {
         ShardingRuleConfiguration shardingRuleConfig = new ShardingRuleConfiguration();
-        shardingRuleConfig.getTableRuleConfigs().add(orderTableRuleConfig);
+        shardingRuleConfig.getTableRuleConfigs().addAll(createTableRuleConfiguration());
+        return shardingRuleConfig;
+    }
+
+    Properties createProperties() {
+        Properties properties = new Properties();
+        properties.setProperty("sql.show", "true");
+        return properties;
+    }
 
-        return ShardingDataSourceFactory.createDataSource(dataSourceMap, shardingRuleConfig, new Properties());
+    /**
+     * @return
+     * @throws SQLException
+     */
+    @Bean
+    public DataSource getShardingDataSource() throws SQLException {
+        return ShardingDataSourceFactory.createDataSource(createDataSourceMap(), createShardingRuleConfiguration(), createProperties());
     }
 
 }

+ 0 - 9
src/main/java/com/xin/shardingspherejdbcdemo/config/sharding/ShardingDataSourceConfig.java

@@ -1,9 +0,0 @@
-package com.xin.shardingspherejdbcdemo.config.sharding;
-
-import org.springframework.stereotype.Component;
-
-@Component
-public class ShardingDataSourceConfig {
-
-
-}

+ 2 - 0
src/main/java/com/xin/shardingspherejdbcdemo/config/util/SnowFlake.java

@@ -99,9 +99,11 @@ public class SnowFlake {
         return System.currentTimeMillis();
     }
 
+    @SuppressWarnings("AlibabaAvoidNewDateGetTime")
     public static void main(String[] args) {
         SnowFlake snowFlake = new SnowFlake(2, 3);
         Map<Long, Long> map = new HashMap<>();
+        //noinspection AlibabaAvoidNewDateGetTime
         long starttime = new Date().getTime();
         for (int i = 0; i < 100000; i++) {
             long commonRandomCode = snowFlake.nextId();

+ 44 - 0
src/main/java/com/xin/shardingspherejdbcdemo/controller/OrderController.java

@@ -0,0 +1,44 @@
+package com.xin.shardingspherejdbcdemo.controller;
+
+import com.xin.shardingspherejdbcdemo.entity.Order;
+import com.xin.shardingspherejdbcdemo.entity.vo.AjaxVo;
+import com.xin.shardingspherejdbcdemo.entity.vo.PageVo;
+import com.xin.shardingspherejdbcdemo.service.OrderService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+
+@RestController
+@RequestMapping("/order")
+public class OrderController {
+
+    @Autowired
+    private OrderService orderService;
+
+    @PostMapping
+    public AjaxVo saveUser(@RequestBody Order order) {
+        return AjaxVo.success(orderService.save(order));
+    }
+    @PutMapping
+    public AjaxVo update(@RequestBody Order order) {
+        return AjaxVo.success(orderService.update(order));
+    }
+
+    @DeleteMapping("/{id}")
+    public AjaxVo delete(@PathVariable Long id) {
+        return AjaxVo.success(orderService.delete(id));
+    }
+
+    @GetMapping("/{id}")
+    public AjaxVo info(@PathVariable Long id) {
+        return AjaxVo.success(orderService.info(id));
+    }
+
+    @GetMapping("/list")
+    public AjaxVo listUser(int pageNum, int pageSize, String orderNum) {
+        PageVo data = orderService.list(pageNum, pageSize, orderNum);
+        return AjaxVo.success(data);
+    }
+
+}
+

+ 30 - 0
src/main/java/com/xin/shardingspherejdbcdemo/entity/Employee.java

@@ -0,0 +1,30 @@
+package com.xin.shardingspherejdbcdemo.entity;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+@Data
+public class Employee {
+    private String name;
+    private Date birthDate;
+    private BigDecimal payment;
+    private BigDecimal bonus;
+
+    private String statisTime;
+
+    private int vehicleCount;
+
+    public Employee(String name, Date birthDate, Integer payment, Double bonus) {
+        this.name = name;
+        this.birthDate = birthDate;
+        this.payment = new BigDecimal(payment);
+        this.bonus = new BigDecimal(bonus);
+    }
+
+    public Employee(String statisTime, int vehicleCount) {
+        this.statisTime = statisTime;
+        this.vehicleCount = vehicleCount;
+    }
+}

+ 20 - 0
src/main/java/com/xin/shardingspherejdbcdemo/entity/Order.java

@@ -0,0 +1,20 @@
+package com.xin.shardingspherejdbcdemo.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+@Data
+@TableName("t_order")
+public class Order {
+
+    private Long id;
+    private String orderNum;
+    private BigDecimal money;
+    private Integer year;
+    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+}

+ 3 - 3
src/main/java/com/xin/shardingspherejdbcdemo/mapper/DbMapper.java

@@ -6,7 +6,7 @@ import org.apache.ibatis.annotations.Param;
 @Mapper
 public interface DbMapper {
 
-    void creatUserTable(@Param("year") String year);
-
-    int selectUserTable(@Param("year") String year);
+//    void creatUserTable(@Param("year") String year);
+//
+//    int selectUserTable(@Param("year") String year);
 }

+ 9 - 0
src/main/java/com/xin/shardingspherejdbcdemo/mapper/OrderMapper.java

@@ -0,0 +1,9 @@
+package com.xin.shardingspherejdbcdemo.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.xin.shardingspherejdbcdemo.entity.Order;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface OrderMapper extends BaseMapper<Order> {
+}

+ 16 - 0
src/main/java/com/xin/shardingspherejdbcdemo/service/OrderService.java

@@ -0,0 +1,16 @@
+package com.xin.shardingspherejdbcdemo.service;
+
+import com.xin.shardingspherejdbcdemo.entity.Order;
+import com.xin.shardingspherejdbcdemo.entity.vo.PageVo;
+
+public interface OrderService {
+    Object save(Order order);
+
+    Object update(Order order);
+
+    Object delete(Long id);
+
+    Object info(Long id);
+
+    PageVo list(int pageNum, int pageSize, String orderNum);
+}

+ 60 - 0
src/main/java/com/xin/shardingspherejdbcdemo/service/impl/ExcelServiceImpl.java

@@ -0,0 +1,60 @@
+package com.xin.shardingspherejdbcdemo.service.impl;
+
+
+import com.xin.shardingspherejdbcdemo.entity.Employee;
+import com.xin.shardingspherejdbcdemo.utils.JxlsUtils;
+import org.springframework.stereotype.Service;
+
+import java.io.*;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+@Service
+public class ExcelServiceImpl{
+
+
+    public void JxlsOutExcel() throws ParseException, IOException {
+        List<Employee> employees = generateSampleEmployeeData();
+        OutputStream os = new FileOutputStream("D:/doc/object_collection_output.xls");
+        Map<String, Object> model = new HashMap<String, Object>();
+        model.put("employees", employees);
+//        model.put("nowdate", new Date());
+        JxlsUtils.exportExcel("object_collection_template.xls", os, model);
+        os.close();
+    }
+
+
+    public void JxlsOutTest() throws ParseException, IOException {
+        List<Employee> employees = generateSampleEmployeeData();
+        OutputStream os = new FileOutputStream("D:/doc/test_data.xls");
+        Map<String , Object> model=new HashMap<String , Object>();
+        model.put("employees", employees);
+        model.put("nowdate", new Date());
+        InputStream in = new FileInputStream("D:\\project\\github_project\\常用组件\\jxlsdemo\\src\\jxls-template\\object_collection_template.xls");
+        JxlsUtils.exportExcel(in, os, model);
+        os.close();
+    }
+
+
+    public static List<Employee> generateSampleEmployeeData() throws ParseException {
+        List<Employee> employees = new ArrayList<Employee>();
+        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MMM-dd", Locale.US);
+        employees.add(new Employee("Elsa", dateFormat.parse("1970-Jul-10"), 1500, 0.15));
+        employees.add(new Employee("Oleg", dateFormat.parse("1973-Apr-30"), 2300, 0.25));
+        employees.add(new Employee("Neil", dateFormat.parse("1975-Oct-05"), 2500, 0.00));
+        employees.add(new Employee("Maria", dateFormat.parse("1978-Jan-07"), 1700, 0.15));
+        employees.add(new Employee("John", dateFormat.parse("1969-May-30"), 2800, 0.20));
+        return employees;
+    }
+
+    public static List<Employee> testData() throws ParseException {
+        List<Employee> employees = new ArrayList<Employee>();
+        employees.add(new Employee("1970-Jul-10", 1500));
+        employees.add(new Employee("1973-Apr-30", 2300));
+        employees.add(new Employee("1975-Oct-05", 2500));
+        employees.add(new Employee("1978-Jan-07", 1700));
+        employees.add(new Employee("1969-May-30", 2800));
+        return employees;
+    }
+}

+ 61 - 0
src/main/java/com/xin/shardingspherejdbcdemo/service/impl/OrderServiceImpl.java

@@ -0,0 +1,61 @@
+package com.xin.shardingspherejdbcdemo.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.github.pagehelper.PageHelper;
+import com.xin.shardingspherejdbcdemo.config.util.SnowFlake;
+import com.xin.shardingspherejdbcdemo.entity.Order;
+import com.xin.shardingspherejdbcdemo.entity.Order;
+import com.xin.shardingspherejdbcdemo.entity.vo.PageVo;
+import com.xin.shardingspherejdbcdemo.mapper.OrderMapper;
+import com.xin.shardingspherejdbcdemo.service.OrderService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+@Service
+public class OrderServiceImpl implements OrderService {
+    @Autowired
+    private OrderMapper orderMapper;
+
+    @Override
+    public PageVo list(int pageNum, int pageSize, String orderNum) {
+        QueryWrapper queryWrapper = new QueryWrapper();
+        queryWrapper.like("order_num", orderNum);
+        int count = orderMapper.selectCount(queryWrapper);
+        queryWrapper.orderBy(true, true, "money");
+        PageHelper.startPage(pageNum, pageSize);
+        List<Order> list = orderMapper.selectList(queryWrapper);
+        return PageVo.data(list, count);
+    }
+
+
+    @Override
+    public Order save(Order order) {
+        SnowFlake snowFlake = new SnowFlake(2, 3);
+        order.setId(snowFlake.nextId());
+        orderMapper.insert(order);
+        return order;
+    }
+
+
+    @Override
+    public Order info(Long id) {
+        return orderMapper.selectById(id);
+    }
+
+    @Override
+    @Transactional
+    public Order update(Order order) {
+        orderMapper.updateById(order);
+        return order;
+    }
+
+    @Override
+    @Transactional
+    public Long delete(Long id) {
+        orderMapper.deleteById(id);
+        return id;
+    }
+}

+ 39 - 0
src/main/java/com/xin/shardingspherejdbcdemo/test/MainTest.java

@@ -0,0 +1,39 @@
+package com.xin.shardingspherejdbcdemo.test;
+
+
+import com.xin.shardingspherejdbcdemo.ShardingsphereJdbcStudyApplication;
+import com.xin.shardingspherejdbcdemo.service.impl.ExcelServiceImpl;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import java.io.IOException;
+import java.text.ParseException;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest(classes = ShardingsphereJdbcStudyApplication.class)
+public class MainTest {
+
+
+
+    @Autowired
+    ExcelServiceImpl excelService;
+
+//    @Test
+//    public void testBookService() throws IOException {
+//
+//        wordController.mean();
+//
+//    }
+
+
+    @Test
+    public void testBookService() throws ParseException, IOException {
+
+        excelService.JxlsOutTest();
+
+    }
+
+}

+ 81 - 0
src/main/java/com/xin/shardingspherejdbcdemo/utils/JxlsUtils.java

@@ -0,0 +1,81 @@
+package com.xin.shardingspherejdbcdemo.utils;
+
+import org.jxls.common.Context;
+import org.jxls.expression.JexlExpressionEvaluator;
+import org.jxls.transform.Transformer;
+import org.jxls.util.JxlsHelper;
+
+import java.io.*;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 
+ * @author klguang
+ *
+ */
+public class JxlsUtils {
+	
+	private static final String TEMPLATE_PATH="jxls-template/";
+	
+	public static void exportExcel(InputStream is, OutputStream os, Map<String, Object> model) throws IOException {
+        Context context = new Context();
+        if (model != null) {
+            for (String key : model.keySet()) {
+                context.putVar(key, model.get(key));
+            }
+        }
+        JxlsHelper jxlsHelper = JxlsHelper.getInstance();
+        Transformer transformer  = jxlsHelper.createTransformer(is, os);
+        JexlExpressionEvaluator evaluator = (JexlExpressionEvaluator)transformer.getTransformationConfig().getExpressionEvaluator();
+        Map<String, Object> funcs = new HashMap<String, Object>();
+        funcs.put("utils", new JxlsUtils());    //添加自定义功能
+//        evaluator.getJexlEngine().setFunctions(funcs);
+        jxlsHelper.processTemplate(context, transformer);
+	}
+
+    public static void exportExcel(File xls, File out, Map<String, Object> model) throws FileNotFoundException, IOException {
+            exportExcel(new FileInputStream(xls), new FileOutputStream(out), model);
+    }
+    
+    public static void exportExcel(String templateName, OutputStream os, Map<String, Object> model) throws FileNotFoundException, IOException {
+    	File template = getTemplate(templateName);
+    	if(template!=null){
+        	exportExcel(new FileInputStream(template), os, model);
+    	}
+    }
+    
+    
+    //获取jxls模版文件
+
+    public static File getTemplate(String name){
+        String templatePath = JxlsUtils.class.getClassLoader().getResource(TEMPLATE_PATH).getPath();
+        File template = new File(templatePath, name);
+        if(template.exists()){
+            return template;
+        }
+        return null;
+    }	
+	
+    // 日期格式化
+    public String dateFmt(Date date, String fmt) {
+        if (date == null) {
+            return "";
+        }
+        try {
+            SimpleDateFormat dateFmt = new SimpleDateFormat(fmt);
+            return dateFmt.format(date);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return "";
+    }
+    
+    // if判断
+    public Object ifelse(boolean b, Object o1, Object o2) {
+        return b ? o1 : o2;
+    }
+    
+}

+ 2 - 2
src/main/resources/application.yml

@@ -60,11 +60,11 @@ spring:
 #      tables:
 #        #逻辑表名
 #        user:
-#          actual-data-nodes: master0.user$->{0..2}
+#          actual-data-nodes: master0.t_user$->{0..2}
 #          table-strategy:
 #            inline:
 #              sharding-column: id
-#              algorithm-expression: user$->{id%3}
+#              algorithm-expression: t_user$->{id%3}
 #    #打印sql
 #    props:
 #      sql:

BIN
src/main/resources/templates/test_data.xlsx