Browse Source

达利代码初始化

fyz 3 days ago
parent
commit
9e4a8dae3d

+ 61 - 0
mjava-dali/pom.xml

@@ -0,0 +1,61 @@
+<?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">
+    <parent>
+        <artifactId>java-mcli</artifactId>
+        <groupId>com.malk</groupId>
+        <version>1.0-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>mjava-dali</artifactId>
+    <description>达利集团云简对接</description>
+
+    <properties>
+        <maven.compiler.source>8</maven.compiler.source>
+        <maven.compiler.target>8</maven.compiler.target>
+    </properties>
+
+    <dependencies>
+        <!-- 核心模块-->
+        <dependency>
+            <groupId>com.malk</groupId>
+            <artifactId>mjava</artifactId>
+            <version>${mjava.version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.xerial</groupId>
+            <artifactId>sqlite-jdbc</artifactId>
+            <version>3.41.2.1</version>
+        </dependency>
+
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+                <version>2.1.1.RELEASE</version>
+                <configuration>
+                    <includeSystemScope>true</includeSystemScope>
+                    <!-- 如果没有该配置,devtools不会生效: 打包时关闭 -->
+                    <fork>false</fork>
+                    <!-- 避免中文乱码 -->
+                    <jvmArguments>-Dfile.encoding=UTF-8</jvmArguments>
+                </configuration>
+                <!-- 允许生成可运行jar -->
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>repackage</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+        <finalName>${project.artifactId}</finalName>
+    </build>
+</project>

+ 36 - 0
mjava-dali/src/main/java/com/malk/dali/Boot.java

@@ -0,0 +1,36 @@
+package com.malk.dali;
+
+import com.querydsl.jpa.impl.JPAQueryFactory;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.autoconfigure.domain.EntityScan;
+import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
+import org.springframework.context.annotation.Bean;
+import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
+import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
+
+import javax.persistence.EntityManager;
+
+/**
+ * corp项目: 扫描公共模块
+ * -
+ * 若是无需数据库模块, 配置无效地址也可启动, 引入mjava不支持直接 @SpringBootApplication(exclude = DataSourceAutoConfiguration.class) 配置
+ * 需要配置 jpa.hibernate.ddl-auto 为 none. 标识对表没有任何操作. 若不设置为 none, flyway.enabled 配置会无效, 在没有数库连接情况下程序无法启动
+ */
+@EnableJpaAuditing
+@SpringBootApplication(scanBasePackages = {"com.malk"},exclude={DataSourceAutoConfiguration.class})
+public class Boot {
+
+    public static void main(String... args) {
+        SpringApplication.run(Boot.class, args);
+    }
+
+    /**
+     * 让Spring管理JPAQueryFactory [不使用Qualifier详见mjava-Boot]
+     */
+//    @Bean
+//    public JPAQueryFactory jpaQueryFactory(EntityManager entityManager) {
+//        return new JPAQueryFactory(entityManager);
+//    }
+}

+ 22 - 0
mjava-dali/src/main/java/com/malk/dali/controller/DDController.java

@@ -0,0 +1,22 @@
+package com.malk.dali.controller;
+
+import com.malk.controller.DDCallbackController;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * 钉钉事件回调 3_1
+ * -
+ * [子项目直接继承即可有调用, 无需实现]
+ * -
+ * 注解 @RequestMapping 路径不能重复 [主子项目属同一个项目];
+ * 获取项目回调请求地址, https://mc.cloudpure.cn/frp/xxx/dd/callback [调试代理: frp + nginx]
+ */
+@Slf4j
+@RestController
+@RequestMapping("/dd")
+public class DDController extends DDCallbackController {
+
+
+}

+ 60 - 0
mjava-dali/src/main/java/com/malk/dali/delegate/DDDelegate.java

@@ -0,0 +1,60 @@
+package com.malk.dali.delegate;
+
+import com.malk.delegate.DDEvent;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.context.annotation.Primary;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Service;
+
+/**
+ * OA审批事件 [主项目也有实现, 添加 @Primary 优先注入主项目实现]
+ * -
+ * 取消方案: 撤销和拒绝流程不继续执行连接器, 因此不使用连接器与轮询审批记录方案 [低效而且占用较高钉钉api调次数];
+ * 优化方案: 通过事件订阅实现实时同步所有审批状态, 定时查询钉钉回调失败记录 [配置钉钉事件Delegate, 添加定时任务]
+ */
+@Slf4j
+@Service
+@Primary
+public class DDDelegate implements DDEvent {
+
+    //    @Autowired
+//    TimerService timerService;
+    // 审批任务回调执行业务逻辑
+    @Async
+    @Override
+    public void executeEvent_Task_Finish(String processInstanceId, String processCode, boolean isAgree, String remark) {
+        log.info("executeEvent_Task_Finish");
+    }
+
+    @Async
+    @Override
+    public void executeEvent_Task_Start(String processInstanceId, String processCode) {
+        log.info("executeEvent_Task_Start");
+    }
+
+    @Async
+    @Override
+    public void executeEvent_Task_Redirect(String processInstanceId, String processCode) {
+        log.info("executeEvent_Task_Redirect");
+    }
+
+    @Async
+    @Override
+    public void executeEvent_Instance_Start(String processInstanceId, String processCode) {
+        log.info("executeEvent_Instance_Start");
+    }
+
+
+    // 审批实例回调执行业务逻辑
+    @Async
+    @Override
+    public void executeEvent_Instance_Finish(String processInstanceId, String processCode, boolean isAgree, boolean isTerminate, String staffId) {
+        log.info("executeEvent_Instance_Finish");
+        String approveResult = isAgree ? "agree" : "refuse";
+        if (isTerminate) approveResult = "terminated";
+        if  (isTerminate){
+            log.info("开始执行撤销回调");
+        }
+        log.info("审批实例回调执行业务逻辑, {}", approveResult);
+    }
+}

+ 57 - 0
mjava-dali/src/main/java/com/malk/dali/server/yunjian/DDR.java

@@ -0,0 +1,57 @@
+package com.malk.dali.server.yunjian;
+
+import com.malk.server.common.McException;
+import com.malk.server.common.VenR;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 返回值配置参考McR
+ */
+@Data
+@NoArgsConstructor
+public class DDR<T> extends VenR {
+
+    // 请求状态
+    private boolean success;
+
+    private String resCode;
+
+    private String resMsg;
+
+    private T data;
+
+    /**
+     * token
+     */
+    private String accessToken;
+
+    // 成功状态标记
+    private final static String SUC_CODE = "200000";
+
+
+    /**
+     * 断言错误信息
+     */
+    @Override
+    public void assertSuccess() {
+        McException.assertException(!resCode.equals(SUC_CODE), resCode, resMsg, "yunjian");
+    }
+
+    /**
+     * 通用post请求
+     */
+    public static DDR doPost(String url, Map header, Map param, Map body) {
+        return (DDR) DDR.doPost(url, header, param, body, VenR.RC_YJ);
+    }
+
+    /**
+     * 通用get请求
+     */
+    public static DDR doGet(String url, Map header, Map param) {
+        return (DDR) DDR.doGet(url, header, param, VenR.RC_YJ);
+    }
+}

+ 332 - 0
mjava-dali/src/main/java/com/malk/dali/service/Impl/PayServiceImpl.java

@@ -0,0 +1,332 @@
+package com.malk.dali.service.Impl;
+
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.XmlUtil;
+import cn.hutool.http.HttpRequest;
+import cn.hutool.json.JSONObject;
+import cn.hutool.json.XML;
+import com.alibaba.fastjson.JSON;
+import com.malk.dali.service.PayService;
+import com.malk.server.aliwork.YDConf;
+import com.malk.server.aliwork.YDParam;
+import com.malk.server.common.McException;
+import com.malk.service.aliwork.YDClient;
+import com.malk.utils.UtilHttp;
+import com.malk.utils.UtilMap;
+import lombok.SneakyThrows;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.sql.*;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Random;
+
+@Service
+@Slf4j
+public class PayServiceImpl implements PayService {
+
+    @Autowired
+    private YDClient ydClient;
+
+    private static final String API = "http://27.115.15.66:8098/BisOutWeb/payCenter/dealReq.srv";
+
+
+
+    /**
+     * 不做错误拦截
+     * @param tradeCode
+     * @param condition
+     * @return
+     */
+    private JSONObject _doPosts(String tradeCode, Map condition) {
+
+        // xml请求格式数据处理
+        Map head = UtilMap.map("erpSysCode, custNo, tradeName", "XYYGLXT", "300200632", tradeCode);
+        Map body = UtilMap.map("head, map", head, condition);
+        String data = XmlUtil.mapToXmlStr(body, "body");
+        log.info("请求入参, {}", XML.toJSONObject(data));
+
+        /// prd 财资固定格式, xml头数据前需要添加类型code, 且不能换行
+        data = "0000012001" + tradeCode + data;
+        String rsp = HttpRequest.post(API).body(data).execute().body();
+        JSONObject result = XML.toJSONObject(rsp);
+        log.info("请求响应, {}", result);
+        return result;
+    }
+
+
+    /**
+     *  付款状态同步
+     * @param
+     */
+    @Override
+    public void syncPayStatus() {
+        // 查询付款账户  (获取跟付款申请表,查询状态为付款中的数据)
+        YDParam ydParam = YDParam.builder()
+                .formUuid("FORM-6L966171YHZA0OJOAUKWG89JTZA635EV3Y1ILR")
+                .searchFieldJson(JSON.toJSONString(UtilMap.map("textField_lr08rrpc", "付款中")))
+                .build();
+        //获取所有 状态为付款中的数据
+        List<Map> dataList = (List<Map>) ydClient.queryData(ydParam, YDConf.FORM_QUERY.retrieve_search_form).getData();
+
+        dataList.forEach(item -> {
+            log.info("formInstanceId:{}",item.get("formInstanceId"));
+            String payState = "";
+            String payMsg = "";
+            String payDate = "";
+            //formInstanceId
+            //获取erpReqNo 和实例ID  循环去获取付款状态
+            JSONObject rsp  = _doPosts("BY0003", (Map) UtilMap.map("erpReqNo, billCode, erpBatchNo", null,((Map) item.get("formData")).get("textField_lra9fqfv").toString(),null));
+            //获取头部信息
+            JSONObject head = rsp.getJSONObject("body").getJSONObject("head");
+            //判断retMsg     retCode =2 时,仅代表查询失败
+            if ("2".equals(head.getStr("retCode"))){
+                //失败信息
+                payMsg = head.getStr("retMsg");
+
+                // 更新跟踪单状态
+                ydClient.operateData(YDParam.builder()
+                        .formInstanceId((String) item.get("formInstanceId"))
+                        .updateFormDataJson(JSON.toJSONString(UtilMap.map("textField_loeg6mse, textareaField_loeg6msh",((Map) item.get("formData")).get("textField_lra9fqfv").toString(),payMsg))).build(), YDConf.FORM_OPERATION.update);
+
+            }else{
+                JSONObject state = rsp.getJSONObject("body").getJSONObject("loopData").getJSONObject("row");
+                log.info("state:{}",state);
+                /**
+                 * 00付款成功
+                 * 01付款待提交
+                 * 02付款流程中
+                 * 03等待银行结果
+                 * 95付款已删除
+                 * 96付款已打回
+                 * 98付款失败
+                 * 99其他状态
+                 */
+                payState = state.getStr("payState");
+                payMsg =  state.getStr("payMsg");
+                payDate = state.getStr("payTime");
+                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+                Date StrPayDate = null;
+                try {
+                    StrPayDate= sdf.parse(payDate);
+                } catch (Exception e) {
+                    log.info("未获取到付款时间,付款信息:{}",payMsg);
+                    e.printStackTrace();
+                }
+                //获取付款成功的
+                if (payState.equals("00")) {
+
+                    payMsg = "付款成功";
+
+                    String  sqly = ((Map) item.get("formData")).get("selectField_lqalbx96").toString();   //申请来源
+                    String guid = ((Map) item.get("formData")).get("textField_li1y52yh").toString();        //PayGUID
+                    String BillCode = ((Map) item.get("formData")).get("textField_lra9fqfv").toString();   //结算流水号
+
+                    //数据来源明源云则回写
+                    if ("明源ERP".equals(sqly)){
+                        //付款成功的更新Erp状态
+                        String erpRsp = UtilHttp.doPost("https://gateway.dslink.net.cn/api/webhook/E185908E63CF407B911FA870642A39A5",
+                                null,null, UtilMap.map("PayGUID, BillCode, StrPayDate",guid,BillCode,StrPayDate),new HashMap());
+                        //通过 http status 判定, 200 即为成功
+                        Map result = (Map) JSON.parse(erpRsp);
+                        Boolean status = (Boolean) result.get("status");
+                        if (status) {
+                            log.info("回写ERP成功{}",result);
+                        }else{
+                            log.info("回写ERP失败{}",result);
+                        }
+                    }
+                    // 更新付款申请单状态
+                    ydClient.operateData(YDParam.builder()
+                            .formInstanceId((String) item.get("formInstanceId"))
+                            .updateFormDataJson(JSON.toJSONString(UtilMap.map("textField_lr08rrpc, textField_lof4wiqt, textField_lxlt9ptd", "付款成功","凭证未生成",payDate)))
+                            .build(), YDConf.FORM_OPERATION.update);
+
+
+                    // 更新跟踪单状态
+                    ydClient.operateData(YDParam.builder()
+                            .formInstanceId(((Map) item.get("formData")).get("textField_lr0ct6da").toString())
+                            .updateFormDataJson(JSON.toJSONString(UtilMap.map("textField_loeg6mse, textField_loeg6msg",((Map) item.get("formData")).get("textField_lra9fqfv").toString(),payMsg)))
+                            .build(), YDConf.FORM_OPERATION.update);
+
+                }
+                //付款已删除   付款已打回   付款失败跟踪单   其他状态
+                else if (payState.equals("95")||payState.equals("96")||payState.equals("98")||payState.equals("99")){
+
+                    // 更新付款申请单状态
+                    ydClient.operateData(YDParam.builder()
+                            .formInstanceId((String) item.get("formInstanceId"))
+                            .updateFormDataJson(JSON.toJSONString(UtilMap.map("textField_lr08rrpc, textField_lraevvod", "待付款",((Map) item.get("formData")).get("textField_lra9fqfv").toString()+"-"+new Random().nextInt(1000))))
+                            .build(), YDConf.FORM_OPERATION.update);
+
+                    // 更新跟踪单状态
+                    ydClient.operateData(YDParam.builder()
+                            .formInstanceId(((Map) item.get("formData")).get("textField_lr0ct6da").toString())
+                            .updateFormDataJson(JSON.toJSONString(UtilMap.map("textField_loeg6mse, textField_loeg6msg",((Map) item.get("formData")).get("textField_lra9fqfv").toString(),payMsg)))
+                            .build(), YDConf.FORM_OPERATION.update);
+
+                }
+
+            }
+        });
+    }
+
+    /**
+     * 同步付款银行信息
+     * @param map
+     */
+    @SneakyThrows
+    @Override
+    public void syncPayBankInfo(Map map) {
+        //根据企业源系统业务编码   查询付款账号表信息
+        YDParam ydParam = YDParam.builder()
+                .formUuid("FORM-OS566L91HS1B78LW7GMUQ6AQA6C9288Y2W1IL4")
+                .searchFieldJson(JSON.toJSONString(UtilMap.map("textField_lmhlzvdl", map.get("code"))))
+                .build();
+
+        List<Map> mapList = (List<Map>) ydClient.queryData(ydParam, YDConf.FORM_QUERY.retrieve_search_form).getData();
+        Map fkmap = (Map) mapList.get(0).get("formData");
+        log.info("fkmap:{}",fkmap);
+        //根据收款账户  查询收款信息
+        YDParam ydParam2 = YDParam.builder()
+                .formUuid("FORM-NO9667913LKF3GE09L0EHA3YMDGU3GF9NEEOLX1")
+                .searchFieldJson(JSON.toJSONString(UtilMap.map("textField_li1w31c2", map.get("account"))))
+                .build();
+        List<Map> mapList1 = (List<Map>) ydClient.queryData(ydParam2, YDConf.FORM_QUERY.retrieve_search_form).getData();
+        Map skmap = (Map) mapList1.get(0).get("formData");
+        log.info("skmap:{}",skmap);
+        //收款联行银行号  付款银行联行号  收款银行实例    企业编码                       付款银行简称  付款账户名称   付款开户行    付款银行账号   直连方式
+        ydClient.operateData(YDParam.builder().formInstId(map.get("formInstId").toString())
+                .updateFormDataJson(JSON.toJSONString(UtilMap.map("textField_lr7tmvy9, textField_lr7tmvy8, textField_lr7tmvya, textField_lmhln79w, " +
+                                "selectField_lqalbx97, textField_li1y52z5, textField_li1y52z4, selectField_li1y52z3, textField_li1y52z2",
+                        skmap.get("selectField_lof5vr7d"),fkmap.get("textField_li1w31c4"),mapList1.get(0).get("formInstanceId"),fkmap.get("textField_lmhln79w"),
+                        fkmap.get("textField_li1w31c5"),fkmap.get("textField_li1w31c1"),fkmap.get("textField_li1w31c3"),fkmap.get("textField_li1w31c2"),fkmap.get("selectField_li1w31c8"))))
+                .build(), YDConf.FORM_OPERATION.update);
+    }
+
+    /**
+     * 发起付款
+     * @param data
+     */
+    @Override
+    public void payMent(Map data) {
+
+        // 付款: payerAccNo, payerCorpName; 领款: payeeAccNo, payeeAccName, payeeBankName, payeeBankCode; 金额: payMoney, payPurpose, erpReqNo
+        JSONObject rsp = _doPosts("BY0001", data);
+        JSONObject head = rsp.getJSONObject("body").getJSONObject("head");
+        McException.assertAccessException(!"交易成功".equals(head.get("retMsg")),head.get("retMsg").toString());
+        if ("交易成功".equals(head.get("retMsg"))){
+            JSONObject objectMap = rsp.getJSONObject("body").getJSONObject("map");
+            String billCode = (String) objectMap.get("billCode");
+            // 更新付款申请单状态
+            ydClient.operateData(YDParam.builder()
+                    .formInstanceId(data.get("formInstId").toString())
+                    .updateFormDataJson(JSON.toJSONString(UtilMap.map("textField_lra9fqfv, textareaField_lraa9mhe, textField_lr08rrpc", billCode,head.get("retMsg"),"付款中"))).build(), YDConf.FORM_OPERATION.update);
+        }
+
+    }
+
+    @Override
+    public void handWorkPayment(Map data) {
+        log.info("手工付款单{}",data);
+        //根据实例ID更新付款申请单的付款时间
+        long dateFiled = Long.parseLong(data.get("date").toString());
+        if (ObjectUtil.isNotEmpty(dateFiled)){
+            String dateStr = DateUtil.date(dateFiled).toString("yyyy-MM-dd");
+            ydClient.operateData(YDParam.builder()
+                    .formInstanceId(data.get("formInstId").toString())
+                    .updateFormDataJson(JSON.toJSONString(UtilMap.map("textField_lxlt9ptd",dateStr))).build(), YDConf.FORM_OPERATION.update);
+        }
+        log.info("付款日期:{}",data.get("date").toString());
+
+        //根据实例ID  查询付款申请单
+        YDParam ydParam = YDParam.builder()
+                .formInstId(data.get("formInstId").toString())
+                .build();
+        Map formData = ydClient.queryData(ydParam, YDConf.FORM_QUERY.retrieve_id).getFormData();
+        log.info("formData{}",formData);
+
+        //数据来源明源云则回写
+        if ("明源ERP".equals(formData.get("selectField_lqalbx96"))){
+            //付款成功的更新Erp状态
+            String erpRsp = UtilHttp.doPost("https://gateway.dslink.net.cn/api/webhook/E185908E63CF407B911FA870642A39A5",
+                    null,null, UtilMap.map("PayGUID, BillCode, StrPayDate",formData.get("textField_li1y52yh"),"", formData.get("textField_lxlt9ptd")),new HashMap());
+
+            //通过 http status 判定, 200 即为成功
+            Map result = (Map) JSON.parse(erpRsp);
+            Boolean status = (Boolean) result.get("status");
+            if (status) {
+                log.info("回写ERP成功{}",result);
+            }else{
+                log.info("回写ERP失败{}",result);
+            }
+        }
+    }
+
+
+    //配置客户的sqlist URL
+//    private static final String SQLITE_URL ="jdbc:sqlite:D:/JavaSpace/fbi.dll";
+    private static final String SQLITE_URL ="jdbc:sqlite:D:/FASTBI/FBI/fbi.dll";
+    /**
+     * 同步凭证状态
+     * @param formInstId
+     */
+    @Override
+    public void synProofStatus(String formInstId) {
+
+        //查询凭证实例ID   状态:1成功   2失败    失败信息
+        Connection connection = null;
+        Statement statement = null;
+        try {
+            // 加载SQLite的JDBC驱动程序
+            Class.forName("org.sqlite.JDBC");
+            //创建链接
+            connection = DriverManager.getConnection(SQLITE_URL);
+            // 创建Statement对象
+            statement = connection.createStatement();
+            // 执行查询语句
+            String sql = "SELECT * FROM rest_drrecord WHERE instance_id ='" + formInstId + "' and status = 1 order by id desc";
+            ResultSet rowsAffected = statement.executeQuery(sql);
+
+            if (rowsAffected.next()) {
+                int status = rowsAffected.getInt("status");
+                //凭证号
+                String flag = rowsAffected.getString("record_id");
+                if (status == 1){
+                    // 更新付款申请单凭证状态
+                    ydClient.operateData(YDParam.builder()
+                            .formInstanceId(formInstId)
+                            .updateFormDataJson(JSON.toJSONString(UtilMap.map("textField_lof4wiqt, textField_lof4wiqr","凭证已生成",flag)))
+                            .build(), YDConf.FORM_OPERATION.update);
+                    log.info("凭证已生成:{}",rowsAffected.getString("note"));
+                }
+            }else{
+                log.info("未查询到对应生成凭证成功数据!");
+            }
+        } catch (ClassNotFoundException | SQLException e) {
+            e.printStackTrace();
+        } finally {
+            // 关闭连接和资源
+            try {
+                if (statement != null) {
+                    statement.close();
+                }
+                if (connection != null) {
+                    connection.close();
+                }
+            } catch (SQLException e) {
+                e.printStackTrace();
+            }
+        }
+
+
+    }
+
+
+}

+ 36 - 0
mjava-dali/src/main/java/com/malk/dali/service/PayService.java

@@ -0,0 +1,36 @@
+package com.malk.dali.service;
+
+import java.util.Map;
+
+public interface PayService {
+
+    /**
+     *付款状态同步
+     * @param
+     */
+    void syncPayStatus();
+
+    /**
+     * 付款银行信息同步
+     * @param map
+     */
+    void syncPayBankInfo(Map map);
+
+    /**
+     * 发起付款
+     * @param data
+     */
+    void payMent(Map data);
+
+
+    /**
+     * 手工付款
+     *
+     */
+    void handWorkPayment(Map data);
+
+    /**
+     * 同步凭证状态
+     */
+    void synProofStatus(String formInstId);
+}

+ 57 - 0
mjava-dali/src/main/resources/application-dev.yml

@@ -0,0 +1,57 @@
+# 环境配置
+server:
+  port: 101
+  servlet:
+    context-path: /api/test/dali
+
+# condition
+spel:
+  scheduling: false        # 定时任务是否执行
+  multiSource: false       # 是否多数据源配置
+
+spring:
+  autoconfigure:
+    exclude:
+      - org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
+      - org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration
+#  datasource:
+#    hikari:
+#      connection-init-sql: SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci           # SqlServer, Oracle 无需设置类型
+#    driver-class-name: com.mysql.cj.jdbc.Driver
+#    username: root
+#    password: cp-root@2022++
+#    url: jdbc:mysql://47.97.181.40:3306/dingtalk?serverTimezone=Asia/Shanghai&useUnicode=yes&characterEncoding=UTF-8&useSSL=true
+  jpa:
+    hibernate:
+      ddl-auto: none      # JPA对表没有任何操作
+#    show-sql: true
+#    database: MYSQL
+#    database-platform: org.hibernate.dialect.MySQL57Dialect
+# filepath
+#file:
+#  path:
+#    file: /Users/malk/server/_Tool/var/mjava/tmp/file/
+#    image: /Users/malk/server/_Tool/var/mjava/tmp/image/
+#    tmp: /Users/malk/server/_Tool/var/mjava/tmp/
+#  source:
+#    fonts: /Users/malk/server/_Tool/fonts/simsun.ttc
+#logging:
+#  file:
+#    path: /Users/malk/server/_Tool/var/mjava/log
+
+# dingtalk
+dingtalk:
+  agentId: 3767934184
+  appKey: dingjqgj6pq17jkk7osz
+  appSecret: fFUnuFa08chgMGZBNLm1xvWMFfywAmnppVYQB4CFsbm29Dw6R5UynM8Bn0YdINtR
+  corpId:
+  aesKey: HNcI7XTw2Qe2EyMynPRebSOPwKzgew7GnjODyUi5rzr
+  token: quaLT3hjWjTqrb96UwEURjtLImCA6obJWX
+  operator: ""   # OA管理员账号
+
+# aliwork
+#aliwork:
+#  appType: "APP_LNBUWW7ZBXRUWE29PCOV"
+#  systemToken: "WC866ZA1PI1B2L1JDNL334F44KI03GREIV1ILZ13"
+
+

+ 41 - 0
mjava-dali/src/main/resources/application-prod.yml

@@ -0,0 +1,41 @@
+# 环境配置
+server:
+  port: 101
+  servlet:
+    context-path: /api/test/dali
+
+# condition
+spel:
+  scheduling: true        # 定时任务是否执行
+  multiSource: false       # 是否多数据源配置
+
+spring:
+  # database
+  datasource:
+    hikari:
+      connection-init-sql: SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci           # SqlServer, Oracle 无需设置类型
+    driver-class-name: com.mysql.cj.jdbc.Driver
+    username: root
+    password: cp-root@2022++
+    url: jdbc:mysql://47.97.181.40:3306/dingtalk?serverTimezone=Asia/Shanghai&useUnicode=yes&characterEncoding=UTF-8&useSSL=true
+  jpa:
+    hibernate:
+      ddl-auto: none      # JPA对表没有任何操作
+    show-sql: true
+    database: MYSQL
+    database-platform: org.hibernate.dialect.MySQL57Dialect
+
+# dingtalk
+dingtalk:
+  agentId: 3767934184
+  appKey: dingjqgj6pq17jkk7osz
+  appSecret: fFUnuFa08chgMGZBNLm1xvWMFfywAmnppVYQB4CFsbm29Dw6R5UynM8Bn0YdINtR
+  corpId:
+  aesKey: HNcI7XTw2Qe2EyMynPRebSOPwKzgew7GnjODyUi5rzr
+  token: quaLT3hjWjTqrb96UwEURjtLImCA6obJWX
+  operator: ""   # OA管理员账号
+
+# aliwork
+#aliwork:
+#  appType: "APP_LNBUWW7ZBXRUWE29PCOV"
+#  systemToken: "WC866ZA1PI1B2L1JDNL334F44KI03GREIV1ILZ13"

+ 49 - 0
mjava-dali/src/test/java/test.java

@@ -0,0 +1,49 @@
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.XmlUtil;
+import cn.hutool.http.HttpRequest;
+import cn.hutool.json.XML;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.malk.dali.Boot;
+import com.malk.dali.service.Impl.PayServiceImpl;
+import com.malk.server.aliwork.YDConf;
+import com.malk.server.aliwork.YDParam;
+import com.malk.server.dingtalk.DDConf;
+import com.malk.server.dingtalk.crypto.DingCallbackCrypto;
+import com.malk.service.aliwork.YDClient;
+import com.malk.service.aliwork.YDService;
+import com.malk.service.dingtalk.DDClient;
+import com.malk.service.dingtalk.DDClient_Event;
+import com.malk.utils.UtilHttp;
+import com.malk.utils.UtilMap;
+
+import lombok.extern.slf4j.Slf4j;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import javax.annotation.Resource;
+import java.text.SimpleDateFormat;
+import java.time.LocalDate;
+import java.util.*;
+
+@Slf4j
+@RunWith(SpringRunner.class)
+@SpringBootTest(classes = Boot.class)
+public class test {
+
+    @Autowired
+    private DDConf ddConf;
+    @Autowired
+    private DDClient_Event ddClient_event;
+    @Autowired
+    private DDClient ddClient;
+    @Test
+    public void sonUpdateTest() throws DingCallbackCrypto.DingTalkEncryptException {
+        String accessToken = ddClient.getAccessToken("dingjqgj6pq17jkk7osz", "fFUnuFa08chgMGZBNLm1xvWMFfywAmnppVYQB4CFsbm29Dw6R5UynM8Bn0YdINtR");
+        System.out.println(accessToken);
+    }
+}

+ 39 - 0
mjava-dali/src/test/resource/server.sh

@@ -0,0 +1,39 @@
+#!/bin/bash
+
+appname='mjava-dongfangxinhua'
+
+if [ "$1" == "dev" ]; then
+  java -Xms256m -Xmx256m -jar $appname.jar --spring.profiles.active=dev
+else
+  if [ "$1" == "start" ]; then
+    nohup java -Xms256m -Xmx256m -jar $appname.jar &
+    echo "server prod is starting"
+    tail -f log/info.log
+  else
+    if [ "$1" == "test" ]; then
+      nohup java -Xms256m -Xmx256m -jar $appname.jar --spring.profiles.active=test &
+      echo "server test is starting"
+      tail -f log/info.log
+    else
+      if [ "$1" == "stop" ]; then
+        PID=$(ps -ef | grep $appname.jar | grep -v grep | awk '{ print $2 }')
+        if [ -z "$PID" ]; then
+          echo "server is already stopped"
+        else
+          echo kill $PID
+          kill $PID
+        fi
+      else
+        if [ "$1" == "status" ]; then
+          PID=$(ps -ef | grep $appname.jar | grep -v grep | awk '{ print $2 }')
+          if [ -z "$PID" ]; then
+            echo "server is stopped"
+          else
+            echo "server is running"
+            echo $PID
+          fi
+        fi
+      fi
+    fi
+  fi
+fi

+ 1 - 0
mjava/src/main/java/com/malk/server/common/VenR.java

@@ -31,6 +31,7 @@ public class VenR extends BaseDto {
     public static final String RC_FXK = "com.malk.server.fxiaoke.FXKR ";
     public static final String RC_XBB = "com.malk.server.xbongbong.XBBR";
     public static final String RC_VK = "com.malk.server.vika.VKR";
+    public static final String RC_YJ = "com.malk.dali.server.yunjian.DDR";
 
     /**
      * 通用post请求