Forráskód Böngészése

生成dat文件方法封装

zhouger 7 hónapja
szülő
commit
816d8eb850

+ 90 - 0
src/main/java/kd/bos/newdevportal/table/TableDataBasicPlugin.java

@@ -0,0 +1,90 @@
+package kd.bos.newdevportal.table;
+
+import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.dataentity.entity.DynamicObjectCollection;
+import kd.bos.db.DBRoute;
+import kd.bos.entity.datamodel.events.PropertyChangedArgs;
+import kd.bos.form.events.AfterDoOperationEventArgs;
+
+import kd.bos.list.plugin.AbstractListPlugin;
+import kd.bos.newdevportal.table.DesignerTable;
+import kd.bos.newdevportal.table.TableManagerListPlugin;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.Map;
+import kd.bos.dataentity.utils.StringUtils;
+import kd.bos.db.DB;
+import kd.bos.db.DBRoute;
+import kd.bos.entity.EntityMetadataCache;
+import kd.bos.entity.datamodel.ListSelectedRow;
+import kd.bos.entity.datamodel.ListSelectedRowCollection;
+import kd.bos.form.control.events.ItemClickEvent;
+import kd.bos.list.BillList;
+import kd.bos.metadata.dao.MetadataDao;
+import kd.bos.orm.query.QCP;
+import kd.bos.orm.query.QFilter;
+import kd.bos.servicehelper.BusinessDataServiceHelper;
+import kd.scm.bid.formplugin.report.biddetailquery.QingFiledContent;
+import sys.sc.opplugin.utils.DatFileCreatUtils;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+
+/**
+ * @author cjz
+ * @date 2024/9/18 11:30
+ * @description:数据表基础资料,选择数据表带出数据表信息
+ */
+ public class TableDataBasicPlugin extends AbstractListPlugin {
+    //数据表基础资料标识
+    private static String nckd_tabledatabasic="nckd_tabledatabasic";
+
+    //选择数据表基础资料后,将数据表信息带出
+    public void propertyChanged(PropertyChangedArgs e){
+        super.beforePropertyChanged(e);
+        String name=e.getProperty().getName();
+        if (nckd_tabledatabasic.equals(name)) {
+            //先清空表字段分录
+            this.getModel().deleteEntryData("nckd_tableentry");
+            //获取单据模型
+            DynamicObject data=this.getModel().getDataEntity(true);
+            //获取数据表基础资料
+            DynamicObject tabledatabasic=data.getDynamicObject(nckd_tabledatabasic);
+            //业务应用编码
+            String bizappnumber=tabledatabasic.getString("nckd_bizapp.number");
+            //表命名字段赋值
+            this.getModel().setValue("number",tabledatabasic.getString("tablename"));
+            //业务编码赋值
+            this.getModel().setValue("nckd_biazppnum",bizappnumber);
+            //表名称
+            this.getModel().setValue("name",tabledatabasic.getString("nckd_entity.name"));
+            DBTableProviderNew provider =new DBTableProviderNew();
+            //设置为sys系统服务云库
+            provider.setRoute(DBRoute.of("sys"));
+            Map<String, DesignerTable> tableMap =provider
+                    .getTableInfo_youhua(Collections.singletonList(tabledatabasic.getString("tablename")),
+                            Collections.singletonList(tabledatabasic.getString("id")));
+            for (Map.Entry<String, DesignerTable> table : tableMap.entrySet()) {
+                //表名
+                String tablename = table.getKey();
+                DesignerTable designerTable = table.getValue();
+                String comment = designerTable.getName();
+                //获取表字段
+                Iterator fields = designerTable.getCols().iterator();
+                while(fields.hasNext()) {
+                    DesignerColumn col = (DesignerColumn)fields.next();
+                    String f_fieldkey = col.getCode();//字段标识
+                    String f_fieldname = col.getName();//字段名称
+                    //表字段新增分录行
+                    int rowIndex = this.getModel().createNewEntryRow("nckd_tableentry");
+                    //字段标识
+                    this.getModel().setValue("nckd_entrycode",f_fieldkey,rowIndex);
+                    //字段名
+                    this.getModel().setValue("nckd_entryname",f_fieldname,rowIndex);
+                    this.getModel().setValue("nckd_isable",1,rowIndex);
+                }
+            }
+        }
+    }
+}

+ 57 - 0
src/main/java/sys/sc/formplugin/CreatDatPlugin.java

@@ -0,0 +1,57 @@
+package sys.sc.formplugin;
+
+import com.alipay.api.kms.aliyun.utils.BackoffUtils;
+import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.dataentity.entity.DynamicObjectCollection;
+import kd.bos.form.events.AfterDoOperationEventArgs;
+import kd.bos.list.plugin.AbstractListPlugin;
+import kd.bos.servicehelper.BusinessDataServiceHelper;
+import sys.sc.opplugin.utils.DatFileCreatUtils;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author cjz
+ * @date 2024/9/18 17:05
+ * @description:生成dat文件
+ */
+public class CreatDatPlugin extends AbstractListPlugin {
+
+    //数据表字段标识
+    private static String nckd_tablebasic="nckd_tablebasic";
+
+    //获取分录中表字段需要生成的所有字段
+    public void afterDoOperation(AfterDoOperationEventArgs arg){
+        String name=arg.getOperateKey();
+        if (name.equals("creatfile"))
+        {
+            DynamicObject dynamicObject=this.getModel().getDataEntity(true);
+            List<String> fileList=new ArrayList<>();
+            //获取当前分录
+            DynamicObjectCollection dynamicObjectCollection=dynamicObject.getDynamicObjectCollection("nckd_tableentry");
+            for (DynamicObject item:dynamicObjectCollection) {
+                //将打勾的字段到处
+                if (item.getBoolean("nckd_isable")) {
+                    //需要导入的标识写入list中
+                    fileList.add(item.getString("nckd_entrycode"));
+                }
+            }
+            //获取当前选择的表名
+            String tablenumber=dynamicObject.getString("number");
+            //业务编码
+            String bizappnum=dynamicObject.getString("nckd_biazppnum");
+            //生成文件的路径
+            String filePath="D:\\12331.dat";
+            //分割符号
+            String spiltsign="\u0001";
+            //结束符号
+            String endsign="|$|";
+            DatFileCreatUtils datFileCreatUtils=new DatFileCreatUtils(tablenumber,bizappnum,fileList,filePath,spiltsign,endsign);
+            //生成dat文件
+            datFileCreatUtils.creatDatFile();
+        }
+
+    }
+
+}

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

@@ -8,6 +8,8 @@ import kd.bos.dataentity.entity.CloneUtils;
 import kd.bos.dataentity.entity.DynamicObject;
 import kd.bos.dataentity.entity.DynamicObjectCollection;
 import kd.bos.dataentity.metadata.dynamicobject.DynamicObjectType;
+import kd.bos.db.DB;
+import kd.bos.db.DBRoute;
 import kd.bos.entity.EntityMetadataCache;
 import kd.bos.entity.operate.result.OperationResult;
 import kd.bos.form.IFormView;
@@ -177,6 +179,9 @@ public class TestPlugin  extends AbstractListPlugin {
     //根据基础资料数据生成dat文件,nckdentry基础资料标识,selector字段标识,filePath文件路径
     public void creatDatFile(String nckdentry,List<String> selector,String filePath) {
         try {
+
+            DB.query(new DBRoute("sys"),"",null);
+
             //基础资料数据
             DynamicObjectType dynamicObjectType = EntityMetadataCache.getDataEntityType(nckdentry);
             DynamicObject[] dataList = BusinessDataServiceHelper.load(dynamicObjectType.getName(), String.join(",", selector), null);

+ 89 - 0
src/main/java/sys/sc/opplugin/utils/DatFileCreatUtils.java

@@ -0,0 +1,89 @@
+package sys.sc.opplugin.utils;
+
+import com.grapecity.documents.excel.Q;
+import kd.bos.algo.DataSet;
+
+import kd.bos.algo.Row;
+import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.dataentity.metadata.dynamicobject.DynamicObjectType;
+import kd.bos.db.DB;
+import kd.bos.db.DBRoute;
+import kd.bos.entity.EntityMetadataCache;
+import kd.bos.orm.query.QCP;
+import kd.bos.orm.query.QFilter;
+import kd.bos.orm.query.multi.QFilterFtlikeTransFunction;
+import kd.bos.servicehelper.BusinessDataServiceHelper;
+import kd.scm.bid.formplugin.report.biddetailquery.QingFiledContent;
+
+import java.io.*;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author cjz
+ * @date 2024/9/18 16:30
+ * @description:生成dat文件方法封装
+ */
+public class DatFileCreatUtils {
+    //表名
+    private  String nckdentry;
+    //业务编码
+    private String bizappnum;
+    //生成表的字段list
+    private  List<String> selector;
+    //生成文件位置
+    private  String filePath;
+    //分隔符
+    private String spiltsign;
+    //结尾符
+    private String endsign;
+
+    public DatFileCreatUtils(String nckdentry,String bizappnum,List<String> selector,String filePath,String spiltsign,String endsign)
+    {
+        this.nckdentry=nckdentry;
+        this.bizappnum=bizappnum;
+        this.selector=selector;
+        this.filePath=filePath;
+        this.spiltsign=spiltsign;
+        this.endsign=endsign;
+    }
+
+    public void creatDatFile() {
+        QFilter filtercol=new QFilter("number",QCP.equals,bizappnum);
+        //业务云
+        DynamicObject bizappcloudDy=BusinessDataServiceHelper
+                .loadSingle("bos_devportal_bizapp","id,bizcloud.number",new QFilter[]{filtercol});
+        //业务云编码
+        String bizcloudnum=bizappcloudDy.getString("bizcloud.number");
+        String sql = " /*dialect*/ select "+String.join(",", selector)+" from "+nckdentry;
+        DataSet dataSet = DB.queryDataSet(this.getClass().getName(),DBRoute.of(bizcloudnum),sql,null);
+        try {
+            File file = new File(filePath);
+            //文件路径不存在则创建文件
+            if (!file.exists()) {
+                File parentDir = file.getParentFile();
+                if (parentDir != null && !parentDir.exists()) {
+                    parentDir.mkdirs();
+                }
+                file.createNewFile();
+            }
+            try (BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(filePath), "GBK"))) {
+                while(dataSet.hasNext()) {
+                    Row data = dataSet.next();
+                    StringBuilder line = new StringBuilder();
+                    for (String field : selector) {
+                        //分割符
+                        line.append(data.get(field) != null ? data.get(field).toString() : "").append(spiltsign);
+                    }
+                    line.setLength(line.length() - 1);
+                    //结尾符
+                    line.append(endsign);
+                    writer.write(line.toString());
+                    writer.newLine();
+                }
+            }
+        } catch (IOException ex) {
+            ex.printStackTrace();
+        }
+    }
+}

+ 120 - 0
src/main/java/sys/sc/task/CreatDatDailyTask.java

@@ -0,0 +1,120 @@
+package sys.sc.task;
+
+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.entity.DynamicObjectCollection;
+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 scala.Dynamic;
+import sys.sc.opplugin.utils.DatFileCreatUtils;
+import sys.sc.opplugin.utils.SftpClient;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author cjz
+ * @date 2024/9/19 16:00
+ * @description:表数据生成dat文件,放在指定服务器路径下调度计划
+ */
+public class CreatDatDailyTask extends AbstractTask {
+    private static final Log log = LogFactory.getLog(CreatDatDailyTask.class);
+
+    //接口配置信息基础资料标识
+    private static String nckd_jkpzxx="nckd_jkpzxx";
+    //数据表字段基础资料标识
+    private static String nckd_tablebasic="nckd_tablebasic";
+    @Override
+    public MessageHandler getMessageHandle() {
+        return super.getMessageHandle();
+    }
+
+    @Override
+    public void execute(RequestContext requestContext, Map<String, Object> map) throws KDException {
+        //读取接口配置信息获取
+        DynamicObject[] jkpzDy= BusinessDataServiceHelper.load(nckd_jkpzxx,
+                        "id,number,name,nckd_servername" +
+                                ",nckd_port,nckd_url,nckd_filename,nckd_user" +
+                                ",nckd_password,nckd_split,nckd_endsign",new QFilter[]{});
+//        for (DynamicObject item:jkpzDy)
+//        {
+//            //服务器地址
+//            String nckd_servername=item.getString("nckd_servername");
+//            //服务器端口
+//            int  nckd_port=item.getInt("nckd_port");
+//            //服务器文件路径
+//            String nckd_url=item.getString("nckd_url");
+//            //文件名
+//            String nckd_filename=item.getString("nckd_filename");
+//            //用户名
+//            String nckd_user=item.getString("nckd_user");
+//            //用户密码
+//            String nckd_password=item.getString("nckd_password");
+//            //分隔符
+//            String nckd_split=item.getString("nckd_split");
+//            //结尾符
+//            String nckd_endsign=item.getString("nckd_endsign");
+//
+//
+//            //获取服务器连接
+//            SftpClient sftpClient=new SftpClient(nckd_servername,nckd_user,nckd_password,nckd_port);
+//            try {
+//                sftpClient.connect();
+//                log.info("--------------------------获取服务器连接成功-----------------------");
+//
+//            } catch (Exception e) {
+//                throw new RuntimeException(e);
+//            }
+//
+//        }
+        //取已审核的数据
+        QFilter filter=new QFilter("status", QCP.equals,"C");
+        //数据表基础资料
+        DynamicObject[] tableDy=BusinessDataServiceHelper.load(nckd_tablebasic,"id",new QFilter[]{filter});
+        log.info("----------------------读取数据表基础资料-------------------");
+        for (DynamicObject item:tableDy)
+        {
+            log.info("-------------------------获取服务器连接-----------------");
+            List<String> fileList=new ArrayList<>();
+            //获取表字段当前分录
+            DynamicObjectCollection dynamicObjectCollection=item.getDynamicObjectCollection("nckd_tableentry");
+            for (DynamicObject itemmen:dynamicObjectCollection) {
+                //将打勾的字段到处
+                if (itemmen.getBoolean("nckd_isable")) {
+                    //需要导入的标识写入list中
+                    fileList.add(itemmen.getString("nckd_entrycode"));
+                }
+            }
+            //获取当前选择的表名
+            String tablenumber=item.getString("number");
+            //业务编码
+            String bizappnum=item.getString("nckd_biazppnum");
+            //生成文件的路径
+            String filePath="D:\\12331.dat";
+            //分割符号
+            String spiltsign="\u0001";
+            //结束符号
+            String endsign="|$|";
+            DatFileCreatUtils datFileCreatUtils=new DatFileCreatUtils(tablenumber,bizappnum,fileList,filePath,spiltsign,endsign);
+            //生成dat文件
+            datFileCreatUtils.creatDatFile();
+
+        }
+
+
+
+
+    }
+
+    @Override
+    public boolean isSupportReSchedule() {
+        return super.isSupportReSchedule();
+    }
+}

+ 1 - 5
src/main/java/sys/sc/task/UpdateImpairmentDailyTask.java

@@ -165,22 +165,18 @@ public class UpdateImpairmentDailyTask extends AbstractTask {
         //查询已经存在的客户数据
         DynamicObject[] existingData = BusinessDataServiceHelper
                 .load(dynamicObjectType.getName(), String.join(",", selector),null);
-
-
         List<DynamicObject> dataListAdd = new ArrayList<>();
         //存在数据的客户号
         Map<String, DynamicObject> existingDataMap = new HashMap<>();
         for (DynamicObject obj : existingData) {
             existingDataMap.put(obj.getString("number"), obj);
         }
-
         for(DynamicObject dataList:dynamicObjectlist)
         {
             //获取这条数据的id
             String nckd_cust_id=dataList.getString("nckd_cust_id");
             //客户号不存在则保存
-            if (!existingDataMap.containsKey(nckd_cust_id))
-            {
+            if (!existingDataMap.containsKey(nckd_cust_id)) {
                 DynamicObject data = new DynamicObject(dynamicObjectType);
                 //客户号
                 data.set("number",dataList.getString("nckd_cust_id"));