Commit 8f9bd8ca LN

增加onlineData表:设备上线离线数据存储

1 个父辈 ef055ec7
package com.neotel.smfcore.core.onlineData.service.dao;
import com.neotel.smfcore.common.base.IBaseDao;
public interface IOnlineDataDao extends IBaseDao {
}
package com.neotel.smfcore.core.onlineData.service.dao.impl;
import com.neotel.smfcore.common.base.AbstractBaseDao;
import com.neotel.smfcore.core.onlineData.service.dao.IOnlineDataDao;
import com.neotel.smfcore.core.onlineData.service.po.OnlineData;
import org.springframework.stereotype.Service;
@Service
public class OnlineDataDaoImpl extends AbstractBaseDao implements IOnlineDataDao {
@Override
public Class getEntityClass() {
return OnlineData.class;
}
}
package com.neotel.smfcore.core.onlineData.service.manager;
import com.neotel.smfcore.common.base.IBaseManager;
import com.neotel.smfcore.core.onlineData.service.po.OnlineData;
public interface IOnlineDataManager extends IBaseManager<OnlineData> {
void updateOfflineTime(String cid);
}
package com.neotel.smfcore.core.onlineData.service.manager.impl;
import com.neotel.smfcore.common.bean.PageData;
import com.neotel.smfcore.common.exception.ValidateException;
import com.neotel.smfcore.core.onlineData.service.dao.IOnlineDataDao;
import com.neotel.smfcore.core.onlineData.service.manager.IOnlineDataManager;
import com.neotel.smfcore.core.onlineData.service.po.OnlineData;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.List;
@Slf4j
@Service
public class OnlineDataManagerImpl implements IOnlineDataManager {
@Autowired
private IOnlineDataDao onlineDataDao;
@Override
public OnlineData get(String id) {
return onlineDataDao.findOneById(id);
}
@Override
public OnlineData save(OnlineData object) throws ValidateException {
return onlineDataDao.save(object);
}
@Override
public void delete(OnlineData object) throws ValidateException {
onlineDataDao.removeOneById(object.getId());
}
@Override
public PageData<OnlineData> findByPage(Query query, Pageable pageable) {
int totalCount=onlineDataDao.countByQuery(query);
List<OnlineData> list= onlineDataDao.findByQuery(query,pageable);
return new PageData(list,totalCount);
}
@Override
public List<OnlineData> findByQuery(Query query) {
return onlineDataDao.findByQuery(query);
}
@Override
public void updateOfflineTime(String cid) {
Criteria criteria = Criteria.where("cid").is(cid).and("offLineTime").isNull();
Query q = new Query(criteria);
onlineDataDao.updateFirst(q, new Update().set("offLineTime", new Date()));
}
}
package com.neotel.smfcore.core.onlineData.service.po;
import com.neotel.smfcore.common.base.BasePo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.mongodb.core.mapping.Document;
import java.io.Serializable;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
@Data
@Document
@NoArgsConstructor
@AllArgsConstructor
public class OnlineData extends BasePo implements Serializable {
/**
* CID
*/
private String cid;
/**
* 料仓ID
*/
private String storageId;
/**
* 上线时间
*/
private Date onlineTime;
/**
* 离线时间
*/
private Date offLineTime;
public Map<String,Long> getOnlineMap() {
Map<String, Long> map = new HashMap<>();
//分段获取每天的在线时间
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar st = Calendar.getInstance();
Calendar ed = Calendar.getInstance();
st.setTime(onlineTime);
if (offLineTime != null) {
ed.setTime(offLineTime);
} else {
ed.setTime(new Date());
}
String skey = sdf.format(st.getTime());
String ekey = sdf.format(ed.getTime());
if (skey.equals(ekey)) {
map.put(skey, ed.getTimeInMillis() - st.getTimeInMillis());
} else {
long sTime = 24 * 60 * 60 * 1000 - (st.get(Calendar.HOUR_OF_DAY) * 60 * 1000 + st.get(Calendar.MINUTE) * 1000 + st.get(Calendar.SECOND));
map.put(skey, sTime);
sTime = 24 * 60 * 60 * 1000 - (st.get(Calendar.HOUR_OF_DAY) * 60 * 1000 + st.get(Calendar.MINUTE) * 1000 + st.get(Calendar.SECOND));
map.put(ekey, sTime);
while (!st.after(ed)) {
String currKey = sdf.format(st.getTime());
if (currKey.equals(skey) || currKey.equals(ekey)) {
} else {
sTime = 24 * 60 * 60 * 1000;
map.put(currKey, sTime);
}
st.add(Calendar.DAY_OF_YEAR, 1);
}
}
return map;
}
}
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!