package com.iamberry.app.ulitity; import static com.iamberry.app.config.ImberryConfig.SMS_PASSWORD; import static com.iamberry.app.config.ImberryConfig.SMS_TEXT; import static com.iamberry.app.config.ImberryConfig.SMS_URL; import static com.iamberry.app.config.ImberryConfig.SMS_USERNAME; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.text.MessageFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Random; import javax.servlet.http.HttpServletRequest; import org.apache.http.HttpEntity; import org.apache.http.NameValuePair; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.ContentType; import org.apache.http.entity.mime.MultipartEntityBuilder; import org.apache.http.entity.mime.content.StringBody; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.message.BasicNameValuePair; import org.apache.http.util.EntityUtils; import org.json.JSONObject; import com.iamberry.app.config.Constants; import com.iamberry.app.core.dto.RecordDTO; import com.iamberry.app.tool.dto.AddressDTO; import com.iamberry.app.tool.util.HttpUtility; import com.iamberry.app.tool.util.JsonParseUtil; import com.iamberry.app.tool.util.Result; import com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.io.xml.StaxDriver; public class Utility { public static String DATA_STORE = ""; private static final String AB = "123456789abcdefghijklmnpqrstuvwxyz"; private static Random rnd = new Random(); public static String getDateByDay() { Calendar cal = Calendar.getInstance(); StringBuffer buffer = new StringBuffer(); buffer.append(cal.get(Calendar.YEAR)); buffer.append(cal.get(Calendar.MONTH) + 1); buffer.append(cal.get(Calendar.DAY_OF_MONTH)); return buffer.toString(); } public static boolean contains(String[] array, String item) { try { for (int i = 0; i < array.length; i++) { if (array[i].equals(item)) { return true; } } } catch (Exception ex) { } return false; } public static String normalizePath(String path) { return path.replace("\\\\", "\\").replace("\\", "/").replace("//", "/").replace("..", "."); } public static String getRandomString(int len) { StringBuilder sb = new StringBuilder(len); for (int i = 0; i < len; i++) sb.append(AB.charAt(rnd.nextInt(AB.length()))); return sb.toString(); } public static int CalculateAge(Long date) { Date birthDate = new Date(0); if (date != null) birthDate = new Date(date); SimpleDateFormat format = new SimpleDateFormat("yyyy"); int birthYear = Integer.parseInt(format.format(birthDate)); int currentYear = Integer.parseInt(format.format(new Date(System.currentTimeMillis()))); int age = currentYear - birthYear; return age; } public static List convertMap(List> list, String dateType) { List maps = new ArrayList(); try { SimpleDateFormat sdf = null; for (Map map : list) { switch (dateType) { case "days": sdf = new SimpleDateFormat("yyyyMMddHH"); break; case "weeks": sdf = new SimpleDateFormat("yyyyMMdd"); break; case "years": sdf = new SimpleDateFormat("yyyyMM"); break; } Date key = sdf.parse(map.get(dateType).toString()); Double value = Double.parseDouble(map.get("volume").toString()); maps.add(new RecordDTO(key.getTime(), value)); } } catch (Exception e) { } return maps; } public static Map> synAppMachineRecord(Map> oldMap) { Map> synMap = oldMap; int appSize = synMap.get("app").size(); int machineSize = synMap.get("machine").size(); int signer = 0; long appDate = 0l, machineDate = 0l; RecordDTO appRecord, machineRecord; for (int i = 0; i < appSize && i < machineSize; i++) { appRecord = synMap.get("app").get(i); machineRecord = synMap.get("machine").get(signer); appDate = appRecord.getRecordDate(); machineDate = machineRecord.getRecordDate(); if (appDate == machineDate) { signer++; } else if (appDate < machineDate) { synMap.get("machine").add(i, new RecordDTO(appDate, 0)); machineSize++; signer++; } else { synMap.get("app").add(signer, new RecordDTO(machineDate, 0)); appSize++; signer++; } } while (signer < machineSize) { synMap.get("app").add(new RecordDTO(synMap.get("machine").get(signer).getRecordDate(), 0)); signer++; } while (signer < appSize) { synMap.get("machine").add(new RecordDTO(synMap.get("app").get(signer).getRecordDate(), 0)); signer++; } return synMap; } public static Map> fillAppMachineRecordWithZero(Map> synedMap, String dataType, String chosenDate) { Map> fillMap = synedMap; Calendar calendar = Calendar.getInstance(); List existTimePoint = new ArrayList(); long timePoint = 0l; switch (dataType) { case "days": if (fillMap.get("app").isEmpty()) { calendar.setTime(Utility.formatStringToDate("yyyy-MM-dd HH:mm:ss", chosenDate)); } fillMap.get("app").forEach(record -> { calendar.setTime(new Date(record.getRecordDate())); existTimePoint.add(calendar.get(Calendar.HOUR_OF_DAY)); }); for (int i = 0; i < 24; i++) { if (!existTimePoint.remove(new Integer(i))) { calendar.set(Calendar.HOUR_OF_DAY, i); timePoint = calendar.getTimeInMillis(); fillMap.get("app").add(i, new RecordDTO(timePoint, 0)); fillMap.get("machine").add(i, new RecordDTO(timePoint, 0)); } } break; case "weeks": if (fillMap.get("app").isEmpty()) { calendar.setTime(Utility.formatStringToDate("yyyy-MM-dd HH:mm:ss", chosenDate)); } fillMap.get("app").forEach(record -> { calendar.setTime(new Date(record.getRecordDate())); existTimePoint.add(calendar.get(Calendar.DAY_OF_WEEK)); }); if (existTimePoint.contains(new Integer(1))) { calendar.add(Calendar.DATE, -7); } for (int i = 2; i <= 7; i++) { if (!existTimePoint.remove(new Integer(i))) { calendar.set(Calendar.DAY_OF_WEEK, i); timePoint = calendar.getTimeInMillis(); fillMap.get("app").add(i - 2, new RecordDTO(timePoint, 0)); fillMap.get("machine").add(i - 2, new RecordDTO(timePoint, 0)); } } if (!existTimePoint.contains(new Integer(1))) { calendar.add(Calendar.DATE, 7); calendar.set(Calendar.DAY_OF_WEEK, 1); timePoint = calendar.getTimeInMillis(); fillMap.get("app").add(new RecordDTO(timePoint, 0)); fillMap.get("machine").add(new RecordDTO(timePoint, 0)); } break; case "years": if (fillMap.get("app").isEmpty()) { calendar.setTime(Utility.formatStringToDate("yyyy-MM-dd HH:mm:ss", chosenDate)); } fillMap.get("app").forEach(record -> { calendar.setTime(new Date(record.getRecordDate())); existTimePoint.add(calendar.get(Calendar.MONTH)); }); for (int i = 0; i <= 11; i++) { if (!existTimePoint.remove(new Integer(i))) { calendar.set(Calendar.MONTH, i); timePoint = calendar.getTimeInMillis(); fillMap.get("app").add(i, new RecordDTO(timePoint, 0)); fillMap.get("machine").add(i, new RecordDTO(timePoint, 0)); } } break; } return fillMap; } public static String getRandomCode(int len) { StringBuilder sb = new StringBuilder(len); for (int i = 0; i < len; i++) sb.append("0123456789".charAt(rnd.nextInt("0123456789".length()))); return sb.toString(); } public static String getIp(HttpServletRequest request) { String ip = request.getHeader("x-forwarded-for"); if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("Proxy-Client-IP"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("WL-Proxy-Client-IP"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getRemoteAddr(); } return ip; } public static String CDN_WRITE_BASE_64_URL = "http://cms.iamberry.com/open-cdn/ssl/data/write/base64"; public static String uploadBase64File(String base64Data, String path) { try { if (base64Data != null) { StringBody pic = new StringBody(base64Data, ContentType.DEFAULT_TEXT); StringBody type = new StringBody("jpg", ContentType.TEXT_PLAIN); HttpEntity entity = MultipartEntityBuilder.create().addPart("type", type).addPart("base64data", pic) .build(); String result = HttpUtility.httpsPost(CDN_WRITE_BASE_64_URL, entity); JSONObject json = new JSONObject(result); int requestSatus = json.getJSONObject("header").getInt("status"); if (1000 == requestSatus) { path = json.getJSONObject("data").get("url").toString(); } return path; } } catch (Exception e) { return null; } return ""; } public static String readFile(InputStream in) { BufferedReader reader = null; String result = ""; try { InputStreamReader inputStreamReader = new InputStreamReader(in, "UTF-8"); reader = new BufferedReader(inputStreamReader); String tempString = null; while ((tempString = reader.readLine()) != null) { result += tempString; } reader.close(); } catch (IOException e) { e.printStackTrace(); } finally { if (reader != null) { try { reader.close(); } catch (IOException e) { e.printStackTrace(); } } } return result; } public static String sendCodeAsSMS(String phoneNum, Map status) throws Exception { String code = getRandomCode(4); CloseableHttpClient client = HttpClients.createDefault(); Map params = new HashMap(); CloseableHttpResponse response = null; params.put("username", SMS_USERNAME); params.put("password", SMS_PASSWORD); params.put("mobile", phoneNum); params.put("content", MessageFormat.format(SMS_TEXT, code)); HttpPost method = new HttpPost(SMS_URL); if (params != null) { List paramList = new ArrayList(); for (Map.Entry param : params.entrySet()) { NameValuePair pair = new BasicNameValuePair(param.getKey(), param.getValue()); paramList.add(pair); } method.setEntity(new UrlEncodedFormEntity(paramList, "UTF-8")); } response = client.execute(method); HttpEntity entity = response.getEntity(); if (entity != null) { String result = EntityUtils.toString(entity); XStream xs = new XStream(new StaxDriver()); xs.alias("result", Result.class); Result object = (Result)xs.fromXML(result); response.close(); status.put(Constants.SMS_RETURNCODE, object.getResultcode()); if (0 == object.getResultcode()) { return code; } } return null; } public static AddressDTO getDefaultAddress(String jsonList) { List addressDTOs = JsonParseUtil.parseAddressList(jsonList); for (AddressDTO addressDTO : addressDTOs) { if (addressDTO.getDefaultAddress() == 1) { return addressDTO; } } return null; } public static String getOrderSn(Long id) { if (id == null) throw new NullPointerException("id can not be null"); SimpleDateFormat format = new SimpleDateFormat("yyMMdd"); String date = format.format(new Date()); String sn = String.format("%0" + 5 + "d", id); return "LTR" + date + sn; } public static String formatDateToString(String format, Date date) { SimpleDateFormat sdf = new SimpleDateFormat(format); return sdf.format(date); } public static Date formatStringToDate(String format, String dateStr) { SimpleDateFormat sdf = new SimpleDateFormat(format); Date date = null; try { date = sdf.parse(dateStr); } catch (ParseException e) { e.printStackTrace(); date = new Date(); } return date; } }