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; } }