Ver código fonte

1、修改订单填报图片上传
2、解决退单排序异常问题

binguoc 4 anos atrás
pai
commit
d5bf079be0

+ 27 - 0
src/main/java/com/chuanghai/repair/auth/TomcatConfig.java

@@ -0,0 +1,27 @@
+package com.chuanghai.repair.auth;
+
+import org.apache.catalina.connector.Connector;
+import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * @Author: bingo
+ * @Date: 2022/4/14 星期四 19:23
+ * @Description: com.chuanghai.repair.auth
+ * @version: 1.0
+ */
+@Configuration
+public class TomcatConfig {
+
+    @Bean
+    public TomcatServletWebServerFactory webServerFactory() {
+        TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory();
+        factory.addConnectorCustomizers((Connector connector) -> {
+            connector.setProperty("relaxedPathChars", "\"<>[\\]^`{|}");
+            connector.setProperty("relaxedQueryChars", "\"<>[\\]^`{|}");
+        });
+        return factory;
+    }
+}
+

+ 199 - 0
src/main/java/com/chuanghai/repair/utils/ListUtil.java

@@ -0,0 +1,199 @@
+package com.chuanghai.repair.utils;
+
+import java.lang.reflect.Field;
+import java.text.NumberFormat;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+
+import java.lang.reflect.Field;
+import java.text.NumberFormat;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Date;
+import java.util.List;
+/**
+ * @Author: bingo
+ * @Date: 2022/6/6 星期一 9:28
+ * @Description: com.chuanghai.repair.utils
+ * @version: 1.0
+ */
+public class ListUtil {
+
+
+    /**
+     * @author xzx
+     * 在数据库中查出来的列表中,往往需要对不同的字段重新排序。 一般的做法都是使用排序的字段,重新到数据库中查询。
+     * 如果不到数据库查询,直接在第一次查出来的list中排序,无疑会提高系统的性能。 下面就写一个通用的方法,对list排序,
+     *
+     * 至少需要满足以下5点:
+     *
+     * ①.list元素对象类型任意
+     * 		---->使用泛型解决
+     *
+     * ②.可以按照list元素对象的任意多个属性进行排序,即可以同时指定多个属性进行排序
+     * 		--->使用java的可变参数解决
+     *
+     * ③.list元素对象属性的类型可以是数字(byte、short、int、long、float、double等,包括正数、负数、0)、字符串(char、String)、日期(java.util.Date)
+     * 		--->对于数字:统一转换为固定长度的字符串解决,比如数字3和123,转换为"003"和"123" ;再比如"-15"和"7"转换为"-015"和"007"
+     * 		--->对于日期:可以先把日期转化为long类型的数字,数字的解决方法如上
+     *
+     * ④.list元素对象的属性可以没有相应的getter和setter方法
+     * 		--->可以使用java反射进行获取private和protected修饰的属性值
+     *
+     * ⑤.list元素对象的对象的每个属性都可以指定是升序还是降序
+     * 	  	-->使用2个重写的方法(一个方法满足所有属性都按照升序(降序),另外一个方法满足每个属性都能指定是升序(降序))
+     *
+     *
+     */
+
+
+
+        /**
+         * 对list的元素按照多个属性名称排序,
+         * list元素的属性可以是数字(byte、short、int、long、float、double等,支持正数、负数、0)、char、String、java.util.Date
+         *
+         *
+         *
+         *            list元素的属性名称
+         * @param isAsc
+         *            true升序,false降序
+         */
+        public static <E> void sort(List<E> list, final boolean isAsc, final String... sortnameArr) {
+            Collections.sort(list, new Comparator<E>() {
+
+                public int compare(E a, E b) {
+                    int ret = 0;
+                    try {
+                        for (int i = 0; i < sortnameArr.length; i++) {
+                            ret = ListUtil.compareObject(sortnameArr[i], isAsc, a, b);
+                            if (0 != ret) {
+                                break;
+                            }
+                        }
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                    }
+                    return ret;
+                }
+            });
+        }
+
+        /**
+         * 给list的每个属性都指定是升序还是降序
+         *
+         * @param list
+         * @param sortnameArr  参数数组
+         * @param typeArr      每个属性对应的升降序数组, true升序,false降序
+         */
+
+        public static <E> void sort(List<E> list, final String[] sortnameArr, final boolean[] typeArr) {
+            if (sortnameArr.length != typeArr.length) {
+                throw new RuntimeException("属性数组元素个数和升降序数组元素个数不相等");
+            }
+            Collections.sort(list, new Comparator<E>() {
+                public int compare(E a, E b) {
+                    int ret = 0;
+                    try {
+                        for (int i = 0; i < sortnameArr.length; i++) {
+                            ret = ListUtil.compareObject(sortnameArr[i], typeArr[i], a, b);
+                            if (0 != ret) {
+                                break;
+                            }
+                        }
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                    }
+                    return ret;
+                }
+            });
+        }
+
+        /**
+         * 对2个对象按照指定属性名称进行排序
+         *
+         * @param sortname
+         *            属性名称
+         * @param isAsc
+         *            true升序,false降序
+         * @param a
+         * @param b
+         * @return
+         * @throws Exception
+         */
+        private static <E> int compareObject(final String sortname, final boolean isAsc, E a, E b) throws Exception {
+            int ret;
+            Object value1 = ListUtil.forceGetFieldValue(a, sortname);
+            Object value2 = ListUtil.forceGetFieldValue(b, sortname);
+            String str1 = value1.toString();
+            String str2 = value2.toString();
+            if (value1 instanceof Number && value2 instanceof Number) {
+                int maxlen = Math.max(str1.length(), str2.length());
+                str1 = ListUtil.addZero2Str((Number) value1, maxlen);
+                str2 = ListUtil.addZero2Str((Number) value2, maxlen);
+            } else if (value1 instanceof Date && value2 instanceof Date) {
+                long time1 = ((Date) value1).getTime();
+                long time2 = ((Date) value2).getTime();
+                int maxlen = Long.toString(Math.max(time1, time2)).length();
+                str1 = ListUtil.addZero2Str(time1, maxlen);
+                str2 = ListUtil.addZero2Str(time2, maxlen);
+            }
+            if (isAsc) {
+                ret = str1.compareTo(str2);
+            } else {
+                ret = str2.compareTo(str1);
+            }
+            return ret;
+        }
+
+        /**
+         * 给数字对象按照指定长度在左侧补0.
+         *
+         * 使用案例: addZero2Str(11,4) 返回 "0011", addZero2Str(-18,6)返回 "-000018"
+         *
+         * @param numObj
+         *            数字对象
+         * @param length
+         *            指定的长度
+         * @return
+         */
+        public static String addZero2Str(Number numObj, int length) {
+            NumberFormat nf = NumberFormat.getInstance();
+            // 设置是否使用分组
+            nf.setGroupingUsed(false);
+            // 设置最大整数位数
+            nf.setMaximumIntegerDigits(length);
+            // 设置最小整数位数
+            nf.setMinimumIntegerDigits(length);
+            return nf.format(numObj);
+        }
+
+        /**
+         * 获取指定对象的指定属性值(去除private,protected的限制)
+         *
+         * @param obj
+         *            属性名称所在的对象
+         * @param fieldName
+         *            属性名称
+         * @return
+         * @throws Exception
+         */
+        public static Object forceGetFieldValue(Object obj, String fieldName) throws Exception {
+            Field field = obj.getClass().getDeclaredField(fieldName);
+            Object object = null;
+            boolean accessible = field.isAccessible();
+            if (!accessible) {
+                // 如果是private,protected修饰的属性,需要修改为可以访问的
+                field.setAccessible(true);
+                object = field.get(obj);
+                // 还原private,protected属性的访问性质
+                field.setAccessible(accessible);
+                return object;
+            }
+            object = field.get(obj);
+            return object;
+        }
+    }
+
+
+

+ 190 - 0
src/main/java/com/chuanghai/repair/utils/MyPageInfo.java

@@ -0,0 +1,190 @@
+package com.chuanghai.repair.utils;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+
+
+
+/**
+ * @Author: bingo
+ * @Date: 2022/6/6 星期一 13:07
+ * @Description: com.chuanghai.repair.utils
+ * @version: 1.0
+ */
+
+
+
+@Data
+public class MyPageInfo<T> implements Serializable {
+    private static final long serialVersionUID = 1L;
+    //当前页
+    private int pageNum;
+    //每页的数量
+    private int pageSize;
+    //当前页的数量
+    private int size;
+    //当前页面第一个元素在数据库中的行号
+    private int startRow;
+    //当前页面最后一个元素在数据库中的行号
+    private int endRow;
+    //总记录数
+    private int total;
+    //总页数
+    private int pages;
+    //结果集
+    private List<T> list;
+    //前一页
+    private int prePage;
+    //下一页
+    private int nextPage;
+    //是否为第一页
+    private boolean isFirstPage = false;
+    //是否为最后一页
+    private boolean isLastPage = false;
+    //是否有前一页
+    private boolean hasPreviousPage = false;
+    //是否有下一页
+    private boolean hasNextPage = false;
+    //导航页码数
+    private int navigatePages;
+    //所有导航页号
+    private int[] navigatepageNums;
+    //导航条上的第一页
+    private int navigateFirstPage;
+    //导航条上的最后一页
+    private int navigateLastPage;
+
+    /**
+     * 对list集合进行分页
+     * @param list 需要分页的集合
+     * @param pageNum 当前页
+     * @param pageSize 每页的数量
+     */
+    public MyPageInfo(List<T> list,int pageNum,int pageSize) {
+        this(list, 8, pageNum, pageSize);
+    }
+
+
+    /**
+     * 对list集合进行分页
+     * @param list 需要分页的集合
+     * @param navigatePages  导航页码数
+     * @param pageNum 当前页
+     * @param pageSize 每页的数量
+     */
+    public MyPageInfo(List<T> list, int navigatePages,int pageNum,int pageSize) {
+
+        if (list instanceof Collection) {
+            // 总记录数
+            this.total = list.size();
+            // 为了跟pageHelper一致,当pageNum<1时,按第一页处理
+            int yourPageNum = pageNum;
+            pageNum= pageNum<1 ? 1:pageNum;
+            // 当前页码
+            this.pageNum = pageNum;
+            // 每页显示的记录数
+            this.pageSize = pageSize;
+            // 总页码数
+            this.pages = (int)Math.ceil(this.total*1.0/this.pageSize);
+            // 导航条页码数
+            this.navigatePages = navigatePages;
+            // 开始行号
+            this.startRow = this.pageNum * this.pageSize - (this.pageSize - 1);
+            // 结束行号
+            this.endRow = this.pageNum * this.pageSize;
+            // 当结束行号>总行数,结束行号=0
+            if(this.endRow > this.total){
+
+                if(this.startRow > this.total){
+                    this.endRow = 0;
+                    this.startRow = 0;
+                }else {
+                    this.endRow =this.total;
+                }
+
+            }
+            //计算导航页
+            calcNavigatepageNums();
+            //计算前后页,第一页,最后一页
+            calcPage();
+            //判断页面边界
+            judgePageBoudary();
+            // 当pageNum超过最大页数,则size=0,list为空
+            if(this.pageNum > this.pages){
+                this.size = 0;
+                this.list = Collections.EMPTY_LIST;
+            }else {
+                this.list = list.subList(startRow - 1,endRow);
+                this.size = this.list.size();
+            }
+            this.pageNum = yourPageNum;
+        }
+    }
+
+    /**
+     * 计算导航页
+     */
+    private void calcNavigatepageNums() {
+        //当总页数小于或等于导航页码数时
+        if (pages <= navigatePages) {
+            navigatepageNums = new int[pages];
+            for (int i = 0; i < pages; i++) {
+                navigatepageNums[i] = i + 1;
+            }
+        } else { //当总页数大于导航页码数时
+            navigatepageNums = new int[navigatePages];
+            int startNum = pageNum - navigatePages / 2;
+            int endNum = pageNum + navigatePages / 2;
+
+            if (startNum < 1) {
+                startNum = 1;
+                //(最前navigatePages页
+                for (int i = 0; i < navigatePages; i++) {
+                    navigatepageNums[i] = startNum++;
+                }
+            } else if (endNum > pages) {
+                endNum = pages;
+                //最后navigatePages页
+                for (int i = navigatePages - 1; i >= 0; i--) {
+                    navigatepageNums[i] = endNum--;
+                }
+            } else {
+                //所有中间页
+                for (int i = 0; i < navigatePages; i++) {
+                    navigatepageNums[i] = startNum++;
+                }
+            }
+        }
+    }
+
+    /**
+     * 计算前后页,第一页,最后一页
+     */
+    private void calcPage() {
+        if (navigatepageNums != null && navigatepageNums.length > 0) {
+            navigateFirstPage = navigatepageNums[0];
+            navigateLastPage = navigatepageNums[navigatepageNums.length - 1];
+            if (pageNum > 1) {
+                prePage = pageNum - 1;
+            }
+            if (pageNum < pages) {
+                nextPage = pageNum + 1;
+            }
+        }
+    }
+
+    /**
+     * 判定页面边界
+     */
+    private void judgePageBoudary() {
+        isFirstPage = pageNum == 1;
+        isLastPage = pageNum == pages;
+        hasPreviousPage = pageNum > 1;
+        hasNextPage = pageNum < pages;
+    }
+}
+

+ 4 - 0
src/main/resources/log4j.properties

@@ -0,0 +1,4 @@
+log4j.rootLogger=ERROR
+log4j.appender.stdout=org.apache.log4j.ConsoleAppender
+log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
+log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n