UpdateDataDailyTask.java 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504
  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,-1);
  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. }
  244. yjjg = yjjgView.getModel().getDataEntity();
  245. } else if (!yjjg.getString("name").equals(yjjgmc)) {
  246. yjjg.set("name",yjjgmc);
  247. DynamicObjectCollection structureInfoCollection = yjjg.getDynamicObjectCollection("structure");
  248. DynamicObject structureInfo = structureInfoCollection.get(0);
  249. //设置长名称
  250. structureInfo.set("fullname",rootOrg.getString("name")+"_"+szdwmc+"_"+yjjgmc);
  251. SaveServiceHelper.update(yjjg);
  252. }
  253. // 判断所在部门编码 在行政组织中是否存在,不存在则新增
  254. String szbmbm = record.getString("nckd_orgidcode");
  255. String szbmmc = record.getString("nckd_orgidname");
  256. //所在部门
  257. DynamicObject szbm = BusinessDataServiceHelper.loadSingle("bos_adminorg", new QFilter[]{new QFilter("number", "=", szbmbm)});
  258. if (szbm == null) {
  259. IFormView szbmView=ABillServiceHelper.createAddView("bos_adminorg");
  260. szbmView.getModel().setValue("number", szbmbm);
  261. szbmView.getModel().setValue("name", szbmmc);
  262. szbmView.getModel().setValue("parent", yjjg); // 设置父级为 yjjg
  263. szbmView.getModel().setValue("orgpattern", xingtaiinfo);
  264. szbmView.getModel().setValue("status", "C"); // 设置状态
  265. szbmView.getModel().setValue("enable", "1"); // 设置为启用状态
  266. // 保存操作
  267. OperationResult szbmOperationResult = ABillServiceHelper.saveOperate(szbmView);
  268. if (!szbmOperationResult.isSuccess()) {
  269. // 如果保存失败,可以在这里处理错误
  270. log.info("保存部门失败!");
  271. return;
  272. }
  273. if (szbmView.getModel() != null) {
  274. szbm = szbmView.getModel().getDataEntity();
  275. } else {
  276. log.info("保存后未能获取到部门数据!");
  277. return;
  278. }
  279. log.info("行政组织数据已成功更新!");
  280. } else if (!szbm.getString("name").equals(szbmmc)) {
  281. szbm.set("name",szbmmc);
  282. DynamicObjectCollection structureInfoCollection = szbm.getDynamicObjectCollection("structure");
  283. DynamicObject structureInfo = structureInfoCollection.get(0);
  284. //设置长名称
  285. structureInfo.set("fullname",rootOrg.getString("name")+"_"+szdwmc+"_"+yjjgmc+"_"+szbmmc);
  286. SaveServiceHelper.update(szbm);
  287. }
  288. }
  289. }
  290. //根据基础资料更新人员
  291. public void updateperson()
  292. {
  293. // 从 nckd_basicdata 表中获取所有人员数据,假设通过某个条件查找
  294. DynamicObject[] personDataArray = BusinessDataServiceHelper.load(
  295. "nckd_basicdata",
  296. "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",
  297. null
  298. );
  299. if (personDataArray == null || personDataArray.length == 0) {
  300. log.info("未从 nckd_basicdata 表中获取到任何人员数据!");
  301. return;
  302. }
  303. String msg="";
  304. for (DynamicObject personData : personDataArray) {
  305. log.info("-------------更新人员------------");
  306. // 获取工号
  307. String gonghao = personData.getString("nckd_employeeid");
  308. if (gonghao == null || gonghao.isEmpty()) {
  309. continue;
  310. }
  311. // 查询用户是否已存在
  312. DynamicObject existingUser = BusinessDataServiceHelper.loadSingle(
  313. "bos_user", new QFilter[]{new QFilter("number", "=", gonghao)}
  314. );
  315. // 用户已存在,进行数据更新
  316. if (existingUser != null) {
  317. //初始化
  318. boolean isUpdated = false;
  319. // 比较并更新性别
  320. Object newGender = personData.get("nckd_gender");
  321. if (!newGender.equals(existingUser.get("gender"))) {
  322. existingUser.set("gender", newGender);
  323. isUpdated = true;
  324. }
  325. // 比较并更新手机号
  326. Object newPhone = personData.get("nckd_sjh");
  327. if (!newPhone.equals(existingUser.get("phone"))) {
  328. existingUser.set("phone", newPhone);
  329. isUpdated = true;
  330. }
  331. //更新部门和岗位
  332. DynamicObjectCollection existingDeptEntries = existingUser.getDynamicObjectCollection("entryentity");
  333. //人员部门分录
  334. DynamicObject existingDeptEntry = existingDeptEntries.isEmpty() ? null : existingDeptEntries.get(0);
  335. // 获取新的部门信息
  336. String deptCode = personData.getString("nckd_orgidcode");
  337. DynamicObject newOrgInfo = BusinessDataServiceHelper.loadSingle(
  338. "bos_adminorg", new QFilter[]{new QFilter("number", "=", deptCode)}
  339. );
  340. boolean deptUpdated = false;
  341. if (newOrgInfo != null) {
  342. if (existingDeptEntry == null) {
  343. // 如果没有现有部门分录,则添加新的部门分录
  344. existingDeptEntry = existingDeptEntries.addNew();
  345. deptUpdated = true;
  346. }
  347. // 比较并更新部门信息
  348. if (!deptCode.equals(existingDeptEntry.get("dpt.number"))) {
  349. existingDeptEntry.set("dpt", newOrgInfo);
  350. deptUpdated = true;
  351. }
  352. // 更新组织结构
  353. DynamicObjectCollection structureInfoCollection = newOrgInfo.getDynamicObjectCollection("structure");
  354. if (structureInfoCollection != null && !structureInfoCollection.isEmpty()) {
  355. for (DynamicObject item:structureInfoCollection) {
  356. //不为兼职则更新
  357. if (!item.getBoolean("ispartjob")) {
  358. DynamicObject structureInfo=item;//获取结构信息
  359. if(existingDeptEntry.getDynamicObject("orgstructure")!=null){
  360. if (!structureInfo.getPkValue().equals(existingDeptEntry.getDynamicObject("orgstructure").getPkValue())) {
  361. existingDeptEntry.set("orgstructure", structureInfo.getPkValue());
  362. deptUpdated = true;
  363. }
  364. }else{
  365. existingDeptEntry.set("orgstructure", structureInfo.getPkValue());
  366. deptUpdated = true;
  367. }
  368. }
  369. }
  370. }
  371. // 标记是否需要保存
  372. if (deptUpdated) {
  373. isUpdated = true;
  374. }
  375. } else {
  376. log.info("未找到部门编码为 " + deptCode + " 的部门信息!");
  377. }
  378. // 获取新的岗位信息
  379. String postName = personData.getString("nckd_posidname");
  380. if (!postName.equals(existingDeptEntry.getString("position"))) {
  381. existingDeptEntry.set("position", postName);
  382. isUpdated = true;
  383. }
  384. // 如果有更新则保存
  385. if (isUpdated) {
  386. SaveServiceHelper.save(new DynamicObject[]{existingUser});
  387. msg+="工号为 " + gonghao + " 的用户信息已更新!";
  388. }
  389. } else {
  390. // 用户不存在,创建新用户
  391. DynamicObjectType userType = EntityMetadataCache.getDataEntityType("bos_user");
  392. DynamicObject userinfo = new DynamicObject(userType);
  393. ORM impl = ORM.create();
  394. userinfo.set("id", impl.genLongId("bos_user"));
  395. userinfo.set("number", gonghao);
  396. // 设置其他字段
  397. userinfo.set("gender", personData.get("nckd_gender"));
  398. //人员手机号
  399. userinfo.set("phone", personData.get("nckd_sjh"));
  400. // 设置其他固定字段
  401. userinfo.set("startdate", new Date());
  402. Calendar c = Calendar.getInstance();
  403. c.set(Calendar.YEAR, 2999);
  404. userinfo.set("enddate", c.getTime());
  405. userinfo.set("masterid", userinfo.get("id"));
  406. userinfo.set("enable", 1);
  407. userinfo.set("status", "C");
  408. userinfo.set("password", "8HrquJnZfyOkmmHkpGLXfg==");
  409. userinfo.set("isregisted", "1");
  410. userinfo.set("isactived", "1");
  411. userinfo.set("pswstrategy", "338333884850648064");
  412. userinfo.set("psweffectivedate", new Date());
  413. userinfo.set("useenddate", c.getTime());
  414. // 设置姓名和拼音
  415. String name = personData.getString("nckd_name");
  416. userinfo.set("name", name);
  417. String fullPinyin = UserOperationUtils.getFullSpellByName(name);
  418. String simplePinyin = UserOperationUtils.getFirstSpellByName(name);
  419. userinfo.set("fullpinyin", fullPinyin);
  420. userinfo.set("simplepinyin", simplePinyin);
  421. // 设置用户名
  422. String username = UserOperationUtils.getUserNameByFormatedFullPinyin(
  423. (long) userinfo.getPkValue(), fullPinyin, null
  424. );
  425. userinfo.set("username", username);
  426. // 创建部门分录
  427. DynamicObjectCollection bmflList = userinfo.getDynamicObjectCollection("entryentity");
  428. DynamicObject bumeninfo = bmflList.addNew();
  429. // 获取部门编码并在 bos_adminorg 表中查找部门信息
  430. String deptCode = personData.getString("nckd_orgidcode");
  431. DynamicObject orginfo = BusinessDataServiceHelper.loadSingle(
  432. "bos_adminorg", new QFilter[]{new QFilter("number", "=", deptCode)}
  433. );
  434. if (orginfo != null) {
  435. bumeninfo.set("dpt", orginfo);
  436. // 获取组织的分录集合 structure 的第一条数据
  437. DynamicObjectCollection structureInfoCollection = orginfo.getDynamicObjectCollection("structure");
  438. if (structureInfoCollection != null && !structureInfoCollection.isEmpty()) {
  439. for (DynamicObject item:structureInfoCollection) {
  440. //不为兼职则更新
  441. if (!item.getBoolean("ispartjob")) {
  442. DynamicObject structureInfo=item;//获取结构信息
  443. bumeninfo.set("orgstructure",structureInfo.getPkValue());
  444. }
  445. }
  446. } else {
  447. log.info("部门编码为 " + deptCode + " 的部门缺少组织结构信息,跳过该记录。");
  448. }
  449. }
  450. String postName = personData.getString("nckd_posidname");;
  451. bumeninfo.set("position", postName);
  452. //所在岗位名称
  453. String positionnumber = personData.getString("nckd_posidname");;
  454. bumeninfo.set("post", positionnumber);
  455. // 保存新用户信息
  456. SaveServiceHelper.save(new DynamicObject[]{userinfo});
  457. msg+="工号为 " + gonghao + " 的用户已创建!";
  458. }
  459. }
  460. if("".equals(msg)){
  461. log.info("没有需要更新或新增的人员");
  462. }else{
  463. log.info(msg);
  464. }
  465. }
  466. //根据接口配置信息获取组织人员,拼接服务器文件路径url,参数为urlcode接口配置信息编码
  467. public String getFileUrl(String urlcode)
  468. {
  469. //组织人员接口配置信息获取
  470. DynamicObject nckd_jkpzxx= BusinessDataServiceHelper
  471. .loadSingle("nckd_jkpzxx", new QFilter[]{new QFilter("number", "=", urlcode)});
  472. //取文件名
  473. String nckd_filename=nckd_jkpzxx.getString("nckd_filename");
  474. //获取文件路径
  475. String nckd_url=nckd_jkpzxx.getString("nckd_url");
  476. //当前日期
  477. Date currentDate=new Date();
  478. Calendar calendar = Calendar.getInstance();
  479. calendar.setTime(currentDate);
  480. calendar.add(Calendar.DATE, -1); // 将日期减少一天
  481. //日期减少一天
  482. Date newDate = calendar.getTime();
  483. //转换日期格式
  484. SimpleDateFormat sf=new SimpleDateFormat("yyyyMMdd");
  485. String datestr=sf.format(newDate);
  486. //文件路径拼接
  487. //真实路径
  488. String realPath = nckd_url+datestr+"/"+nckd_filename;
  489. return realPath;
  490. }
  491. @Override
  492. public boolean isSupportReSchedule() {
  493. return super.isSupportReSchedule();
  494. }
  495. }