sbtjtserver/zhaoxh пре 7 месеци
родитељ
комит
0290ad6d54

+ 86 - 1
src/main/java/fi/gl/opplugin/VoucherOpPlugin.java

@@ -1,9 +1,23 @@
 package fi.gl.opplugin;
 
 import fi.gl.business.VoucherValidator;
+import fi.gl.task.AutoSynVoucher;
+import kd.bos.dataentity.entity.DynamicObject;
 import kd.bos.entity.plugin.AbstractOperationServicePlugIn;
 import kd.bos.entity.plugin.AddValidatorsEventArgs;
+import kd.bos.entity.plugin.args.AfterOperationArgs;
+import kd.bos.logging.Log;
+import kd.bos.logging.LogFactory;
+import kd.bos.orm.query.QFilter;
+import kd.bos.servicehelper.BusinessDataServiceHelper;
+import kd.scm.bid.common.constant.OperationConstant;
 import kd.sdk.plugin.Plugin;
+import org.apache.commons.lang3.StringUtils;
+
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.PreparedStatement;
+import java.sql.SQLException;
 
 /**
  * 凭证操作插件
@@ -11,10 +25,81 @@ import kd.sdk.plugin.Plugin;
  * 主要功能:校验凭证是否日结
  */
 public class VoucherOpPlugin  extends AbstractOperationServicePlugIn implements Plugin {
-
+    protected static final Log log = LogFactory.getLog(VoucherOpPlugin.class);
     @Override
     public void onAddValidators(AddValidatorsEventArgs e) {
         super.onAddValidators(e);
         e.addValidator(new VoucherValidator());
     }
+
+    @Override
+    public void afterExecuteOperationTransaction(AfterOperationArgs e) {
+        super.afterExecuteOperationTransaction(e);
+        String operateKey = e.getOperationKey();
+        if (StringUtils.equals("antipost", operateKey)) {//反过账
+            DynamicObject[] dateEntities = e.getDataEntities();
+            String billnos = "";
+            for (DynamicObject dateEntity : dateEntities) {
+                billnos = billnos + ",'" + dateEntity.getString("billno") + "'";
+            }
+
+            if(!"".equals(billnos)){
+                billnos = billnos.substring(1);
+                synYY(billnos);
+            }
+        }
+    }
+
+    private void synYY(String billnos) {
+        Connection conn = null;
+        PreparedStatement pstmt = null;
+        //连接数据库
+        try {
+            conn = getConnect(); // 获取数据库连接
+            if(conn!=null){
+                String deleteSql = "DELETE jf_voucher WHERE voucherno in("+billnos+")";
+                log.info("[凭证反过账同步用友]执行删除sql"+deleteSql);
+                // 准备删除语句
+                pstmt = conn.prepareStatement(deleteSql);
+                // 执行删除操作
+                int affectedRows = pstmt.executeUpdate();
+                log.info("[凭证反过账同步用友]成功删除"+affectedRows+"条");
+            }
+        } catch (ClassNotFoundException e) {
+            log.info("[凭证反过账同步用友]删除失败:"+e.getMessage());
+            throw new RuntimeException(e);
+        } catch (SQLException e) {
+            log.info("[凭证反过账同步用友]删除失败:"+e.getMessage());
+            throw new RuntimeException(e);
+        }finally{
+            try {
+                if(conn!=null){
+                    conn.setAutoCommit(true); // 重新开启自动提交
+                    conn.close();
+                }
+                if(pstmt!=null){
+                    pstmt.close();
+                }
+            }catch (SQLException e) {
+                throw new RuntimeException(e);
+            }
+        }
+    }
+
+    private Connection getConnect() throws ClassNotFoundException, SQLException {
+        //1.获取接口链接等信息
+        DynamicObject jkpzxx = BusinessDataServiceHelper.loadSingle("nckd_jkpzxx",
+                new QFilter[]{new QFilter("number","=","synvoucher")});
+        String servername =  jkpzxx.getString("nckd_servername");
+        String port =  jkpzxx.getString("nckd_port");
+        String username = jkpzxx.getString("nckd_user");
+        String password = jkpzxx.getString("nckd_password");
+        String jdbcUrl = "jdbc:oracle:thin:@"+servername+":"+port+"/service";
+        // 加载Oracle JDBC驱动
+        Class.forName("oracle.jdbc.driver.OracleDriver");
+        // 建立连接
+        Connection conn = DriverManager.getConnection(jdbcUrl, username, password);
+
+        return conn;
+    }
 }

+ 15 - 3
src/main/java/fi/gl/task/AutoSynVoucher.java

@@ -66,24 +66,28 @@ public class AutoSynVoucher extends AbstractTask {
                 }
 
                 //查找待同步数据执行插入数据
+                log.info("[凭证反同步用友]同步数据执行插入开始");
                 pstmt1 = conn.prepareStatement("INSERT INTO jf_voucher (" + DB_VOUCHER_FIELDS + ") VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)");
                 doExecuteNewData(conn,pstmt1,orgMap_numbber,orgMap_name);
+                log.info("[凭证反同步用友]同步数据执行插入结束");
 
                 //清空汇总中间表
                 pstmt2 = conn.createStatement();
                 String deleteSql = "DELETE FROM jf_balance";
                 int affectedRows = pstmt2.executeUpdate(deleteSql);
-                log.info("删除中间表记录数:"+affectedRows);
+                log.info("[凭证反同步用友]删除中间表记录数:"+affectedRows);
                 conn.commit();
 
                 //重新汇总数据插入汇总中间表
+                log.info("[凭证反同步用友]同步汇总数据执行插入开始");
                 pstmt3 = conn.prepareStatement("INSERT INTO jf_balance (" + DB_BALANCE_FIELDS + ") VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?)");
                 doExecuteTotalData(conn,pstmt3,orgMap_numbber,orgMap_name);
+                log.info("[凭证反同步用友]同步汇总数据执行插入结束");
             }else{
-                log.info("连接用友总账数据库失败");
+                log.info("[凭证反同步用友]连接用友总账数据库失败");
             }
         } catch (Exception e) {
-            log.info("同步凭证到用友总账数据库失败:"+e.getMessage());
+            log.info("[凭证反同步用友]同步凭证到用友总账数据库失败:"+e.getMessage());
             throw new RuntimeException(e);
         } finally{
             try {
@@ -93,6 +97,9 @@ public class AutoSynVoucher extends AbstractTask {
                 if(pstmt2!=null){
                     pstmt2.close();
                 }
+                if(pstmt3!=null){
+                    pstmt3.close();
+                }
                 if(conn!=null){
                     conn.setAutoCommit(true); // 重新开启自动提交
                     conn.close();
@@ -226,6 +233,7 @@ public class AutoSynVoucher extends AbstractTask {
         int count = 0;
         //获取待同步数据
         DynamicObject[] voucherCol = getVoucherDatas();
+        log.info("[凭证反同步用友]获取待同步数据条数:"+voucherCol.length);
         String ids = "";
         //数据日期
         SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");
@@ -237,8 +245,10 @@ public class AutoSynVoucher extends AbstractTask {
             if (++count % batchSize == 0) {
                 pstmt.executeBatch(); // 执行批处理
                 conn.commit(); // 可以在每个批次后提交事务
+                log.info("[凭证反同步用友]提交批次");
                 pstmt.clearBatch(); // 清空批处理
                 updateBillSign(ids); //更新凭证同步标识
+                log.info("[凭证反同步用友]更新凭证同步标识");
                 ids = "";
             }
         }
@@ -247,8 +257,10 @@ public class AutoSynVoucher extends AbstractTask {
         if (count % batchSize != 0) {
             pstmt.executeBatch(); // 执行最后一个批次
             conn.commit();
+            log.info("[凭证反同步用友]提交最后一个批次");
             pstmt.clearBatch();
             updateBillSign(ids);
+            log.info("[凭证反同步用友]更新凭证同步标识");
         }
     }