From 3ff2a2c1789d692a64a43e9f7e70ca5b3578b0a8 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期四, 21 五月 2026 15:01:22 +0800
Subject: [PATCH] feat(home): 添加生产看板功能并优化订单查询性能

---
 src/main/java/com/ruoyi/project/common/CaptchaController.java |  162 +++++++++++++++++++++++++++++++++--------------------
 1 files changed, 100 insertions(+), 62 deletions(-)

diff --git a/src/main/java/com/ruoyi/project/common/CaptchaController.java b/src/main/java/com/ruoyi/project/common/CaptchaController.java
index 9a3af20..efa004f 100644
--- a/src/main/java/com/ruoyi/project/common/CaptchaController.java
+++ b/src/main/java/com/ruoyi/project/common/CaptchaController.java
@@ -1,62 +1,100 @@
-package com.ruoyi.project.common;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.util.concurrent.TimeUnit;
-import javax.servlet.http.HttpServletResponse;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RestController;
-import com.ruoyi.common.constant.Constants;
-import com.ruoyi.common.utils.IdUtils;
-import com.ruoyi.common.utils.VerifyCodeUtils;
-import com.ruoyi.common.utils.sign.Base64;
-import com.ruoyi.framework.redis.RedisCache;
-import com.ruoyi.framework.web.domain.AjaxResult;
-
-/**
- * 楠岃瘉鐮佹搷浣滃鐞�
- * 
- * @author ruoyi
- */
-@RestController
-public class CaptchaController
-{
-    @Autowired
-    private RedisCache redisCache;
-
-    /**
-     * 鐢熸垚楠岃瘉鐮�
-     */
-    @GetMapping("/captchaImage")
-    public AjaxResult getCode(HttpServletResponse response) throws IOException
-    {
-        // 鐢熸垚闅忔満瀛椾覆
-        String verifyCode = VerifyCodeUtils.generateVerifyCode(4);
-        // 鍞竴鏍囪瘑
-        String uuid = IdUtils.simpleUUID();
-        String verifyKey = Constants.CAPTCHA_CODE_KEY + uuid;
-
-        redisCache.setCacheObject(verifyKey, verifyCode, Constants.CAPTCHA_EXPIRATION, TimeUnit.MINUTES);
-        // 鐢熸垚鍥剧墖
-        int w = 111, h = 36;
-        ByteArrayOutputStream stream = new ByteArrayOutputStream();
-        VerifyCodeUtils.outputImage(w, h, stream, verifyCode);
-        try
-        {
-            AjaxResult ajax = AjaxResult.success();
-            ajax.put("uuid", uuid);
-            ajax.put("img", Base64.encode(stream.toByteArray()));
-            return ajax;
-        }
-        catch (Exception e)
-        {
-            e.printStackTrace();
-            return AjaxResult.error(e.getMessage());
-        }
-        finally
-        {
-            stream.close();
-        }
-    }
-}
+package com.ruoyi.project.common;
+
+import com.google.code.kaptcha.Producer;
+import com.ruoyi.common.constant.CacheConstants;
+import com.ruoyi.common.constant.Constants;
+import com.ruoyi.common.utils.sign.Base64;
+import com.ruoyi.common.utils.uuid.IdUtils;
+import com.ruoyi.framework.redis.RedisCache;
+import com.ruoyi.framework.web.domain.R;
+import com.ruoyi.project.system.service.ISysConfigService;
+import jakarta.annotation.Resource;
+import jakarta.servlet.http.HttpServletResponse;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.util.FastByteArrayOutputStream;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.imageio.ImageIO;
+import java.awt.image.BufferedImage;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * 楠岃瘉鐮佹搷浣滃鐞�
+ *
+ * @author ruoyi
+ */
+@RestController
+@RequiredArgsConstructor
+public class CaptchaController
+{
+    @Resource(name = "captchaProducer")
+    private Producer captchaProducer;
+
+    @Resource(name = "captchaProducerMath")
+    private Producer captchaProducerMath;
+
+    private final RedisCache redisCache;
+
+    // 楠岃瘉鐮佺被鍨�
+    @Value("${ruoyi.captchaType}")
+    private String captchaType;
+
+    private final ISysConfigService configService;
+
+    /**
+     * 鐢熸垚楠岃瘉鐮�
+     */
+    @GetMapping("/captchaImage")
+    public R<?> getCode(HttpServletResponse response) throws IOException
+    {
+        Map<String, Object> map = new HashMap<>();
+        boolean captchaEnabled = configService.selectCaptchaEnabled();
+        map.put("captchaEnabled", captchaEnabled);
+        if (!captchaEnabled)
+        {
+            return R.ok(map);
+        }
+
+        // 淇濆瓨楠岃瘉鐮佷俊鎭�
+        String uuid = IdUtils.simpleUUID();
+        String verifyKey = CacheConstants.CAPTCHA_CODE_KEY + uuid;
+
+        String capStr = null, code = null;
+        BufferedImage image = null;
+
+        // 鐢熸垚楠岃瘉鐮�
+        if ("math".equals(captchaType))
+        {
+            String capText = captchaProducerMath.createText();
+            capStr = capText.substring(0, capText.lastIndexOf("@"));
+            code = capText.substring(capText.lastIndexOf("@") + 1);
+            image = captchaProducerMath.createImage(capStr);
+        }
+        else if ("char".equals(captchaType))
+        {
+            capStr = code = captchaProducer.createText();
+            image = captchaProducer.createImage(capStr);
+        }
+
+        redisCache.setCacheObject(verifyKey, code, Constants.CAPTCHA_EXPIRATION, TimeUnit.MINUTES);
+        // 杞崲娴佷俊鎭啓鍑�
+        FastByteArrayOutputStream os = new FastByteArrayOutputStream();
+        try
+        {
+            ImageIO.write(image, "jpg", os);
+        }
+        catch (IOException e)
+        {
+            return R.fail(e.getMessage());
+        }
+
+        map.put("uuid", uuid);
+        map.put("img", Base64.encode(os.toByteArray()));
+        return R.ok(map);
+    }
+}
\ No newline at end of file

--
Gitblit v1.9.3