mg
2022-10-09 6e510a9e46d0beaa101360a07f5c33ac51648d05
修改bug和消息管理功能优化
9个文件已修改
13个文件已添加
1481 ■■■■■ 已修改文件
ycl-common/src/main/java/com/ycl/dto/UmsAdminParam.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-common/src/main/java/com/ycl/entity/user/UmsAdmin.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-common/src/main/java/com/ycl/service/user/impl/UmsAdminServiceImpl.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-platform/pom.xml 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-platform/src/main/java/com/ycl/common/util/CommonUtils.java 375 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-platform/src/main/java/com/ycl/common/util/DateUtils.java 248 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-platform/src/main/java/com/ycl/common/util/Md5.java 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-platform/src/main/java/com/ycl/common/util/ParamsMap.java 248 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-platform/src/main/java/com/ycl/common/util/RandomNumberGenerator.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-platform/src/main/java/com/ycl/common/util/RandomStringUtil.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-platform/src/main/java/com/ycl/common/util/UtilNumber.java 259 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-platform/src/main/java/com/ycl/dto/message/MessageParam.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-platform/src/main/java/com/ycl/entity/message/Message.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-platform/src/main/java/com/ycl/service/message/Provider.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-platform/src/main/java/com/ycl/service/message/Sender.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-platform/src/main/java/com/ycl/service/message/factory/InnerFactory.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-platform/src/main/java/com/ycl/service/message/factory/InnerSender.java 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-platform/src/main/java/com/ycl/service/message/factory/MailFactory.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-platform/src/main/java/com/ycl/service/message/factory/MailSender.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-platform/src/main/java/com/ycl/service/message/factory/SmsFactory.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-platform/src/main/java/com/ycl/service/message/factory/SmsSender.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-platform/src/main/java/com/ycl/service/message/impl/IMessageServiceImpl.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-common/src/main/java/com/ycl/dto/UmsAdminParam.java
@@ -5,6 +5,7 @@
import lombok.Setter;
import javax.validation.constraints.*;
import java.util.List;
/**
 * 用户登录参数
@@ -55,6 +56,10 @@
    @ApiModelProperty(value = "座机/分机")
    private String zj;
    @NotBlank(message = "角色Id列表不能为空")
    @ApiModelProperty(value = "角色Id列表", required = true)
    private List<Long> roleIds;
//    @ApiModelProperty(value = "是否是负责人,0->false,1->true,默认0",example = "0")
//    @NotNull(message = "负责人未选择")
//    private byte isManager;
ycl-common/src/main/java/com/ycl/entity/user/UmsAdmin.java
@@ -10,6 +10,7 @@
import java.io.Serializable;
import java.util.Date;
import java.util.List;
/**
 * <p>
@@ -89,4 +90,8 @@
    @ApiModelProperty(value = "手机号码")
    private String mobile;
    @ApiModelProperty(value = "角色列表")
    @TableField(exist = false)
    private List<UmsRole> roles;
}
ycl-common/src/main/java/com/ycl/service/user/impl/UmsAdminServiceImpl.java
@@ -115,6 +115,19 @@
        String encodePassword = passwordEncoder.encode(umsAdmin.getPassword());
        umsAdmin.setPassword(encodePassword);
        baseMapper.insert(umsAdmin);
        //添加角色授权
        List<Long> ids = umsAdminParam.getRoleIds();
        if (!ids.isEmpty()) {
            List<UmsAdminRoleRelation> roleIds = new ArrayList<>();
            for(Long id:ids){
                UmsAdminRoleRelation urr = new UmsAdminRoleRelation();
                urr.setAdminId(umsAdmin.getId());
                urr.setRoleId(id);
                roleIds.add(urr);
             }
            umsAdminRoleRelationService.saveBatch(roleIds);
        }
        //对用户名系统默认添加
        umsAdmin.setNickName(RandomUtils.getUserId(umsAdmin.getId()));
        baseMapper.updateById(umsAdmin);
@@ -329,6 +342,9 @@
                if (null != umsDepart) {
                    e.setDepartName(umsDepart.getDepartName());
                }
                //获取角色列表
               List<UmsRole> roles = umsRoleMapper.getRoleList(e.getId());
               e.setRoles(roles);
            });
        }
        return page1;
ycl-platform/pom.xml
@@ -25,7 +25,11 @@
            <artifactId>ycl-common</artifactId>
            <version>1.0.0</version>
        </dependency>
        <dependency>
            <groupId>commons-httpclient</groupId>
            <artifactId>commons-httpclient</artifactId>
            <version>3.0.1</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
ycl-platform/src/main/java/com/ycl/common/util/CommonUtils.java
New file
@@ -0,0 +1,375 @@
package com.ycl.common.util;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class CommonUtils {
    /**
     * 检查对象是否为空
     *
     * @param obj
     *            java任意类型
     * @return
     */
    @SuppressWarnings("rawtypes")
    public static boolean isEmpty(Object obj) {
        if (obj == null) {
            return true;
        } else if (obj instanceof String && (obj.toString().trim().equals(""))) {
            return true;
        } else if (obj instanceof Number && ((Number) obj).doubleValue() < 0) {
            return true;
        } else if (obj instanceof Collection && ((Collection) obj).isEmpty()) {
            return true;
        } else if (obj instanceof Map && ((Map) obj).isEmpty()) {
            return true;
        } else if (obj instanceof Object[] && ((Object[]) obj).length == 0) {
            return true;
        }
        return false;
    }
    /**
     * 检查n个对象是否为空
     *
     * @param obj
     * @return
     */
    public static boolean isEmpty(Object... obj) {
        boolean res = false;
        for (Object o : obj) {
            if (isEmpty(o)) {
                res = true;
                break;
            }
        }
        return res;
    }
    /**
     *
     *
     * @param obj
     * @return
     */
    @SuppressWarnings("rawtypes")
    public static boolean hasLength(Object obj, int length) {
        if (obj == null) {
            return false;
        } else if (obj instanceof String) {
            return obj.toString().trim().length() == length;
        } else if (obj instanceof Collection) {
            return ((Collection) obj).size() == length;
        } else if (obj instanceof Map) {
            return ((Map) obj).size() == length;
        } else if (obj instanceof Object[]) {
            return ((Object[]) obj).length == length;
        }
        return false;
    }
    /**
     * 检查对象是否不为空
     *
     * @param obj
     * @return
     */
    public static boolean isNotEmpty(Object obj) {
        return !isEmpty(obj);
    }
    /**
     * 检查对象是否不为空
     *
     * @param obj
     * @return
     */
    public static boolean isNotEmpty(Object... obj) {
        boolean res = true;
        for (Object o : obj) {
            if (isEmpty(o)) {
                res = false;
            }
        }
        return res;
    }
    /**
     * 克隆一个对象
     *
     * @param obj
     * @return
     * @throws Exception
     */
    public static Object cloneObject(Object obj) throws Exception {
        ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
        ObjectOutputStream out = new ObjectOutputStream(byteOut);
        out.writeObject(obj);
        ByteArrayInputStream byteIn = new ByteArrayInputStream(byteOut.toByteArray());
        ObjectInputStream in = new ObjectInputStream(byteIn);
        return in.readObject();
    }
    /**
     * 判断是否为中文
     *
     * @param c
     * @return
     */
    public static boolean isChinese(char c) {
        Character.UnicodeBlock ub = Character.UnicodeBlock.of(c);
        if (ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS
                || ub == Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS
                || ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A
                || ub == Character.UnicodeBlock.GENERAL_PUNCTUATION
                || ub == Character.UnicodeBlock.CJK_SYMBOLS_AND_PUNCTUATION
                || ub == Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS) {
            return true;
        }
        return false;
    }
    public static boolean isChinese(String str) {
        if (null != str && str.length() > 0) {
            char[] chares = str.toCharArray();
            for (char c : chares) {
                if (isChinese(c))
                    return true;
            }
        } else
            return false;
        return false;
    }
    /**
     * 判断是否为中文乱码
     *
     * @param strName
     * @return
     */
    public static boolean hasMessyCode(String target) {
        Pattern p = Pattern.compile("\\s*|\t*|\r*|\n*");
        Matcher m = p.matcher(target);
        String after = m.replaceAll("");
        String temp = after.replaceAll("}", "");
        char[] ch = temp.trim().toCharArray();
        float chLength = ch.length;
        float count = 0;
        for (int i = 0; i < ch.length; i++) {
            char c = ch[i];
            if (!Character.isLetterOrDigit(c)) {
                if (!isChinese(c)) {
                    count = count + 1;
                }
            }
        }
        float result = count / chLength;
        if (result > 0.4) {
            return true;
        } else {
            return false;
        }
    }
    /**
     * 生成N位随机数
     *
     * @return
     */
    public static String getRandom(int N) {
        int[] rand = new int[N];
        StringBuffer numString = new StringBuffer();
        for (int i = 0; i < rand.length; i++) {
            rand[i] = (Integer) new Random().nextInt(9);
            numString.append(rand[i]);
        }
        return numString.toString();
    }
    /**
     * 同类对象属性复制(private,public) 复制出来的为新对象
     *
     * @param object
     * @return
     * @throws Exception
     */
    public static Object copyThisToNewOne(Object object) throws Exception {
        Class<?> classType = object.getClass();
        Object obj = classType.getConstructor(new Class[] {}).newInstance(new Object[] {});
        Field[] fields = classType.getDeclaredFields();
        for (Field field : fields) {
            if (Modifier.isPrivate(field.getModifiers())) {// 只需要私有字段
                String name = field.getName();
                String firstLetter = name.substring(0, 1).toUpperCase();
                String getMethodName = "get" + firstLetter + name.substring(1);
                String setMethodName = "set" + firstLetter + name.substring(1);
                Method getMethod = classType.getMethod(getMethodName, new Class[] {});
                Method setMethod = classType.getMethod(setMethodName, new Class[] { field.getType() });
                Object value = getMethod.invoke(object, new Object[] {});
                if (value != null) {
                    setMethod.invoke(obj, new Object[] { value });
                }
            } else {
                System.out.println(field.get(object));
                obj.getClass().getField(field.getName()).set((Object) obj, field.get(object));
            }
        }
        return obj;
    }
    /**
     * 同类对象属性复制(private,public) 把2个已有的对象属性进行复制 此方法src代表来源数据对象,
     * result代表要把src中的属性复制到的对象
     *
     * @param object
     * @return
     * @throws Exception
     */
    public static Object copyThisToAnother(Object src, Object result) throws Exception {
        Class<?> classType = src.getClass();
        Object obj = classType.getConstructor(new Class[] {}).newInstance(new Object[] {});
        Field[] fields = classType.getDeclaredFields();
        for (Field field : fields) {
            if (Modifier.isPrivate(field.getModifiers())) {// 只需要私有字段
                String name = field.getName();
                String firstLetter = name.substring(0, 1).toUpperCase();
                String getMethodName = "get" + firstLetter + name.substring(1);
                String setMethodName = "set" + firstLetter + name.substring(1);
                Method getMethod = classType.getMethod(getMethodName, new Class[] {});
                Method setMethod = classType.getMethod(setMethodName, new Class[] { field.getType() });
                Object value = getMethod.invoke(src, new Object[] {});
                if (value != null) {
                    setMethod.invoke(result, new Object[] { value });
                }
            } else {
                System.out.println(field.get(src));
                obj.getClass().getField(field.getName()).set(result, field.get(src));
            }
        }
        return result;
    }
    public static String getRandomString(int length) { // length表示生成字符串的长度
        String base = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
        Random random = new Random();
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < length; i++) {
            int number = random.nextInt(base.length());
            sb.append(base.charAt(number));
        }
        return sb.toString();
    }
    public static String getUpperStringRandom(int length) { // length表示生成字符串的长度
        return getRandomString(length).toUpperCase();
    }
    /**
     * 数字随机码码
     *
     * @param length
     * @return
     */
    public static String getDigitRandom(int length) { // length表示生成字符串的长度
        String base = "0123456789";
        Random random = new Random();
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < length; i++) {
            int number = random.nextInt(base.length());
            sb.append(base.charAt(number));
        }
        return sb.toString();
    }
    public static String getFormatParam(Object... obj) { // length表示生成字符串的长度
        StringBuffer sb = new StringBuffer();
        for (Object o : obj) {
            if (CommonUtils.isEmpty(sb.toString()))
                sb.append(o.toString());
            else
                sb.append("," + o.toString());
        }
        return sb.toString();
    }
    /**
     * 获取一个时间格式的编号
     *
     * @param random
     * @return yyyyMMddHHmmss + random(bit)
     */
    public static String getIdentityByTime(int random) {
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
        Date date = new Date();
        return dateFormat.format(date) + getDigitRandom(random);
    }
    public static String getUUID(boolean hasSplit) {
        UUID uuid = UUID.randomUUID();
        return hasSplit ? uuid.toString() : uuid.toString().replace("-", "");
    }
    public static <T> List<T> removeNull(List<? extends T> oldList) {
        oldList.removeAll(Collections.singleton(null));
          Iterator  iterator =   oldList.iterator();
        while (iterator.hasNext()) {
            if (checkIsEtmy(iterator.next())) {
                iterator.remove();
            }
        }
        return (List<T>) oldList;
    }
    public static boolean checkIsEtmy(Object o) {
         boolean flag = true;
        //获取参数类
        Class cls = o.getClass();
        //将参数类转换为对应属性数量的Field类型数组(即该类有多少个属性字段 N 转换后的数组长度即为 N)
        Field[] fields = cls.getDeclaredFields();
        for(int i = 0;i < fields.length; i ++){
            Field f = fields[i];
            f.setAccessible(true);
            //f.getName()得到对应字段的属性名,f.get(o)得到对应字段属性值,f.getGenericType()得到对应字段的类型
            try {
                if (f.get(o)!=null&&!"".equals(f.get(o).toString())) {
                    flag = false;
                }
            } catch (IllegalArgumentException | IllegalAccessException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        return flag;
    }
}
ycl-platform/src/main/java/com/ycl/common/util/DateUtils.java
New file
@@ -0,0 +1,248 @@
package com.ycl.common.util;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
public class DateUtils {
    /**
     * 获取两日期之间间隔的天数
     *
     * @param smdate
     *            较小的时间
     * @param bdate
     *            较大的时间
     * @return 相差天数
     */
    public static int daysBetween(Date smdate, Date bdate) {
        long between_days = 0;
        try {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            smdate = sdf.parse(sdf.format(smdate));
            bdate = sdf.parse(sdf.format(bdate));
            Calendar cal = Calendar.getInstance();
            cal.setTime(smdate);
            long time1 = cal.getTimeInMillis();
            cal.setTime(bdate);
            long time2 = cal.getTimeInMillis();
            between_days = (time2 - time1) / (1000 * 3600 * 24);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return Integer.parseInt(String.valueOf(between_days));
    }
    public static boolean isBetween(Date date, Date startDate, Date endDate) {
        try {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            startDate = sdf.parse(sdf.format(startDate));
            endDate = sdf.parse(sdf.format(endDate));
            date = sdf.parse(sdf.format(date));
            Calendar cal = Calendar.getInstance();
            cal.setTime(date);
            long time0 = cal.getTimeInMillis();
            cal.setTime(startDate);
            long time1 = cal.getTimeInMillis();
            cal.setTime(endDate);
            long time2 = cal.getTimeInMillis();
            if (time0 > time1 && time0 <= time2)
                return true;
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return false;
    }
    public static boolean isToday(Date date) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
        String _date = sdf.format(date);
        String _today = sdf.format(new Date());
        return _date.equals(_today);
    }
    public static long DifferMillis(Date sDate, Date eDate) {
        try {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            sDate = sdf.parse(sdf.format(sDate));
            eDate = sdf.parse(sdf.format(eDate));
            Calendar cal = Calendar.getInstance();
            cal.setTime(sDate);
            long time1 = cal.getTimeInMillis();
            cal.setTime(eDate);
            long time2 = cal.getTimeInMillis();
            return Math.abs(time1 - time2);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return -1L;
    }
    public static long DifferSeconds(Date sDate, Date eDate) {
        return DifferMillis(sDate, eDate) / 1000;
    }
    /**
     * 相差分钟数
     *
     * @param sDate
     * @param eDate
     * @return
     */
    public static long DifferMinutes(Date sDate, Date eDate) {
        return Long.parseLong(String.valueOf(DifferMillis(sDate, eDate)
                / (1000 * 60)));
    }
    public static String getNowDate(String format) {
        return new SimpleDateFormat(format).format(new Date());
    }
    public static String getTomorrowDate(String format) {
        return new SimpleDateFormat(format).format(addDate(new Date(), 1));
    }
    public static String getDateString(Date date, String format) {
        return new SimpleDateFormat(format).format(date);
    }
    public static String getNow() {
        return getDateString(new Date(), DateUtils.DATE_TIME_PATTERN);
    }
    public static Date parse(String date, String format) {
        try {
            return new SimpleDateFormat(format).parse(date);
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return null;
    }
    public static boolean nowTimeBetween(String beginTimeStr, String endTimeStr)
            throws ParseException {
        SimpleDateFormat dateFormat = new SimpleDateFormat("hh:mm:ss");
        Long beginTime = dateFormat.parse(beginTimeStr).getTime();
        Long endTime = dateFormat.parse(endTimeStr).getTime();
        Long nowTime = dateFormat.parse(dateFormat.format(new Date()))
                .getTime();
        if (nowTime >= beginTime && nowTime <= endTime) {
            return true;
        }
        return false;
    }
    @SuppressWarnings("static-access")
    public static Date addDate(Date date, int days) {
        Calendar calendar = new GregorianCalendar();
        calendar.setTime(date);
        calendar.add(calendar.DATE, days);// 把日期往后增加一天.整数往后推,负数往前移动
        return calendar.getTime(); // 这个时间就是日期往后推一天的结果
    }
    @SuppressWarnings("static-access")
    public static Date addHour(Date date, int hour) {
        Calendar calendar = new GregorianCalendar();
        calendar.setTime(date);
        calendar.add(calendar.HOUR, hour);// 把日期往后增加一天.整数往后推,负数往前移动
        return calendar.getTime(); // 这个时间就是日期往后推一天的结果
    }
    @SuppressWarnings("static-access")
    public static Date addMinute(Date date, int minute) {
        Calendar calendar = new GregorianCalendar();
        calendar.setTime(date);
        calendar.add(calendar.MINUTE, minute);// 把日期往后增加一天.整数往后推,负数往前移动
        return calendar.getTime(); // 这个时间就是日期往后推一天的结果
    }
    @SuppressWarnings("static-access")
    public static Date addSecond(Date date, int second) {
        Calendar calendar = new GregorianCalendar();
        calendar.setTime(date);
        calendar.add(calendar.SECOND, second);// 把日期往后增加一天.整数往后推,负数往前移动
        return calendar.getTime(); // 这个时间就是日期往后推一天的结果
    }
    /**
     *
     * @param timestamp
     *            秒
     * @return
     */
    public static Date getDate(String timestamp) {
        return getDateBySecond(Long.parseLong(timestamp)); // 这个时间就是日期往后推一天的结果
    }
    /**
     *
     * @param timestamp
     *            毫秒
     * @return
     */
    public static Date getDateByMillis(long timestamp) {
        Calendar calendar = new GregorianCalendar();
        calendar.setTimeInMillis(timestamp);
        return calendar.getTime(); // 这个时间就是日期往后推一天的结果
    }
    /**
     *
     * @param timestamp
     *            秒
     * @return
     */
    public static Date getDateBySecond(long timestamp) {
        return getDateByMillis(timestamp * 1000); // 这个时间就是日期往后推一天的结果
    }
    public static long getTimestamp(Date date) {
        Calendar calendar = new GregorianCalendar();
        calendar.setTime(date);
        return calendar.getTimeInMillis(); // 这个时间就是日期往后推一天的结果
    }
    public static long DifferMillis(String timestamp, String nowTimestamp) {
        Date date1 = parse(timestamp, DATE_TIME_PATTERN);
        Date date2 = parse(nowTimestamp, DATE_TIME_PATTERN);
        return DifferMillis(date1, date2);
    }
    public static long DifferMillis(String timestamp, Date date) {
        Date date1 = parse(timestamp, DATE_TIME_PATTERN);
        return DifferMillis(date1, date);
    }
    public static String dateToStamp(String s) throws ParseException{
        String res;
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
        Date date = simpleDateFormat.parse(s);
        long ts = date.getTime();
        res = String.valueOf(ts);
        return res;
    }
    public static void main(String[] args) throws ParseException {
        System.out.println(DateUtils.getDateString(new Date(), "yyyy-MM-dd HH:mm:ss"));
    }
    public static final String DATE_TIME_PATTERN = "yyyy-MM-dd HH:mm:ss";
}
ycl-platform/src/main/java/com/ycl/common/util/Md5.java
New file
@@ -0,0 +1,68 @@
package com.ycl.common.util;
import java.security.MessageDigest;
public class Md5 {
/**
* md5加密方法
* @author: zhengsunlei
* Jul 30, 2010 4:38:28 PM
* @param plainText 加密字符串
* @return String 返回32位md5加密字符串(16位加密取substring(8,24))
* 每位工程师都有保持代码优雅的义务
* each engineer has a duty to keep the code elegant
*/
public final static String md5(String plainText) {
   // 返回字符串
   String md5Str = null;
   try {
    // 操作字符串
    StringBuffer buf = new StringBuffer();
   /**
    * MessageDigest 类为应用程序提供信息摘要算法的功能,如 MD5 或 SHA 算法。
    * 信息摘要是安全的单向哈希函数,它接收任意大小的数据,并输出固定长度的哈希值。
    *
    * MessageDigest 对象开始被初始化。
    * 该对象通过使用 update()方法处理数据。
    * 任何时候都可以调用 reset()方法重置摘要。
    * 一旦所有需要更新的数据都已经被更新了,应该调用digest()方法之一完成哈希计算。
    *
    * 对于给定数量的更新数据,digest 方法只能被调用一次。
    * 在调用 digest 之后,MessageDigest 对象被重新设置成其初始状态。
    */
    MessageDigest md = MessageDigest.getInstance("MD5");
    // 添加要进行计算摘要的信息,使用 plainText 的 byte 数组更新摘要。
    md.update(plainText.getBytes("UTF-8"));
    // 计算出摘要,完成哈希计算。
    byte b[] = md.digest();
    int i;
    for (int offset = 0; offset < b.length; offset++) {
     i = b[offset];
     if (i < 0) {
      i += 256;
     }
     if (i < 16) {
      buf.append("0");
     }
     // 将整型 十进制 i 转换为16位,用十六进制参数表示的无符号整数值的字符串表示形式。
     buf.append(Integer.toHexString(i));
    }
    // 32位的加密
    md5Str = buf.toString().toUpperCase();
    // 16位的加密
    // md5Str = buf.toString().md5Strstring(8,24);
   } catch (Exception e) {
    e.printStackTrace();
   }
   return md5Str;
}
    public static boolean checkMD5(String verifyString, String md5) {
            return md5.equals(md5(verifyString));
    }
    public static void main(String[] args) {
        System.out.println(md5("appId=wx593e357018dd07f1&nonceStr=3EdGqO3vHlTzMKeyCvV2mdBSeWXNSSwq&package=wx20150715200343f61cb138620134794141&signType=MD5&timeStamp=20150715200347&key=waibjtam19801116passwordyurimeng"));
    }
}
ycl-platform/src/main/java/com/ycl/common/util/ParamsMap.java
New file
@@ -0,0 +1,248 @@
package com.ycl.common.util;
import lombok.extern.slf4j.Slf4j;
import javax.servlet.http.HttpServletRequest;
import java.io.Serializable;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
@Slf4j
public class ParamsMap extends HashMap<String, Object> implements Serializable{
    private static final long serialVersionUID = -6716714932665322981L;
    public ParamsMap(){}
    public ParamsMap(HttpServletRequest request) {
        if(request==null)return;
        Iterator<Entry<String, String[]>> entries = request.getParameterMap().entrySet().iterator();
        Entry<String, String[]> entry;
        String name = "";
        while (entries.hasNext()) {
            String value = "";
            entry = (Entry<String, String[]>) entries.next();
            name = (String) entry.getKey();
            Object valueObj = entry.getValue();
            if(null == valueObj){
                value = "";
            }else if(valueObj instanceof String[]){
                String[] values = (String[])valueObj;
                for(int i=0;i<values.length;i++){
                     value += values[i] + ",";
                }
                value = value.substring(0, value.length()-1);
            }else{
                value = valueObj.toString();
            }
            this.put(name, value);
        }
    }
    public ParamsMap(String code, Object value) {
        this.put(code, value);
    }
    /**
     *
     * @Title: getString
     * @Description: 获取字符串值
     * @param key
     * @return
     */
    public String getString(String key) {
        try {
            if (containsKey(key)) {
                if(get(key)!=null) return get(key).toString();
            }
        } catch (Exception e) {
            log.error("ParamsMap getString is error:{}",e);
        }
        return null;
    }
    /**
     *
     * @Title: getInteter
     * @Description: 获取整型值
     * @param key
     * @return
     */
    public Integer getInteter(String key) {
        try {
            if (containsKey(key)) {
                if(get(key)!=null && !"".equals(get(key)))
                    return Integer.parseInt(getString(key));
            }
        } catch (Exception e) {
            log.error("ParamsMap getInteter is error:{}",e);
        }
        return null;
    }
    /**
     *
     * @Title: getAsLong
     * @Description: 获取Long值
     * @param key
     * @return
     */
    public Long getLong(String key){
        try {
            if (containsKey(key)) {
                if(get(key)!=null && !"".equals(get(key)))
                    return Long.parseLong(getString(key));
            }
        } catch (Exception e) {
            log.error("ParamsMap getLong is error:{}",e);
        }
        return null;
    }
    /**
     *
     * @Title: getAsDouble
     * @Description: 获取Double值
     * @param key
     * @return
     */
    public Double getDouble(String key){
        try {
            if (containsKey(key)) {
                if(get(key)!=null && !"".equals(get(key)))
                    return Double.parseDouble(getString(key));
            }
        } catch (Exception e) {
            log.error("ParamsMap getDouble is error:{}",e);
        }
        return null;
    }
    /**
     *
     * @Title: getFloat
     * @Description: 获取Float值
     * @param key
     * @return
     */
    public Float getFloat(String key){
        try {
            if (containsKey(key)) {
                if(get(key)!=null && !"".equals(get(key)))
                    return Float.parseFloat(getString(key));
            }
        } catch (Exception e) {
            log.error("ParamsMap getFloat is error:{}",e);
        }
        return null;
    }
    /**
     *
     * @Title: getBoolean
     * @Description: 获取Boolean值
     * @param key
     * @return
     */
    public Boolean getBoolean(String key){
        try {
            if (containsKey(key)) {
                if(get(key)!=null && !"".equals(get(key)))
                    return Boolean.parseBoolean(getString(key));
            }
        } catch (Exception e) {
            log.error("ParamsMap getBoolean is error:{}",e);
        }
        return null;
    }
    /**
     *
     * @Title: getDate
     * @Description: 获取日期值
     * @param key
     * @return
     */
    public Date getDate(String key){
        try {
            if (containsKey(key)) {
                SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                if(get(key)!=null && !"".equals(get(key)))
                    return df.parse(get(key).toString());
            }
        } catch (Exception e) {
            log.error("ParamsMap getDate is error:{}",e);
        }
        return null;
    }
    /**
     *
     * @Title: getStringArray
     * @Description: 获取字符串数组
     * @param key
     * @return
     */
    public String[] getArray(String key){
        try {
            if (containsKey(key)) {
                if(get(key)==null && !"".equals(get(key))) return new String[0];
                    return get(key).toString().split(",");
            }
        } catch (Exception e) {
            log.error("ParamsMap getStringArray is error:{}",e);
            e.printStackTrace();
        }
        return null;
    }
    /**
     *
     * @Title: getIntegerArray
     * @Description: 获取整型数组
     * @param key
     * @return
     */
    public Integer[] getIntegerArray(String key){
        try {
            if (containsKey(key)) {
                String [] tmp = getArray(key);
                if(tmp==null)return null;
                Integer []tmpInt = new Integer[tmp.length];
                int index = 0;
                for(String s:tmp){
                    if(s==null||s.equals(""))continue;
                    tmpInt[index]=Integer.parseInt(s);
                }
                return tmpInt;
            }
        } catch (Exception e) {
            log.error("ParamsMap getAsIntegerArray is error:{}",e);
            e.printStackTrace();
        }
        return null;
    }
    public Long[] getLongArray(String key) {
        try {
            if(containsKey(key)) {
                String [] tmp = getArray(key);
                if(tmp==null)return null;
                Long [] tmpInt = new Long[tmp.length];
                int index = 0;
                for(String s:tmp){
                    if(s==null||s.equals(""))continue;
                    tmpInt[index]=Long.parseLong(s);
                }
                return tmpInt;
            }
        } catch (Exception e) {
            log.error("ParamsMap getLongArray is error:{}",e);
            e.printStackTrace();
        }
        return null;
    }
}
ycl-platform/src/main/java/com/ycl/common/util/RandomNumberGenerator.java
@@ -1,5 +1,7 @@
package com.ycl.common.util;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;
public class RandomNumberGenerator {
@@ -48,8 +50,6 @@
       
   
    public static void main(String[] args) { 
        for (int i = 0; i < 10; i++) {
            System.out.println(generateNumber(8));
        }
    }
      System.out.println(new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date()) + generateNumber(6));
    }
}
ycl-platform/src/main/java/com/ycl/common/util/RandomStringUtil.java
@@ -6,7 +6,11 @@
    public static final String NUMBERS = "0123456789";
    public static final String LOWER_CASE = "abcdefghijklmnopqrstuvwxyz";
    public static final String CAPITAL = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    public static final String CAPITAL_NUM = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    public static final String CAPITAL_NUM_LOWER = "0123456789abcdefghijklmnopqrstuvwxyz";
    public static final String ALL = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
    
    /**
     * 生成指定长度的随机字符串
@@ -26,6 +30,6 @@
    }
    
    public static void main(String[] args) {
        System.out.println(getRandomString(24, RandomStringUtil.ALL));
        System.out.println(getRandomString(6, RandomStringUtil.NUMBERS));
    }
}
ycl-platform/src/main/java/com/ycl/common/util/UtilNumber.java
New file
@@ -0,0 +1,259 @@
package com.ycl.common.util;
import java.lang.reflect.Field;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;
public class UtilNumber {
    public static String getCode(String type ,int n) {
        String  code = type + new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date())+RandomStringUtil.getRandomString(n,RandomStringUtil.ALL);
        return  code;
    }
    public static String getNumber(String type ,int n) {
        String  code = type + new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date())+RandomNumberGenerator.generateNumber(n);
        return  code;
    }
    public static String getApplicationCode(String type ,int n) {
        String  code = type+getApplicationSecret(n);
        return  code;
    }
    public static String getApplicationSecret(int n) {
        String  code = RandomStringUtil.getRandomString(n,RandomStringUtil.CAPITAL_NUM_LOWER);
        return  code;
    }
    public static String getRqUID(String channel) {
        // 6位随机数,用于生成订单号
        String rand1 = RandomNumberGenerator.generateNumber(4);
        String rand2 = RandomNumberGenerator.generateNumber(6);
        String rqUID = channel + DateUtils.getNowDate("yyyyMMdd")
                + DateUtils.getNowDate("HHmmss") + rand1 + rand2;
        return rqUID;
    }
    public static String getRqTradeNo(String channel) {
        // 6位随机数,用于生成交易号
        String rand2 = RandomNumberGenerator.generateNumber(6);
        String rqUID = channel + DateUtils.getNowDate("yyyyMMdd")
                + DateUtils.getNowDate("HHmmss") + rand2;
        return rqUID;
    }
    public static String getSettleAccount(String memberId) {
        // md5
        String subStr = memberId.substring(memberId.length() - 12,
                memberId.length());
        String md5Str = Md5.md5(Md5.md5(subStr));
//        String rand1 = RandomNumberGenerator.generateNumber(4);
//        String rand2 = RandomNumberGenerator.generateNumber(6);
        String merchantId = subStr + md5Str.substring(0, 3);
        return merchantId;
    }
    public static String getShopQRCode(String memberId) {
        // md5
        String rand1 = RandomNumberGenerator.generateNumber(4);
        String rand2 = RandomNumberGenerator.generateNumber(6);
        String shopQRCode = Md5.md5(memberId.substring(0, 12) + rand1 + rand2);
        return shopQRCode;
    }
    public static String getMsgId() {
        String rand1 = RandomNumberGenerator.generateNumber(4);
        String rand2 = RandomNumberGenerator.generateNumber(4);
        String msgId = "merchant"
                + DateUtils.getNowDate("yyyyMMdd")
                + DateUtils.getNowDate("HHmmss") + rand1 + rand2;
        return msgId;
    }
    public static String toSignStr(Object obj, Class<?> clazz) {
        if (obj == null) {
            return "";
        }
        List<String> listStr = new ArrayList<String>();
        Field[] fields = clazz.getDeclaredFields();// 根据Class对象获得属性 私有的也可以获得
        try {
            for (Field f : fields) {
                f.setAccessible(true); // 设置些属性是可以访问的
                Object val = f.get(obj); // 得到此属性的值
                String name = f.getName(); // 得到此属性的名称
                if (!name.equals("sign") && CommonUtils.isNotEmpty(val)) {
                    listStr.add(name + "=" + val);
                }
            }
        } catch (IllegalAccessException e) {
        }
        // 节点间以&符连接,形成最终待签名字符串
        Collections.sort(listStr);
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < listStr.size(); i++) {
            String msg = listStr.get(i);
            if (i > 0) {
                sb.append("&");
            }
            sb.append(msg);
        }
        return sb.toString();
    }
    /**
     *
     * 功能描述:去除字符串首部为"0"字符
     *
     * @param str
     *            传入需要转换的字符串
     * @return 转换后的字符串
     */
    public static String removeZero(String str) {
        char ch;
        String result = "";
        if (str != null && str.trim().length() > 0
                && !str.trim().equalsIgnoreCase("null")) {
            try {
                for (int i = 0; i < str.length(); i++) {
                    ch = str.charAt(i);
                    if (ch != '0') {
                        result = str.substring(i);
                        break;
                    }
                }
            } catch (Exception e) {
                result = "";
            }
        } else {
            result = "";
        }
        return result;
    }
    /**
     *
     * 功能描述:金额字符串转换:单位分转成单元
     *
     * @param str
     *            传入需要转换的金额字符串
     * @return 转换后的金额字符串
     */
    public static String fenToYuan(Object o) {
        if (o == null)
            return "0.00";
        String s = o.toString();
        int len = -1;
        StringBuilder sb = new StringBuilder();
        if (s != null && s.trim().length() > 0 && !s.equalsIgnoreCase("null")) {
            s = removeZero(s);
            if (s != null && s.trim().length() > 0
                    && !s.equalsIgnoreCase("null")) {
                len = s.length();
                int tmp = s.indexOf("-");
                if (tmp >= 0) {
                    if (len == 2) {
                        sb.append("-0.0").append(s.substring(1));
                    } else if (len == 3) {
                        sb.append("-0.").append(s.substring(1));
                    } else {
                        sb.append(s.substring(0, len - 2)).append(".")
                                .append(s.substring(len - 2));
                    }
                } else {
                    if (len == 1) {
                        sb.append("0.0").append(s);
                    } else if (len == 2) {
                        sb.append("0.").append(s);
                    } else {
                        sb.append(s.substring(0, len - 2)).append(".")
                                .append(s.substring(len - 2));
                    }
                }
            } else {
                sb.append("0.00");
            }
        } else {
            sb.append("0.00");
        }
        return sb.toString();
    }
    /**
     *
     * 功能描述:金额字符串转换:单位元转成单分
     *
     * @param str
     *            传入需要转换的金额字符串
     * @return 转换后的金额字符串
     */
    public static String yuanToFen(Object o) {
        if (o == null)
            return "0";
        String s = o.toString();
        int posIndex = -1;
        String str = "";
        StringBuilder sb = new StringBuilder();
        if (s != null && s.trim().length() > 0 && !s.equalsIgnoreCase("null")) {
            posIndex = s.indexOf(".");
            if (posIndex > 0) {
                int len = s.length();
                if (len == posIndex + 1) {
                    str = s.substring(0, posIndex);
                    if (str == "0") {
                        str = "";
                    }
                    sb.append(str).append("00");
                } else if (len == posIndex + 2) {
                    str = s.substring(0, posIndex);
                    if (str == "0") {
                        str = "";
                    }
                    sb.append(str)
                            .append(s.substring(posIndex + 1, posIndex + 2))
                            .append("0");
                } else if (len == posIndex + 3) {
                    str = s.substring(0, posIndex);
                    if (str == "0") {
                        str = "";
                    }
                    sb.append(str).append(
                            s.substring(posIndex + 1, posIndex + 3));
                } else {
                    str = s.substring(0, posIndex);
                    if (str == "0") {
                        str = "";
                    }
                    sb.append(str).append(
                            s.substring(posIndex + 1, posIndex + 3));
                }
            } else {
                sb.append(s).append("00");
            }
        } else {
            sb.append("0");
        }
        str = removeZero(sb.toString());
        if (str != null && str.trim().length() > 0
                && !str.trim().equalsIgnoreCase("null")) {
            return str;
        } else {
            return "0";
        }
    }
    public static void main(String[] args) {
         System.out.println(getRqUID("1"));
    }
}
ycl-platform/src/main/java/com/ycl/dto/message/MessageParam.java
@@ -26,7 +26,7 @@
    /**
     * 消息类型
     */
    @ApiModelProperty(value = "消息类型")
    @ApiModelProperty(value = "消息类型0-站内信1-邮件2-短信")
    @NotNull(message = "消息类型为空")
    private Integer messageType;
    /**
ycl-platform/src/main/java/com/ycl/entity/message/Message.java
@@ -49,7 +49,7 @@
     * 消息类型
     */
    @TableField("message_type")
    @ApiModelProperty(value = "消息类型")
    @ApiModelProperty(value = "消息类型0-站内信1-邮件2-短信")
    @NotBlank(message = "消息类型为空")
    private Integer messageType;
ycl-platform/src/main/java/com/ycl/service/message/Provider.java
New file
@@ -0,0 +1,13 @@
package com.ycl.service.message;
/**
 * <p>
 * 类说明
 * </p>
 *
 * @author mg
 * @since 2022-10-09
 */
public interface Provider {
    public Sender produce();
}
ycl-platform/src/main/java/com/ycl/service/message/Sender.java
New file
@@ -0,0 +1,16 @@
package com.ycl.service.message;
import com.ycl.dto.message.MessageParam;
import com.ycl.entity.message.Message;
/**
 * <p>
 *
 * </p>
 *
 * @author mg
 * @since 2022-10-09
 */
public interface Sender {
    Message sendMessage(MessageParam messageParam);
}
ycl-platform/src/main/java/com/ycl/service/message/factory/InnerFactory.java
New file
@@ -0,0 +1,19 @@
package com.ycl.service.message.factory;
import com.ycl.service.message.Provider;
import com.ycl.service.message.Sender;
/**
 * <p>
 *  内部工厂
 * </p>
 *
 * @author mg
 * @since 2022-10-09
 */
public class InnerFactory implements Provider {
    @Override
    public Sender produce() {
        return new InnerSender();
    }
}
ycl-platform/src/main/java/com/ycl/service/message/factory/InnerSender.java
New file
@@ -0,0 +1,63 @@
package com.ycl.service.message.factory;
import com.ycl.common.util.UtilNumber;
import com.ycl.dto.message.MessageParam;
import com.ycl.entity.message.Message;
import com.ycl.service.message.IMessageService;
import com.ycl.service.message.Sender;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
 * <p>
 *  内站发送器
 * </p>
 *
 * @author mg
 * @since 2022-10-09
 */
@Component
public class InnerSender implements Sender {
    private static IMessageService iMessageService;
    @Autowired
    public void setIMessageService(IMessageService iMessageService) {
        InnerSender.iMessageService = iMessageService;
    }
    @Override
    public Message sendMessage(MessageParam messageParam) {
        Message message = new Message();
        List<Message> messages = new ArrayList<>();
        String[] ids = messageParam.getTargetTo().split(",");
        for (String id : ids) {
            Message messageAdd = new Message();
            BeanUtils.copyProperties(messageParam, messageAdd);
            //设置接收者
            messageAdd.setTargetTo(id);
            //生成8位随机数消息编码
            messageAdd.setMessageNumber(UtilNumber.getNumber("MC",6));
            //发送时间
            messageAdd.setSendTime(new Date());
            //生成默认参数
            messageAdd.setCreateTime(new Date());
            messageAdd.setUpdateTime(new Date());
            messageAdd.setCreateUser(messageParam.getCreateUser());
            messageAdd.setUpdateUser(messageParam.getCreateUser());
            messageAdd.setIsView(0);
            messageAdd.setVersion(0);
            messages.add(messageAdd);
        }
        BeanUtils.copyProperties(messageParam, message);
        //批量新增
        iMessageService.saveBatch(messages);
        return message;
    }
}
ycl-platform/src/main/java/com/ycl/service/message/factory/MailFactory.java
New file
@@ -0,0 +1,19 @@
package com.ycl.service.message.factory;
import com.ycl.service.message.Provider;
import com.ycl.service.message.Sender;
/**
 * <p>
 * 邮件工厂
 * </p>
 *
 * @author mg
 * @since 2022-10-09
 */
public class MailFactory implements Provider {
    @Override
    public Sender produce() {
        return new MailSender();
    }
}
ycl-platform/src/main/java/com/ycl/service/message/factory/MailSender.java
New file
@@ -0,0 +1,20 @@
package com.ycl.service.message.factory;
import com.ycl.dto.message.MessageParam;
import com.ycl.entity.message.Message;
import com.ycl.service.message.Sender;
/**
 * <p>
 *  邮件发送器
 * </p>
 *
 * @author mg
 * @since 2022-10-09
 */
public class MailSender implements Sender {
    @Override
    public Message sendMessage(MessageParam messageParam) {
        return null;
    }
}
ycl-platform/src/main/java/com/ycl/service/message/factory/SmsFactory.java
New file
@@ -0,0 +1,19 @@
package com.ycl.service.message.factory;
import com.ycl.service.message.Provider;
import com.ycl.service.message.Sender;
/**
 * <p>
 * 类说明
 * </p>
 *
 * @author mg
 * @since 2022-10-09
 */
public class SmsFactory implements Provider {
    @Override
    public Sender produce() {
        return new SmsSender();
    }
}
ycl-platform/src/main/java/com/ycl/service/message/factory/SmsSender.java
New file
@@ -0,0 +1,20 @@
package com.ycl.service.message.factory;
import com.ycl.dto.message.MessageParam;
import com.ycl.entity.message.Message;
import com.ycl.service.message.Sender;
/**
 * <p>
 *  短信发送器
 * </p>
 *
 * @author mg
 * @since 2022-10-09
 */
public class SmsSender implements Sender {
    @Override
    public Message sendMessage(MessageParam messageParam) {
        return null;
    }
}
ycl-platform/src/main/java/com/ycl/service/message/impl/IMessageServiceImpl.java
@@ -1,15 +1,16 @@
package com.ycl.service.message.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ycl.common.util.RandomNumberGenerator;
import com.ycl.dto.message.MessageParam;
import com.ycl.entity.message.Message;
import com.ycl.mapper.message.MessageMapper;
import com.ycl.service.message.IMessageService;
import org.springframework.beans.BeanUtils;
import com.ycl.service.message.Provider;
import com.ycl.service.message.Sender;
import com.ycl.service.message.factory.InnerFactory;
import com.ycl.service.message.factory.MailFactory;
import com.ycl.service.message.factory.SmsFactory;
import org.springframework.stereotype.Service;
import java.util.Date;
/**
 * <p>
@@ -22,19 +23,28 @@
@Service
public class IMessageServiceImpl extends ServiceImpl<MessageMapper, Message> implements IMessageService {
    @Override
    public Message sendMessage(MessageParam mssageParam) {
        Message message = new Message();
        BeanUtils.copyProperties(mssageParam, message);
        //生成8位随机数消息编码
        String messageNumber = RandomNumberGenerator.generateNumber(8);
        StringBuilder sb = new StringBuilder("XX");
        sb.append(messageNumber);
        message.setMessageNumber(sb.toString());
        //生成默认参数
        message.setCreateTime(new Date());
        message.setUpdateTime(new Date());
        message.setIsView(0);
        baseMapper.insert(message);
    public Message sendMessage(MessageParam messageParam) {
        Message message = null;
        Provider provider = null;
        switch (messageParam.getMessageType())
        {
            //内站发送
            case 0:
                provider = new InnerFactory();
                break;
            //邮件发送
            case 1:
                provider = new MailFactory();
                break;
             //短信发送
            case 2:
                provider = new SmsFactory();
                break;
            default:
                System.out.println("抛异常");
        }
        Sender sender = provider.produce();
        sender.sendMessage(messageParam);
        return message;
    }
}