package com.leeroa.dydb.datasource.lianjia.web; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.leeroa.base.utils.DownloadResponseWrapper; import com.leeroa.base.utils.export.ExcelUtils; import com.leeroa.dydb.datasource.lianjia.bo.DataLianjiaUpBo; import com.leeroa.dydb.datasource.lianjia.bo.LianjiaParams; import com.leeroa.dydb.datasource.lianjia.cache.LianjiaCache; import com.leeroa.dydb.datasource.lianjia.domain.DataLianjiaUp; import com.leeroa.dydb.datasource.lianjia.schedule.LianjiaUpSchedule; import com.leeroa.dydb.datasource.lianjia.service.DataLianjiaUpService; import com.leeroa.dydb.datasource.lianjia.vo.DataLianjiaUpVo; import com.leeroa.dydb.datasource.paimai.utils.LianjiaUtils; import com.michael.common.JspAccessType; import com.michael.core.pager.PageVo; import com.michael.core.web.BaseController; import com.michael.poi.exp.ExportEngine; import com.michael.utils.gson.DateStringConverter; import com.michael.utils.gson.GsonUtils; import org.apache.commons.io.IOUtils; import org.springframework.stereotype.Controller; import org.springframework.util.Assert; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.InputStream; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; import java.util.Map; /** * @author yluo */ @Controller @RequestMapping(value = {"/dydb/data/dataLianjiaUp"}) public class DataLianjiaUpCtrl extends BaseController { @Resource private DataLianjiaUpService dataLianjiaUpService; @Resource private LianjiaUpSchedule lianjiaUpSchedule; @RequestMapping(value = {""}, method = RequestMethod.GET) public String toList() { return "dydb/data/dataLianjiaUp/dataLianjiaUp_list"; } @RequestMapping(value = "/add", method = RequestMethod.GET) public String toAdd(HttpServletRequest request) { request.setAttribute(JspAccessType.PAGE_TYPE, JspAccessType.ADD); return "dydb/data/dataLianjiaUp/dataLianjiaUp_edit"; } @RequestMapping(value = "/save", method = RequestMethod.POST) @ResponseBody public void save(HttpServletRequest request, HttpServletResponse response) { DataLianjiaUp dataLianjiaUp = GsonUtils.wrapDataToEntity(request, DataLianjiaUp.class); dataLianjiaUpService.save(dataLianjiaUp); GsonUtils.printSuccess(response); } @RequestMapping(value = "/modify", params = {"id"}, method = RequestMethod.GET) public String toModify(@RequestParam String id, HttpServletRequest request) { request.setAttribute(JspAccessType.PAGE_TYPE, JspAccessType.MODIFY); request.setAttribute("id", id); return "dydb/data/dataLianjiaUp/dataLianjiaUp_edit"; } @RequestMapping(value = "/update", method = RequestMethod.POST) @ResponseBody public void update(HttpServletRequest request, HttpServletResponse response) { DataLianjiaUp dataLianjiaUp = GsonUtils.wrapDataToEntity(request, DataLianjiaUp.class); dataLianjiaUpService.update(dataLianjiaUp); GsonUtils.printSuccess(response); } @RequestMapping(value = {"/detail"}, params = {"id"}, method = RequestMethod.GET) public String toDetail(@RequestParam String id, HttpServletRequest request) { request.setAttribute(JspAccessType.PAGE_TYPE, JspAccessType.DETAIL); request.setAttribute("id", id); return "dydb/data/dataLianjiaUp/dataLianjiaUp_edit"; } @ResponseBody @RequestMapping(value = "/get", params = {"id"}, method = RequestMethod.GET) public void findById(@RequestParam String id, HttpServletResponse response) { DataLianjiaUpVo vo = dataLianjiaUpService.findById(id); GsonUtils.printData(response, vo); } @ResponseBody @RequestMapping(value = "/pageQuery", method = RequestMethod.POST) public void pageQuery(HttpServletRequest request, HttpServletResponse response) { DataLianjiaUpBo bo = GsonUtils.wrapDataToEntity(request, DataLianjiaUpBo.class); PageVo pageVo = dataLianjiaUpService.pageQuery(bo); GsonUtils.printData(response, pageVo); } @ResponseBody @RequestMapping(value = "/query", method = RequestMethod.POST) public void query(HttpServletRequest request, HttpServletResponse response) { DataLianjiaUpBo bo = GsonUtils.wrapDataToEntity(request, DataLianjiaUpBo.class); List vos = dataLianjiaUpService.query(bo); GsonUtils.printData(response, vos); } @ResponseBody @RequestMapping(value = "/delete", method = RequestMethod.POST) public void deleteByIds(HttpServletRequest request, HttpServletResponse response) { String[] ids = GsonUtils.wrapDataToEntity(request, String[].class); dataLianjiaUpService.deleteByIds(ids); GsonUtils.printSuccess(response); } // 全部导出 @RequestMapping(value = "/export-all", method = RequestMethod.GET) public void exportAll(HttpServletRequest request, HttpServletResponse response) throws IOException { DownloadResponseWrapper.wrap(response, "链家挂牌数据.xlsx"); ExcelUtils.export(DataLianjiaUp.class, response.getOutputStream()); } // 导出数据 @RequestMapping(value = "/export", method = RequestMethod.GET) public String export(HttpServletRequest request, HttpServletResponse response) throws IOException { Gson gson = new GsonBuilder() .registerTypeAdapter(Date.class, new DateStringConverter("yyyy-MM-dd")) .create(); DataLianjiaUpBo bo = GsonUtils.wrapDataToEntity(request, DataLianjiaUpBo.class); List data = dataLianjiaUpService.query(bo); String json = gson.toJson(data); JsonElement element = gson.fromJson(json, JsonElement.class); JsonObject o = new JsonObject(); o.add("c", element); DownloadResponseWrapper.wrap(response, "链家挂牌数据数据" + new SimpleDateFormat("yyyyMMdd").format(new Date()) + ".xlsx"); InputStream inputStream = DataLianjiaUpCtrl.class.getClassLoader().getResourceAsStream("exp/export_dataLianjiaUp.xlsx"); Assert.notNull(inputStream, "数据导出失败!模板文件不存在,请与管理员联系!"); new ExportEngine().export(response.getOutputStream(), inputStream, o); return null; } // 下载模板 @RequestMapping(value = "/template", method = RequestMethod.GET) public void downloadTemplate(HttpServletRequest request, HttpServletResponse response) throws IOException { InputStream input = DataLianjiaUpCtrl.class.getClassLoader().getResourceAsStream("import_dataLianjiaUp.xlsx"); if (input == null) { request.setAttribute("javax.servlet.error.message", "模板[import_dataLianjiaUp.xlsx]不存在!"); request.getRequestDispatcher("/app/500.jsp"); return; } DownloadResponseWrapper.wrap(response, "链家挂牌数据数据导入模板.xlsx"); IOUtils.copy(input, response.getOutputStream()); } // 获取成都的所有区域信息 @RequestMapping("/citymap") @ResponseBody public void queryCityMap(HttpServletRequest request, HttpServletResponse response) { GsonUtils.printData(response, LianjiaUtils.getCityCacheMap()); } // 获取区域下的商圈信息 @RequestMapping(value = "/citymap-biz", params = "code") @ResponseBody public void queryBizList(String code, HttpServletRequest request, HttpServletResponse response) { Map data = LianjiaCache.get(code,null); GsonUtils.printData(response, data); } // 获取指定商圈的列表数据 @RequestMapping(value = "/fetchList", method = RequestMethod.POST) @ResponseBody public void fetchList(HttpServletRequest request, HttpServletResponse response) { LianjiaParams lianjiaParams = GsonUtils.wrapDataToEntity(request, LianjiaParams.class); Assert.hasText(lianjiaParams.getBizCode(), "为保证抓取数据可靠且完整,请选择至具体的商圈"); final int total = dataLianjiaUpService.remoteFetchUpPriceList(lianjiaParams); GsonUtils.printData(response, total); } // 获取指定商圈的列表数据 @RequestMapping(value = "/fetchDetail", method = RequestMethod.POST) @ResponseBody public void fetchDetail(HttpServletRequest request, HttpServletResponse response) { DataLianjiaUpBo dataLianjiaUpBo = GsonUtils.wrapDataToEntity(request, DataLianjiaUpBo.class); int size = dataLianjiaUpService.remoteFetchDetail(dataLianjiaUpBo); GsonUtils.printData(response, size); } // 每日抓取 @RequestMapping(value = "/dailySchedule", method = RequestMethod.GET) @ResponseBody public void dailySchedule(HttpServletRequest request, HttpServletResponse response) { lianjiaUpSchedule.dailyFetchUpPrice(); GsonUtils.printSuccess(response); } // 抓取指定小区最新的挂牌数据 @RequestMapping(value = "/fetch-new", method = RequestMethod.POST) @ResponseBody public void fetchNewList(HttpServletRequest request, HttpServletResponse response) { DataLianjiaUp bo = GsonUtils.wrapDataToEntity(request, DataLianjiaUp.class); int counts = dataLianjiaUpService.fetchNewList(bo.getHouses()); GsonUtils.printData(response, counts); } }