CreatDatDailyTask.java 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  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.orm.query.QCP;
  10. import kd.bos.orm.query.QFilter;
  11. import kd.bos.schedule.api.MessageHandler;
  12. import kd.bos.schedule.executor.AbstractTask;
  13. import kd.bos.servicehelper.BusinessDataServiceHelper;
  14. import sys.sc.opplugin.utils.DatFileCreatUtils;
  15. import sys.sc.opplugin.utils.InterFaceImgUtils;
  16. import sys.sc.opplugin.utils.SftpClient;
  17. import java.io.File;
  18. import java.io.IOException;
  19. import java.text.SimpleDateFormat;
  20. import java.util.ArrayList;
  21. import java.util.Date;
  22. import java.util.List;
  23. import java.util.Map;
  24. /**
  25. * @author cjz
  26. * @date 2024/9/19 16:00
  27. * @description:表数据生成dat文件,放在指定服务器路径下调度计划
  28. */
  29. public class CreatDatDailyTask extends AbstractTask {
  30. private static final Log log = LogFactory.getLog(CreatDatDailyTask.class);
  31. //数据表字段基础资料标识
  32. private static String nckd_tablebasic="nckd_tablebasic";
  33. @Override
  34. public MessageHandler getMessageHandle() {
  35. return super.getMessageHandle();
  36. }
  37. @Override
  38. public void execute(RequestContext requestContext, Map<String, Object> map) throws KDException {
  39. //获取调度参数
  40. String frequency= (String) map.get("frequency");
  41. //取已审核的数据
  42. QFilter filter=new QFilter("status", QCP.equals,"C");
  43. //数据表基础资料
  44. DynamicObject[] tableDy=BusinessDataServiceHelper
  45. .load(nckd_tablebasic,"id,nckd_tableentry,nckd_isable,nckd_entrycode,nckd_dooperation,number,nckd_biazppnum,creatdat",new QFilter[]{filter});
  46. log.info("----------------------读取数据表基础资料-------------------");
  47. for (DynamicObject item:tableDy) {
  48. //参数执行频率等于表的执行频率则生成文件
  49. if (frequency.equals(item.getString("nckd_dooperation"))) {
  50. log.info("-------------------------获取服务器连接-----------------");
  51. List<String> fileList=new ArrayList<>();
  52. //获取表字段当前分录
  53. DynamicObjectCollection dynamicObjectCollection=item.getDynamicObjectCollection("nckd_tableentry");
  54. for (DynamicObject itemmen:dynamicObjectCollection) {
  55. //将打勾的字段导出
  56. if (itemmen.getBoolean("nckd_isable")) {
  57. //需要导入的标识写入list中
  58. fileList.add(itemmen.getString("nckd_entrycode"));
  59. }
  60. }
  61. //文件生成路径
  62. String nckd_url=item.getString("nckd_filepath");
  63. //获取当前选择的表名
  64. String tablenumber=item.getString("number");
  65. //业务编码
  66. String bizappnum=item.getString("nckd_biazppnum");
  67. //接口配置信息获取
  68. //读取接口配置信息获取
  69. InterFaceImgUtils interFaceImgUtils=new InterFaceImgUtils("creatdat");
  70. //分割符号
  71. String spiltsign=interFaceImgUtils.getServerSplit();
  72. //结束符号
  73. String endsign=interFaceImgUtils.getServerEndsign();
  74. //上传文件到服务器中
  75. //服务器端口
  76. String host=interFaceImgUtils.getServerName();
  77. //服务器用户名
  78. String username=interFaceImgUtils.getServerUser();
  79. //服务器密码
  80. String password=interFaceImgUtils.getServerPassword();
  81. //服务器路径
  82. //服务器端口号
  83. int port= interFaceImgUtils.getProt();
  84. try {
  85. //上传文件到服务器中
  86. SftpClient sftpClient=new SftpClient(host,username,password,port);
  87. //获取服务器连接
  88. sftpClient.connect();
  89. //创建文件夹,为当天日期
  90. Date currentDate=new Date();
  91. //设置日期格式
  92. SimpleDateFormat sf=new SimpleDateFormat("yyyyMMdd");
  93. String dateStr=sf.format(currentDate);
  94. String filePathWithDate=nckd_url+dateStr;
  95. //创建文件夹,名为当前日期
  96. sftpClient.creatDir(filePathWithDate);
  97. //临时文件
  98. File localFile = File.createTempFile(tablenumber, ".dat");
  99. File dest=new File(localFile.getParent()+File.separator+tablenumber.toUpperCase()+".dat");
  100. //重命名文件
  101. localFile.renameTo(dest);
  102. //文件写入
  103. DatFileCreatUtils datFileCreatUtils=new DatFileCreatUtils(tablenumber,bizappnum,fileList,dest.getAbsolutePath(),spiltsign,endsign);
  104. //生成dat文件到本地
  105. datFileCreatUtils.creatDatFile();
  106. //从本地传文件到服务器
  107. sftpClient.fileCreat(dest.getAbsolutePath(),filePathWithDate);
  108. //上传后删除临时文件
  109. localFile.delete();
  110. dest.delete();
  111. //关闭连接
  112. sftpClient.disconnect();
  113. } catch (IOException e) {
  114. throw new RuntimeException(e);
  115. } catch (SftpException e) {
  116. throw new RuntimeException(e);
  117. } catch (Exception e) {
  118. throw new RuntimeException(e);
  119. }
  120. }
  121. }
  122. }
  123. @Override
  124. public boolean isSupportReSchedule() {
  125. return super.isSupportReSchedule();
  126. }
  127. }