fanli/src/main/java/com/yeshi/fanli/controller/client/v2/PreviewInfoControllerV2.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
fanli/src/main/java/com/yeshi/fanli/service/impl/user/PreviewInfoServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
fanli/src/main/java/com/yeshi/fanli/service/inter/user/PreviewInfoService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
fanli/src/main/java/com/yeshi/fanli/util/ImageUtil.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
fanli/src/main/java/com/yeshi/fanli/util/TimeUtil.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
fanli/src/main/resource/image/alipay/android.png | 补丁 | 查看 | 原始文档 | blame | 历史 | |
fanli/src/main/resource/image/alipay/ios.png | 补丁 | 查看 | 原始文档 | blame | 历史 | |
pom.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
utils/src/main/java/org/yeshi/utils/DateUtil.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/PreviewInfoControllerV2.java
@@ -408,13 +408,8 @@ @RequestMapping(value = "saveMoneyArrival") public void saveMoneyArrival(String callback, AcceptData acceptData, Long uid, BigDecimal money, String dayTime, String orderNo, PrintWriter out) { if (uid == null) { JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("用户未登录")); return; } try { String link = previewInfoService.saveMoneyArrival(uid, money, dayTime, orderNo); String link = previewInfoService.saveMoneyArrival(uid, money, dayTime, orderNo, acceptData.getPlatform()); JSONObject object = new JSONObject(); object.put("link", link); JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(object)); @@ -422,7 +417,7 @@ JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(e.getMsg())); } catch (Exception e) { LogHelper.errorDetailInfo(e); JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("保存失败")); JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("预览失败")); } } fanli/src/main/java/com/yeshi/fanli/service/impl/user/PreviewInfoServiceImpl.java
@@ -1,15 +1,19 @@ package com.yeshi.fanli.service.impl.user; import java.io.InputStream; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.Date; import java.util.List; import java.util.UUID; import javax.annotation.Resource; import org.springframework.stereotype.Service; import org.yeshi.utils.entity.FileUploadResult; import org.yeshi.utils.tencentcloud.COSManager; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; @@ -23,6 +27,7 @@ import com.yeshi.fanli.service.inter.money.extract.BindingAccountService; import com.yeshi.fanli.service.inter.user.PreviewInfoService; import com.yeshi.fanli.service.inter.user.invite.ThreeSaleDetailService; import com.yeshi.fanli.util.ImageUtil; import com.yeshi.fanli.util.RedisManager; import com.yeshi.fanli.util.StringUtil; import com.yeshi.fanli.util.TimeUtil; @@ -46,7 +51,6 @@ @Override public void save(Long createUid, Long preUid, PreviewEnum type, String content) { String id = StringUtil.Md5(createUid + "#" + type.name()); @@ -59,16 +63,16 @@ info.setUpdateTime(new Date()); previewInfoDao.save(info); if (type == PreviewEnum.extractRecord) { if (type == PreviewEnum.extractRecord || type == PreviewEnum.moneyArrival) { return; } // redis缓存 if (StringUtil.isNullOrEmpty(content)) { removePreview(preUid, type); } else { adddPreview(preUid, type, content); } } // 缓存10分钟 @@ -242,22 +246,47 @@ @Override public String saveMoneyArrival(Long uid, BigDecimal money, String time,String orderNo) throws PreviewInfoException { public String saveMoneyArrival(Long uid, BigDecimal money, String time,String orderNo, String platform) throws PreviewInfoException,Exception { if (uid == null ) throw new PreviewInfoException(1, "请先登录"); if (money == null ) throw new PreviewInfoException(1, "请输入金额"); if(StringUtil.isNullOrEmpty(time)) if(StringUtil.isNullOrEmpty(orderNo)) throw new PreviewInfoException(1, "请输入订单号"); if(StringUtil.isNullOrEmpty(time)) throw new PreviewInfoException(1, "请输入创建时间"); Date parse = TimeUtil.parseDotCommon2(time); if (parse == null) Date date = TimeUtil.parseDotCommon2(time); if (date == null) throw new PreviewInfoException(1, "请输入正确的时间格式,如:2020.01.01 01:01"); // 转换格式 time = TimeUtil.formatYMDHHMM(date); String content = ""; // TODO // save(uid, PreviewEnum.moneyArrival, gson.toJson(infoVO)); return content; InputStream drawStream = null; if ("ios".equalsIgnoreCase(platform)) { drawStream = ImageUtil.drawAlipayIOS(money, orderNo, time); } else { drawStream = ImageUtil.drawAlipayAndroid(money, orderNo, time); } if (drawStream == null) throw new PreviewInfoException(1, "预览生成失败"); // 上传文件 String uuid = UUID.randomUUID().toString().replace("-", ""); String upPath = "/user/img/preview/" + uuid + "_" + System.currentTimeMillis() + ".png"; FileUploadResult result = COSManager.getInstance().uploadInputStream(drawStream, upPath); if (result == null) { throw new PreviewInfoException(1, "预览生成失败"); } // 保存信息 save(uid, uid, PreviewEnum.moneyArrival, result.getUrl()); return result.getUrl(); } } fanli/src/main/java/com/yeshi/fanli/service/inter/user/PreviewInfoService.java
@@ -59,7 +59,7 @@ * @param orderNo * @throws PreviewInfoException */ public String saveMoneyArrival(Long uid, BigDecimal money, String time, String orderNo) throws PreviewInfoException; public String saveMoneyArrival(Long uid, BigDecimal money, String time, String orderNo, String platform) throws PreviewInfoException, Exception; public void saveMoneyInfo(Long uid, MoneyStatisticVO vo) throws PreviewInfoException; @@ -77,4 +77,5 @@ * @throws PreviewInfoException */ public void previewExtractRecord(Long uid) throws PreviewInfoException; } fanli/src/main/java/com/yeshi/fanli/util/ImageUtil.java
@@ -2572,7 +2572,204 @@ } } return null; } /** * 安卓-支付宝画图 * @param money * @param orderNo * @param time * @param targetPath * @return * @throws IOException */ public static InputStream drawAlipayAndroid(BigDecimal money, String orderNo, String time) throws IOException { String bgpic = "image/alipay/android.png"; BufferedImage bgImage = ImageIO.read(ImageUtil.class.getClassLoader().getResourceAsStream(bgpic)); final BufferedImage targetImg = new BufferedImage(bgImage.getWidth(), bgImage.getHeight(), BufferedImage.TYPE_INT_RGB); HashMap<Key, Object> mapH = new HashMap<Key, Object>(); mapH.put(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);// 抗锯齿 (抗锯齿总开关) mapH.put(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_GASP);// 文字抗锯齿 // 画 背景图片 final Graphics2D g2d = targetImg.createGraphics(); g2d.setRenderingHints(mapH); g2d.drawImage(bgImage, 0, 0, bgImage.getWidth(), bgImage.getHeight(), null); g2d.setBackground(Color.BLACK); // 字体 String os = System.getProperty("os.name"); String fontRob0to = "/usr/share/fonts/ROBOTO-REGULAR.TTF"; String fontBahnschrift = "/usr/share/fonts/BAHNSCHRIFT.TTF"; if (os.toLowerCase().startsWith("win")) { fontRob0to = "D:/ROBOTO-REGULAR.TTF"; fontBahnschrift = "D:/BAHNSCHRIFT.TTF"; } // 字体大小 Font font40 = null; Font font42 = null; Font font86 = null; try { font40 = Font.createFont(Font.PLAIN, new File(fontRob0to)).deriveFont(40.00f); font42 = Font.createFont(Font.PLAIN, new File(fontBahnschrift)).deriveFont(42.00f); font86 = Font.createFont(Font.PLAIN, new File(fontRob0to)).deriveFont(86.68f); } catch (FontFormatException e) { e.printStackTrace(); } /* 时间信息 */ g2d.setFont(font42); g2d.setColor(new Color(247, 247, 247)); g2d.drawString(TimeUtil.formatHHMM_12H(new Date()), 134, 67); /* 资金信息 */ String moneyInfo = "+" + money.setScale(2); // 计算长度 FontMetrics fm = g2d.getFontMetrics(font86); int textLength = fm.stringWidth(moneyInfo); // 居中位置 int x_money = (bgImage.getWidth() - textLength) / 2 ; // 画金额 g2d.setFont(font86); g2d.setColor(new Color(51, 51, 51)); g2d.drawString(moneyInfo, x_money, 420); /* 创建时间信息 */ FontMetrics fm2 = g2d.getFontMetrics(font40); int l_time = fm2.stringWidth(time); int x_time = bgImage.getWidth() - l_time -41 ; g2d.setFont(font40); g2d.setColor(new Color(51, 51, 51)); g2d.drawString(time, x_time, 972); /* 创建时间信息 */ int l_order = fm2.stringWidth(orderNo); int x_order = bgImage.getWidth() - l_order -41 ; g2d.setFont(font40); g2d.setColor(new Color(51, 51, 51)); g2d.drawString(orderNo, x_order, 1072); g2d.dispose(); ByteArrayOutputStream aos = new ByteArrayOutputStream(); ImageIO.write(targetImg, "png", aos); return new ByteArrayInputStream(aos.toByteArray()); } /** * IOS 支付宝画图 * @param money * @param orderNo * @param time * @param targetPath * @return * @throws IOException */ public static InputStream drawAlipayIOS(BigDecimal money, String orderNo, String time) throws IOException { String bgpic = "image/alipay/ios.png"; BufferedImage bgImage = ImageIO.read(ImageUtil.class.getClassLoader().getResourceAsStream(bgpic)); final BufferedImage targetImg = new BufferedImage(bgImage.getWidth(), bgImage.getHeight(), BufferedImage.TYPE_INT_RGB); HashMap<Key, Object> mapH = new HashMap<Key, Object>(); mapH.put(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);// 抗锯齿 (抗锯齿总开关) mapH.put(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_GASP);// 文字抗锯齿 // 画 背景图片 final Graphics2D g2d = targetImg.createGraphics(); g2d.setRenderingHints(mapH); g2d.drawImage(bgImage, 0, 0, bgImage.getWidth(), bgImage.getHeight(), null); g2d.setBackground(Color.BLACK); // 字体 String os = System.getProperty("os.name"); String fontHeiTi = "/usr/share/fonts/AdobeHeiTiStd.otf"; String fontSquare = "/usr/share/fonts/SquareHeitiStd.TTF"; if (os.toLowerCase().startsWith("win")) { fontHeiTi = "D:/AdobeHeiTiStd.otf"; fontSquare = "D:/SquareHeitiStd.TTF"; } // 字体大小 Font font40 = null; Font font44 = null; Font font92 = null; try { font44 = Font.createFont(Font.PLAIN, new File(fontHeiTi)).deriveFont(44.18f); font40 = Font.createFont(Font.PLAIN, new File(fontSquare)).deriveFont(40.00f); font92 = Font.createFont(Font.PLAIN, new File(fontSquare)).deriveFont(92.03f); } catch (FontFormatException e) { e.printStackTrace(); } /* 时间信息 */ g2d.setFont(font44); g2d.setColor(new Color(16, 16, 16)); MyDrawString(TimeUtil.formatHHMM_12H(new Date()), 82, 82, font44, g2d); /* 资金信息 */ String moneyInfo = "+" + money.setScale(2); // 计算长度 FontMetrics fm = g2d.getFontMetrics(font92); int textLength = fm.stringWidth(moneyInfo); // 居中位置 int x_money = (bgImage.getWidth() - textLength) / 2; // 画金额 g2d.setFont(font92); g2d.setColor(new Color(51, 51, 51)); g2d.drawString(moneyInfo, x_money, 480); /* 创建时间信息 */ FontMetrics fm2 = g2d.getFontMetrics(font40); int l_time = fm2.stringWidth(time); int x_time = bgImage.getWidth() - l_time - 41; g2d.setFont(font40); g2d.setColor(new Color(51, 51, 51)); g2d.drawString(time, x_time, 1052); /* 创建时间信息 */ int l_order = fm2.stringWidth(orderNo); int x_order = bgImage.getWidth() - l_order - 41; g2d.setFont(font40); g2d.setColor(new Color(51, 51, 51)); g2d.drawString(orderNo, x_order, 1160); g2d.dispose(); ByteArrayOutputStream aos = new ByteArrayOutputStream(); ImageIO.write(targetImg, "png", aos); return new ByteArrayInputStream(aos.toByteArray()); } public static void MyDrawString(String str,int x,int y, Font font40, Graphics2D g2d){ int i = 0; int x_next = x; String tempStr= null; while(str.length()>0) { tempStr=str.substring(0, 1); str=str.substring(1, str.length()); g2d.drawString(tempStr, x_next, y); if (i == 1) { x_next += 3 + 22; } else if (i == 2) { x_next += 10; } else { x_next += 0 + 22; } i++; } } } fanli/src/main/java/com/yeshi/fanli/util/TimeUtil.java
@@ -181,6 +181,23 @@ return date; } public static String formatHHMM_12H(Date time) { SimpleDateFormat sdf = new SimpleDateFormat("hh:mm"); String date = sdf.format(time); return date; } public static String formatYMDHHMM(Date date) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm"); try { return sdf.format(date); } catch (Exception e) { e.printStackTrace(); } return null; } public static String formatDateAddT(Date date) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss"); try { fanli/src/main/resource/image/alipay/android.png
fanli/src/main/resource/image/alipay/ios.png
pom.xml
@@ -15,7 +15,10 @@ <org.hibernate.version>4.1.2</org.hibernate.version> <org.springframework-version>4.3.0.RELEASE</org.springframework-version> <mybatis.version>3.4.1</mybatis.version> <spring.mongodb.version>1.9.8.RELEASE</spring.mongodb.version> <!-- <spring.mongodb.version>1.9.8.RELEASE</spring.mongodb.version> --> <spring.mongodb.version>1.10.10.RELEASE</spring.mongodb.version> </properties> <profiles> <profile> utils/src/main/java/org/yeshi/utils/DateUtil.java
@@ -336,6 +336,13 @@ return ca.getTime(); } public static Date reduceDay(Date currdate, int num) { Calendar ca = Calendar.getInstance(); ca.setTime(currdate); ca.add(Calendar.DATE, -num); return ca.getTime(); } /** * 指定日期减去天数后的日期 *