123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
- 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.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 sys.sc.opplugin.utils.DatFileCreatUtils;
- import sys.sc.opplugin.utils.InterFaceImgUtils;
- import sys.sc.opplugin.utils.SftpClient;
- import java.io.File;
- import java.io.IOException;
- import java.text.SimpleDateFormat;
- import java.util.ArrayList;
- import java.util.Date;
- 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_tablebasic="nckd_tablebasic";
- @Override
- public MessageHandler getMessageHandle() {
- return super.getMessageHandle();
- }
- @Override
- public void execute(RequestContext requestContext, Map<String, Object> map) throws KDException {
- //获取调度参数
- String frequency= (String) map.get("frequency");
- //取已审核的数据
- QFilter filter=new QFilter("status", QCP.equals,"C");
- //数据表基础资料
- DynamicObject[] tableDy=BusinessDataServiceHelper
- .load(nckd_tablebasic,"id,nckd_tableentry,nckd_isable,nckd_entrycode,nckd_dooperation,number,nckd_biazppnum,creatdat",new QFilter[]{filter});
- log.info("----------------------读取数据表基础资料-------------------");
- for (DynamicObject item:tableDy) {
- //参数执行频率等于表的执行频率则生成文件
- if (frequency.equals(item.getString("nckd_dooperation"))) {
- 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 nckd_url=item.getString("nckd_filepath");
- //获取当前选择的表名
- String tablenumber=item.getString("number");
- //业务编码
- String bizappnum=item.getString("nckd_biazppnum");
- //接口配置信息获取
- //读取接口配置信息获取
- InterFaceImgUtils interFaceImgUtils=new InterFaceImgUtils("creatdat");
- //分割符号
- String spiltsign=interFaceImgUtils.getServerSplit();
- //结束符号
- String endsign=interFaceImgUtils.getServerEndsign();
- //上传文件到服务器中
- //服务器端口
- String host=interFaceImgUtils.getServerName();
- //服务器用户名
- String username=interFaceImgUtils.getServerUser();
- //服务器密码
- String password=interFaceImgUtils.getServerPassword();
- //服务器路径
- //服务器端口号
- int port= interFaceImgUtils.getProt();
- try {
- //上传文件到服务器中
- SftpClient sftpClient=new SftpClient(host,username,password,port);
- //获取服务器连接
- sftpClient.connect();
- //创建文件夹,为当天日期
- Date currentDate=new Date();
- //设置日期格式
- SimpleDateFormat sf=new SimpleDateFormat("yyyyMMdd");
- String dateStr=sf.format(currentDate);
- String filePathWithDate=nckd_url+dateStr;
- //创建文件夹,名为当前日期
- sftpClient.creatDir(filePathWithDate);
- //临时文件
- File localFile = File.createTempFile(tablenumber, ".dat");
- File dest=new File(localFile.getParent()+File.separator+tablenumber.toUpperCase()+".dat");
- //重命名文件
- localFile.renameTo(dest);
- //文件写入
- DatFileCreatUtils datFileCreatUtils=new DatFileCreatUtils(tablenumber,bizappnum,fileList,dest.getAbsolutePath(),spiltsign,endsign);
- //生成dat文件到本地
- datFileCreatUtils.creatDatFile();
- //从本地传文件到服务器
- sftpClient.fileCreat(dest.getAbsolutePath(),filePathWithDate);
- //上传后删除临时文件
- localFile.delete();
- dest.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();
- }
- }
|