CreatDatDailyTask.java 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. package sys.sc.task;
  2. import com.alibaba.druid.support.logging.Log;
  3. import com.alibaba.druid.support.logging.LogFactory;
  4. import com.jcraft.jsch.SftpException;
  5. import kd.bos.context.RequestContext;
  6. import kd.bos.dataentity.entity.DynamicObject;
  7. import kd.bos.dataentity.entity.DynamicObjectCollection;
  8. import kd.bos.exception.KDException;
  9. import kd.bos.openapi.base.util.QFilterUtil;
  10. import kd.bos.orm.query.QCP;
  11. import kd.bos.orm.query.QFilter;
  12. import kd.bos.schedule.api.MessageHandler;
  13. import kd.bos.schedule.executor.AbstractTask;
  14. import kd.bos.servicehelper.BusinessDataServiceHelper;
  15. import scala.Dynamic;
  16. import sys.sc.opplugin.utils.DatFileCreatUtils;
  17. import sys.sc.opplugin.utils.SftpClient;
  18. import java.io.File;
  19. import java.io.IOException;
  20. import java.util.ArrayList;
  21. import java.util.List;
  22. import java.util.Map;
  23. /**
  24. * @author cjz
  25. * @date 2024/9/19 16:00
  26. * @description:表数据生成dat文件,放在指定服务器路径下调度计划
  27. */
  28. public class CreatDatDailyTask extends AbstractTask {
  29. private static final Log log = LogFactory.getLog(CreatDatDailyTask.class);
  30. //接口配置信息基础资料标识
  31. private static String nckd_jkpzxx="nckd_jkpzxx";
  32. //数据表字段基础资料标识
  33. private static String nckd_tablebasic="nckd_tablebasic";
  34. @Override
  35. public MessageHandler getMessageHandle() {
  36. return super.getMessageHandle();
  37. }
  38. @Override
  39. public void execute(RequestContext requestContext, Map<String, Object> map) throws KDException {
  40. //取已审核的数据
  41. QFilter filter=new QFilter("status", QCP.equals,"C");
  42. //数据表基础资料
  43. DynamicObject[] tableDy=BusinessDataServiceHelper.load(nckd_tablebasic,"id",new QFilter[]{filter});
  44. log.info("----------------------读取数据表基础资料-------------------");
  45. for (DynamicObject item:tableDy)
  46. {
  47. log.info("-------------------------获取服务器连接-----------------");
  48. List<String> fileList=new ArrayList<>();
  49. //获取表字段当前分录
  50. DynamicObjectCollection dynamicObjectCollection=item.getDynamicObjectCollection("nckd_tableentry");
  51. for (DynamicObject itemmen:dynamicObjectCollection) {
  52. //将打勾的字段到处
  53. if (itemmen.getBoolean("nckd_isable")) {
  54. //需要导入的标识写入list中
  55. fileList.add(itemmen.getString("nckd_entrycode"));
  56. }
  57. }
  58. //获取当前选择的表名
  59. String tablenumber=item.getString("number");
  60. //业务编码
  61. String bizappnum=item.getString("nckd_biazppnum");
  62. //接口配置信息获取
  63. //读取接口配置信息获取
  64. QFilter qFilter=new QFilter("number",QCP.equals,"creatdat");
  65. DynamicObject jkdataDy= BusinessDataServiceHelper.loadSingle(nckd_jkpzxx,
  66. "id,number,name,nckd_servername" +
  67. ",nckd_port,nckd_url,nckd_filename,nckd_user" +
  68. ",nckd_password,nckd_split,nckd_endsign",new QFilter[]{qFilter});
  69. //服务器路径
  70. String nckd_url=jkdataDy.getString("nckd_url");
  71. if (nckd_url.equals("/var/appstatic/")) {
  72. nckd_url="/home/kingdee/cosmic/nginx-appstatic/store/appstatic/";
  73. }
  74. //分割符号
  75. String spiltsign=jkdataDy.getString("nckd_split");
  76. //结束符号
  77. String endsign=jkdataDy.getString("nckd_endsign");
  78. //上传文件到服务器中
  79. //服务器端口
  80. String host=jkdataDy.getString("nckd_servername");
  81. //服务器用户名
  82. String username=jkdataDy.getString("nckd_user");
  83. //服务器密码
  84. String password=jkdataDy.getString("nckd_password");
  85. //服务器路径
  86. //服务器端口号
  87. int port=jkdataDy.getInt("nckd_port");
  88. try {
  89. //临时文件
  90. File localFile = File.createTempFile(tablenumber, ".dat");
  91. //文件写入
  92. DatFileCreatUtils datFileCreatUtils=new DatFileCreatUtils(tablenumber,bizappnum,fileList,localFile.getAbsolutePath(),spiltsign,endsign);
  93. //生成dat文件到本地
  94. datFileCreatUtils.creatDatFile();
  95. //上传文件到服务器中
  96. SftpClient sftpClient=new SftpClient(host,username,password,port);
  97. //获取服务器连接
  98. sftpClient.connect();
  99. //从本地传文件到服务器
  100. sftpClient.fileCreat(localFile.getAbsolutePath(),nckd_url);
  101. //上传后删除临时文件
  102. localFile.delete();
  103. //关闭连接
  104. sftpClient.disconnect();
  105. } catch (IOException e) {
  106. throw new RuntimeException(e);
  107. } catch (SftpException e) {
  108. throw new RuntimeException(e);
  109. } catch (Exception e) {
  110. throw new RuntimeException(e);
  111. }
  112. }
  113. }
  114. @Override
  115. public boolean isSupportReSchedule() {
  116. return super.isSupportReSchedule();
  117. }
  118. }