瀏覽代碼

更新行名行号,减值数据调度计划

zhouger 7 月之前
父節點
當前提交
669cb785fb

+ 0 - 24
src/main/java/sys/sc/formplugin/TestPlugin.java

@@ -48,30 +48,6 @@ public class TestPlugin  extends AbstractListPlugin {
     public static int port = 22;//端口号
     public static String password="Kd@86262007";//用户密码
 
-
-
-//    public InputStream fileInputStream(String remoteFilePath) throws JSchException, SftpException {
-////        String remoteFilePath = "/home/kingdee/cosmic/nginx-appstatic/store/appstatic/20240908/zzry.dat";  // 上传到远程服务器的路径
-//        JSch jsch = new JSch();
-//        Session session ;
-//
-//        // 1. 设置会话
-//        session = jsch.getSession(username, host, port);
-//        session.setPassword(password);
-//        // 2. 配置 SSH 设置
-//        Properties config = new Properties();
-//        config.put("StrictHostKeyChecking", "no");  // 跳过主机密钥检查
-//        session.setConfig(config);
-//        // 3. 连接到远程服务器
-//        session.connect();
-//        // 4. 打开 SFTP 通道
-//        Channel channel = session.openChannel("sftp");
-//        channel.connect();
-//        ChannelSftp sftpChannel = (ChannelSftp) channel;
-//        InputStream inputStream = sftpChannel.get(remoteFilePath);
-//        return inputStream;
-//    }
-
     //根据接口配置信息获取组织人员,拼接服务器文件路径url,参数为urlcode接口配置信息编码
     public String getFileUrl(String urlcode) throws IOException {
         //组织人员接口配置信息获取

+ 210 - 0
src/main/java/sys/sc/formplugin/UpdateBankDailyTask.java

@@ -0,0 +1,210 @@
+package sys.sc.formplugin;
+
+import com.alibaba.druid.support.logging.Log;
+import com.alibaba.druid.support.logging.LogFactory;
+import kd.bos.context.RequestContext;
+import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.dataentity.metadata.dynamicobject.DynamicObjectType;
+import kd.bos.entity.EntityMetadataCache;
+import kd.bos.exception.KDException;
+import kd.bos.orm.query.QCP;
+import kd.bos.orm.query.QFilter;
+import kd.bos.schedule.api.MessageHandler;
+import kd.bos.schedule.executor.AbstractTask;
+import kd.bos.servicehelper.BusinessDataServiceHelper;
+import kd.bos.servicehelper.operation.SaveServiceHelper;
+import sys.sc.opplugin.utils.SftpClient;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+/**
+ * @author cjz
+ * @date 2024/9/10 9:00
+ * @description:日常更新行名行号调度计划
+ */
+public class UpdateBankDailyTask extends AbstractTask {
+    private static final Log log = LogFactory.getLog(UpdateBankDailyTask.class);
+    public static String host="192.168.10.69";//服务器ip地址
+    public static String username="root";//用户名
+    public static int port = 22;//端口号
+    public static String password="Kd@86262007";//用户密码
+
+
+    @Override
+    public MessageHandler getMessageHandle() {
+        return super.getMessageHandle();
+    }
+
+    @Override
+    public void execute(RequestContext requestContext, Map<String, Object> map) throws KDException {
+        log.info("----------------------获取服务器连接------------------------");
+        //获取服务器连接
+        SftpClient sftpClient=new SftpClient(host,username,password,port);
+        try {
+            sftpClient.connect();
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+        String mes="-----------------正在执行任务,读取行名行号---------------------";
+        log.info(mes+requestContext);
+        //行名行号表字段
+        List<String> selector = Arrays.asList(
+                "number", "name"
+        );
+        //行名行号表标识
+        String bd_bebank="bd_bebank";
+        try {
+            List<DynamicObject> createdataList = new ArrayList<>();
+            List<DynamicObject> updatedataList = new ArrayList<>();
+            //文件路径
+            String fileurl = getFileUrl("hmhhurl");
+            //基础资料
+            DynamicObjectType dynamicObjectType = EntityMetadataCache.getDataEntityType(bd_bebank);
+            //国家基础资料(中国)
+            DynamicObject country= BusinessDataServiceHelper
+                    .loadSingle("bd_country","number", new QFilter[]{new QFilter("number", QCP.equals, "001")});
+            //查出所有现有的数据
+            DynamicObject[] existingData = BusinessDataServiceHelper
+                    .load(dynamicObjectType.getName(), String.join(",", selector)+",enable,nckd_datasource", null);
+            //查找文件更新的数据
+            Map<String, DynamicObject> existingDataMap = new HashMap<>();
+            for (DynamicObject obj : existingData) {
+                //单据号
+                existingDataMap.put(obj.getString(selector.get(0)), obj);
+            }
+            Set<String> processeddubilidSet = new HashSet<>();
+            //读取服务器文件并写入
+            try (BufferedReader reader = new BufferedReader(new InputStreamReader(sftpClient.fileInputStream(fileurl)))) {
+                String line;
+                while ((line = reader.readLine()) != null) {
+                    //去掉换行符|$|
+                    line = line.replace("|$|", "");
+                    //空格符号,根据这个符号分割
+                    String[] fields = line.split("\u0001");
+                    //如果获取的数据行不等于预设字段的行,则跳过这行数据
+//                        if (fields.length != selector.size()) {
+//                            continue;
+//                        }
+                    //获取单据号
+                    String dubil_id = fields[0];
+                    boolean isUpdated = false;
+                    DynamicObject data;
+                    processeddubilidSet.add(dubil_id);
+                    if (existingDataMap.containsKey(dubil_id)) {
+                        //获取对应单据号的数据
+                        data = existingDataMap.get(dubil_id);
+                        for (int i = 0; i < selector.size(); i++) {
+                            String fieldName = selector.get(i);
+                            String newValue = fields[i];
+                            String existingValue = data.getString(fieldName);
+                            //判断数据是否与之前的数据相同,不相同则更新
+                            if (!Objects.equals(existingValue, newValue)) {
+                                data.set(fieldName, newValue);
+                                isUpdated = true;
+                            }
+                        }
+                        //更新了数据则设置数据更新的时间
+                        if (isUpdated) {
+                            updatedataList.add(data);
+                        }
+                    } else {
+                        //不存在这条数据则新增一条到data中
+                        data = new DynamicObject(dynamicObjectType);
+                        for (int i = 0; i < selector.size(); i++) {
+                            data.set(selector.get(i), fields[i]);
+                        }
+                        //国家
+                        data.set("country",country);
+                        //省
+                        data.set("provincetxt","江西");
+                        //市
+                        data.set("citytxt","南昌");
+                        //联行号等于行号
+                        data.set("union_number",fields[0]);
+                        //设置可用状态
+                        data.set("enable","1");
+                        //设置数据来源,0为手动更新,1为文件自动更新
+                        data.set("nckd_datasource","1");
+                        createdataList.add(data);
+                    }
+                }
+            }
+            //关闭连接
+            sftpClient.disconnect();
+            //获取自动添加的数据,与手动添加的数据做区分,nckd_datasource:1为读取数据添加,0为手动添加
+            DynamicObject[] autoData = BusinessDataServiceHelper
+                    .load(dynamicObjectType.getName()
+                            , String.join(",", selector)+",enable,nckd_datasource",
+                            new QFilter[]{new QFilter("nckd_datasource", QCP.equals, "1")});
+            for (DynamicObject autoDatum : autoData) {
+                //如果导入的数据在系统中没有则禁用
+                if (!processeddubilidSet.contains(autoDatum.getString("number"))) {
+                    //设置禁用
+                    autoDatum.set("enable", "0");
+                }
+            }
+            SaveServiceHelper.save(autoData);
+            //查找更新数据
+            for (Map.Entry<String, DynamicObject> entry : existingDataMap.entrySet()) {
+                String dubil_id = entry.getKey();
+                DynamicObject data = entry.getValue();
+                if (!processeddubilidSet.contains(dubil_id)) {
+//                        data.set("nckd_isdelete", true);
+                    updatedataList.add(data);
+                }
+            }
+            //新增数据不为空则更新到数据库中
+            if (!createdataList.isEmpty()) {
+                SaveServiceHelper.save(dynamicObjectType, createdataList.toArray(new DynamicObject[0]));
+            }
+            //更新的数据不为空,则更新到数据库中
+            if (!updatedataList.isEmpty()) {
+                SaveServiceHelper.save(updatedataList.get(0).getDynamicObjectType(), updatedataList.toArray(new DynamicObject[0]));
+            }
+            log.info("------------------数据已成功保存------------------");
+        } catch (IOException ex) {
+            ex.printStackTrace();
+            log.info("----------------------读取文件时发生错误-----------------");
+        } catch (Exception ex) {
+            throw new RuntimeException(ex);
+        }
+    }
+
+    @Override
+    public boolean isSupportReSchedule() {
+        return super.isSupportReSchedule();
+    }
+
+    //根据接口配置信息获取组织人员,拼接服务器文件路径url,参数为urlcode接口配置信息编码
+    public String getFileUrl(String urlcode)
+    {
+        //组织人员接口配置信息获取
+        DynamicObject nckd_jkpzxx= BusinessDataServiceHelper
+                .loadSingle("nckd_jkpzxx", new QFilter[]{new QFilter("number", "=", urlcode)});
+        //取文件名
+        String nckd_filename=nckd_jkpzxx.getString("nckd_filename");
+        //获取文件路径
+        String nckd_url=nckd_jkpzxx.getString("nckd_url");
+        //当前日期
+        Date currentDate=new Date();
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(currentDate);
+        calendar.add(Calendar.DATE, -1); // 将日期减少一天
+        //日期减少一天
+        Date newDate = calendar.getTime();
+        //转换日期格式
+        SimpleDateFormat sf=new SimpleDateFormat("yyyyMMdd");
+        String datestr=sf.format(newDate);
+        //文件路径拼接
+        //真实路径
+        if (nckd_url.equals("/var/appstatic/")) {
+            nckd_url="/home/kingdee/cosmic/nginx-appstatic/store/appstatic/";
+        }
+        String realPath = nckd_url+datestr+"/"+nckd_filename;
+        return realPath;
+    }
+}

+ 150 - 0
src/main/java/sys/sc/formplugin/UpdateImpairmentDailyTask.java

@@ -0,0 +1,150 @@
+package sys.sc.formplugin;
+
+import com.alibaba.druid.support.logging.Log;
+import com.alibaba.druid.support.logging.LogFactory;
+import com.jcraft.jsch.SftpException;
+import kd.bos.context.RequestContext;
+import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.dataentity.metadata.dynamicobject.DynamicObjectType;
+import kd.bos.entity.EntityMetadataCache;
+import kd.bos.exception.KDException;
+import kd.bos.orm.query.QCP;
+import kd.bos.orm.query.QFilter;
+import kd.bos.schedule.api.MessageHandler;
+import kd.bos.schedule.executor.AbstractTask;
+import kd.bos.servicehelper.BusinessDataServiceHelper;
+import kd.bos.servicehelper.operation.DeleteServiceHelper;
+import kd.bos.servicehelper.operation.SaveServiceHelper;
+import sys.sc.opplugin.utils.SftpClient;
+
+import java.io.*;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+/**
+ * @author cjz
+ * @date 2024/9/10 11:06
+ * @description:减值数据自动更新
+ */
+public class UpdateImpairmentDailyTask extends AbstractTask {
+    private static final Log log = LogFactory.getLog(UpdateImpairmentDailyTask.class);
+    public static String host="192.168.10.69";//服务器ip地址
+    public static String username="root";//用户名
+    public static int port = 22;//端口号
+    public static String password="Kd@86262007";//用户密码
+
+
+    @Override
+    public MessageHandler getMessageHandle() {
+        return super.getMessageHandle();
+    }
+
+    @Override
+    public void execute(RequestContext requestContext, Map<String, Object> map) throws KDException {
+        log.info("---------------------获取服务器连接--------------------");
+        //获取服务器连接
+        SftpClient sftpClient=new SftpClient(host,username,password,port);
+        try {
+            sftpClient.connect();
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+        String mes="-------------------------正在执行任务,读取减值数据----------------------";
+        log.info(mes+requestContext);
+        try {
+            //文件路径
+            String filelocation=getFileUrl("jzsjurl");
+            //减值数据基础资料
+            DynamicObjectType dynamicObjectType = EntityMetadataCache.getDataEntityType("nckd_impairment");
+            //减值表字段
+            List<String> selector = Arrays.asList(
+                    "nckd_dubil_id", "nckd_cust_id", "nckd_cur_cd", "nckd_dubil_amt", "nckd_asset_bal",
+                    "nckd_stage_rslt", "nckd_ecl_ratio"
+            );
+            List<DynamicObject> createdataList = new ArrayList<>();
+            QFilter filter=new QFilter("nckd_isdelete", QCP.equals,false);
+            //查询已经存在的数据
+            DynamicObject[] existingData = BusinessDataServiceHelper
+                    .load(dynamicObjectType.getName(), String.join(",", selector) + ",nckd_isdelete", new QFilter[]{filter});
+            Set<String> processeddubilidSet = new HashSet<>();
+            try (BufferedReader reader = new BufferedReader(new InputStreamReader(sftpClient.fileInputStream(filelocation)))) {
+                String line;
+                while ((line = reader.readLine()) != null) {
+                    //去掉换行符|$|
+                    line = line.replace("|$|", "");
+                    //空格符号,根据这个符号分割
+                    String[] fields = line.split("\u0001");
+                    //如果获取的数据行不等于预设字段的行,则跳过这行数据
+                    if (fields.length != selector.size()) {
+                        continue;
+                    }
+                    //获取单据号
+                    String dubil_id = fields[0];
+                    DynamicObject data;
+                    processeddubilidSet.add(dubil_id);
+                    //新增数据
+                    data = new DynamicObject(dynamicObjectType);
+                    for (int i = 0; i < selector.size(); i++) {
+                        data.set(selector.get(i), fields[i]);
+                    }
+                    //设置创建时间
+                    data.set("nckd_creatd",new Date());
+                    data.set("nckd_isdelete",false);
+                    createdataList.add(data);
+                }
+            }
+            sftpClient.disconnect();
+            //新增数据不为空则更新到数据库中
+            if (!createdataList.isEmpty()) {
+                //转换list为DynamicObject类型
+                SaveServiceHelper.save(dynamicObjectType, createdataList.toArray(new DynamicObject[0]));
+            }
+            //删除所有的数据,再新增
+            for (int i=0;i<existingData.length;i++) {
+                existingData[i].set("nckd_isdelete",true);
+            }
+            SaveServiceHelper.save(existingData);
+            QFilter qFilter=new QFilter("nckd_isdelete",QCP.equals,true);
+            DeleteServiceHelper.delete(dynamicObjectType.getName(),new QFilter[]{qFilter});
+            log.info("-----------------------数据已成功保存---------------------");
+        } catch (IOException ex) {
+            ex.printStackTrace();
+            log.error("----------------------------读取文件发生错误"+ex.getMessage()+"--------------------------");
+        } catch (SftpException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    @Override
+    public boolean isSupportReSchedule() {
+        return super.isSupportReSchedule();
+    }
+
+    //根据接口配置信息获取组织人员,拼接服务器文件路径url,参数为urlcode接口配置信息编码
+    public String getFileUrl(String urlcode) throws IOException {
+        //组织人员接口配置信息获取
+        DynamicObject nckd_jkpzxx= BusinessDataServiceHelper
+                .loadSingle("nckd_jkpzxx", new QFilter[]{new QFilter("number", "=", urlcode)});
+        //取文件名
+        String nckd_filename=nckd_jkpzxx.getString("nckd_filename");
+        //获取文件路径
+        String nckd_url=nckd_jkpzxx.getString("nckd_url");
+        //当前日期
+        Date currentDate=new Date();
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(currentDate);
+        calendar.add(Calendar.DATE, -1); // 将日期减少一天
+        //日期减少一天
+        Date newDate = calendar.getTime();
+        //转换日期格式
+        SimpleDateFormat sf=new SimpleDateFormat("yyyyMMdd");
+        String datestr=sf.format(newDate);
+        //真实路径
+        if (nckd_url.equals("/var/appstatic/")) {
+            nckd_url="/home/kingdee/cosmic/nginx-appstatic/store/appstatic/";
+        }
+        //文件完整路径
+        String realPath = nckd_url+datestr+ File.separator+nckd_filename;
+        return realPath;
+    }
+}