UpdateDataDailyTask.java 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508
  1. package sys.sc.task;
  2. import com.alibaba.druid.support.logging.Log;
  3. import com.alibaba.druid.support.logging.LogFactory;
  4. import kd.bos.context.RequestContext;
  5. import kd.bos.dataentity.entity.DynamicObject;
  6. import kd.bos.dataentity.entity.DynamicObjectCollection;
  7. import kd.bos.dataentity.metadata.dynamicobject.DynamicObjectType;
  8. import kd.bos.entity.EntityMetadataCache;
  9. import kd.bos.entity.operate.result.OperationResult;
  10. import kd.bos.exception.KDException;
  11. import kd.bos.form.IFormView;
  12. import kd.bos.orm.ORM;
  13. import kd.bos.orm.query.QFilter;
  14. import kd.bos.schedule.api.MessageHandler;
  15. import kd.bos.schedule.executor.AbstractTask;
  16. import kd.bos.sec.user.utils.UserOperationUtils;
  17. import kd.bos.servicehelper.BusinessDataServiceHelper;
  18. import kd.bos.servicehelper.operation.SaveServiceHelper;
  19. import sys.sc.formplugin.ABillServiceHelper;
  20. import sys.sc.opplugin.utils.InterFaceImgUtils;
  21. import sys.sc.opplugin.utils.SftpClient;
  22. import java.io.*;
  23. import java.text.SimpleDateFormat;
  24. import java.util.*;
  25. /**
  26. * @author cjz
  27. * @date 2024/9/3 15:13
  28. * @description:获取日常数据更新组织和人员调度计划
  29. */
  30. public class UpdateDataDailyTask extends AbstractTask {
  31. private static final Log log = LogFactory.getLog(UpdateDataDailyTask.class);
  32. public InterFaceImgUtils interFaceImgUtils=new InterFaceImgUtils("produceurl"); //服务器ip
  33. public String host=interFaceImgUtils.getServerName();
  34. //用户名
  35. public String username=interFaceImgUtils.getServerUser();
  36. //用户密码
  37. public String password=interFaceImgUtils.getServerPassword();
  38. //分割符
  39. public String splitsign=interFaceImgUtils.getServerSplit();
  40. //结尾符
  41. public String endsign=interFaceImgUtils.getServerEndsign();
  42. public int port= interFaceImgUtils.getProt();
  43. @Override
  44. public MessageHandler getMessageHandle() {
  45. return super.getMessageHandle();
  46. }
  47. @Override
  48. public void execute(RequestContext requestContext, Map<String, Object> map) throws KDException {
  49. String mes="---------------正在执行任务,读取文件数据更新组织和人员------------------";
  50. log.info(mes+requestContext);
  51. //文件路径
  52. String path=getFileUrl("organduserurl");
  53. try {
  54. //获取连接对象
  55. SftpClient sftpClient=new SftpClient(host,username,password,port);
  56. sftpClient.connect();
  57. //读取文件更新基础资料
  58. updatebasicdata(sftpClient.fileInputStream(path));
  59. //关闭连接
  60. sftpClient.disconnect();
  61. } catch (Exception e) {
  62. throw new RuntimeException(e);
  63. }
  64. //更新组织
  65. log.info("----------------更新组织中---------------------");
  66. updateorg();
  67. //更新人员
  68. log.info("----------------更新人员中-------------------");
  69. updateperson();
  70. }
  71. //读取文件更新基础资料
  72. public void updatebasicdata(InputStream inputStream)
  73. {
  74. //读取文件写入基础资料中
  75. try {
  76. DynamicObjectType dynamicObjectType = EntityMetadataCache.getDataEntityType("nckd_basicdata");
  77. List<String> selector = Arrays.asList(
  78. "nckd_employeeid", "nckd_name", "nckd_gender", "nckd_nl", "nckd_zzmm",
  79. "nckd_zgxl", "nckd_szdwname", "nckd_szdwcode", "nckd_orgidname", "nckd_orgidcode",
  80. "nckd_yjbmname", "nckd_yjbmcode", "nckd_posidname", "nckd_posidcode", "nckd_yggxlb",
  81. "nckd_status", "nckd_sjh"
  82. );
  83. List<DynamicObject> createdataList = new ArrayList<>();
  84. List<DynamicObject> updatedataList = new ArrayList<>();
  85. //查出所有现有的数据
  86. DynamicObject[] existingData = BusinessDataServiceHelper
  87. .load(dynamicObjectType.getName(), String.join(",", selector) + ",nckd_updatedate,nckd_isdelete", null);
  88. Map<String, DynamicObject> existingDataMap = new HashMap<>();
  89. for (DynamicObject obj : existingData) {
  90. existingDataMap.put(obj.getString("nckd_employeeid"), obj);
  91. }
  92. Set<String> processedGonghaoSet = new HashSet<>();
  93. try (BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream))) {
  94. String line;
  95. while ((line = reader.readLine()) != null) {
  96. //去掉换行符|$|
  97. line = line.replace(endsign, "");
  98. //空格符号,根据这个符号分割
  99. String[] fields = line.split(splitsign);
  100. //如果获取的数据行不等于预设字段的行,则跳过这行数据
  101. if (fields.length != selector.size()) {
  102. continue;
  103. }
  104. //获取工号
  105. String gonghao = fields[0];
  106. boolean isUpdated = false;
  107. DynamicObject data;
  108. processedGonghaoSet.add(gonghao);
  109. if (existingDataMap.containsKey(gonghao)) {
  110. //获取对应工号的数据
  111. data = existingDataMap.get(gonghao);
  112. for (int i = 0; i < selector.size(); i++) {
  113. String fieldName = selector.get(i);
  114. String newValue = fields[i];
  115. String existingValue = data.getString(fieldName);
  116. //判断数据是否与之前的数据相同,不相同则更新
  117. if (!Objects.equals(existingValue, newValue)) {
  118. data.set(fieldName, newValue);
  119. isUpdated = true;
  120. }
  121. }
  122. //更新了数据则设置数据更新的时间
  123. if (isUpdated) {
  124. data.set("nckd_updatedate", new Date());
  125. updatedataList.add(data);
  126. }
  127. } else {
  128. //不存在这条数据则新增一条到data中
  129. data = new DynamicObject(dynamicObjectType);
  130. for (int i = 0; i < selector.size(); i++) {
  131. data.set(selector.get(i), fields[i]);
  132. }
  133. Date now = new Date();
  134. data.set("nckd_createdate", now);
  135. data.set("nckd_updatedate", now);
  136. createdataList.add(data);
  137. }
  138. }
  139. }
  140. for (Map.Entry<String, DynamicObject> entry : existingDataMap.entrySet()) {
  141. String gonghao = entry.getKey();
  142. DynamicObject data = entry.getValue();
  143. if (!processedGonghaoSet.contains(gonghao)) {
  144. data.set("nckd_isdelete", true);
  145. updatedataList.add(data);
  146. }
  147. }
  148. //新增数据不为空则更新到数据库中
  149. if (!createdataList.isEmpty()) {
  150. SaveServiceHelper.save(dynamicObjectType, createdataList.toArray(new DynamicObject[0]));
  151. }
  152. //更新的数据不为空,则更新到数据库中
  153. if (!updatedataList.isEmpty()) {
  154. SaveServiceHelper.save(updatedataList.get(0).getDynamicObjectType(), updatedataList.toArray(new DynamicObject[0]));
  155. }
  156. log.info("数据已成功保存!");
  157. } catch (IOException ex) {
  158. ex.printStackTrace();
  159. log.info("读取文件时发生错误:" + ex.getMessage());
  160. }
  161. }
  162. //根据基础资料更新组织
  163. public void updateorg()
  164. {
  165. // 获取形态信息 编码为 Orgform06 的 bos_org_pattern(部门组织)
  166. DynamicObject xingtaiinfo = BusinessDataServiceHelper.loadSingle(
  167. "bos_org_pattern", new QFilter[]{new QFilter("number", "=", "Orgform06")}
  168. );
  169. //获取形态信息,编码为 Orgform02 的bos_org_pattern(公司组织)
  170. DynamicObject cpyinfo = BusinessDataServiceHelper.loadSingle(
  171. "bos_org_pattern", new QFilter[]{new QFilter("number", "=", "Orgform02")}
  172. );
  173. // 查询 nckd_basicdata 表中需要更新的数据
  174. DynamicObject[] nckdData = BusinessDataServiceHelper.load(
  175. "nckd_basicdata",
  176. "id,nckd_szdwcode,nckd_szdwname,nckd_yjbmcode,nckd_yjbmname,nckd_orgidcode,nckd_orgidname",
  177. null
  178. );
  179. //行政组织
  180. DynamicObject rootOrg = BusinessDataServiceHelper.loadSingle(
  181. "bos_adminorg", new QFilter[]{new QFilter("number", "=", "jxyh")}
  182. );
  183. if (rootOrg == null) {
  184. log.info("指定的上级组织 'jxyh' 未找到!");
  185. return;
  186. }
  187. for (DynamicObject record : nckdData) {
  188. // 判断并创建或更新所在单位
  189. //所在单位编码
  190. String szdwbm = record.getString("nckd_szdwcode");
  191. //所在单位名称
  192. String szdwmc = record.getString("nckd_szdwname");
  193. DynamicObject org = BusinessDataServiceHelper.loadSingle(
  194. "bos_adminorg", new QFilter[]{new QFilter("number", "=", szdwbm)}
  195. );
  196. //没有单位则创建
  197. if (org == null) {
  198. IFormView orgview = ABillServiceHelper.createAddView("bos_adminorg");
  199. //组织编码
  200. orgview.getModel().setValue("number", szdwbm);
  201. //组织名称
  202. orgview.getModel().setValue("name", szdwmc);
  203. //上级组织
  204. orgview.getModel().setValue("parent", rootOrg);
  205. //形态,设置形态为公司
  206. orgview.getModel().setValue("orgpattern", cpyinfo);
  207. //数据状态设置为已审核
  208. orgview.getModel().setValue("status", "C");
  209. //使用状态设置为可用
  210. orgview.getModel().setValue("enable", "1");
  211. OperationResult operationResult = ABillServiceHelper.saveOperate(orgview);
  212. //保存不成功
  213. if (!operationResult.isSuccess()) {
  214. }
  215. org = orgview.getModel().getDataEntity();
  216. //如果存在单位则检查单位名是否一致,不一致则更新
  217. }else if (!org.getString("name").equals(szdwmc))
  218. {
  219. //设置单位名称
  220. org.set("name",szdwmc);
  221. // 更新组织结构
  222. DynamicObjectCollection structureInfoCollection = org.getDynamicObjectCollection("structure");
  223. DynamicObject structureInfo = structureInfoCollection.get(0);
  224. //设置长名称
  225. structureInfo.set("fullname",rootOrg.getString("name")+"_"+szdwmc);
  226. SaveServiceHelper.update(org);
  227. }
  228. // 判断一级机构编码 在行政组织中是否存在,不存在则新增
  229. String yjjgbm = record.getString("nckd_yjbmcode");
  230. String yjjgmc = record.getString("nckd_yjbmname");
  231. //一级机构
  232. DynamicObject yjjg = BusinessDataServiceHelper.loadSingle("bos_adminorg", new QFilter[]{new QFilter("number", "=", yjjgbm)});
  233. if (yjjg == null) {
  234. IFormView yjjgView=ABillServiceHelper.createAddView("bos_adminorg");
  235. yjjgView.getModel().setValue("number", yjjgbm);
  236. yjjgView.getModel().setValue("name", yjjgmc);
  237. yjjgView.getModel().setValue("parent", org); // 父级组织为 org
  238. yjjgView.getModel().setValue("orgpattern", xingtaiinfo);
  239. yjjgView.getModel().setValue("status", "C");
  240. yjjgView.getModel().setValue("enable", "1");
  241. OperationResult yjjgOperationResult = ABillServiceHelper.saveOperate(yjjgView);
  242. if (!yjjgOperationResult.isSuccess()) {
  243. // Handle the failure case here
  244. }
  245. yjjg = yjjgView.getModel().getDataEntity();
  246. } else if (!yjjg.getString("name").equals(yjjgmc)) {
  247. yjjg.set("name",yjjgmc);
  248. DynamicObjectCollection structureInfoCollection = yjjg.getDynamicObjectCollection("structure");
  249. DynamicObject structureInfo = structureInfoCollection.get(0);
  250. //设置长名称
  251. structureInfo.set("fullname",rootOrg.getString("name")+"_"+szdwmc+"_"+yjjgmc);
  252. SaveServiceHelper.update(yjjg);
  253. }
  254. // 判断所在部门编码 在行政组织中是否存在,不存在则新增
  255. String szbmbm = record.getString("nckd_orgidcode");
  256. String szbmmc = record.getString("nckd_orgidname");
  257. //所在部门
  258. DynamicObject szbm = BusinessDataServiceHelper.loadSingle("bos_adminorg", new QFilter[]{new QFilter("number", "=", szbmbm)});
  259. if (szbm == null) {
  260. IFormView szbmView=ABillServiceHelper.createAddView("bos_adminorg");
  261. szbmView.getModel().setValue("number", szbmbm);
  262. szbmView.getModel().setValue("name", szbmmc);
  263. szbmView.getModel().setValue("parent", yjjg); // 设置父级为 yjjg
  264. szbmView.getModel().setValue("orgpattern", xingtaiinfo);
  265. szbmView.getModel().setValue("status", "C"); // 设置状态
  266. szbmView.getModel().setValue("enable", "1"); // 设置为启用状态
  267. // 保存操作
  268. OperationResult szbmOperationResult = ABillServiceHelper.saveOperate(szbmView);
  269. if (!szbmOperationResult.isSuccess()) {
  270. // 如果保存失败,可以在这里处理错误
  271. log.info("保存部门失败!");
  272. return;
  273. }
  274. if (szbmView.getModel() != null) {
  275. szbm = szbmView.getModel().getDataEntity();
  276. } else {
  277. log.info("保存后未能获取到部门数据!");
  278. return;
  279. }
  280. log.info("行政组织数据已成功更新!");
  281. } else if (!szbm.getString("name").equals(szbmmc)) {
  282. szbm.set("name",szbmmc);
  283. DynamicObjectCollection structureInfoCollection = szbm.getDynamicObjectCollection("structure");
  284. DynamicObject structureInfo = structureInfoCollection.get(0);
  285. //设置长名称
  286. structureInfo.set("fullname",rootOrg.getString("name")+"_"+szdwmc+"_"+yjjgmc+"_"+szbmmc);
  287. SaveServiceHelper.update(szbm);
  288. }
  289. }
  290. }
  291. //根据基础资料更新人员
  292. public void updateperson()
  293. {
  294. // 从 nckd_basicdata 表中获取所有人员数据,假设通过某个条件查找
  295. DynamicObject[] personDataArray = BusinessDataServiceHelper.load(
  296. "nckd_basicdata",
  297. "id,nckd_employeeid,nckd_name,nckd_gender,nckd_nl,nckd_zzmm,nckd_zgxl,nckd_orgidname,nckd_orgidcode,nckd_posidname,nckd_posidcode,nckd_yggxlb,nckd_status,nckd_sjh",
  298. null
  299. );
  300. if (personDataArray == null || personDataArray.length == 0) {
  301. log.info("未从 nckd_basicdata 表中获取到任何人员数据!");
  302. return;
  303. }
  304. String msg="";
  305. for (DynamicObject personData : personDataArray) {
  306. log.info("-------------更新人员------------");
  307. // 获取工号
  308. String gonghao = personData.getString("nckd_employeeid");
  309. if (gonghao == null || gonghao.isEmpty()) {
  310. continue;
  311. }
  312. // 查询用户是否已存在
  313. DynamicObject existingUser = BusinessDataServiceHelper.loadSingle(
  314. "bos_user", new QFilter[]{new QFilter("number", "=", gonghao)}
  315. );
  316. // 用户已存在,进行数据更新
  317. if (existingUser != null) {
  318. //初始化
  319. boolean isUpdated = false;
  320. // 比较并更新性别
  321. Object newGender = personData.get("nckd_gender");
  322. if (!newGender.equals(existingUser.get("gender"))) {
  323. existingUser.set("gender", newGender);
  324. isUpdated = true;
  325. }
  326. // 比较并更新手机号
  327. Object newPhone = personData.get("nckd_sjh");
  328. if (!newPhone.equals(existingUser.get("phone"))) {
  329. existingUser.set("phone", newPhone);
  330. isUpdated = true;
  331. }
  332. //更新部门和岗位
  333. DynamicObjectCollection existingDeptEntries = existingUser.getDynamicObjectCollection("entryentity");
  334. //人员部门分录
  335. DynamicObject existingDeptEntry = existingDeptEntries.isEmpty() ? null : existingDeptEntries.get(0);
  336. // 获取新的部门信息
  337. String deptCode = personData.getString("nckd_orgidcode");
  338. DynamicObject newOrgInfo = BusinessDataServiceHelper.loadSingle(
  339. "bos_adminorg", new QFilter[]{new QFilter("number", "=", deptCode)}
  340. );
  341. boolean deptUpdated = false;
  342. if (newOrgInfo != null) {
  343. if (existingDeptEntry == null) {
  344. // 如果没有现有部门分录,则添加新的部门分录
  345. existingDeptEntry = existingDeptEntries.addNew();
  346. deptUpdated = true;
  347. }
  348. // 比较并更新部门信息
  349. if (!deptCode.equals(existingDeptEntry.get("dpt.number"))) {
  350. existingDeptEntry.set("dpt", newOrgInfo);
  351. deptUpdated = true;
  352. }
  353. // 更新组织结构
  354. DynamicObjectCollection structureInfoCollection = newOrgInfo.getDynamicObjectCollection("structure");
  355. if (structureInfoCollection != null && !structureInfoCollection.isEmpty()) {
  356. for (DynamicObject item:structureInfoCollection) {
  357. //不为兼职则更新
  358. if (!item.getBoolean("ispartjob")) {
  359. DynamicObject structureInfo=item;//获取结构信息
  360. if(existingDeptEntry.getDynamicObject("orgstructure")!=null){
  361. if (!structureInfo.getPkValue().equals(existingDeptEntry.getDynamicObject("orgstructure").getPkValue())) {
  362. existingDeptEntry.set("orgstructure", structureInfo.getPkValue());
  363. deptUpdated = true;
  364. }
  365. }else{
  366. existingDeptEntry.set("orgstructure", structureInfo.getPkValue());
  367. deptUpdated = true;
  368. }
  369. }
  370. }
  371. }
  372. // 标记是否需要保存
  373. if (deptUpdated) {
  374. isUpdated = true;
  375. }
  376. } else {
  377. log.info("未找到部门编码为 " + deptCode + " 的部门信息!");
  378. }
  379. // 获取新的岗位信息
  380. String postName = personData.getString("nckd_posidname");
  381. if (!postName.equals(existingDeptEntry.getString("position"))) {
  382. existingDeptEntry.set("position", postName);
  383. isUpdated = true;
  384. }
  385. // 如果有更新则保存
  386. if (isUpdated) {
  387. SaveServiceHelper.save(new DynamicObject[]{existingUser});
  388. msg+="工号为 " + gonghao + " 的用户信息已更新!";
  389. }
  390. } else {
  391. // 用户不存在,创建新用户
  392. DynamicObjectType userType = EntityMetadataCache.getDataEntityType("bos_user");
  393. DynamicObject userinfo = new DynamicObject(userType);
  394. ORM impl = ORM.create();
  395. userinfo.set("id", impl.genLongId("bos_user"));
  396. userinfo.set("number", gonghao);
  397. // 设置其他字段
  398. userinfo.set("gender", personData.get("nckd_gender"));
  399. //人员手机号
  400. userinfo.set("phone", personData.get("nckd_sjh"));
  401. // 设置其他固定字段
  402. userinfo.set("startdate", new Date());
  403. Calendar c = Calendar.getInstance();
  404. c.set(Calendar.YEAR, 2999);
  405. userinfo.set("enddate", c.getTime());
  406. userinfo.set("masterid", userinfo.get("id"));
  407. userinfo.set("enable", 1);
  408. userinfo.set("status", "C");
  409. userinfo.set("password", "8HrquJnZfyOkmmHkpGLXfg==");
  410. userinfo.set("isregisted", "1");
  411. userinfo.set("isactived", "1");
  412. userinfo.set("pswstrategy", "338333884850648064");
  413. userinfo.set("psweffectivedate", new Date());
  414. userinfo.set("useenddate", c.getTime());
  415. // 设置姓名和拼音
  416. String name = personData.getString("nckd_name");
  417. userinfo.set("name", name);
  418. String fullPinyin = UserOperationUtils.getFullSpellByName(name);
  419. String simplePinyin = UserOperationUtils.getFirstSpellByName(name);
  420. userinfo.set("fullpinyin", fullPinyin);
  421. userinfo.set("simplepinyin", simplePinyin);
  422. // 设置用户名
  423. String username = UserOperationUtils.getUserNameByFormatedFullPinyin(
  424. (long) userinfo.getPkValue(), fullPinyin, null
  425. );
  426. userinfo.set("username", username);
  427. // 创建部门分录
  428. DynamicObjectCollection bmflList = userinfo.getDynamicObjectCollection("entryentity");
  429. DynamicObject bumeninfo = bmflList.addNew();
  430. // 获取部门编码并在 bos_adminorg 表中查找部门信息
  431. String deptCode = personData.getString("nckd_orgidcode");
  432. DynamicObject orginfo = BusinessDataServiceHelper.loadSingle(
  433. "bos_adminorg", new QFilter[]{new QFilter("number", "=", deptCode)}
  434. );
  435. if (orginfo != null) {
  436. bumeninfo.set("dpt", orginfo);
  437. // 获取组织的分录集合 structure 的第一条数据
  438. DynamicObjectCollection structureInfoCollection = orginfo.getDynamicObjectCollection("structure");
  439. if (structureInfoCollection != null && !structureInfoCollection.isEmpty()) {
  440. for (DynamicObject item:structureInfoCollection) {
  441. //不为兼职则更新
  442. if (!item.getBoolean("ispartjob")) {
  443. DynamicObject structureInfo=item;//获取结构信息
  444. bumeninfo.set("orgstructure",structureInfo.getPkValue());
  445. }
  446. }
  447. } else {
  448. log.info("部门编码为 " + deptCode + " 的部门缺少组织结构信息,跳过该记录。");
  449. }
  450. }
  451. String postName = personData.getString("nckd_posidname");;
  452. bumeninfo.set("position", postName);
  453. //所在岗位名称
  454. String positionnumber = personData.getString("nckd_posidname");;
  455. bumeninfo.set("post", positionnumber);
  456. // 保存新用户信息
  457. SaveServiceHelper.save(new DynamicObject[]{userinfo});
  458. msg+="工号为 " + gonghao + " 的用户已创建!";
  459. }
  460. }
  461. if("".equals(msg)){
  462. log.info("没有需要更新或新增的人员");
  463. }else{
  464. log.info(msg);
  465. }
  466. }
  467. //根据接口配置信息获取组织人员,拼接服务器文件路径url,参数为urlcode接口配置信息编码
  468. public String getFileUrl(String urlcode)
  469. {
  470. //组织人员接口配置信息获取
  471. DynamicObject nckd_jkpzxx= BusinessDataServiceHelper
  472. .loadSingle("nckd_jkpzxx", new QFilter[]{new QFilter("number", "=", urlcode)});
  473. //取文件名
  474. String nckd_filename=nckd_jkpzxx.getString("nckd_filename");
  475. //获取文件路径
  476. String nckd_url=nckd_jkpzxx.getString("nckd_url");
  477. //当前日期
  478. Date currentDate=new Date();
  479. Calendar calendar = Calendar.getInstance();
  480. calendar.setTime(currentDate);
  481. calendar.add(Calendar.DATE, -1); // 将日期减少一天
  482. //日期减少一天
  483. Date newDate = calendar.getTime();
  484. //转换日期格式
  485. SimpleDateFormat sf=new SimpleDateFormat("yyyyMMdd");
  486. String datestr=sf.format(newDate);
  487. //文件路径拼接
  488. //真实路径
  489. String realPath = nckd_url+datestr+"/"+nckd_filename;
  490. return realPath;
  491. }
  492. @Override
  493. public boolean isSupportReSchedule() {
  494. return super.isSupportReSchedule();
  495. }
  496. }