From 954480166aad6d24c9e9889906a0edf762f0da2a Mon Sep 17 00:00:00 2001
From: czt <czt18638530771@163.com>
Date: 星期一, 10 二月 2025 16:32:56 +0800
Subject: [PATCH] 优化库存同步

---
 src/main/java/com/fzzy/web/TestController.java |  192 +++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 188 insertions(+), 4 deletions(-)

diff --git a/src/main/java/com/fzzy/web/TestController.java b/src/main/java/com/fzzy/web/TestController.java
index 9d3d200..4c128c0 100644
--- a/src/main/java/com/fzzy/web/TestController.java
+++ b/src/main/java/com/fzzy/web/TestController.java
@@ -1,4 +1,5 @@
 package com.fzzy.web;
+
 import com.bstek.dorado.util.DateUtils;
 import com.fzzy.api.data.ApiParam;
 import com.fzzy.async.fzzy30.Fzzy30SyncService12;
@@ -8,6 +9,21 @@
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.RequestParam;
+import ws.schild.jave.Encoder;
+import ws.schild.jave.EncoderException;
+import ws.schild.jave.MultimediaObject;
+import ws.schild.jave.encode.AudioAttributes;
+import ws.schild.jave.encode.EncodingAttributes;
+import ws.schild.jave.encode.VideoAttributes;
+import ws.schild.jave.info.AudioInfo;
+import ws.schild.jave.info.VideoSize;
+
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.math.BigDecimal;
 
 /**
  * @author vince.xu
@@ -22,23 +38,191 @@
 public class TestController {
     @Autowired
     private Fzzy30SyncService12 fzzySyncService12;
+
     /**
      *
      */
     @RequestMapping(value = "test", method = RequestMethod.GET)
-    public String  test(@RequestParam(name = "kqdm")String kqdm, @RequestParam(name = "deptId")String deptId, @RequestParam(name = "start")String start,@RequestParam(name = "end") String end) {
+    public String test(@RequestParam(name = "kqdm") String kqdm, @RequestParam(name = "deptId") String deptId, @RequestParam(name = "start") String start, @RequestParam(name = "end") String end) {
         try {
             ApiParam apiParam = new ApiParam();
             apiParam.setKqdm(kqdm);
             apiParam.setDeptId(deptId);
-            apiParam.setStart(DateUtils.parse("yyyy-MM-dd HH:mm:ss",start));
-            apiParam.setEnd(DateUtils.parse("yyyy-MM-dd HH:mm:ss",end));
+            apiParam.setStart(DateUtils.parse("yyyy-MM-dd HH:mm:ss", start));
+            apiParam.setEnd(DateUtils.parse("yyyy-MM-dd HH:mm:ss", end));
             fzzySyncService12.syncData(apiParam);
 
         } catch (Exception e) {
-            log.error(e.getMessage(),e);
+            log.error(e.getMessage(), e);
             e.printStackTrace();
         }
         return "";
     }
+
+
+    public static void main(String[] args) throws EncoderException {
+        // 鍘嬬缉鍓嶆枃浠惰矾寰�
+        File source = new File("D:\\IGDS\\FILE\\COMMON\\202412\\20241218100601.mp4");
+        // 鍘嬬缉鍚庣殑鏂囦欢璺緞
+        File target = new File("D:\\IGDS\\FILE\\COMMON\\202412\\202412181006.mp4");
+        compre(source, target, 1);
+
+    }
+
+    /**
+     * 瑙嗛鍘嬬缉
+     *
+     * @param source 婧愭枃浠�
+     * @param target 鐩爣鏂囦欢
+     * @param rate   鍘嬬缉姣�
+     */
+    public static void compre(File source, File target, Integer rate) throws EncoderException {
+        try {
+            System.out.println("---------------寮�濮嬪帇缂�---------------");
+            long start = System.currentTimeMillis();
+
+            // 闊抽缂栫爜灞炴�ч厤缃�
+            AudioAttributes audio = new AudioAttributes();
+            audio.setCodec("libmp3lame");
+            // 璁剧疆闊抽姣旂壒鐜�,鍗曚綅:b (姣旂壒鐜囪秺楂橈紝娓呮櫚搴�/闊宠川瓒婂ソ锛屽綋鐒舵枃浠朵篃灏辫秺澶� 56000 = 56kb)
+            // audio.setBitRate(new Integer(56_000));
+            audio.setBitRate(new Integer(10));
+            // 璁剧疆閲嶆柊缂栫爜鐨勯煶棰戞祦涓娇鐢ㄧ殑澹伴亾鏁帮紙1 =鍗曞0閬擄紝2 = 鍙屽0閬擄紙绔嬩綋澹帮級锛�
+            audio.setChannels(1);
+            // 閲囨牱鐜囪秺楂樺0闊崇殑杩樺師搴﹁秺濂斤紝鏂囦欢瓒婂ぇ
+            // audio.setSamplingRate(new Integer(44100));
+            audio.setSamplingRate(new Integer(22050));
+            // 瑙嗛缂栫爜灞炴�ч厤缃�
+            VideoAttributes video = new VideoAttributes();
+            // 璁剧疆缂栫爜
+            video.setCodec("mpeg4");
+            //璁剧疆闊抽姣旂壒鐜�,鍗曚綅:b (姣旂壒鐜囪秺楂橈紝娓呮櫚搴�/闊宠川瓒婂ソ锛屽綋鐒舵枃浠朵篃灏辫秺澶� 5600000 = 5600kb)
+            // video.setBitRate(new Integer(5_600_000 / rate));
+            video.setBitRate(new Integer(10 / rate));
+
+            // 璁剧疆瑙嗛甯х巼锛堝抚鐜囪秺浣庯紝瑙嗛浼氬嚭鐜版柇灞傦紝瓒婇珮璁╀汉鎰熻瓒婅繛缁級,杩欓噷 闄�1000鏄负浜嗗崟浣嶈浆鎹�
+            video.setFrameRate(new Integer(15));
+
+
+            // 缂栫爜璁剧疆
+            EncodingAttributes attr = new EncodingAttributes();
+            attr.setOutputFormat("mp4");
+            attr.setAudioAttributes(audio);
+            attr.setVideoAttributes(video);
+
+            // 璁剧疆鍊肩紪鐮�
+            Encoder ec = new Encoder();
+            ec.encode(new MultimediaObject(source), target, attr);
+
+
+            System.out.println("---------------缁撴潫鍘嬬缉---------------");
+            long end = System.currentTimeMillis();
+            System.out.println("鍘嬬缉鍓嶅ぇ灏忥細" + source.length() + " 鍘嬬缉鍚庡ぇ灏忥細" + target.length());
+            System.out.println("鍘嬬缉鑰楁椂锛�" + (end - start));
+
+        } catch (EncoderException e) {
+            e.printStackTrace();
+        } catch (IllegalArgumentException e) {
+            e.printStackTrace();
+        }
+
+    }
+
+    /**
+     * 浼犺棰慒ile瀵硅薄锛堣繖鏄竴涓叿浣撶殑鏂囦欢锛夛紝杩斿洖鍘嬬缉鍚嶧ile瀵硅薄淇℃伅
+     *
+     * @param source
+     */
+    public static File compressionVideo(File source, String picName) {
+        if (source == null) {
+            return null;
+        }
+        String newPath = source.getAbsolutePath().substring(0, source.getAbsolutePath().lastIndexOf(File.separator)).concat(File.separator).concat(picName);
+        File target = new File(newPath);
+        try {
+            MultimediaObject object = new MultimediaObject(source);
+            AudioInfo audioInfo = object.getInfo().getAudio();
+            // 鏍规嵁瑙嗛澶у皬鏉ュ垽鏂槸鍚﹂渶瑕佽繘琛屽帇缂�,
+            int maxSize = 5;
+            double mb = Math.ceil(source.length() / 1048576);
+            int second = (int) object.getInfo().getDuration() / 1000;
+            BigDecimal bd = new BigDecimal(String.format("%.4f", mb / second));
+            System.out.println("寮�濮嬪帇缂╄棰戜簡--> 瑙嗛姣忕骞冲潎 " + bd + " MB ");
+            // 瑙嗛 > 5MB, 鎴栬�呮瘡绉� > 0.5 MB 鎵嶅仛鍘嬬缉锛� 涓嶉渶瑕佺殑璇濆彲浠ユ妸鍒ゆ柇鍘绘帀
+            boolean temp = mb > maxSize || bd.compareTo(new BigDecimal(0.5)) > 0;
+//            if(temp){
+            long time = System.currentTimeMillis();
+            //TODO 瑙嗛灞炴�ц缃�
+            int maxBitRate = 128000;
+            int maxSamplingRate = 44100;
+            int bitRate = 800000;
+            int maxFrameRate = 20;
+            int maxWidth = 1280;
+
+            AudioAttributes audio = new AudioAttributes();
+            // 璁剧疆閫氱敤缂栫爜鏍煎紡10                   audio.setCodec("aac");
+            // 璁剧疆鏈�澶у�硷細姣旂壒鐜囪秺楂橈紝娓呮櫚搴�/闊宠川瓒婂ソ
+            // 璁剧疆闊抽姣旂壒鐜�,鍗曚綅:b (姣旂壒鐜囪秺楂橈紝娓呮櫚搴�/闊宠川瓒婂ソ锛屽綋鐒舵枃浠朵篃灏辫秺澶� 128000 = 182kb)
+            if (audioInfo.getBitRate() > maxBitRate) {
+                audio.setBitRate(new Integer(maxBitRate));
+            }
+
+            // 璁剧疆閲嶆柊缂栫爜鐨勯煶棰戞祦涓娇鐢ㄧ殑澹伴亾鏁帮紙1 =鍗曞0閬擄紝2 = 鍙屽0閬擄紙绔嬩綋澹帮級锛夈�傚鏋滄湭璁剧疆浠讳綍澹伴亾鍊硷紝鍒欑紪鐮佸櫒灏嗛�夋嫨榛樿鍊� 0銆�
+            audio.setChannels(audioInfo.getChannels());
+            // 閲囨牱鐜囪秺楂樺0闊崇殑杩樺師搴﹁秺濂斤紝鏂囦欢瓒婂ぇ
+            // 璁剧疆闊抽閲囨牱鐜囷紝鍗曚綅锛氳但鍏� hz
+            // 璁剧疆缂栫爜鏃跺�欑殑闊抽噺鍊硷紝鏈缃负0,濡傛灉256锛屽垯闊抽噺鍊间笉浼氭敼鍙�
+            // audio.setVolume(256);
+            if (audioInfo.getSamplingRate() > maxSamplingRate) {
+                audio.setSamplingRate(maxSamplingRate);
+            }
+
+            //TODO 瑙嗛缂栫爜灞炴�ч厤缃�
+            ws.schild.jave.info.VideoInfo videoInfo = object.getInfo().getVideo();
+            VideoAttributes video = new VideoAttributes();
+            video.setCodec("h264");
+            //璁剧疆闊抽姣旂壒鐜�,鍗曚綅:b (姣旂壒鐜囪秺楂橈紝娓呮櫚搴�/闊宠川瓒婂ソ锛屽綋鐒舵枃浠朵篃灏辫秺澶� 800000 = 800kb)
+            if (videoInfo.getBitRate() > bitRate) {
+                video.setBitRate(bitRate);
+            }
+
+            // 瑙嗛甯х巼锛�15 f / s  甯х巼瓒婁綆锛屾晥鏋滆秺宸�
+            // 璁剧疆瑙嗛甯х巼锛堝抚鐜囪秺浣庯紝瑙嗛浼氬嚭鐜版柇灞傦紝瓒婇珮璁╀汉鎰熻瓒婅繛缁級锛岃棰戝抚鐜囷紙Frame rate锛夋槸鐢ㄤ簬娴嬮噺鏄剧ず甯ф暟鐨勯噺搴︺�傛墍璋撶殑娴嬮噺鍗曚綅涓烘瘡绉掓樉绀哄抚鏁�(Frames per Second锛岀畝锛欶PS锛夋垨鈥滆但鍏光�濓紙Hz锛夈��
+            if (videoInfo.getFrameRate() > maxFrameRate) {
+                video.setFrameRate(maxFrameRate);
+            }
+
+            // 闄愬埗瑙嗛瀹介珮
+            int width = videoInfo.getSize().getWidth();
+            int height = videoInfo.getSize().getHeight();
+            if (width > maxWidth) {
+                float rat = (float) width / maxWidth;
+                video.setSize(new VideoSize(maxWidth, (int) (height / rat)));
+            }
+
+            EncodingAttributes attr = new EncodingAttributes();
+//                attr.setFormat("mp4");
+            attr.setAudioAttributes(audio);
+            attr.setVideoAttributes(video);
+
+            // 閫熷害鏈�蹇殑鍘嬬缉鏂瑰紡锛� 鍘嬬缉閫熷害 浠庡揩鍒版參锛� ultrafast, superfast, veryfast, faster, fast, medium,  slow, slower, veryslow and placebo.
+//                attr.setPreset(PresetUtil.VERYFAST);
+//                attr.setCrf(27);
+//                // 璁剧疆绾跨▼鏁�
+//                attr.setEncodingThreads(Runtime.getRuntime().availableProcessors()/2);
+
+            Encoder encoder = new Encoder();
+            encoder.encode(new MultimediaObject(source), target, attr);
+            System.out.println("鍘嬬缉鎬昏�楁椂锛�" + (System.currentTimeMillis() - time) / 1000);
+            return target;
+//            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            if (target.length() > 0) {
+                source.delete();
+            }
+        }
+        return source;
+    }
 }

--
Gitblit v1.9.3