SceneService.java 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573
  1. package com.huaxu.service;
  2. import com.baomidou.mybatisplus.core.metadata.IPage;
  3. import com.huaxu.common.Reflections;
  4. import com.huaxu.common.StringUtils;
  5. import com.huaxu.dao.SceneImageMapper;
  6. import com.huaxu.dao.SceneMapper;
  7. import com.huaxu.dto.AlarmDetailsDto;
  8. import com.huaxu.dto.DeviceDto;
  9. import com.huaxu.entity.DeviceSceneEntity;
  10. import com.huaxu.entity.SceneEntity;
  11. import com.huaxu.entity.SceneImageEntity;
  12. import com.huaxu.entity.SceneTypeEntity;
  13. import com.huaxu.model.AjaxMessage;
  14. import com.huaxu.model.LoginUser;
  15. import com.huaxu.model.ResultStatus;
  16. import com.huaxu.util.OrgInfoUtil;
  17. import com.huaxu.util.Snowflake;
  18. import com.huaxu.util.UserUtil;
  19. import javafx.scene.Scene;
  20. import org.apache.ibatis.annotations.Param;
  21. import org.springframework.beans.BeanUtils;
  22. import org.springframework.beans.factory.annotation.Autowired;
  23. import org.springframework.stereotype.Service;
  24. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  25. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  26. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  27. import javax.annotation.Resource;
  28. import org.springframework.transaction.annotation.Transactional;
  29. import java.text.ParseException;
  30. import java.text.SimpleDateFormat;
  31. import java.util.*;
  32. import static com.google.common.collect.Lists.newArrayList;
  33. /**
  34. * 场景信息Service接口
  35. *
  36. * @author: WYY
  37. * @date 2020-11-17 21:15
  38. */
  39. @Service
  40. public class SceneService extends ServiceImpl<SceneMapper, SceneEntity> {
  41. @Resource
  42. private SceneMapper sceneMapper;
  43. @Resource
  44. private SceneImageService sceneImageService;
  45. @Autowired
  46. private OrgInfoUtil orgInfoUtil;
  47. @Autowired
  48. private DeviceSceneService deviceSceneService;
  49. @Autowired
  50. private AlarmDetailsService alarmDetailsService;
  51. /**
  52. * 自定义分页查询,含关联实体对像
  53. */
  54. public IPage<SceneEntity> findPage(IPage<SceneEntity> page, SceneEntity sceneEntity) {
  55. LoginUser currentUser = UserUtil.getCurrentUser();
  56. sceneEntity.setTenantId(currentUser.getTenantId());
  57. sceneEntity.setProgramItems(currentUser.getProgramItemList());
  58. sceneEntity.setUserType(currentUser.getType());
  59. //1是公司,2是公司及以下,3部门,4部门及以下,5自定义
  60. sceneEntity.setPermissonType(currentUser.getPermissonType());
  61. //分页查询父级节点的信息
  62. Page<SceneEntity> sceneEntityPage = sceneMapper.findPage(page, sceneEntity);
  63. //查询子节点的信息
  64. List<SceneEntity> sceneEntities = newArrayList();
  65. for (SceneEntity item : sceneEntityPage.getRecords()) {
  66. sceneEntities.addAll(findByParentLike(item.getId()));
  67. }
  68. for (SceneEntity item : sceneEntities) {
  69. if (item.getCompanyOrgId() != null) {
  70. item.setCompanyOrgName(orgInfoUtil.getOrgName(item.getCompanyOrgId().intValue()));
  71. }
  72. if (item.getDeptOrgId() != null) {
  73. item.setDeptOrgName(orgInfoUtil.getOrgName(item.getDeptOrgId().intValue()));
  74. }
  75. }
  76. List<SceneEntity> sceneTree = getSceneTree(sceneEntities, Long.valueOf(0), 1);
  77. sceneEntityPage.setRecords(sceneTree);
  78. return sceneEntityPage;
  79. }
  80. public static List<SceneEntity> getSceneTree(List<SceneEntity> list, Long id, Integer leve) {
  81. List<SceneEntity> temList = newArrayList();
  82. if (list != null) {
  83. for (SceneEntity sceneEntity : list) {
  84. if (id.equals(sceneEntity.getParentSceneId())) {
  85. List<SceneEntity> chidren = getSceneTree(list, sceneEntity.getId(), ++leve);
  86. SceneEntity temMeanu = new SceneEntity();
  87. BeanUtils.copyProperties(sceneEntity, temMeanu);
  88. temMeanu.setChildren(chidren);
  89. temList.add(temMeanu);
  90. leve--;
  91. }
  92. }
  93. }
  94. if (temList.size() > 0) {
  95. return temList;
  96. } else {
  97. return null;
  98. }
  99. }
  100. /**
  101. * 查列表
  102. */
  103. public List<SceneEntity> findAllList(SceneEntity sceneEntity) {
  104. LoginUser currentUser = UserUtil.getCurrentUser();
  105. sceneEntity.setTenantId(currentUser.getTenantId());
  106. sceneEntity.setProgramItems(currentUser.getProgramItemList());
  107. sceneEntity.setUserType(currentUser.getType());
  108. //1是公司,2是公司及以下,3部门,4部门及以下,5自定义
  109. sceneEntity.setPermissonType(currentUser.getPermissonType());
  110. List<SceneEntity> sceneEntities = sceneMapper.findList(sceneEntity);
  111. List<SceneEntity> sceneTree = getSceneTree(sceneEntities, Long.valueOf(0), 1);
  112. return sceneTree;
  113. }
  114. /**
  115. * 查列表
  116. */
  117. public List<SceneEntity> findList(SceneEntity sceneEntity) {
  118. LoginUser currentUser = UserUtil.getCurrentUser();
  119. sceneEntity.setTenantId(currentUser.getTenantId());
  120. sceneEntity.setProgramItems(currentUser.getProgramItemList());
  121. sceneEntity.setUserType(currentUser.getType());
  122. //1是公司,2是公司及以下,3部门,4部门及以下,5自定义
  123. sceneEntity.setPermissonType(currentUser.getPermissonType());
  124. return sceneMapper.findList(sceneEntity);
  125. }
  126. /**
  127. * 批量删除
  128. */
  129. @Transactional(rollbackFor = Exception.class)
  130. public boolean delSceneByIds(Long[] ids) {
  131. return this.removeByIds(Arrays.asList(ids));
  132. }
  133. /**
  134. * 单个删除
  135. */
  136. public boolean delSceneById(Long id) {
  137. return this.removeById(id);
  138. }
  139. /**
  140. * 保存
  141. */
  142. public boolean addScene(SceneEntity scene) {
  143. LoginUser currentUser = UserUtil.getCurrentUser();
  144. scene.setTenantId(currentUser.getTenantId());
  145. scene.setStatus(1);
  146. if (currentUser != null) {
  147. scene.setCreateBy(currentUser.getName());
  148. scene.setUpdateBy(currentUser.getName());
  149. scene.setDateUpdate(new Date());
  150. scene.setDateCreate(new Date());
  151. }
  152. if (scene.getDeptOrgId() != null && scene.getDeptOrgId() == 0) {
  153. scene.setDeptOrgId(null);
  154. }
  155. // 如果没有设置父节点,则代表为跟节点,有则获取父节点实体
  156. if (scene.getParentSceneId() == null || StringUtils.isBlank(scene.getParentSceneId().toString())) {
  157. scene.setParentSceneId(Long.valueOf(0));
  158. } else {
  159. scene.setParentSceneId(scene.getParentSceneId());
  160. }
  161. if (scene.getParentSceneId() == null) {
  162. scene.setParentSceneIds("0,");
  163. }
  164. //查询父节点信息
  165. SceneEntity sceneEntity = sceneMapper.findSceneById(scene.getParentSceneId());
  166. if (this.save(scene)) {
  167. Long id = scene.getId();
  168. // 设置新的父节点串
  169. if (sceneEntity != null) {
  170. scene.setParentSceneIds(sceneEntity.getParentSceneIds() + id + ",");
  171. } else {
  172. scene.setParentSceneIds("0," + id + ",");
  173. }
  174. sceneMapper.updateById(scene);
  175. //增加场景图片
  176. if (scene.getSceneImages() != null) {
  177. for (SceneImageEntity sceneImage : scene.getSceneImages()) {
  178. sceneImage.setCreateBy(currentUser.getName());
  179. sceneImage.setDateCreate(new Date());
  180. sceneImage.setDateUpdate(new Date());
  181. sceneImage.setSceneId(id);
  182. sceneImage.setStatus(1);
  183. sceneImage.setUpdateBy(currentUser.getName());
  184. }
  185. sceneImageService.saveBatch(scene.getSceneImages());
  186. }
  187. return true;
  188. }
  189. return false;
  190. }
  191. /**
  192. * 根据父级ID查询所有子节点及本身
  193. */
  194. public List<SceneEntity> findByParentLike(Long id) {
  195. LoginUser currentUser = UserUtil.getCurrentUser();
  196. SceneEntity scene = new SceneEntity();
  197. if (id != null) {
  198. scene.setParentSceneIds("%," + id + ",%");
  199. }
  200. scene.setTenantId(currentUser.getTenantId());
  201. scene.setStatus(1);
  202. scene.setProgramItems(currentUser.getProgramItemList());
  203. scene.setUserType(currentUser.getType());
  204. //1是公司,2是公司及以下,3部门,4部门及以下,5自定义
  205. scene.setPermissonType(currentUser.getPermissonType());
  206. List<SceneEntity> list = sceneMapper.findByParentIdsLike(scene);
  207. return list;
  208. }
  209. /**
  210. * 根据父级ID查询所有子节点及本身
  211. */
  212. public List<Long> findByParentIdsLike(Long id) {
  213. LoginUser currentUser = UserUtil.getCurrentUser();
  214. SceneEntity scene = new SceneEntity();
  215. if (id != null) {
  216. scene.setParentSceneIds("%," + id + ",%");
  217. }
  218. scene.setTenantId(currentUser.getTenantId());
  219. scene.setStatus(1);
  220. scene.setProgramItems(currentUser.getProgramItemList());
  221. scene.setUserType(currentUser.getType());
  222. //1是公司,2是公司及以下,3部门,4部门及以下,5自定义
  223. scene.setPermissonType(currentUser.getPermissonType());
  224. List<SceneEntity> list = sceneMapper.findByParentIdsLike(scene);
  225. List<Long> longs = newArrayList();
  226. for (SceneEntity item : list) {
  227. longs.add(item.getId());
  228. }
  229. return longs;
  230. }
  231. /**
  232. * 根据父级ID查询所有子节点及本身
  233. */
  234. public List<Long> findByParentIdsByCom(Long id) {
  235. LoginUser currentUser = UserUtil.getCurrentUser();
  236. SceneEntity scene = new SceneEntity();
  237. scene.setTenantId(currentUser.getTenantId());
  238. scene.setStatus(1);
  239. scene.setCompanyOrgId(id);
  240. scene.setProgramItems(currentUser.getProgramItemList());
  241. scene.setUserType(currentUser.getType());
  242. //1是公司,2是公司及以下,3部门,4部门及以下,5自定义
  243. scene.setPermissonType(currentUser.getPermissonType());
  244. List<SceneEntity> list = sceneMapper.findByParentIdsLike(scene);
  245. List<Long> longs = newArrayList();
  246. for (SceneEntity item : list) {
  247. longs.add(item.getId());
  248. }
  249. return longs;
  250. }
  251. /**
  252. * 修改根居ID
  253. */
  254. public boolean updateSceneById(SceneEntity scene) {
  255. LoginUser currentUser = UserUtil.getCurrentUser();
  256. scene.setUpdateBy(currentUser.getName());
  257. if (scene.getDeptOrgId() != null && scene.getDeptOrgId() == 0) {
  258. scene.setDeptOrgId(null);
  259. }
  260. // 获取修改前的parentIds,用于更新子节点的parentIds
  261. SceneEntity cScene = sceneMapper.findSceneById(scene.getId());
  262. String oldParentIds = cScene.getParentSceneIds();
  263. // 如果没有设置父节点,则代表为跟节点,有则获取父节点实体
  264. if (scene.getParentSceneId() == null || StringUtils.isBlank(scene.getParentSceneId().toString())) {
  265. scene.setParentSceneId(Long.valueOf(0));
  266. } else {
  267. scene.setParentSceneId(scene.getParentSceneId());
  268. }
  269. if (scene.getParentSceneId() == null) {
  270. scene.setParentSceneIds("0,");
  271. }
  272. //查询父节点信息
  273. SceneEntity sceneEntity = sceneMapper.findSceneById(scene.getParentSceneId());
  274. if (this.updateById(scene)) {
  275. // 设置新的父节点串
  276. if (sceneEntity != null) {
  277. scene.setParentSceneIds(sceneEntity.getParentSceneIds() + scene.getId() + ",");
  278. } else {
  279. scene.setParentSceneIds("0," + scene.getId() + ",");
  280. }
  281. sceneMapper.updateById(scene);
  282. // 更新子节点 parentIds
  283. Class<SceneEntity> entityClass = Reflections.getClassGenricType(getClass(), 1);
  284. SceneEntity o = null;
  285. try {
  286. o = entityClass.newInstance();
  287. } catch (Exception e) {
  288. }
  289. o.setParentSceneIds("%," + scene.getId() + ",%");
  290. List<SceneEntity> list = sceneMapper.findByParentIdsLike(o);
  291. for (SceneEntity e : list) {
  292. if (!e.getId().equals(scene.getId()) && e.getParentSceneId() != null && oldParentIds != null) {
  293. e.setParentSceneIds(e.getParentSceneIds().replace(oldParentIds, scene.getParentSceneIds()));
  294. e.setDeptOrgId(scene.getDeptOrgId());
  295. e.setCompanyOrgId(scene.getCompanyOrgId());
  296. sceneMapper.updateById(e);
  297. }
  298. }
  299. //删除之前的图片信息
  300. sceneImageService.updateBySceneId(scene.getId());
  301. //增加场景图片
  302. if (scene.getSceneImages() != null) {
  303. for (SceneImageEntity sceneImage : scene.getSceneImages()) {
  304. sceneImage.setCreateBy(currentUser.getName());
  305. sceneImage.setDateCreate(new Date());
  306. sceneImage.setDateUpdate(new Date());
  307. sceneImage.setSceneId(scene.getId());
  308. sceneImage.setStatus(1);
  309. sceneImage.setUpdateBy(currentUser.getName());
  310. }
  311. sceneImageService.saveBatch(scene.getSceneImages());
  312. }
  313. return true;
  314. }
  315. return false;
  316. }
  317. /**
  318. * 根居ID获取对象
  319. */
  320. public SceneEntity findSceneById(Long id) {
  321. SceneEntity sceneEntity = sceneMapper.findSceneById(id);
  322. SceneImageEntity sceneImageEntity = new SceneImageEntity();
  323. sceneImageEntity.setSceneId(id);
  324. List<SceneImageEntity> sceneImageEntities = sceneImageService.findList(sceneImageEntity);
  325. sceneEntity.setSceneImages(sceneImageEntities);
  326. return sceneEntity;
  327. }
  328. /**
  329. * 根居ID获取对象
  330. */
  331. public SceneEntity findSceneByIdForApp(Long id) {
  332. SceneEntity sceneEntity = sceneMapper.findSceneById(id);
  333. SceneImageEntity sceneImageEntity = new SceneImageEntity();
  334. sceneImageEntity.setSceneId(id);
  335. sceneImageEntity.setImageType(3L);
  336. List<SceneImageEntity> sceneImageEntities = sceneImageService.findList(sceneImageEntity);
  337. sceneEntity.setSceneImages(sceneImageEntities);
  338. return sceneEntity;
  339. }
  340. public List<SceneEntity> findBySceneTypeIds(Long[] Ids) {
  341. return sceneMapper.findBySceneTypeIds(Ids);
  342. }
  343. public List<SceneEntity> findByParentSceneIds(Long[] Ids) {
  344. return sceneMapper.findByParentSceneIds(Ids);
  345. }
  346. public List<SceneEntity> selectByTypeName(SceneEntity sceneEntity) {
  347. LoginUser currentUser = UserUtil.getCurrentUser();
  348. sceneEntity.setTenantId(currentUser.getTenantId());
  349. sceneEntity.setProgramItems(currentUser.getProgramItemList());
  350. sceneEntity.setUserType(currentUser.getType());
  351. //1是公司,2是公司及以下,3部门,4部门及以下,5自定义
  352. sceneEntity.setPermissonType(currentUser.getPermissonType());
  353. return sceneMapper.selectByTypeName(sceneEntity);
  354. }
  355. public List<SceneEntity> findByParentId(Long id) {
  356. SceneEntity sceneEntity = new SceneEntity();
  357. LoginUser currentUser = UserUtil.getCurrentUser();
  358. sceneEntity.setTenantId(currentUser.getTenantId());
  359. sceneEntity.setProgramItems(currentUser.getProgramItemList());
  360. sceneEntity.setUserType(currentUser.getType());
  361. //1是公司,2是公司及以下,3部门,4部门及以下,5自定义
  362. sceneEntity.setPermissonType(currentUser.getPermissonType());
  363. if (id != null) {
  364. sceneEntity.setParentSceneIds("%," + id + ",%");
  365. }
  366. List<SceneEntity> sceneEntities = sceneMapper.findByParentId(sceneEntity);
  367. for (SceneEntity item : sceneEntities) {
  368. SceneImageEntity sceneImageEntity = new SceneImageEntity();
  369. sceneImageEntity.setSceneId(item.getId());
  370. List<SceneImageEntity> sceneImageEntities = sceneImageService.findList(sceneImageEntity);
  371. item.setSceneImages(sceneImageEntities);
  372. }
  373. List<SceneEntity> sceneTree = getSceneTree(sceneEntities, Long.valueOf(0), 1);
  374. return sceneTree;
  375. }
  376. public List<SceneEntity> findByParentIdForAPP(Long id) {
  377. SceneEntity sceneEntity = new SceneEntity();
  378. LoginUser currentUser = UserUtil.getCurrentUser();
  379. sceneEntity.setTenantId(currentUser.getTenantId());
  380. sceneEntity.setProgramItems(currentUser.getProgramItemList());
  381. sceneEntity.setUserType(currentUser.getType());
  382. //1是公司,2是公司及以下,3部门,4部门及以下,5自定义
  383. sceneEntity.setPermissonType(currentUser.getPermissonType());
  384. if (id != null) {
  385. sceneEntity.setParentSceneIds("%," + id + ",%");
  386. }
  387. List<SceneEntity> sceneEntities = sceneMapper.findByParentId(sceneEntity);
  388. for (SceneEntity item : sceneEntities) {
  389. SceneImageEntity sceneImageEntity = new SceneImageEntity();
  390. sceneImageEntity.setSceneId(item.getId());
  391. sceneImageEntity.setImageType(3L);
  392. List<SceneImageEntity> sceneImageEntities = sceneImageService.findList(sceneImageEntity);
  393. item.setSceneImages(sceneImageEntities);
  394. //判断此场景是否有报警
  395. List<AlarmDetailsDto> alarmList = alarmDetailsService.selectBySceneId(item.getId().intValue());
  396. if (alarmList.size() > 0) {
  397. item.setIsAlarm(1);
  398. } else {
  399. item.setIsAlarm(0);
  400. }
  401. }
  402. List<SceneEntity> sceneTree = getSceneTree(sceneEntities, Long.valueOf(0), 1);
  403. return sceneTree;
  404. }
  405. /**
  406. * 根据场景id查询一级场景信息
  407. */
  408. public SceneEntity findParentSceneById(Long id) {
  409. return sceneMapper.findParentSceneById(id);
  410. }
  411. public void saveUpdateBatch(List<DeviceSceneEntity> deviceScenes) {
  412. //先进行查询判断哪些设备已经被保存
  413. }
  414. public List<SceneEntity> selectByTypeNameForCom(SceneEntity sceneEntity, Long companyOrgId) {
  415. LoginUser currentUser = UserUtil.getCurrentUser();
  416. if (currentUser != null) {
  417. sceneEntity.setTenantId(currentUser.getTenantId());
  418. sceneEntity.setProgramItems(currentUser.getProgramItemList());
  419. sceneEntity.setUserType(currentUser.getType());
  420. //1是公司,2是公司及以下,3部门,4部门及以下,5自定义
  421. sceneEntity.setPermissonType(currentUser.getPermissonType());
  422. }
  423. sceneEntity.setCompanyOrgId(companyOrgId);
  424. return sceneMapper.selectByTypeName(sceneEntity);
  425. }
  426. public List<Map<String,Object>> selectAlarmSceneAndDevice(SceneEntity sceneEntity, String startDate, String endDate){
  427. return sceneMapper.selectAlarmSceneAndDevice(sceneEntity, startDate, endDate);
  428. }
  429. public List<Map<String,Object>> selectMonthAlarmTimes(@Param("scene") SceneEntity sceneEntity, @Param("startDate") String startDate, @Param("endDate") String endDate,@Param("sort") int sort) throws ParseException {
  430. int days = differentDaysByMillisecond(startDate,endDate);
  431. List<Map<String,Object>> result = new ArrayList<Map<String,Object>>();
  432. List<Map<String,Object>> list = sceneMapper.selectMonthAlarmTimes(sceneEntity,startDate,endDate,sort);
  433. for(int i=0; i<days; i++) {
  434. String strDate = subDay(startDate,i);
  435. Map<String, Object> data = new HashMap<>();
  436. data.put("数量", 0);
  437. data.put("日期", strDate);
  438. data.put("序号",i+1);
  439. result.add(data);
  440. }
  441. for(int i=0;i<list.size();i++){
  442. Map<String,Object> map =list.get(i);
  443. int day = Integer.parseInt(map.get("日期").toString().substring(8,10));
  444. result.get(day-1).put("数量",map.get("数量"));
  445. }
  446. return result;
  447. }
  448. public List<Map<String,Object>> selectYearAlarmTimes(@Param("scene") SceneEntity sceneEntity, @Param("startDate") String startDate, @Param("endDate") String endDate,@Param("sort") int sort) throws ParseException {
  449. int months = differentMonths(startDate,endDate);
  450. List<Map<String,Object>> list = sceneMapper.selectYearAlarmTimes(sceneEntity,startDate,endDate,sort);
  451. List<Map<String,Object>> result = new ArrayList<Map<String,Object>>();
  452. for(int i=0; i<months; i++) {
  453. String strDate = startDate.substring(0, 4) + String.format("-%02d", i + 1);
  454. Map<String, Object> data = new HashMap<>();
  455. data.put("数量", 0);
  456. data.put("日期", strDate);
  457. data.put("序号",i+1);
  458. result.add(data);
  459. }
  460. for(int i=0;i<list.size();i++){
  461. Map<String,Object> map =list.get(i);
  462. int month = Integer.parseInt(map.get("日期").toString().substring(5,7));
  463. result.get(month-1).put("数量",map.get("数量"));
  464. }
  465. return result;
  466. }
  467. public List<Map<String,Object>> selectAlarmLable(@Param("scene") SceneEntity sceneEntity, @Param("startDate") String startDate, @Param("endDate") String endDate, @Param("sort") int sort){
  468. return sceneMapper.selectAlarmLable(sceneEntity, startDate, endDate, sort);
  469. }
  470. public List<Map<String,Object>> selectAlarmDeviceIdBySenceId(int id){
  471. return sceneMapper.selectAlarmDeviceIdBySenceId(id);
  472. }
  473. public int differentDaysByMillisecond(String date1,String date2) throws ParseException {
  474. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  475. Date dt1 = sdf.parse(date1);
  476. Date dt2 = sdf.parse(date2);
  477. int days = (int) ((dt2.getTime() - dt1.getTime()) / (1000*3600*24));
  478. return days;
  479. }
  480. /**
  481. * 计算2个日期之间相差的 以年、月、日为单位,各自计算结果是多少
  482. * 比如:2011-02-02 到 2017-03-02
  483. * 以年为单位相差为:6年
  484. * 以月为单位相差为:73个月
  485. * 以日为单位相差为:2220天
  486. * @param startDate
  487. * @param endDate
  488. * @return
  489. */
  490. public int differentMonths(String startDate,String endDate) throws ParseException {
  491. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  492. Date fromDate = sdf.parse(startDate);
  493. Date toDate = sdf.parse(endDate);
  494. Calendar from = Calendar.getInstance();
  495. from.setTime(fromDate);
  496. Calendar to = Calendar.getInstance();
  497. to.setTime(toDate);
  498. //只要年月
  499. int fromYear = from.get(Calendar.YEAR);
  500. int fromMonth = from.get(Calendar.MONTH);
  501. int toYear = to.get(Calendar.YEAR);
  502. int toMonth = to.get(Calendar.MONTH);
  503. // int year = toYear - fromYear;
  504. int month = toYear * 12 + toMonth - (fromYear * 12 + fromMonth);
  505. // int day = (int) ((to.getTimeInMillis() - from.getTimeInMillis()) / (24 * 3600 * 1000));
  506. return month;
  507. }
  508. /**
  509. *日期加一天
  510. */
  511. private String subDay(String date, int n) throws ParseException {
  512. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  513. Date dt = sdf.parse(date);
  514. Calendar rightNow = Calendar.getInstance();
  515. rightNow.setTime(dt);
  516. rightNow.add(Calendar.DATE, n);
  517. Date dt1 = rightNow.getTime();
  518. String reStr = sdf.format(dt1);
  519. return reStr;
  520. }
  521. }