|
@@ -5,6 +5,7 @@ import com.leeroa.base.attachment.utils.AttachmentHolder;
|
|
|
import com.leeroa.base.attachment.vo.AttachmentVo;
|
|
|
import com.leeroa.base.log.LogHelper;
|
|
|
import com.leeroa.base.parameter.service.ParameterContainer;
|
|
|
+import com.leeroa.dydb.base.domain.Location;
|
|
|
import com.leeroa.dydb.datasource.HouseCache;
|
|
|
import com.leeroa.dydb.datasource.lianjia.bo.DataLianjiaBo;
|
|
|
import com.leeroa.dydb.datasource.lianjia.bo.LianjiaParams;
|
|
@@ -13,6 +14,7 @@ import com.leeroa.dydb.datasource.lianjia.dao.DataLianjiaCodeDao;
|
|
|
import com.leeroa.dydb.datasource.lianjia.dao.DataLianjiaDao;
|
|
|
import com.leeroa.dydb.datasource.lianjia.domain.DataLianjia;
|
|
|
import com.leeroa.dydb.datasource.lianjia.domain.DataLianjiaCode;
|
|
|
+import com.leeroa.dydb.datasource.lianjia.domain.DataLianjiaUp;
|
|
|
import com.leeroa.dydb.datasource.lianjia.dto.DataLianjiaDTO;
|
|
|
import com.leeroa.dydb.datasource.lianjia.service.DataLianjiaCodeService;
|
|
|
import com.leeroa.dydb.datasource.lianjia.service.DataLianjiaService;
|
|
@@ -20,6 +22,10 @@ import com.leeroa.dydb.datasource.lianjia.vo.DataLianjiaVo;
|
|
|
import com.leeroa.dydb.datasource.paimai.utils.LianjiaResponse;
|
|
|
import com.leeroa.dydb.datasource.paimai.utils.LianjiaUtils;
|
|
|
import com.leeroa.dydb.datasource.utils.HouseUtils;
|
|
|
+import com.leeroa.dydb.price.bo.DateSourcePriceBO;
|
|
|
+import com.leeroa.dydb.price.domain.CommunityPrice;
|
|
|
+import com.leeroa.dydb.price.service.CommunityPriceService;
|
|
|
+import com.leeroa.dydb.price.vo.DataSourcePriceVO;
|
|
|
import com.leeroa.dydb.utils.baidu.BaiduData;
|
|
|
import com.leeroa.dydb.utils.baidu.BaiduMapUtils;
|
|
|
import com.leeroa.dydb.utils.baidu.BaiduResponseData;
|
|
@@ -45,6 +51,7 @@ import org.apache.commons.io.FileUtils;
|
|
|
import org.apache.log4j.Logger;
|
|
|
import org.hibernate.Criteria;
|
|
|
import org.hibernate.Session;
|
|
|
+import org.hibernate.criterion.MatchMode;
|
|
|
import org.hibernate.criterion.Order;
|
|
|
import org.hibernate.criterion.Projections;
|
|
|
import org.hibernate.criterion.Restrictions;
|
|
@@ -56,6 +63,7 @@ import javax.annotation.Resource;
|
|
|
import java.io.File;
|
|
|
import java.io.IOException;
|
|
|
import java.util.*;
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
|
* @author Michael
|
|
@@ -69,6 +77,9 @@ public class DataLianjiaServiceImpl implements DataLianjiaService, BeanWrapCallb
|
|
|
@Resource
|
|
|
private DataLianjiaCodeDao dataLianjiaCodeDao;
|
|
|
|
|
|
+ @Resource
|
|
|
+ private CommunityPriceService communityPriceService;
|
|
|
+
|
|
|
|
|
|
@Override
|
|
|
public String save(DataLianjia dataLianjia) {
|
|
@@ -211,7 +222,15 @@ public class DataLianjiaServiceImpl implements DataLianjiaService, BeanWrapCallb
|
|
|
if (data == null || data.isEmpty()) {
|
|
|
return records;
|
|
|
}
|
|
|
+ List<String> uniqueHouse = new ArrayList<>();
|
|
|
for (DataLianjia d : data) {
|
|
|
+ Double dealPrice = d.getDealPrice();
|
|
|
+ if ("cd".equals(params.getCityCode()) && dealPrice < 5000d){
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ if (!"cd".equals(params.getCityCode()) && dealPrice < 1000d){
|
|
|
+ continue;
|
|
|
+ }
|
|
|
records++;
|
|
|
d.setBatchNO(batchNO);
|
|
|
d.setProvinceName("四川");
|
|
@@ -224,6 +243,10 @@ public class DataLianjiaServiceImpl implements DataLianjiaService, BeanWrapCallb
|
|
|
d.setBizName(params.getBizName());
|
|
|
}
|
|
|
session.save(d);
|
|
|
+ if (!uniqueHouse.contains(d.getHouses())){
|
|
|
+ updateCommunityPrice(d);
|
|
|
+ uniqueHouse.add(d.getHouses());
|
|
|
+ }
|
|
|
}
|
|
|
return records;
|
|
|
}
|
|
@@ -418,4 +441,92 @@ public class DataLianjiaServiceImpl implements DataLianjiaService, BeanWrapCallb
|
|
|
public void doCallback(DataLianjia dataLianjia, DataLianjiaVo vo) {
|
|
|
ParameterContainer container = ParameterContainer.getInstance();
|
|
|
}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Double avg(DateSourcePriceBO bo) {
|
|
|
+ Date startTime = bo.getStartTime();
|
|
|
+ String houseName = bo.getHouseName();
|
|
|
+ String areaName = bo.getAreaName();
|
|
|
+ final Session session = HibernateUtils.getSession();
|
|
|
+ Criteria criteria = session.createCriteria(DataLianjia.class)
|
|
|
+ .setProjection(Projections.avg("dealPrice"))
|
|
|
+ .add(Restrictions.ge("dealDate", startTime))
|
|
|
+ .add(Restrictions.eq("houses", houseName));
|
|
|
+ if (StringUtils.isNotEmpty(areaName)) {
|
|
|
+ // 去掉最后的区字
|
|
|
+ if (areaName.endsWith("区")) {
|
|
|
+ areaName = areaName.substring(0, areaName.length() - 1);
|
|
|
+ }
|
|
|
+ criteria.add(Restrictions.disjunction(
|
|
|
+ Restrictions.isNull("areaName"),
|
|
|
+ Restrictions.like("areaName", areaName, MatchMode.START)
|
|
|
+ ));
|
|
|
+ }
|
|
|
+ return (Double) criteria.uniqueResult();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<DataSourcePriceVO> source(DateSourcePriceBO bo) {
|
|
|
+ Date startTime = bo.getStartTime();
|
|
|
+ String houseName = bo.getHouseName();
|
|
|
+ String areaName = bo.getAreaName();
|
|
|
+ final Session session = HibernateUtils.getSession();
|
|
|
+ Criteria criteria = session.createCriteria(DataLianjia.class)
|
|
|
+ .add(Restrictions.ge("dealDate", startTime))
|
|
|
+ .add(Restrictions.eq("houses", houseName));
|
|
|
+ if (StringUtils.isNotEmpty(areaName)) {
|
|
|
+ // 去掉最后的区字
|
|
|
+ if (areaName.endsWith("区")) {
|
|
|
+ areaName = areaName.substring(0, areaName.length() - 1);
|
|
|
+ }
|
|
|
+ criteria.add(Restrictions.disjunction(
|
|
|
+ Restrictions.isNull("areaName"),
|
|
|
+ Restrictions.like("areaName", areaName, MatchMode.START)
|
|
|
+ ));
|
|
|
+ }
|
|
|
+ criteria.addOrder(Order.asc("dealDate"));
|
|
|
+ List<DataLianjia> data = criteria.list();
|
|
|
+ List<DataSourcePriceVO> voList = new ArrayList<>();
|
|
|
+ data.forEach(k -> {
|
|
|
+ DataSourcePriceVO vo = new DataSourcePriceVO();
|
|
|
+ BeanCopyUtils.copyProperties(k, vo);
|
|
|
+ vo.setSourceName("链家成交");
|
|
|
+ vo.setPrice(k.getDealPrice());
|
|
|
+ vo.setPriceDate(k.getDealDate());
|
|
|
+ voList.add(vo);
|
|
|
+ });
|
|
|
+ return voList;
|
|
|
+ }
|
|
|
+
|
|
|
+ private void updateCommunityPrice(DataLianjia dataLianjia){
|
|
|
+ CommunityPrice cp = communityPriceService.findByName(dataLianjia.getHouses());
|
|
|
+ if (cp == null) {
|
|
|
+ cp = new CommunityPrice();
|
|
|
+ cp.setPriceSource("链家成交");
|
|
|
+ cp.setHouses(dataLianjia.getHouses());
|
|
|
+ cp.setAddress(dataLianjia.getAddress());
|
|
|
+ cp.setPriceDate(dataLianjia.getDealDate());
|
|
|
+ cp.setPrice(dataLianjia.getDealPrice());
|
|
|
+ cp.setBuildArea(dataLianjia.getBuildArea());
|
|
|
+ cp.setLongitude(dataLianjia.getLongitude());
|
|
|
+ cp.setLatitude(dataLianjia.getLatitude());
|
|
|
+ cp.setCityName(dataLianjia.getCityName());
|
|
|
+ cp.setAreaName(dataLianjia.getAreaName());
|
|
|
+ if (dataLianjia.getBuildYear() != null) {
|
|
|
+ cp.setBuildYear(dataLianjia.getBuildYear().toString());
|
|
|
+ }
|
|
|
+ communityPriceService.save(cp);
|
|
|
+ }
|
|
|
+ // 如果经纬度变了,则设置经纬度
|
|
|
+ if (StringUtils.isEmpty(cp.getLongitude()) && StringUtils.isNotEmpty(dataLianjia.getLatitude())) {
|
|
|
+ cp.setLongitude(dataLianjia.getLongitude());
|
|
|
+ cp.setLatitude(dataLianjia.getLatitude());
|
|
|
+ if (cp.getPriceSource() == null) {
|
|
|
+ cp.setPriceSource("链家成交");
|
|
|
+ } else if (!cp.getPriceSource().contains("链家成交")) {
|
|
|
+ cp.setPriceSource(cp.getPriceSource() + ",链家成交");
|
|
|
+ }
|
|
|
+ communityPriceService.update(cp);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|