From 6e510a9e46d0beaa101360a07f5c33ac51648d05 Mon Sep 17 00:00:00 2001
From: mg <maokecheng@163.com>
Date: 星期日, 09 十月 2022 14:56:03 +0800
Subject: [PATCH] 修改bug和消息管理功能优化

---
 ycl-platform/src/main/java/com/ycl/common/util/RandomStringUtil.java             |    6 
 ycl-platform/src/main/java/com/ycl/common/util/DateUtils.java                    |  248 +++++++++
 ycl-platform/src/main/java/com/ycl/service/message/Provider.java                 |   13 
 ycl-platform/pom.xml                                                             |    6 
 ycl-platform/src/main/java/com/ycl/entity/message/Message.java                   |    2 
 ycl-platform/src/main/java/com/ycl/service/message/impl/IMessageServiceImpl.java |   44 +
 ycl-platform/src/main/java/com/ycl/dto/message/MessageParam.java                 |    2 
 ycl-platform/src/main/java/com/ycl/common/util/UtilNumber.java                   |  259 ++++++++++
 ycl-common/src/main/java/com/ycl/service/user/impl/UmsAdminServiceImpl.java      |   16 
 ycl-platform/src/main/java/com/ycl/service/message/factory/MailFactory.java      |   19 
 ycl-platform/src/main/java/com/ycl/service/message/factory/SmsFactory.java       |   19 
 ycl-platform/src/main/java/com/ycl/service/message/factory/InnerFactory.java     |   19 
 ycl-platform/src/main/java/com/ycl/service/message/factory/InnerSender.java      |   63 ++
 ycl-platform/src/main/java/com/ycl/service/message/factory/SmsSender.java        |   20 
 ycl-platform/src/main/java/com/ycl/service/message/factory/MailSender.java       |   20 
 ycl-platform/src/main/java/com/ycl/common/util/Md5.java                          |   68 ++
 ycl-platform/src/main/java/com/ycl/common/util/ParamsMap.java                    |  248 +++++++++
 ycl-platform/src/main/java/com/ycl/service/message/Sender.java                   |   16 
 ycl-common/src/main/java/com/ycl/dto/UmsAdminParam.java                          |    5 
 ycl-platform/src/main/java/com/ycl/common/util/CommonUtils.java                  |  375 +++++++++++++++
 ycl-common/src/main/java/com/ycl/entity/user/UmsAdmin.java                       |    5 
 ycl-platform/src/main/java/com/ycl/common/util/RandomNumberGenerator.java        |    8 
 22 files changed, 1,456 insertions(+), 25 deletions(-)

diff --git a/ycl-common/src/main/java/com/ycl/dto/UmsAdminParam.java b/ycl-common/src/main/java/com/ycl/dto/UmsAdminParam.java
index d233205..8d86cc7 100644
--- a/ycl-common/src/main/java/com/ycl/dto/UmsAdminParam.java
+++ b/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 = "鏄惁鏄礋璐d汉锛�0->false,1->true锛岄粯璁�0",example = "0")
 //    @NotNull(message = "璐熻矗浜烘湭閫夋嫨")
 //    private byte isManager;
diff --git a/ycl-common/src/main/java/com/ycl/entity/user/UmsAdmin.java b/ycl-common/src/main/java/com/ycl/entity/user/UmsAdmin.java
index 3283364..b40d47a 100644
--- a/ycl-common/src/main/java/com/ycl/entity/user/UmsAdmin.java
+++ b/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;
 }
diff --git a/ycl-common/src/main/java/com/ycl/service/user/impl/UmsAdminServiceImpl.java b/ycl-common/src/main/java/com/ycl/service/user/impl/UmsAdminServiceImpl.java
index 0774bac..a88c754 100644
--- a/ycl-common/src/main/java/com/ycl/service/user/impl/UmsAdminServiceImpl.java
+++ b/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;
diff --git a/ycl-platform/pom.xml b/ycl-platform/pom.xml
index 3f73696..084ec6a 100644
--- a/ycl-platform/pom.xml
+++ b/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>
diff --git a/ycl-platform/src/main/java/com/ycl/common/util/CommonUtils.java b/ycl-platform/src/main/java/com/ycl/common/util/CommonUtils.java
new file mode 100644
index 0000000..f9b3180
--- /dev/null
+++ b/ycl-platform/src/main/java/com/ycl/common/util/CommonUtils.java
@@ -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;
+	}
+
+	/**
+	 * 妫�鏌涓璞℃槸鍚︿负绌�
+	 * 
+	 * @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涓凡鏈夌殑瀵硅薄灞炴�ц繘琛屽鍒� 姝ゆ柟娉晄rc浠h〃鏉ユ簮鏁版嵁瀵硅薄锛�
+	 * result浠h〃瑕佹妸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()寰楀埌瀵瑰簲瀛楁鐨勫睘鎬у悕锛宖.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;
+	}
+}
diff --git a/ycl-platform/src/main/java/com/ycl/common/util/DateUtils.java b/ycl-platform/src/main/java/com/ycl/common/util/DateUtils.java
new file mode 100644
index 0000000..2115b5d
--- /dev/null
+++ b/ycl-platform/src/main/java/com/ycl/common/util/DateUtils.java
@@ -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";
+}
\ No newline at end of file
diff --git a/ycl-platform/src/main/java/com/ycl/common/util/Md5.java b/ycl-platform/src/main/java/com/ycl/common/util/Md5.java
new file mode 100644
index 0000000..aebeb9f
--- /dev/null
+++ b/ycl-platform/src/main/java/com/ycl/common/util/Md5.java
@@ -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浣峬d5鍔犲瘑瀛楃涓�(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 涔嬪悗锛孧essageDigest 瀵硅薄琚噸鏂拌缃垚鍏跺垵濮嬬姸鎬併��
+    */ 
+    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"));
+	}
+}
\ No newline at end of file
diff --git a/ycl-platform/src/main/java/com/ycl/common/util/ParamsMap.java b/ycl-platform/src/main/java/com/ycl/common/util/ParamsMap.java
new file mode 100644
index 0000000..6df2b8a
--- /dev/null
+++ b/ycl-platform/src/main/java/com/ycl/common/util/ParamsMap.java
@@ -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;
+	}
+}
\ No newline at end of file
diff --git a/ycl-platform/src/main/java/com/ycl/common/util/RandomNumberGenerator.java b/ycl-platform/src/main/java/com/ycl/common/util/RandomNumberGenerator.java
index c228537..d351cba 100644
--- a/ycl-platform/src/main/java/com/ycl/common/util/RandomNumberGenerator.java
+++ b/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));
+    }
 }
diff --git a/ycl-platform/src/main/java/com/ycl/common/util/RandomStringUtil.java b/ycl-platform/src/main/java/com/ycl/common/util/RandomStringUtil.java
index 513410a..eae8313 100644
--- a/ycl-platform/src/main/java/com/ycl/common/util/RandomStringUtil.java
+++ b/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));
 	}
 }
diff --git a/ycl-platform/src/main/java/com/ycl/common/util/UtilNumber.java b/ycl-platform/src/main/java/com/ycl/common/util/UtilNumber.java
new file mode 100644
index 0000000..17429ba
--- /dev/null
+++ b/ycl-platform/src/main/java/com/ycl/common/util/UtilNumber.java
@@ -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"));
+
+	}
+}
diff --git a/ycl-platform/src/main/java/com/ycl/dto/message/MessageParam.java b/ycl-platform/src/main/java/com/ycl/dto/message/MessageParam.java
index 08cdb03..82ae17b 100644
--- a/ycl-platform/src/main/java/com/ycl/dto/message/MessageParam.java
+++ b/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;
     /**
diff --git a/ycl-platform/src/main/java/com/ycl/entity/message/Message.java b/ycl-platform/src/main/java/com/ycl/entity/message/Message.java
index cd18772..703a1e3 100644
--- a/ycl-platform/src/main/java/com/ycl/entity/message/Message.java
+++ b/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;
 
diff --git a/ycl-platform/src/main/java/com/ycl/service/message/Provider.java b/ycl-platform/src/main/java/com/ycl/service/message/Provider.java
new file mode 100644
index 0000000..ce68d15
--- /dev/null
+++ b/ycl-platform/src/main/java/com/ycl/service/message/Provider.java
@@ -0,0 +1,13 @@
+package com.ycl.service.message;
+
+/**
+ * <p>
+ * 绫昏鏄�
+ * </p>
+ *
+ * @author mg
+ * @since 2022-10-09
+ */
+public interface Provider {
+    public Sender produce();
+}
diff --git a/ycl-platform/src/main/java/com/ycl/service/message/Sender.java b/ycl-platform/src/main/java/com/ycl/service/message/Sender.java
new file mode 100644
index 0000000..7a20524
--- /dev/null
+++ b/ycl-platform/src/main/java/com/ycl/service/message/Sender.java
@@ -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);
+}
diff --git a/ycl-platform/src/main/java/com/ycl/service/message/factory/InnerFactory.java b/ycl-platform/src/main/java/com/ycl/service/message/factory/InnerFactory.java
new file mode 100644
index 0000000..17c4f80
--- /dev/null
+++ b/ycl-platform/src/main/java/com/ycl/service/message/factory/InnerFactory.java
@@ -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();
+    }
+}
diff --git a/ycl-platform/src/main/java/com/ycl/service/message/factory/InnerSender.java b/ycl-platform/src/main/java/com/ycl/service/message/factory/InnerSender.java
new file mode 100644
index 0000000..09593e7
--- /dev/null
+++ b/ycl-platform/src/main/java/com/ycl/service/message/factory/InnerSender.java
@@ -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;
+    }
+}
diff --git a/ycl-platform/src/main/java/com/ycl/service/message/factory/MailFactory.java b/ycl-platform/src/main/java/com/ycl/service/message/factory/MailFactory.java
new file mode 100644
index 0000000..7ae6506
--- /dev/null
+++ b/ycl-platform/src/main/java/com/ycl/service/message/factory/MailFactory.java
@@ -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();
+    }
+}
diff --git a/ycl-platform/src/main/java/com/ycl/service/message/factory/MailSender.java b/ycl-platform/src/main/java/com/ycl/service/message/factory/MailSender.java
new file mode 100644
index 0000000..f0e17e5
--- /dev/null
+++ b/ycl-platform/src/main/java/com/ycl/service/message/factory/MailSender.java
@@ -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;
+    }
+}
diff --git a/ycl-platform/src/main/java/com/ycl/service/message/factory/SmsFactory.java b/ycl-platform/src/main/java/com/ycl/service/message/factory/SmsFactory.java
new file mode 100644
index 0000000..5a0711b
--- /dev/null
+++ b/ycl-platform/src/main/java/com/ycl/service/message/factory/SmsFactory.java
@@ -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();
+    }
+}
diff --git a/ycl-platform/src/main/java/com/ycl/service/message/factory/SmsSender.java b/ycl-platform/src/main/java/com/ycl/service/message/factory/SmsSender.java
new file mode 100644
index 0000000..a44c8d0
--- /dev/null
+++ b/ycl-platform/src/main/java/com/ycl/service/message/factory/SmsSender.java
@@ -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;
+    }
+}
diff --git a/ycl-platform/src/main/java/com/ycl/service/message/impl/IMessageServiceImpl.java b/ycl-platform/src/main/java/com/ycl/service/message/impl/IMessageServiceImpl.java
index f9ec3ab..fc5484d 100644
--- a/ycl-platform/src/main/java/com/ycl/service/message/impl/IMessageServiceImpl.java
+++ b/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;
     }
 }

--
Gitblit v1.8.0