wzy пре 1 месец
родитељ
комит
bdeb4dfb0e

+ 49 - 0
mjava-siku/pom.xml

@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.springframework.boot</groupId>
+        <artifactId>spring-boot-starter-parent</artifactId>
+        <version>2.7.18</version> <!-- 使用最新的稳定版或其他适用版本 -->
+        <relativePath/> <!-- lookup parent from repository -->
+    </parent>
+
+    <groupId>com.malk.siku</groupId>
+    <artifactId>mjava-siku</artifactId>
+
+    <properties>
+        <maven.compiler.source>8</maven.compiler.source>
+        <maven.compiler.target>8</maven.compiler.target>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.malk</groupId>
+            <artifactId>base</artifactId>
+            <version>1.3</version>
+        </dependency>
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+            <scope>provided</scope>
+        </dependency>
+    </dependencies>
+
+</project>

+ 17 - 0
mjava-siku/src/main/java/com/malk/siku/SikuApplication.java

@@ -0,0 +1,17 @@
+package com.malk.siku;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.scheduling.annotation.EnableScheduling;
+
+@SpringBootApplication(scanBasePackages = {"com.malk"})
+@EnableScheduling
+public class SikuApplication {
+    public static void main(String[] args) {
+        try {
+            SpringApplication.run(SikuApplication.class,args);
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+    }
+}

+ 23 - 0
mjava-siku/src/main/java/com/malk/siku/controller/SikuController.java

@@ -0,0 +1,23 @@
+package com.malk.siku.controller;
+
+import com.malk.server.common.McR;
+import com.malk.siku.service.SikuService;
+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.Map;
+
+@RestController
+@RequestMapping("/api")
+public class SikuController {
+    @Autowired
+    private SikuService sikuService;
+
+    @PostMapping("/saveTradingPartner")
+    public McR saveTradingPartner(@RequestBody Map map) {
+        return sikuService.saveTradingPartner(map);
+    }
+}

+ 10 - 0
mjava-siku/src/main/java/com/malk/siku/service/SikuService.java

@@ -0,0 +1,10 @@
+package com.malk.siku.service;
+
+import com.malk.server.common.McR;
+
+import java.util.Map;
+
+public interface SikuService {
+    McR saveTradingPartner(Map map);
+
+}

+ 75 - 0
mjava-siku/src/main/java/com/malk/siku/service/impl/SikuServiceImpl.java

@@ -0,0 +1,75 @@
+package com.malk.siku.service.impl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.malk.server.aliwork.YDConf;
+import com.malk.server.aliwork.YDParam;
+import com.malk.server.common.McR;
+import com.malk.service.aliwork.YDClient;
+import com.malk.siku.service.SikuService;
+import com.malk.siku.utils.MkUtil;
+import com.malk.utils.UtilHttp;
+import com.malk.utils.UtilMap;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Map;
+
+@Slf4j
+@Service
+public class SikuServiceImpl implements SikuService {
+    @Autowired
+    private YDClient ydClient;
+
+    @Override
+    public McR saveTradingPartner(Map map) {
+        String formInstId = UtilMap.getString(map, "formInstId");
+
+        String type = UtilMap.getString(map, "type");
+
+        Map formData = ydClient.queryData(YDParam.builder()
+                .formInstanceId(formInstId)
+                .build(), YDConf.FORM_QUERY.retrieve_id).getFormData();
+
+        Map partner = new HashMap();
+
+        if ("客户".equals(type)){
+            //客户
+            partner.put("partnerName", "客户");//所属分类名称
+            partner.put("name", UtilMap.getString(formData,"textField_mkddjwy3"));//往来单位中文名
+            partner.put("partnerType", "客户");//往来关系,可选值为:"供应商"、"客户"、"供应商,客户"(既是供应商又是客户的情况下以中文逗号分隔(供应商在前))
+            partner.put("partnerProperty", "公司");//往来性质,可选值为:"公司"、"个体工商户"
+            partner.put("businessCode", UtilMap.getString(formData,"serialNumberField_mkddjwy2"));//往来单位编码,不超过50个字符
+            partner.put("taxNumber", UtilMap.getString(formData,"textField_mkddjwys"));//税务登记号,不超过200个字符
+            partner.put("readOnly", false);//是否只读,默认false。如果为true,那么在每刻系统中往来单位的所有信息(如权限范围、收款账户等)均无法修改。(接口更新操作不受限制)
+            partner.put("reMark", "");//往来单位备注
+            partner.put("enabled", true);//是否启用(true:启用;false:禁用)。若该参数为空,新增则默认为true,更新则保持系统内状态。
+
+
+        }else {
+            //供应商、
+            String hzlx = UtilMap.getString(formData, "radioField_mketkvw7");
+
+            partner.put("partnerName", "供应商");//所属分类名称
+            partner.put("name", "Free".equals(hzlx) ? UtilMap.getString(formData,"textField_mkkixdd6") : UtilMap.getString(formData,"textField_mketkvv0"));//往来单位中文名
+            partner.put("partnerType", "供应商");//往来关系,可选值为:"供应商"、"客户"、"供应商,客户"(既是供应商又是客户的情况下以中文逗号分隔(供应商在前))
+            partner.put("partnerProperty", "Free".equals(hzlx) ? "个体工商户" : "公司");//往来性质,可选值为:"公司"、"个体工商户"
+            partner.put("businessCode", UtilMap.getString(formData,"serialNumberField_mkddjwy2"));//往来单位编码,不超过50个字符
+            partner.put("taxNumber", "Free".equals(hzlx) ? "" : UtilMap.getString(formData,"textField_mketkvxo"));//税务登记号,不超过200个字符
+            partner.put("readOnly", false);//是否只读,默认false。如果为true,那么在每刻系统中往来单位的所有信息(如权限范围、收款账户等)均无法修改。(接口更新操作不受限制)
+            partner.put("reMark", "");//往来单位备注
+            partner.put("enabled", UtilMap.getBoolean(formData,"radioField_mketkvw8"));//是否启用(true:启用;false:禁用)。若该参数为空,新增则默认为true,更新则保持系统内状态。
+        }
+
+        Map body = new HashMap();
+        body.put("partnerList", Arrays.asList(partner));
+
+        Map result = (Map) JSONObject.parse(UtilHttp.doPost("https://ng.maycur.com/api/openapi/tradingPartner/batch/save", MkUtil.initTokenHeader(), null, body));
+
+        log.info("Result:",result);
+
+        return McR.success();
+    }
+}

+ 80 - 0
mjava-siku/src/main/java/com/malk/siku/utils/MkUtil.java

@@ -0,0 +1,80 @@
+package com.malk.siku.utils;
+
+import com.alibaba.fastjson.JSONObject;
+import com.malk.utils.UtilHttp;
+import com.malk.utils.UtilMap;
+import com.malk.utils.UtilToken;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.codec.digest.DigestUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Value;
+
+import java.util.HashMap;
+import java.util.Map;
+
+@Slf4j
+public class MkUtil {
+
+    @Value("${mk.appCode}")
+    private final static String appCode = "AP52Y01LHHTAP9";
+
+    @Value("${mk.appSecret}")
+    private final static String appSecret = "N4WuERLteAUPaWebnsHy";
+
+    private final Object $lock = new Object[0];
+
+    private static final Long EXPIRES_IN = 1800000L;
+
+    public static Map initTokenHeader(){
+
+            Map header = new HashMap();
+
+            String tokenId = UtilToken.get("invalid-tokenId-mk");
+            String entCode = UtilToken.get("invalid-entCode-mk");
+
+            if (StringUtils.isNotBlank(tokenId) && StringUtils.isNotBlank(entCode)) {
+                header.put("tokenId",tokenId);
+                header.put("entCode",entCode);
+
+                return header;
+            } else {
+                //每刻登录认证
+                Map body = new HashMap();
+
+                long timeMillis = System.currentTimeMillis();
+                body.put("appCode",appCode);
+                body.put("secret",getSecret(appCode,appSecret,timeMillis));
+                body.put("timestamp",timeMillis);
+
+                Map result = (Map) JSONObject.parse(UtilHttp.doPost("https://ng.maycur.com/api/openapi/auth/login", null, null, body));
+
+                Map data = UtilMap.getMap(result, "data");
+
+                tokenId = UtilMap.getString(data, "tokenId");
+                entCode = UtilMap.getString(data, "entCode");
+
+                log.info("每刻tokenId, {}", tokenId);
+                log.info("每刻entCode, {}", entCode);
+
+                UtilToken.put("invalid-tokenId-mk", tokenId, EXPIRES_IN);
+                UtilToken.put("invalid-entCode-mk", entCode, EXPIRES_IN);
+
+                header.put("tokenId",tokenId);
+                header.put("entCode",entCode);
+
+                return header;
+            }
+
+    }
+
+    private static String getSecret(String appCode, String appSecret, long timeMillis){
+        log.info("time:{}",timeMillis);
+
+        String s = DigestUtils.sha256Hex(appSecret + ":" + appCode + ":" + timeMillis);
+        log.info("s:{}",s);
+
+        return s;
+    }
+
+
+}

+ 31 - 0
mjava-siku/src/main/resources/application-dev.yml

@@ -0,0 +1,31 @@
+server:
+  port: 9037
+  servlet:
+    context-path: /siku
+
+enable:
+  scheduling: false
+logging:
+  config: classpath:logback-spring.xml
+  path: /home/server/siku/log/
+  level:
+    com.malk.*: debug
+
+# dingtalk
+dingtalk:
+  agentId: 4247189733
+  appKey: dingt4yl0ecbq7q3zq1q
+  appSecret: mTolUR6iR74PEP_wwQIEO-Knc3EahEIfmCwjgdwOUIMfRiL7zrankoB4ccrardoS
+  corpId:
+  aesKey:
+  token:
+  operator:
+
+aliwork:
+  appType: APP_CZGFF42UVG8YJPN7VMU9
+  systemToken: Y2D66JB1A0B2OMK6OMB29AB8VMP43KJ7UCDKMG46
+
+mk:
+  appCode: AP52Y01LHHTAP9
+  appSecret: N4WuERLteAUPaWebnsHy
+

+ 31 - 0
mjava-siku/src/main/resources/application-prod.yml

@@ -0,0 +1,31 @@
+server:
+  port: 9037
+  servlet:
+    context-path: /siku
+
+enable:
+  scheduling: false
+logging:
+  config: classpath:logback-spring.xml
+  path: /home/server/siku/log/
+  level:
+    com.malk.*: info
+
+# dingtalk
+dingtalk:
+  agentId: 4247189733
+  appKey: dingt4yl0ecbq7q3zq1q
+  appSecret: mTolUR6iR74PEP_wwQIEO-Knc3EahEIfmCwjgdwOUIMfRiL7zrankoB4ccrardoS
+  corpId:
+  aesKey:
+  token:
+  operator:
+
+aliwork:
+  appType: APP_CZGFF42UVG8YJPN7VMU9
+  systemToken: Y2D66JB1A0B2OMK6OMB29AB8VMP43KJ7UCDKMG46
+
+mk:
+  appCode: AP52Y01LHHTAP9
+  appSecret: N4WuERLteAUPaWebnsHy
+

+ 15 - 0
mjava-siku/src/main/resources/application.yml

@@ -0,0 +1,15 @@
+spring:
+  profiles:
+    active: dev
+  servlet:
+    multipart:
+      max-file-size: 100MB
+      max-request-size: 100MB
+  http:
+    enabled: false
+
+#  configuration:
+#    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
+  global-config:
+    db-config:
+      id-type: auto

+ 61 - 0
mjava-siku/src/main/resources/logback-spring.xml

@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration debug="false" scan="false" scanPeriod="60 seconds">
+    <springProperty scope="context" name="LOG_HOME" source="logging.path" defaultValue="/home/server/log/"/>
+    <property name="FileNamePattern" value="${LOG_HOME}%d{yyyyMM}/%d{dd}"/>
+
+    <!-- 定义控制台输出 -->
+    <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
+        <layout class="ch.qos.logback.classic.PatternLayout">
+            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} - [%thread] - %-5level - %logger{50} - %msg%n</pattern>
+        </layout>
+    </appender>
+
+    <appender name="appLogAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <!-- 指定日志文件的名称 -->
+        <!--<file>${FileNamePattern}/info.log</file>-->
+
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <fileNamePattern>${FileNamePattern}/info-%i.log</fileNamePattern>
+            <MaxHistory>30</MaxHistory>
+            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+                <MaxFileSize>30MB</MaxFileSize>
+            </timeBasedFileNamingAndTriggeringPolicy>
+        </rollingPolicy>
+
+        <layout class="ch.qos.logback.classic.PatternLayout">
+            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [ %thread ] - [ %-5level ] [ %logger{50} : %line ] - %msg%n</pattern>
+        </layout>
+    </appender>
+
+    <appender name="SIFT" class="ch.qos.logback.classic.sift.SiftingAppender">
+        <discriminator>
+            <Key>processid</Key>
+            <DefaultValue>sys</DefaultValue>
+        </discriminator>
+        <sift>
+            <appender name="FILE-${processid}"
+                      class="ch.qos.logback.core.rolling.RollingFileAppender">
+                <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+                    <FileNamePattern>
+                        ${FileNamePattern}/${processid}.log
+                    </FileNamePattern>
+                </rollingPolicy>
+                <layout class="ch.qos.logback.classic.PatternLayout">
+                    <Pattern>
+                        %d{yyyyMMdd:HH:mm:ss.SSS} [%thread] %-5level %msg%n
+                    </Pattern>
+                </layout>
+            </appender>
+        </sift>
+    </appender>
+
+
+    <!-- 日志输出级别 -->
+    <logger name="org.springframework" level="debug"  additivity="false"/>
+    <logger name="com.malk.connecter" level="debug"/>
+    <root level="INFO">
+        <appender-ref ref="stdout"/>
+        <appender-ref ref="appLogAppender"/>
+        <appender-ref ref="SIFT"/>
+    </root>
+</configuration>

+ 25 - 0
mjava-siku/src/test/java/com.malk.siku/SkTest.java

@@ -0,0 +1,25 @@
+package com.malk.siku;
+
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.codec.digest.DigestUtils;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+@Slf4j
+@SpringBootTest
+@RunWith(SpringRunner.class)
+public class SkTest {
+    @Test
+    public void getSecret(){
+        String appCode="AP52Y01LHHTAP9";
+        String appSecret="N4WuERLteAUPaWebnsHy";
+
+        long timeMillis = System.currentTimeMillis();
+        log.info("time:{}",timeMillis);
+
+        String s = DigestUtils.sha256Hex(appSecret + ":" + appCode + ":" + timeMillis);
+        log.info("s:{}",s);
+    }
+}