Преглед изворни кода

Merge branch 'master' of http://47.100.37.243:10191/wutt/manHourHousekeeper

# Conflicts:
#	fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ReportController.java
QuYueTing пре 1 недеља
родитељ
комит
ddaccc36f2

+ 91 - 0
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/controller/WxMiniProgramController.java

@@ -0,0 +1,91 @@
+package com.management.platform.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.management.platform.entity.User;
+import com.management.platform.entity.WechatAccount;
+import com.management.platform.service.UserService;
+import com.management.platform.service.WechatAccountService;
+import com.management.platform.service.impl.QRCodeService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.client.RestTemplate;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+
+@RestController
+@Slf4j
+@RequestMapping("/wxMini")
+public class WxMiniProgramController {
+    private static final String QR_CODE_URL = "https://api.weixin.qq.com/wxa/getwxacodeunlimit";
+
+    @Resource
+    private WechatAccountService wechatAccountService;
+
+    @Resource
+    private UserService userService;
+
+    @Resource
+    private RestTemplate restTemplate;
+
+    @Autowired
+    private QRCodeService qrCodeService;
+
+
+    @RequestMapping("generateQRCode")
+    public ResponseEntity<org.springframework.core.io.Resource> generateQRCode(HttpServletRequest request) {
+        String token = request.getHeader("Token");
+        User user = userService.getById(token);
+
+        WechatAccount wechatAccount = wechatAccountService.getOne(new QueryWrapper<WechatAccount>().eq("company_id", user.getCompanyId()));
+        if (wechatAccount==null){
+            throw new RuntimeException("该公司未配置相关参数");
+        }
+        //token
+        String accessToken = wechatAccountService.getAccessToken(user.getCompanyId(), wechatAccount.getAppId());
+        return qrCodeService.generateQRCodeResponse(accessToken);
+    }
+
+
+    /**
+     * 批量生成小程序码(返回ZIP包)
+     */
+//    @RequestMapping("/batch-generate")
+//    public ResponseEntity<org.springframework.core.io.Resource> batchGenerateQRCode(HttpServletRequest request) {
+//        try (ByteArrayOutputStream baos = new ByteArrayOutputStream();
+//             ZipOutputStream zos = new ZipOutputStream(baos)) {
+//
+//            for (QRCodeRequest request : requests) {
+//                byte[] qrCode = qrCodeService.generateQRCode(request);
+//
+//                String fileName = "qrcode_" + request.getScene().hashCode() + ".png";
+//                zos.putNextEntry(new ZipEntry(fileName));
+//                zos.write(qrCode);
+//                zos.closeEntry();
+//            }
+//
+//            zos.finish();
+//
+//            ByteArrayResource resource = new ByteArrayResource(baos.toByteArray()) {
+//                @Override
+//                public String getFilename() {
+//                    return "qrcodes.zip";
+//                }
+//            };
+//
+//            return ResponseEntity.ok()
+//                    .contentType(MediaType.parseMediaType("application/zip"))
+//                    .header(HttpHeaders.CONTENT_DISPOSITION,
+//                            "attachment; filename=\"" + resource.getFilename() + "\"")
+//                    .body(resource);
+//
+//        } catch (IOException e) {
+//            throw new RuntimeException("生成ZIP文件失败", e);
+//        } catch (IOException e) {
+//            throw new RuntimeException(e);
+//        }
+//    }
+}

+ 79 - 0
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/impl/QRCodeService.java

@@ -0,0 +1,79 @@
+package com.management.platform.service.impl;
+
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.io.ByteArrayResource;
+import org.springframework.core.io.Resource;
+import org.springframework.http.*;
+import org.springframework.stereotype.Service;
+import org.springframework.web.client.RestTemplate;
+
+import java.nio.charset.StandardCharsets;
+import java.util.HashMap;
+import java.util.Map;
+
+@Service
+@Slf4j
+public class QRCodeService {
+
+    private static final String QR_CODE_URL = "https://api.weixin.qq.com/wxa/getwxacodeunlimit";
+
+
+    @Autowired
+    private RestTemplate restTemplate;
+
+
+    public byte[] generateQRCode(String accessToken) {
+
+        HttpHeaders headers = new HttpHeaders();
+        headers.setContentType(MediaType.APPLICATION_JSON);
+
+        Map<String, Object> body = new HashMap<>();
+        body.put("scene", "8453269023523102720");
+        body.put("page", "pages/index/index");
+        body.put("width", 430);
+        body.put("is_hyaline", true);
+
+        HttpEntity<Map<String, Object>> entity = new HttpEntity<>(body,headers);
+
+        ResponseEntity<byte[]> response = restTemplate.exchange(
+                QR_CODE_URL + "?access_token=" + accessToken,
+                HttpMethod.POST,
+                entity,
+                byte[].class);
+        // 验证响应
+        if (response.getStatusCode() != HttpStatus.OK) {
+            throw new RuntimeException("请求失败,状态码: " + response.getStatusCode());
+        }
+        log.info("QR code generation result: {}", response.getBody());
+        byte[] result = response.getBody();
+
+        // 简单验证是否是PNG文件 (PNG文件头)
+        if (result == null || result.length < 8 ||
+                result[0] != (byte) 0x89 || result[1] != 'P' ||
+                result[2] != 'N' || result[3] != 'G') {
+            String error = result != null ? new String(result, StandardCharsets.UTF_8) : "null";
+            throw new RuntimeException("无效的图片数据,可能是错误响应: " + error);
+        }
+
+        return result;
+    }
+
+    public ResponseEntity<Resource> generateQRCodeResponse(String accessToken) {
+        byte[] qrCode = generateQRCode(accessToken);
+
+        ByteArrayResource resource = new ByteArrayResource(qrCode) {
+            @Override
+            public String getFilename() {
+                return "qrcode_" + System.currentTimeMillis() + ".png";
+            }
+        };
+
+        return ResponseEntity.ok()
+                .contentType(MediaType.IMAGE_PNG)
+                .header(HttpHeaders.CONTENT_DISPOSITION,
+                        "inline; filename=\"" + resource.getFilename() + "\"")
+                .body(resource);
+    }
+}
+

+ 2 - 2
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/task/TimingTask.java

@@ -588,7 +588,7 @@ public class TimingTask {
             return;
         }
         DateTimeFormatter df=DateTimeFormatter.ofPattern("yyyy-MM-dd");
-        LocalDate start=LocalDate.now().minusDays(10);
+        LocalDate start=LocalDate.now().minusDays(30);
         LocalDate end=LocalDate.now();
         JSONArray jsonArrayFilter = new JSONArray();
         JSONObject filter1 = new JSONObject();
@@ -902,7 +902,7 @@ public class TimingTask {
                 String approvalInfoDetailResp = wxCorpInfoService.getApprovalInfoDetail(7, codeNum);
                 JSONObject approvalInfoDetail = JSONObject.parseObject(approvalInfoDetailResp);
                 JSONObject info = approvalInfoDetail.getJSONObject("info");
-                JSONObject applyer = info.getJSONObject("applyer");
+                JSONObject applyer = info.getJSONObject("applyer");//申请人
                 String userid = applyer.getString("userid");
                 //过滤审核状态只需要审核通过的数据
                 int sp_status = info.getIntValue("sp_status");