yujian
2020-05-20 4c336b22a20b45a1e439a87f70747a96ad0e8e7b
资金到账画图
7个文件已修改
2个文件已添加
287 ■■■■■ 已修改文件
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/PreviewInfoControllerV2.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/user/PreviewInfoServiceImpl.java 49 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/inter/user/PreviewInfoService.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/ImageUtil.java 197 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/TimeUtil.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/resource/image/alipay/android.png 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/resource/image/alipay/ios.png 补丁 | 查看 | 原始文档 | blame | 历史
pom.xml 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
utils/src/main/java/org/yeshi/utils/DateUtil.java 7 ●●●●● 补丁 | 查看 | 原始文档 | 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();
    }
    /**
     * 指定日期减去天数后的日期
     *