ソースを参照

Merge branch 'master' of https://mc.cloudpure.cn/mjava/cont

wzy 4 ヶ月 前
コミット
9d809cf93c

+ 41 - 4
mjava-huagao/src/main/java/com/malk/huagao/controller/HuaGaoController.java

@@ -1,14 +1,19 @@
 package com.malk.huagao.controller;
 
 import com.malk.huagao.service.HuaGaoService;
+import com.malk.server.common.McException;
 import com.malk.server.common.McR;
+import com.malk.utils.UtilServlet;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
+import javax.servlet.http.HttpServletRequest;
+import java.util.Map;
+
+@Slf4j
 @RestController
-@RequestMapping("")
+@RequestMapping("/hg")
 public class HuaGaoController {
     @Autowired
     private HuaGaoService huaGaoService;
@@ -17,4 +22,36 @@ public class HuaGaoController {
     public McR test() {
         return McR.success();
     }
+
+    /**
+     * 创建投资人用户
+     */
+    @PostMapping("/user/sync")
+    McR syncUser() {
+
+        log.info("syncUser");
+        huaGaoService.syncDingTalk_exclusive();
+        return McR.success();
+    }
+
+    /**
+     * 重置密码流程
+     */
+    @PostMapping("/reset")
+    McR resetPwd(HttpServletRequest request) {
+
+        Map data = UtilServlet.getParamMap(request);
+        log.info("reset, {}", data);
+        McException.assertParamException_Null(data, "userId", "password");
+        huaGaoService.resetPwd(data);
+        return McR.success();
+    }
+    /**
+     * 获取工作时长详情
+     */
+    @PostMapping("details")
+    McR details(@RequestBody Map<String,Object> data) {
+        huaGaoService.getCheckWorkDateDetails(data);
+        return McR.success();
+    }
 }

+ 13 - 0
mjava-huagao/src/main/java/com/malk/huagao/service/HuaGaoService.java

@@ -1,4 +1,17 @@
 package com.malk.huagao.service;
 
+import java.util.Map;
+
 public interface HuaGaoService {
+    /**
+     * 同步钉钉企业账号
+     */
+    void syncDingTalk_exclusive();
+
+    /**
+     * 重置企业账号密码
+     */
+    void resetPwd(Map data);
+
+    void getCheckWorkDateDetails(Map data);
 }

+ 217 - 0
mjava-huagao/src/main/java/com/malk/huagao/service/impl/HuaGaoServiceImpl.java

@@ -1,8 +1,225 @@
 package com.malk.huagao.service.impl;
 
+import com.alibaba.fastjson.JSON;
 import com.malk.huagao.service.HuaGaoService;
+import com.malk.server.aliwork.YDConf;
+import com.malk.server.aliwork.YDParam;
+import com.malk.server.common.McException;
+import com.malk.server.dingtalk.DDR;
+import com.malk.service.aliwork.YDClient;
+import com.malk.service.aliwork.YDService;
+import com.malk.service.dingtalk.DDClient;
+import com.malk.service.dingtalk.DDClient_Attendance;
+import com.malk.service.dingtalk.DDClient_Contacts;
+import com.malk.service.fxiaoke.FXKClient;
+import com.malk.utils.UtilMap;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+@Slf4j
 @Service
 public class HuaGaoServiceImpl implements HuaGaoService {
+
+    @Autowired
+    private YDService ydService;
+
+    @Autowired
+    private YDClient ydClient;
+
+    @Value("${dingtalk.appKey}")
+    private String appKey;
+
+    @Value("${dingtalk.appSecret}")
+    private String appSecret;
+
+    @Autowired
+    private DDClient_Contacts ddClient_contacts;
+
+    @Autowired
+    private DDClient_Attendance ddClientAttendance;
+
+    @Autowired
+    private DDClient ddClient;
+    @Autowired
+    private FXKClient fxkClient;
+
+    @Autowired
+    private static final long DEPT_ID = 971482089L; // 合作加盟校区
+
+    /// 创建企业账号: loginI/userId 都为 SHR 工号
+private Map crcreateUser_dingTalk(String name, String randomAccount, String randomPassword) {
+
+    Map param = new HashMap();
+    param.put("access_token", ddClient.getAccessToken());
+    Map body = new HashMap();
+    body.put("exclusive_account", "true");
+    body.put("exclusive_account_type", "dingtalk");
+    body.put("login_id", randomAccount);
+    body.put("init_password", randomPassword);
+    body.put("name", name);
+    body.put("userid", randomAccount);
+    body.put("dept_id_list", DEPT_ID);
+    Object result = DDR.doPost("https://oapi.dingtalk.com/topapi/v2/user/create", (Map) null, param, body).getResult();
+    return (Map) result;
+}
+
+    /**
+     * 同步钉钉企业账号
+     */
+    @Override
+    public void syncDingTalk_exclusive() {
+
+        List<Map> dataList = ydService.queryFormData_all(YDParam.builder()
+                .formUuid("FORM-0086C4597047459BBB37C79E404745C9CK0C")
+                .build());
+        log.info("钉钉企业账号同步开始,共{}条数据", dataList.size());
+        dataList.forEach(data -> {
+            if ("".equals(UtilMap.getString(data, "textField_m1mw64v4"))) {
+                String message = "";
+                String randomAccount = generateRandomAccount();
+                String randomPassword = generateRandomSixDigitPassword();
+                try {
+                    Map textField_m21lkesk = this.crcreateUser_dingTalk(UtilMap.getString(data, "textField_m21lkesk"), randomAccount, randomPassword);
+                    System.out.println("");
+                } catch (McException e) {
+                    message = e.getMessage();
+                    log.error(e.getMessage(), e);
+                }
+                ydClient.operateData(YDParam.builder()
+                        .formInstanceId(UtilMap.getString(data, "instanceId"))
+                        .useLatestVersion(true)
+                        .updateFormDataJson(JSON.toJSONString(UtilMap.map("textField_m1mw64v4, textField_m1mw64v5", randomAccount, randomPassword)))
+                        .build(), YDConf.FORM_OPERATION.update);
+
+            }
+
+        });
+
+    }
+
+    /**
+     * 重置企业账号密码
+     */
+    @Override
+    public void resetPwd(Map data) {
+        ddClient_contacts.updateUser_dingTalk(ddClient.getAccessToken(), UtilMap.getString(data, "userId"), Arrays.asList(DEPT_ID), UtilMap.map("init_password", UtilMap.getString(data, "password")));
+    }
+    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+    @Override
+    public void getCheckWorkDateDetails(Map data) {
+        List<String> users = new ArrayList<>();
+        users.add("284156461536271475");
+        String[] strings = users.toArray(new String[0]);
+        log.info("users:{}", JSON.toJSONString(strings));
+        List<Map> mapList = ddClientAttendance.getAttColumnVal(ddClient.getAccessToken(appKey, appSecret),"284156461536271475", Arrays.asList("82772106,89349019"),"2025-01-20 08:00:00", "2025-01-21 08:00:00");
+        System.out.println("====="+mapList);
+//        mapList.get(0)
+       String FORMtime = "2025-01-01 00:00:00";
+        String TOtime = "2025-01-31 00:00:00";
+
+//        dateFormat.format(FORMtime);
+//        dateFormat.format(TOtime);
+        //工作时长(实际工时)
+        // Step 1. 提取原始数据到日期-字段ID-值的映射
+        Map<String, Map<Long, Double>> dateData = new HashMap<>();
+
+        for (Map<String, Object> element : mapList) {
+            // 获取字段ID
+            Map<String, Object> columnVo = (Map<String, Object>) element.get("column_vo");
+            Long id = ((Number) columnVo.get("id")).longValue();
+
+            // 遍历该字段的所有日期数据
+            List<Map<String, String>> columnVals = (List<Map<String, String>>) element.get("column_vals");
+            for (Map<String, String> entry : columnVals) {
+                String fullDate = entry.get("date");
+//                System.out.println("fullDate:====="+fullDate);
+                String date = fullDate.split(" ")[0]; // 提取日期部分
+                Double value = Double.parseDouble(entry.get("value"));
+
+                // 存储到日期映射中
+                dateData.computeIfAbsent(date, k -> new HashMap<>())
+                        .put(id, value);
+            }
+        }
+
+        // Step 2. 按日期处理业务逻辑
+        Map<String, Double> finalResult = new LinkedHashMap<>(); // 保持日期顺序
+
+        for (Map.Entry<String, Map<Long, Double>> entry : dateData.entrySet()) {
+            String date = entry.getKey();
+            Map<Long, Double> idValues = entry.getValue();
+
+            // 获取目标字段的值
+            Double targetValue = idValues.get(89349019L); // ID=89349019
+            Double refValue = idValues.get(82772106L);    // ID=82772106
+
+            // 逻辑判断
+            if (targetValue == null || refValue == null) {
+                System.err.println("日期 " + date + " 缺少必要字段数据,跳过计算");
+                continue;
+            }
+
+            double result;
+            if (targetValue >= 8) {
+                result = targetValue; // 直接返回
+            } else {
+                result = targetValue + (refValue / 60); // 组合计算
+            }
+
+            finalResult.put(date, result);
+        }
+
+        // Step 3. 打印最终结果
+        System.out.println("===== 计算结果 =====");
+        finalResult.forEach((date, value) -> {
+            System.out.printf("日期: %s \t 结果值: %.1f%n", date, value);
+        });
+
+
+    }
+
+    /**
+     * 生成一个由大写字母和数字组成的八位随机账号。
+     *
+     * @return 生成的随机账号字符串
+     */
+    public static String generateRandomAccount() {
+        // 可选字符集合:大写字母A-Z和数字0-9
+        final String CHARS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
+        final int LENGTH = 8; // 账号长度
+
+        Random random = new Random();
+        StringBuilder sb = new StringBuilder(LENGTH);
+
+        for (int i = 0; i < LENGTH; i++) {
+            // 随机选择一个字符
+            int index = random.nextInt(CHARS.length());
+            char randomChar = CHARS.charAt(index);
+            sb.append(randomChar);
+        }
+
+        return sb.toString();
+    }
+
+    /**
+     * 生成一个六位数的随机密码。
+     *
+     * @return 生成的随机密码字符串
+     */
+    public static String generateRandomSixDigitPassword() {
+        Random random = new Random();
+        int min = 100000; // 六位数最小值
+        int max = 999999; // 六位数最大值
+
+        // 生成一个介于[min, max]之间的随机数
+        int randomNumber = random.nextInt(max - min + 1) + min;
+
+        // 将生成的随机数转换为字符串
+        return String.valueOf(randomNumber);
+    }
 }

+ 2 - 2
mjava-huagao/src/main/resources/application-dev.yml

@@ -22,7 +22,7 @@ dingtalk:
 
 # aliwork
 aliwork:
-  appType:
-  systemToken:
+  appType: APP_FWH90IADKEXJ1O540RCM
+  systemToken: IDD66DC1H2ITY3HU789SK9IFJXKD2RL8BF28MBF1
 
 

+ 1 - 1
mjava-mc/src/main/java/com/malk/mc/aspect/RequestLoggingAspect.java

@@ -35,7 +35,7 @@ public class RequestLoggingAspect {
     @Around("execution(* com.malk.mc.controller..*(..))")
     public Object logAround(ProceedingJoinPoint joinPoint) throws Throwable {
         HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest();
-        if(request.getRequestURI().contains("/api/mc/project/")){
+        if(request.getRequestURI().contains("/api/mc/project/")||request.getRequestURI().contains("/api/mc/bot/")){
             return joinPoint.proceed();
         }
 

+ 74 - 0
mjava-mc/src/main/java/com/malk/mc/controller/McBotController.java

@@ -0,0 +1,74 @@
+package com.malk.mc.controller;
+
+import cn.hutool.http.HttpUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.malk.server.common.McException;
+import com.malk.server.common.McR;
+import com.malk.service.dingtalk.DDClient;
+import com.malk.service.dingtalk.DDClient_Extension;
+import com.malk.utils.UtilMap;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.HashMap;
+import java.util.Map;
+
+@Slf4j
+@RestController
+@RequestMapping("/bot/")
+public class McBotController {
+
+    @Autowired
+    private  DDClient_Extension ddClientExtension;
+    @Autowired
+    private DDClient ddClient;
+
+    @PostMapping("groupMsg/send")
+    public McR sendGroupMsg(@RequestBody JSONObject param){
+        log.info("推送消息:{}",param);
+        McException.assertParamException_Null(param,"msgParam","msgKey","openConversationId","robotCode","coolAppCode");
+        Map map = ddClientExtension.sendGroupMessages(ddClient.getAccessToken(), param.getJSONObject("msgParam"), param.getString("msgKey"), param.getString("openConversationId")
+                , param.getString("robotCode"), param.getString("coolAppCode"));
+        return McR.success(map);
+    }
+
+    @PostMapping("card/createAndDeliver")
+    public McR createAndDeliverCard(@RequestBody JSONObject param){
+        log.info("推送消息:{}",param);
+        McException.assertParamException_Null(param,"cardData","outTrackId","openSpaceId","robotCode","cardTemplateId");
+        Map<String,Object> data = new HashMap();
+        data.put("imGroupOpenDeliverModel",UtilMap.map("robotCode",param.getString("robotCode")));
+        data.put("imGroupOpenSpaceModel",UtilMap.map("supportForward",true));
+        if(param.containsKey("extInfo")){
+            data.putAll(param.getJSONObject("extInfo"));
+        }
+        Map map = ddClientExtension.createAndDeliverCards(ddClient.getAccessToken(),param.getString("cardTemplateId"),param.getString("outTrackId"),
+                UtilMap.map("cardParamMap",param.getJSONObject("cardData")),param.getString("openSpaceId"),data);
+        return McR.success(map);
+    }
+
+
+    @PostMapping("msg")
+    public McR msg(@RequestBody JSONObject param){
+        log.info("机器人消息:{}",param);
+        String text=param.getJSONObject("text").getString("content");
+        if(text.contains("群信息")){
+            sendBotTextMsgByWebhook(param.getString("sessionWebhook"),
+                    "群ID:"+param.getString("conversationId") +
+                        "\nrobotCode:"+param.getString("robotCode") +
+                        "\nchatbotUserId:"+param.getString("chatbotUserId"));
+        }
+        return McR.success();
+    }
+
+    private void sendBotTextMsgByWebhook(String sessionWebhook,String text){
+        Map<String,Object> map=new HashMap<>();
+        map.put("msgtype","text");
+        map.put("text",UtilMap.map("content",text));
+        HttpUtil.createPost(sessionWebhook).body(JSONObject.toJSONString(map)).execute();
+    }
+}

+ 56 - 0
mjava-mc/src/main/java/com/malk/mc/controller/McDdController.java

@@ -0,0 +1,56 @@
+package com.malk.mc.controller;
+
+import com.alibaba.fastjson.JSONObject;
+import com.malk.server.common.McException;
+import com.malk.server.common.McR;
+import com.malk.service.dingtalk.DDClient;
+import com.malk.service.dingtalk.DDClient_Group;
+import com.malk.service.dingtalk.DDClient_Report;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+@Slf4j
+@RestController
+@RequestMapping("/dd")
+public class McDdController {
+
+    @Autowired
+    private DDClient_Group ddClientGroup;
+    @Autowired
+    private DDClient_Report ddClientReport;
+    @Autowired
+    private DDClient ddClient;
+
+    @PostMapping("/group/createGroupByTemp")
+    public McR createGroupByTemp(@RequestBody JSONObject param){
+        log.info("创建场景群:{}",param);
+        McException.assertParamException_Null(param,"title","template_id","owner_user_id","user_ids");
+        String id=ddClientGroup.createGroupByTemp(ddClient.getAccessToken(),param.getString("title"),
+                param.getString("template_id"),param.getString("owner_user_id"),param.getString("user_ids"));
+        return McR.success(id);
+    }
+
+    @PostMapping("/report/create")
+    public McR createReport(@RequestBody JSONObject param){
+        log.info("创建日志:{}",param);
+        McException.assertParamException_Null(param,"template_id","to_chat","dd_from","userid","contents");
+        JSONObject contents=param.getJSONObject("contents");
+        List list=new ArrayList();
+        for(String key:contents.keySet()){
+            list.add(contents.getJSONObject(key));
+        }
+        String result=ddClientReport.createReport(ddClient.getAccessToken(),param.getString("to_userids"),param.getString("to_cids")
+                ,param.getString("template_id"),param.getBoolean("to_chat"),param.getString("dd_from"),param.getString("userid"),
+                list);
+        return McR.success(result);
+    }
+
+}

+ 29 - 4
mjava-mc/src/main/java/com/malk/mc/service/impl/McProjectServiceImpl.java

@@ -7,11 +7,14 @@ import com.malk.server.aliwork.YDConf;
 import com.malk.server.aliwork.YDParam;
 import com.malk.server.dingtalk.DDR_New;
 import com.malk.service.aliwork.YDClient;
+import com.malk.utils.PublicUtil;
 import com.malk.utils.UtilMap;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -27,7 +30,8 @@ public class McProjectServiceImpl implements McProjectService {
     public void init() {
         int i=0;
         int t=1;
-        Map<String, String[]> data = new HashMap();
+        Map<String, String[]> ydData = new HashMap();
+        Map<String, String[]> ddData = new HashMap();
         do {
             i++;
             DDR_New projectData = ydClient.queryData(YDParam.builder()
@@ -40,10 +44,31 @@ public class McProjectServiceImpl implements McProjectService {
             List<Map> dataList = (List<Map>) projectData.getData();
             for (Map map:dataList){
                 Map formData=UtilMap.getMap(map,"formData");
-                data.put(UtilMap.getString(formData,"serialNumberField_lxlfw7nn"),new String[]{UtilMap.getString(formData,"textField_lxlfw7no"),UtilMap.getString(formData,"textField_lxlfw7np")});
+                ydData.put(UtilMap.getString(formData,"serialNumberField_lxlfw7nn"),new String[]{UtilMap.getString(formData,"textField_lxlfw7no"),UtilMap.getString(formData,"textField_lxlfw7np")});
+                if(!PublicUtil.isNull(formData,"textField_m7abagvx","textField_m7abagvy")){
+                    ddData.put(UtilMap.getString(formData,"serialNumberField_lxlfw7nn"),new String[]{UtilMap.getString(formData,"textField_m7abagvx"),UtilMap.getString(formData,"textField_m7abagvy")});
+                }
             }
         }while (i<t);
-        McProject.insertYida(data);
-        log.info("项目加载完毕:{}",data.keySet());
+        McProject.insertYida(ydData);
+        McProject.insertDD(ddData);
+        log.info("项目加载完毕:{} 钉钉:{}",ydData.keySet(),ddData.keySet());
+    }
+
+    public static void main(String[] args) {
+        System.out.println(strFormat("\n优尚和越:表单的搭建\n未来节拍:根据客户的需求进行调整\n未来节拍:根据客户的需求进行调整\n未来节拍:根据客户的需求进行调整"));
+    }
+
+    private static String strFormat(String input){
+        StringBuilder output = new StringBuilder(input);
+        int count = 0;
+        int index = 0;
+
+        while ((index = output.indexOf("\n", index)) != -1) {
+            count++; // 计数器增加
+            output.insert(index + 1, "工作"+count); // 在 \n 后插入数字
+            index += 2; // 跳过插入的数字,继续查找下一个 \n
+        }
+        return output.toString();
     }
 }

+ 8 - 4
mjava-mc/src/main/java/com/malk/mc/service/impl/McYdServiceImpl.java

@@ -169,10 +169,12 @@ public class McYdServiceImpl implements McYdService {
                     String[] numberFieldCodes=numberFieldCode.split(",");
                     String[] textFieldCodes=textFieldCode.split(",");
                     for (int i = 0; i < numberFieldCodes.length; i++) {
-                        BigDecimal number = NumberUtil.toBigDecimal(UtilMap.getNumberStr(item,numberFieldCodes[i]));
-                        if(number==null){
+                        String numstr=UtilMap.getNumberStr(item,numberFieldCodes[i]);
+                        if(PublicUtil.isNull(numstr)||numstr.equals("0")){
+                            updateMap.put(textFieldCodes[i],"0.00");
                             continue;
                         }
+                        BigDecimal number = NumberUtil.toBigDecimal(numstr);
                         // 创建一个 DecimalFormat 实例,指定千位分隔符模式
                         DecimalFormat df = new DecimalFormat("#,###.00");
                         // 格式化 double 数值
@@ -187,10 +189,12 @@ public class McYdServiceImpl implements McYdService {
                 String[] mainNumKeys=UtilMap.getString(map,"mainNumKeys").split(",");
                 String[] mainTextKeys=UtilMap.getString(map,"mainTextKeys").split(",");
                 for (int i = 0; i < mainNumKeys.length; i++) {
-                    BigDecimal number = NumberUtil.toBigDecimal(UtilMap.getNumberStr(formData,(mainNumKeys[i])));
-                    if(number==null){
+                    String numstr=UtilMap.getNumberStr(formData,(mainNumKeys[i]));
+                    if(PublicUtil.isNull(numstr)||numstr.equals("0")){
+                        updateMap.put(mainTextKeys[i],"0.00");
                         continue;
                     }
+                    BigDecimal number = NumberUtil.toBigDecimal(numstr);
                     // 创建一个 DecimalFormat 实例,指定千位分隔符模式
                     DecimalFormat df = new DecimalFormat("#,###.00");
                     // 格式化 double 数值

+ 1 - 1
mjava-mc/src/main/resources/application-dev.yml

@@ -1,5 +1,5 @@
 server:
-  port: 9900
+  port: 9001
   servlet:
     context-path: /api/mc
 spring:

+ 1 - 1
mjava-mc/src/main/resources/application.yml

@@ -1,6 +1,6 @@
 spring:
   profiles:
-    active: prod
+    active: dev
   servlet:
     multipart:
       max-file-size: 100MB

+ 7 - 2
mjava-xzkj/pom.xml

@@ -47,10 +47,15 @@
             <version>1.1-SNAPSHOT</version>
         </dependency>
         <!-- 腾讯云 [go to https://search.maven.org/search?q=tencentcloud-sdk-java and getDefault the latest version.] -->
+<!--        <dependency>-->
+<!--            <groupId>com.tencentcloudapi</groupId>-->
+<!--            <artifactId>tencentcloud-sdk-java</artifactId>-->
+<!--            <version>3.1.778</version>-->
+<!--        </dependency>-->
         <dependency>
             <groupId>com.tencentcloudapi</groupId>
-            <artifactId>tencentcloud-sdk-java</artifactId>
-            <version>3.1.778</version>
+            <artifactId>tencentcloud-sdk-java-ocr</artifactId>
+            <version>3.1.1210</version>
         </dependency>
         <!-- 图片压缩 -->
         <dependency>

+ 14 - 14
mjava-xzkj/src/main/java/com/malk/xzkj/controller/IVController.java

@@ -133,16 +133,16 @@ public class IVController {
 
     // prd 校验发票抬头, 购买方范围
     private void validateBuyer(String BuyerName, String tips) {
-        List<String> corpNames = Arrays.asList(
-                "珠海金魁新能源科技有限公司",
-                "珠海能魁新能源科技有限公司",
-                "珠海创伟新能源有限公司",
-                "河南能辉绿电科技有限公司",
-                "河南省绿色生态新能源科技有限公司",
-                "贵州能辉智慧能源科技有限公司",
-                "上海能辉科技股份有限公司",
-                "浙江数实通信息技术有限公司");
-        McException.assertAccessException(!corpNames.contains(BuyerName), tips + ", 购买方名称不合法!");
+//        List<String> corpNames = Arrays.asList(
+//                "珠海金魁新能源科技有限公司",
+//                "珠海能魁新能源科技有限公司",
+//                "珠海创伟新能源有限公司",
+//                "河南能辉绿电科技有限公司",
+//                "河南省绿色生态新能源科技有限公司",
+//                "贵州能辉智慧能源科技有限公司",
+//                "上海能辉科技股份有限公司",
+//                "浙江数实通信息技术有限公司");
+//        McException.assertAccessException(!corpNames.contains(BuyerName), tips + ", 购买方名称不合法!");
     }
 
     /**
@@ -186,12 +186,12 @@ public class IVController {
                     .date(UtilString.replaceDateZH_cn(UtilMap.getString(prop, "Date")))
                     .checkCode(UtilMap.getString(prop, "CheckCode"))
                     // ppExt: 多明细行时, 优先取值合计 [全电票返回了subTotal字段, 但值为空]
-                    .amount(UtilNumber.setBigDecimal(UtilMap.getString_first(prop, "SubTotal", "Total")))
+                    .amount(UtilNumber.setBigDecimal(UtilMap.getString_first(prop, "SubTotal", "Total", "Fare")))
                     .tax(UtilNumber.setBigDecimal(UtilMap.getString_first(prop, "SubTax", "Tax")))
                     .excludingTax(UtilNumber.setBigDecimal(UtilMap.getString(prop, "PretaxAmount")))
-                    .buyerName(StringUtils.isBlank(guyuanNameRepalce(UtilMap.getString(prop, "Buyer")))?"上海能辉科技股份有限公司":guyuanNameRepalce(UtilMap.getString(prop, "Buyer")))
+                    .buyerName(StringUtils.isBlank(guyuanNameRepalce(UtilMap.getString(prop, "Buyer")))?"":guyuanNameRepalce(UtilMap.getString(prop, "Buyer")))
                     // ppExt: 中央非税未返回税号官方说明: 非税发票理论是没有税号的,图片中属于信用代码
-                    .buyerTaxId(StringUtils.isBlank(UtilMap.getString(prop, "BuyerTaxID"))?"91310000685457643J": UtilMap.getString(prop, "BuyerTaxID"))
+                    .buyerTaxId(StringUtils.isBlank(UtilMap.getString(prop, "BuyerTaxID"))?"": UtilMap.getString(prop, "BuyerTaxID"))
                     .sellerName(guyuanNameRepalce(UtilMap.getString_first(prop, "Seller", "Issuer")))                            // 行程单: 填开单位
                     .sellerTaxId(UtilMap.getString_first(prop, "SellerTaxID", "AgentCode"))                       // 行程单: 销售单位代号
                     .passengerName(UtilMap.getString_first(prop, "Name", "UserName"))                             // 火车票, 行程单
@@ -318,7 +318,7 @@ public class IVController {
             String invoiceNo = dto.getSerial(); // 唯一标识, 发票号码
 
             String serial = "第【" + (index + 1) + "】张发票";
-            validateBuyer(dto.getBuyerName(), serial + "有疑问");
+//            validateBuyer(dto.getBuyerName(), serial + "有疑问");
             McException.assertAccessException(StringUtils.isBlank(invoiceNo), serial + ", 识别结果为空, 请检查!");
             YDParam ydParam = YDParam.builder()
                     .formUuid("FORM-FE4634E6D01745C7B26DC58D049EAADC6RP4")

+ 2 - 2
mjava-xzkj/src/main/resources/static/mjs/mjs.js

@@ -14720,8 +14720,8 @@ import { SS as storage } from "storage"; // import { SS } from "storage"; */
         // 修改公共配置
         init: function init() {
             {
-                // mjs.conf.api = "https://mc.cloudpure.cn/api/guyuan/nh";
-                mjs.conf.api = "http://127.0.0.1:8113/xzkj/iv";
+                mjs.conf.api = "https://agibang.cn:1443/xzkj/iv";
+                // mjs.conf.api = "http://127.0.0.1:8113/xzkj/iv";
             }
             return this; // this 指向当前项目本身
         },