package sys.sc.task; 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.entity.DynamicObjectCollection; import kd.bos.exception.KDException; import kd.bos.openapi.base.util.QFilterUtil; 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.io.File; import java.io.IOException; 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 map) throws KDException { //取已审核的数据 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 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"); //接口配置信息获取 //读取接口配置信息获取 QFilter qFilter=new QFilter("number",QCP.equals,"creatdat"); DynamicObject jkdataDy= BusinessDataServiceHelper.loadSingle(nckd_jkpzxx, "id,number,name,nckd_servername" + ",nckd_port,nckd_url,nckd_filename,nckd_user" + ",nckd_password,nckd_split,nckd_endsign",new QFilter[]{qFilter}); //服务器路径 String nckd_url=jkdataDy.getString("nckd_url"); if (nckd_url.equals("/var/appstatic/")) { nckd_url="/home/kingdee/cosmic/nginx-appstatic/store/appstatic/"; } //分割符号 String spiltsign=jkdataDy.getString("nckd_split"); //结束符号 String endsign=jkdataDy.getString("nckd_endsign"); //上传文件到服务器中 //服务器端口 String host=jkdataDy.getString("nckd_servername"); //服务器用户名 String username=jkdataDy.getString("nckd_user"); //服务器密码 String password=jkdataDy.getString("nckd_password"); //服务器路径 //服务器端口号 int port=jkdataDy.getInt("nckd_port"); try { //临时文件 File localFile = File.createTempFile(tablenumber, ".dat"); //文件写入 DatFileCreatUtils datFileCreatUtils=new DatFileCreatUtils(tablenumber,bizappnum,fileList,localFile.getAbsolutePath(),spiltsign,endsign); //生成dat文件到本地 datFileCreatUtils.creatDatFile(); //上传文件到服务器中 SftpClient sftpClient=new SftpClient(host,username,password,port); //获取服务器连接 sftpClient.connect(); //从本地传文件到服务器 sftpClient.fileCreat(localFile.getAbsolutePath(),nckd_url); //上传后删除临时文件 localFile.delete(); //关闭连接 sftpClient.disconnect(); } catch (IOException e) { throw new RuntimeException(e); } catch (SftpException e) { throw new RuntimeException(e); } catch (Exception e) { throw new RuntimeException(e); } } } @Override public boolean isSupportReSchedule() { return super.isSupportReSchedule(); } }