diff --git a/casic-server/pom.xml b/casic-server/pom.xml index 0adbba2..1257fbe 100644 --- a/casic-server/pom.xml +++ b/casic-server/pom.xml @@ -42,6 +42,11 @@ com.casic + casic-export-support + ${extension.version} + + + com.casic casic-selenium-core ${extension.version} diff --git a/casic-server/pom.xml b/casic-server/pom.xml index 0adbba2..1257fbe 100644 --- a/casic-server/pom.xml +++ b/casic-server/pom.xml @@ -42,6 +42,11 @@ com.casic + casic-export-support + ${extension.version} + + + com.casic casic-selenium-core ${extension.version} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ProductInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ProductInfoController.java index 3548742..0e25a98 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ProductInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ProductInfoController.java @@ -3,7 +3,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.modular.system.model.ProductInfo; @@ -11,11 +11,13 @@ import com.casic.missiles.modular.system.service.IProductInfoService; import com.casic.missiles.modular.system.service.ISearchKeysService; import com.casic.missiles.modular.system.service.ISearchProgressService; +import lombok.SneakyThrows; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import java.util.List; @@ -28,7 +30,7 @@ */ @Controller @RequestMapping("/productInfo") -public class ProductInfoController extends BaseController { +public class ProductInfoController extends ExportController { @Resource private ISearchKeysService searchKeysService; @Resource @@ -44,7 +46,7 @@ @ResponseBody public Object cachePut(Integer num) { ProgressDTO progressDTO = new ProgressDTO(100, num); - progressDTO.setId(IdWorker.getId()+""); + progressDTO.setId(IdWorker.getId() + ""); progressService.updateCache(progressDTO); return ResponseData.success(progressDTO); } @@ -70,6 +72,7 @@ /** * 获取商品信息管理分页列表 */ + @SneakyThrows @RequestMapping(value = "/listPage") @ResponseBody public Object listPage(String condition, String flag) { @@ -80,6 +83,28 @@ return ResponseData.success(super.packForBT(page)); } + @SneakyThrows + @RequestMapping(value = "/export") + @ResponseBody + public void export(String condition, String flag) { + Page page = PageFactory.defaultPage(); + page.setSize(Long.MAX_VALUE); + List productInfos = productInfoService.searchDbProductPricePage(condition, flag, page); + productInfos.stream().forEach(productInfo -> { + switch (productInfo.getFlag()){ + case "1": + productInfo.setFlag("页面失效");break; + case "2": + productInfo.setFlag("价格偏高");break; + default: + productInfo.setFlag("正常");break; + } + } + ); + this.exportExcel(ProductInfo.class, productInfos, "商品价格监测"); + } + + /** * 新增商品信息管理 */ diff --git a/casic-server/pom.xml b/casic-server/pom.xml index 0adbba2..1257fbe 100644 --- a/casic-server/pom.xml +++ b/casic-server/pom.xml @@ -42,6 +42,11 @@ com.casic + casic-export-support + ${extension.version} + + + com.casic casic-selenium-core ${extension.version} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ProductInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ProductInfoController.java index 3548742..0e25a98 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ProductInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ProductInfoController.java @@ -3,7 +3,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.modular.system.model.ProductInfo; @@ -11,11 +11,13 @@ import com.casic.missiles.modular.system.service.IProductInfoService; import com.casic.missiles.modular.system.service.ISearchKeysService; import com.casic.missiles.modular.system.service.ISearchProgressService; +import lombok.SneakyThrows; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import java.util.List; @@ -28,7 +30,7 @@ */ @Controller @RequestMapping("/productInfo") -public class ProductInfoController extends BaseController { +public class ProductInfoController extends ExportController { @Resource private ISearchKeysService searchKeysService; @Resource @@ -44,7 +46,7 @@ @ResponseBody public Object cachePut(Integer num) { ProgressDTO progressDTO = new ProgressDTO(100, num); - progressDTO.setId(IdWorker.getId()+""); + progressDTO.setId(IdWorker.getId() + ""); progressService.updateCache(progressDTO); return ResponseData.success(progressDTO); } @@ -70,6 +72,7 @@ /** * 获取商品信息管理分页列表 */ + @SneakyThrows @RequestMapping(value = "/listPage") @ResponseBody public Object listPage(String condition, String flag) { @@ -80,6 +83,28 @@ return ResponseData.success(super.packForBT(page)); } + @SneakyThrows + @RequestMapping(value = "/export") + @ResponseBody + public void export(String condition, String flag) { + Page page = PageFactory.defaultPage(); + page.setSize(Long.MAX_VALUE); + List productInfos = productInfoService.searchDbProductPricePage(condition, flag, page); + productInfos.stream().forEach(productInfo -> { + switch (productInfo.getFlag()){ + case "1": + productInfo.setFlag("页面失效");break; + case "2": + productInfo.setFlag("价格偏高");break; + default: + productInfo.setFlag("正常");break; + } + } + ); + this.exportExcel(ProductInfo.class, productInfos, "商品价格监测"); + } + + /** * 新增商品信息管理 */ diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/SearchKeysController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/SearchKeysController.java index 44c33c3..8f4e3b7 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/SearchKeysController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/SearchKeysController.java @@ -4,17 +4,20 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.model.form.IdForms; import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.modular.system.model.SearchKeys; import com.casic.missiles.modular.system.service.IProductInfoService; import com.casic.missiles.modular.system.service.ISearchKeysService; +import lombok.SneakyThrows; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; +import java.util.List; /** * 关键字管理控制器 @@ -24,7 +27,7 @@ */ @Controller @RequestMapping("/searchKeys") -public class SearchKeysController extends BaseController { +public class SearchKeysController extends ExportController { @Resource private ISearchKeysService searchKeysService; @@ -57,6 +60,15 @@ return ResponseData.success(searchKeysService.list(null)); } + @SneakyThrows + @RequestMapping(value = "/importExcel") + @ResponseBody + public Object importExcel(MultipartFile file) { + List searchKeys = this.importExcel(SearchKeys.class, file, null, null); + searchKeysService.saveImportSearchKeys(searchKeys); + return ResponseData.success(); + } + /** * 获取关键字管理分页列表 */ diff --git a/casic-server/pom.xml b/casic-server/pom.xml index 0adbba2..1257fbe 100644 --- a/casic-server/pom.xml +++ b/casic-server/pom.xml @@ -42,6 +42,11 @@ com.casic + casic-export-support + ${extension.version} + + + com.casic casic-selenium-core ${extension.version} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ProductInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ProductInfoController.java index 3548742..0e25a98 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ProductInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ProductInfoController.java @@ -3,7 +3,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.modular.system.model.ProductInfo; @@ -11,11 +11,13 @@ import com.casic.missiles.modular.system.service.IProductInfoService; import com.casic.missiles.modular.system.service.ISearchKeysService; import com.casic.missiles.modular.system.service.ISearchProgressService; +import lombok.SneakyThrows; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import java.util.List; @@ -28,7 +30,7 @@ */ @Controller @RequestMapping("/productInfo") -public class ProductInfoController extends BaseController { +public class ProductInfoController extends ExportController { @Resource private ISearchKeysService searchKeysService; @Resource @@ -44,7 +46,7 @@ @ResponseBody public Object cachePut(Integer num) { ProgressDTO progressDTO = new ProgressDTO(100, num); - progressDTO.setId(IdWorker.getId()+""); + progressDTO.setId(IdWorker.getId() + ""); progressService.updateCache(progressDTO); return ResponseData.success(progressDTO); } @@ -70,6 +72,7 @@ /** * 获取商品信息管理分页列表 */ + @SneakyThrows @RequestMapping(value = "/listPage") @ResponseBody public Object listPage(String condition, String flag) { @@ -80,6 +83,28 @@ return ResponseData.success(super.packForBT(page)); } + @SneakyThrows + @RequestMapping(value = "/export") + @ResponseBody + public void export(String condition, String flag) { + Page page = PageFactory.defaultPage(); + page.setSize(Long.MAX_VALUE); + List productInfos = productInfoService.searchDbProductPricePage(condition, flag, page); + productInfos.stream().forEach(productInfo -> { + switch (productInfo.getFlag()){ + case "1": + productInfo.setFlag("页面失效");break; + case "2": + productInfo.setFlag("价格偏高");break; + default: + productInfo.setFlag("正常");break; + } + } + ); + this.exportExcel(ProductInfo.class, productInfos, "商品价格监测"); + } + + /** * 新增商品信息管理 */ diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/SearchKeysController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/SearchKeysController.java index 44c33c3..8f4e3b7 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/SearchKeysController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/SearchKeysController.java @@ -4,17 +4,20 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.model.form.IdForms; import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.modular.system.model.SearchKeys; import com.casic.missiles.modular.system.service.IProductInfoService; import com.casic.missiles.modular.system.service.ISearchKeysService; +import lombok.SneakyThrows; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; +import java.util.List; /** * 关键字管理控制器 @@ -24,7 +27,7 @@ */ @Controller @RequestMapping("/searchKeys") -public class SearchKeysController extends BaseController { +public class SearchKeysController extends ExportController { @Resource private ISearchKeysService searchKeysService; @@ -57,6 +60,15 @@ return ResponseData.success(searchKeysService.list(null)); } + @SneakyThrows + @RequestMapping(value = "/importExcel") + @ResponseBody + public Object importExcel(MultipartFile file) { + List searchKeys = this.importExcel(SearchKeys.class, file, null, null); + searchKeysService.saveImportSearchKeys(searchKeys); + return ResponseData.success(); + } + /** * 获取关键字管理分页列表 */ diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/ProductInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/ProductInfo.java index b196ac6..a1c7363 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/model/ProductInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/ProductInfo.java @@ -1,5 +1,12 @@ package com.casic.missiles.modular.system.model; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; import com.alibaba.fastjson.annotation.JSONField; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; @@ -18,6 +25,11 @@ * @since 2022-05-05 */ @Data +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ContentStyle(borderLeft = BorderStyleEnum.THIN,borderBottom =BorderStyleEnum.THIN,borderTop = BorderStyleEnum.THIN,borderRight = BorderStyleEnum.THIN) +@ExcelIgnoreUnannotated @TableName("reptile_product_info") public class ProductInfo extends Model { @@ -27,21 +39,38 @@ * 主键 */ private Long id; + @ExcelProperty("商品名称") + @TableField(exist = false) + private String skuName; + + @ExcelProperty("查询日期") + @JSONField(serializeUsing = DateDeserializer.class) + @TableField("create_time") + private Date createTime; + + /** + * 优惠信息 + */ + @ExcelProperty("优惠信息") + @TableField("discount") + private String discount; /** * 页面价格 */ + @ExcelProperty("页面价格") @TableField("price") private String price; /** + * 0 页面无效 1 价格偏高 + */ + @ExcelProperty("状态") + private String flag; + /** * 满减价格 */ @TableField("actual_price") private String actualPrice; - /** - * 优惠信息 - */ - @TableField("discount") - private String discount; + /** * 其他信息 @@ -52,17 +81,11 @@ @TableField("key_id") private Long keyId; - /** - * 0 页面无效 1 价格偏高 - */ - private String flag; - @JSONField(serializeUsing = DateDeserializer.class) - @TableField("create_time") - private Date createTime; - @TableField(exist = false) - private String skuName; + + @TableField(exist = false) private String skuUrl; + @ExcelProperty("控制价格") @TableField(exist = false) private String oldPrice; @Override diff --git a/casic-server/pom.xml b/casic-server/pom.xml index 0adbba2..1257fbe 100644 --- a/casic-server/pom.xml +++ b/casic-server/pom.xml @@ -42,6 +42,11 @@ com.casic + casic-export-support + ${extension.version} + + + com.casic casic-selenium-core ${extension.version} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ProductInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ProductInfoController.java index 3548742..0e25a98 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ProductInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ProductInfoController.java @@ -3,7 +3,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.modular.system.model.ProductInfo; @@ -11,11 +11,13 @@ import com.casic.missiles.modular.system.service.IProductInfoService; import com.casic.missiles.modular.system.service.ISearchKeysService; import com.casic.missiles.modular.system.service.ISearchProgressService; +import lombok.SneakyThrows; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import java.util.List; @@ -28,7 +30,7 @@ */ @Controller @RequestMapping("/productInfo") -public class ProductInfoController extends BaseController { +public class ProductInfoController extends ExportController { @Resource private ISearchKeysService searchKeysService; @Resource @@ -44,7 +46,7 @@ @ResponseBody public Object cachePut(Integer num) { ProgressDTO progressDTO = new ProgressDTO(100, num); - progressDTO.setId(IdWorker.getId()+""); + progressDTO.setId(IdWorker.getId() + ""); progressService.updateCache(progressDTO); return ResponseData.success(progressDTO); } @@ -70,6 +72,7 @@ /** * 获取商品信息管理分页列表 */ + @SneakyThrows @RequestMapping(value = "/listPage") @ResponseBody public Object listPage(String condition, String flag) { @@ -80,6 +83,28 @@ return ResponseData.success(super.packForBT(page)); } + @SneakyThrows + @RequestMapping(value = "/export") + @ResponseBody + public void export(String condition, String flag) { + Page page = PageFactory.defaultPage(); + page.setSize(Long.MAX_VALUE); + List productInfos = productInfoService.searchDbProductPricePage(condition, flag, page); + productInfos.stream().forEach(productInfo -> { + switch (productInfo.getFlag()){ + case "1": + productInfo.setFlag("页面失效");break; + case "2": + productInfo.setFlag("价格偏高");break; + default: + productInfo.setFlag("正常");break; + } + } + ); + this.exportExcel(ProductInfo.class, productInfos, "商品价格监测"); + } + + /** * 新增商品信息管理 */ diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/SearchKeysController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/SearchKeysController.java index 44c33c3..8f4e3b7 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/SearchKeysController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/SearchKeysController.java @@ -4,17 +4,20 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.model.form.IdForms; import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.modular.system.model.SearchKeys; import com.casic.missiles.modular.system.service.IProductInfoService; import com.casic.missiles.modular.system.service.ISearchKeysService; +import lombok.SneakyThrows; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; +import java.util.List; /** * 关键字管理控制器 @@ -24,7 +27,7 @@ */ @Controller @RequestMapping("/searchKeys") -public class SearchKeysController extends BaseController { +public class SearchKeysController extends ExportController { @Resource private ISearchKeysService searchKeysService; @@ -57,6 +60,15 @@ return ResponseData.success(searchKeysService.list(null)); } + @SneakyThrows + @RequestMapping(value = "/importExcel") + @ResponseBody + public Object importExcel(MultipartFile file) { + List searchKeys = this.importExcel(SearchKeys.class, file, null, null); + searchKeysService.saveImportSearchKeys(searchKeys); + return ResponseData.success(); + } + /** * 获取关键字管理分页列表 */ diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/ProductInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/ProductInfo.java index b196ac6..a1c7363 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/model/ProductInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/ProductInfo.java @@ -1,5 +1,12 @@ package com.casic.missiles.modular.system.model; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; import com.alibaba.fastjson.annotation.JSONField; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; @@ -18,6 +25,11 @@ * @since 2022-05-05 */ @Data +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ContentStyle(borderLeft = BorderStyleEnum.THIN,borderBottom =BorderStyleEnum.THIN,borderTop = BorderStyleEnum.THIN,borderRight = BorderStyleEnum.THIN) +@ExcelIgnoreUnannotated @TableName("reptile_product_info") public class ProductInfo extends Model { @@ -27,21 +39,38 @@ * 主键 */ private Long id; + @ExcelProperty("商品名称") + @TableField(exist = false) + private String skuName; + + @ExcelProperty("查询日期") + @JSONField(serializeUsing = DateDeserializer.class) + @TableField("create_time") + private Date createTime; + + /** + * 优惠信息 + */ + @ExcelProperty("优惠信息") + @TableField("discount") + private String discount; /** * 页面价格 */ + @ExcelProperty("页面价格") @TableField("price") private String price; /** + * 0 页面无效 1 价格偏高 + */ + @ExcelProperty("状态") + private String flag; + /** * 满减价格 */ @TableField("actual_price") private String actualPrice; - /** - * 优惠信息 - */ - @TableField("discount") - private String discount; + /** * 其他信息 @@ -52,17 +81,11 @@ @TableField("key_id") private Long keyId; - /** - * 0 页面无效 1 价格偏高 - */ - private String flag; - @JSONField(serializeUsing = DateDeserializer.class) - @TableField("create_time") - private Date createTime; - @TableField(exist = false) - private String skuName; + + @TableField(exist = false) private String skuUrl; + @ExcelProperty("控制价格") @TableField(exist = false) private String oldPrice; @Override diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/SearchKeys.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/SearchKeys.java index ed01581..376d846 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/model/SearchKeys.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/SearchKeys.java @@ -1,5 +1,12 @@ package com.casic.missiles.modular.system.model; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; import com.alibaba.fastjson.annotation.JSONField; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; @@ -18,6 +25,10 @@ * @since 2022-05-05 */ @Data +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ExcelIgnoreUnannotated @TableName("reptile_search_keys") public class SearchKeys extends Model { @@ -30,16 +41,19 @@ /** * 商品名称 */ + @ExcelProperty("商品名称") @TableField("sku_name") private String skuName; /** * 商品url */ + @ExcelProperty("京东链接") @TableField("sku_url") private String skuUrl; /** * 设定价格 */ + @ExcelProperty("控制价格") @TableField("price") private String price; /** diff --git a/casic-server/pom.xml b/casic-server/pom.xml index 0adbba2..1257fbe 100644 --- a/casic-server/pom.xml +++ b/casic-server/pom.xml @@ -42,6 +42,11 @@ com.casic + casic-export-support + ${extension.version} + + + com.casic casic-selenium-core ${extension.version} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ProductInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ProductInfoController.java index 3548742..0e25a98 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ProductInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ProductInfoController.java @@ -3,7 +3,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.modular.system.model.ProductInfo; @@ -11,11 +11,13 @@ import com.casic.missiles.modular.system.service.IProductInfoService; import com.casic.missiles.modular.system.service.ISearchKeysService; import com.casic.missiles.modular.system.service.ISearchProgressService; +import lombok.SneakyThrows; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import java.util.List; @@ -28,7 +30,7 @@ */ @Controller @RequestMapping("/productInfo") -public class ProductInfoController extends BaseController { +public class ProductInfoController extends ExportController { @Resource private ISearchKeysService searchKeysService; @Resource @@ -44,7 +46,7 @@ @ResponseBody public Object cachePut(Integer num) { ProgressDTO progressDTO = new ProgressDTO(100, num); - progressDTO.setId(IdWorker.getId()+""); + progressDTO.setId(IdWorker.getId() + ""); progressService.updateCache(progressDTO); return ResponseData.success(progressDTO); } @@ -70,6 +72,7 @@ /** * 获取商品信息管理分页列表 */ + @SneakyThrows @RequestMapping(value = "/listPage") @ResponseBody public Object listPage(String condition, String flag) { @@ -80,6 +83,28 @@ return ResponseData.success(super.packForBT(page)); } + @SneakyThrows + @RequestMapping(value = "/export") + @ResponseBody + public void export(String condition, String flag) { + Page page = PageFactory.defaultPage(); + page.setSize(Long.MAX_VALUE); + List productInfos = productInfoService.searchDbProductPricePage(condition, flag, page); + productInfos.stream().forEach(productInfo -> { + switch (productInfo.getFlag()){ + case "1": + productInfo.setFlag("页面失效");break; + case "2": + productInfo.setFlag("价格偏高");break; + default: + productInfo.setFlag("正常");break; + } + } + ); + this.exportExcel(ProductInfo.class, productInfos, "商品价格监测"); + } + + /** * 新增商品信息管理 */ diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/SearchKeysController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/SearchKeysController.java index 44c33c3..8f4e3b7 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/SearchKeysController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/SearchKeysController.java @@ -4,17 +4,20 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.model.form.IdForms; import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.modular.system.model.SearchKeys; import com.casic.missiles.modular.system.service.IProductInfoService; import com.casic.missiles.modular.system.service.ISearchKeysService; +import lombok.SneakyThrows; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; +import java.util.List; /** * 关键字管理控制器 @@ -24,7 +27,7 @@ */ @Controller @RequestMapping("/searchKeys") -public class SearchKeysController extends BaseController { +public class SearchKeysController extends ExportController { @Resource private ISearchKeysService searchKeysService; @@ -57,6 +60,15 @@ return ResponseData.success(searchKeysService.list(null)); } + @SneakyThrows + @RequestMapping(value = "/importExcel") + @ResponseBody + public Object importExcel(MultipartFile file) { + List searchKeys = this.importExcel(SearchKeys.class, file, null, null); + searchKeysService.saveImportSearchKeys(searchKeys); + return ResponseData.success(); + } + /** * 获取关键字管理分页列表 */ diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/ProductInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/ProductInfo.java index b196ac6..a1c7363 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/model/ProductInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/ProductInfo.java @@ -1,5 +1,12 @@ package com.casic.missiles.modular.system.model; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; import com.alibaba.fastjson.annotation.JSONField; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; @@ -18,6 +25,11 @@ * @since 2022-05-05 */ @Data +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ContentStyle(borderLeft = BorderStyleEnum.THIN,borderBottom =BorderStyleEnum.THIN,borderTop = BorderStyleEnum.THIN,borderRight = BorderStyleEnum.THIN) +@ExcelIgnoreUnannotated @TableName("reptile_product_info") public class ProductInfo extends Model { @@ -27,21 +39,38 @@ * 主键 */ private Long id; + @ExcelProperty("商品名称") + @TableField(exist = false) + private String skuName; + + @ExcelProperty("查询日期") + @JSONField(serializeUsing = DateDeserializer.class) + @TableField("create_time") + private Date createTime; + + /** + * 优惠信息 + */ + @ExcelProperty("优惠信息") + @TableField("discount") + private String discount; /** * 页面价格 */ + @ExcelProperty("页面价格") @TableField("price") private String price; /** + * 0 页面无效 1 价格偏高 + */ + @ExcelProperty("状态") + private String flag; + /** * 满减价格 */ @TableField("actual_price") private String actualPrice; - /** - * 优惠信息 - */ - @TableField("discount") - private String discount; + /** * 其他信息 @@ -52,17 +81,11 @@ @TableField("key_id") private Long keyId; - /** - * 0 页面无效 1 价格偏高 - */ - private String flag; - @JSONField(serializeUsing = DateDeserializer.class) - @TableField("create_time") - private Date createTime; - @TableField(exist = false) - private String skuName; + + @TableField(exist = false) private String skuUrl; + @ExcelProperty("控制价格") @TableField(exist = false) private String oldPrice; @Override diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/SearchKeys.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/SearchKeys.java index ed01581..376d846 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/model/SearchKeys.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/SearchKeys.java @@ -1,5 +1,12 @@ package com.casic.missiles.modular.system.model; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; import com.alibaba.fastjson.annotation.JSONField; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; @@ -18,6 +25,10 @@ * @since 2022-05-05 */ @Data +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ExcelIgnoreUnannotated @TableName("reptile_search_keys") public class SearchKeys extends Model { @@ -30,16 +41,19 @@ /** * 商品名称 */ + @ExcelProperty("商品名称") @TableField("sku_name") private String skuName; /** * 商品url */ + @ExcelProperty("京东链接") @TableField("sku_url") private String skuUrl; /** * 设定价格 */ + @ExcelProperty("控制价格") @TableField("price") private String price; /** diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/ISearchKeysService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ISearchKeysService.java index cb8894c..bcf92f4 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/service/ISearchKeysService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ISearchKeysService.java @@ -3,6 +3,8 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.casic.missiles.modular.system.model.SearchKeys; +import java.util.List; + /** *

* 关键字管理 服务类 @@ -13,4 +15,9 @@ */ public interface ISearchKeysService extends IService { + /** + * 保存导入数据 + * @param searchKeys + */ + void saveImportSearchKeys(List searchKeys); } diff --git a/casic-server/pom.xml b/casic-server/pom.xml index 0adbba2..1257fbe 100644 --- a/casic-server/pom.xml +++ b/casic-server/pom.xml @@ -42,6 +42,11 @@ com.casic + casic-export-support + ${extension.version} + + + com.casic casic-selenium-core ${extension.version} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ProductInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ProductInfoController.java index 3548742..0e25a98 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ProductInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ProductInfoController.java @@ -3,7 +3,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.modular.system.model.ProductInfo; @@ -11,11 +11,13 @@ import com.casic.missiles.modular.system.service.IProductInfoService; import com.casic.missiles.modular.system.service.ISearchKeysService; import com.casic.missiles.modular.system.service.ISearchProgressService; +import lombok.SneakyThrows; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import java.util.List; @@ -28,7 +30,7 @@ */ @Controller @RequestMapping("/productInfo") -public class ProductInfoController extends BaseController { +public class ProductInfoController extends ExportController { @Resource private ISearchKeysService searchKeysService; @Resource @@ -44,7 +46,7 @@ @ResponseBody public Object cachePut(Integer num) { ProgressDTO progressDTO = new ProgressDTO(100, num); - progressDTO.setId(IdWorker.getId()+""); + progressDTO.setId(IdWorker.getId() + ""); progressService.updateCache(progressDTO); return ResponseData.success(progressDTO); } @@ -70,6 +72,7 @@ /** * 获取商品信息管理分页列表 */ + @SneakyThrows @RequestMapping(value = "/listPage") @ResponseBody public Object listPage(String condition, String flag) { @@ -80,6 +83,28 @@ return ResponseData.success(super.packForBT(page)); } + @SneakyThrows + @RequestMapping(value = "/export") + @ResponseBody + public void export(String condition, String flag) { + Page page = PageFactory.defaultPage(); + page.setSize(Long.MAX_VALUE); + List productInfos = productInfoService.searchDbProductPricePage(condition, flag, page); + productInfos.stream().forEach(productInfo -> { + switch (productInfo.getFlag()){ + case "1": + productInfo.setFlag("页面失效");break; + case "2": + productInfo.setFlag("价格偏高");break; + default: + productInfo.setFlag("正常");break; + } + } + ); + this.exportExcel(ProductInfo.class, productInfos, "商品价格监测"); + } + + /** * 新增商品信息管理 */ diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/SearchKeysController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/SearchKeysController.java index 44c33c3..8f4e3b7 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/SearchKeysController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/SearchKeysController.java @@ -4,17 +4,20 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.model.form.IdForms; import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.modular.system.model.SearchKeys; import com.casic.missiles.modular.system.service.IProductInfoService; import com.casic.missiles.modular.system.service.ISearchKeysService; +import lombok.SneakyThrows; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; +import java.util.List; /** * 关键字管理控制器 @@ -24,7 +27,7 @@ */ @Controller @RequestMapping("/searchKeys") -public class SearchKeysController extends BaseController { +public class SearchKeysController extends ExportController { @Resource private ISearchKeysService searchKeysService; @@ -57,6 +60,15 @@ return ResponseData.success(searchKeysService.list(null)); } + @SneakyThrows + @RequestMapping(value = "/importExcel") + @ResponseBody + public Object importExcel(MultipartFile file) { + List searchKeys = this.importExcel(SearchKeys.class, file, null, null); + searchKeysService.saveImportSearchKeys(searchKeys); + return ResponseData.success(); + } + /** * 获取关键字管理分页列表 */ diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/ProductInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/ProductInfo.java index b196ac6..a1c7363 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/model/ProductInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/ProductInfo.java @@ -1,5 +1,12 @@ package com.casic.missiles.modular.system.model; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; import com.alibaba.fastjson.annotation.JSONField; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; @@ -18,6 +25,11 @@ * @since 2022-05-05 */ @Data +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ContentStyle(borderLeft = BorderStyleEnum.THIN,borderBottom =BorderStyleEnum.THIN,borderTop = BorderStyleEnum.THIN,borderRight = BorderStyleEnum.THIN) +@ExcelIgnoreUnannotated @TableName("reptile_product_info") public class ProductInfo extends Model { @@ -27,21 +39,38 @@ * 主键 */ private Long id; + @ExcelProperty("商品名称") + @TableField(exist = false) + private String skuName; + + @ExcelProperty("查询日期") + @JSONField(serializeUsing = DateDeserializer.class) + @TableField("create_time") + private Date createTime; + + /** + * 优惠信息 + */ + @ExcelProperty("优惠信息") + @TableField("discount") + private String discount; /** * 页面价格 */ + @ExcelProperty("页面价格") @TableField("price") private String price; /** + * 0 页面无效 1 价格偏高 + */ + @ExcelProperty("状态") + private String flag; + /** * 满减价格 */ @TableField("actual_price") private String actualPrice; - /** - * 优惠信息 - */ - @TableField("discount") - private String discount; + /** * 其他信息 @@ -52,17 +81,11 @@ @TableField("key_id") private Long keyId; - /** - * 0 页面无效 1 价格偏高 - */ - private String flag; - @JSONField(serializeUsing = DateDeserializer.class) - @TableField("create_time") - private Date createTime; - @TableField(exist = false) - private String skuName; + + @TableField(exist = false) private String skuUrl; + @ExcelProperty("控制价格") @TableField(exist = false) private String oldPrice; @Override diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/SearchKeys.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/SearchKeys.java index ed01581..376d846 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/model/SearchKeys.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/SearchKeys.java @@ -1,5 +1,12 @@ package com.casic.missiles.modular.system.model; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; import com.alibaba.fastjson.annotation.JSONField; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; @@ -18,6 +25,10 @@ * @since 2022-05-05 */ @Data +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ExcelIgnoreUnannotated @TableName("reptile_search_keys") public class SearchKeys extends Model { @@ -30,16 +41,19 @@ /** * 商品名称 */ + @ExcelProperty("商品名称") @TableField("sku_name") private String skuName; /** * 商品url */ + @ExcelProperty("京东链接") @TableField("sku_url") private String skuUrl; /** * 设定价格 */ + @ExcelProperty("控制价格") @TableField("price") private String price; /** diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/ISearchKeysService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ISearchKeysService.java index cb8894c..bcf92f4 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/service/ISearchKeysService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ISearchKeysService.java @@ -3,6 +3,8 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.casic.missiles.modular.system.model.SearchKeys; +import java.util.List; + /** *

* 关键字管理 服务类 @@ -13,4 +15,9 @@ */ public interface ISearchKeysService extends IService { + /** + * 保存导入数据 + * @param searchKeys + */ + void saveImportSearchKeys(List searchKeys); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/ProductInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/ProductInfoServiceImpl.java index 0962bfd..f88217d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/ProductInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/ProductInfoServiceImpl.java @@ -21,6 +21,7 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import org.springframework.stereotype.Service; +import org.springframework.util.ResourceUtils; import javax.annotation.Resource; import java.math.BigDecimal; @@ -50,9 +51,11 @@ @Resource private ISearchProgressService progressService; + @SneakyThrows @Override public CrawlingDTO searchProducts(String type, String searchId) { - System.setProperty("webdriver.chrome.driver", path); + System.out.println("++++++++++++++++++++++++++"+ ResourceUtils.getURL("classpath:").getPath()+"chromedriver.exe" ); + System.setProperty("webdriver.chrome.driver", ResourceUtils.getURL("classpath:").getPath()+"chromedriver.exe" ); List searchKeys = searchKeysService.list(); Date searchTime = new Date(); diff --git a/casic-server/pom.xml b/casic-server/pom.xml index 0adbba2..1257fbe 100644 --- a/casic-server/pom.xml +++ b/casic-server/pom.xml @@ -42,6 +42,11 @@ com.casic + casic-export-support + ${extension.version} + + + com.casic casic-selenium-core ${extension.version} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ProductInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ProductInfoController.java index 3548742..0e25a98 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ProductInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ProductInfoController.java @@ -3,7 +3,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.modular.system.model.ProductInfo; @@ -11,11 +11,13 @@ import com.casic.missiles.modular.system.service.IProductInfoService; import com.casic.missiles.modular.system.service.ISearchKeysService; import com.casic.missiles.modular.system.service.ISearchProgressService; +import lombok.SneakyThrows; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import java.util.List; @@ -28,7 +30,7 @@ */ @Controller @RequestMapping("/productInfo") -public class ProductInfoController extends BaseController { +public class ProductInfoController extends ExportController { @Resource private ISearchKeysService searchKeysService; @Resource @@ -44,7 +46,7 @@ @ResponseBody public Object cachePut(Integer num) { ProgressDTO progressDTO = new ProgressDTO(100, num); - progressDTO.setId(IdWorker.getId()+""); + progressDTO.setId(IdWorker.getId() + ""); progressService.updateCache(progressDTO); return ResponseData.success(progressDTO); } @@ -70,6 +72,7 @@ /** * 获取商品信息管理分页列表 */ + @SneakyThrows @RequestMapping(value = "/listPage") @ResponseBody public Object listPage(String condition, String flag) { @@ -80,6 +83,28 @@ return ResponseData.success(super.packForBT(page)); } + @SneakyThrows + @RequestMapping(value = "/export") + @ResponseBody + public void export(String condition, String flag) { + Page page = PageFactory.defaultPage(); + page.setSize(Long.MAX_VALUE); + List productInfos = productInfoService.searchDbProductPricePage(condition, flag, page); + productInfos.stream().forEach(productInfo -> { + switch (productInfo.getFlag()){ + case "1": + productInfo.setFlag("页面失效");break; + case "2": + productInfo.setFlag("价格偏高");break; + default: + productInfo.setFlag("正常");break; + } + } + ); + this.exportExcel(ProductInfo.class, productInfos, "商品价格监测"); + } + + /** * 新增商品信息管理 */ diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/SearchKeysController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/SearchKeysController.java index 44c33c3..8f4e3b7 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/SearchKeysController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/SearchKeysController.java @@ -4,17 +4,20 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.model.form.IdForms; import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.modular.system.model.SearchKeys; import com.casic.missiles.modular.system.service.IProductInfoService; import com.casic.missiles.modular.system.service.ISearchKeysService; +import lombok.SneakyThrows; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; +import java.util.List; /** * 关键字管理控制器 @@ -24,7 +27,7 @@ */ @Controller @RequestMapping("/searchKeys") -public class SearchKeysController extends BaseController { +public class SearchKeysController extends ExportController { @Resource private ISearchKeysService searchKeysService; @@ -57,6 +60,15 @@ return ResponseData.success(searchKeysService.list(null)); } + @SneakyThrows + @RequestMapping(value = "/importExcel") + @ResponseBody + public Object importExcel(MultipartFile file) { + List searchKeys = this.importExcel(SearchKeys.class, file, null, null); + searchKeysService.saveImportSearchKeys(searchKeys); + return ResponseData.success(); + } + /** * 获取关键字管理分页列表 */ diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/ProductInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/ProductInfo.java index b196ac6..a1c7363 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/model/ProductInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/ProductInfo.java @@ -1,5 +1,12 @@ package com.casic.missiles.modular.system.model; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; import com.alibaba.fastjson.annotation.JSONField; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; @@ -18,6 +25,11 @@ * @since 2022-05-05 */ @Data +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ContentStyle(borderLeft = BorderStyleEnum.THIN,borderBottom =BorderStyleEnum.THIN,borderTop = BorderStyleEnum.THIN,borderRight = BorderStyleEnum.THIN) +@ExcelIgnoreUnannotated @TableName("reptile_product_info") public class ProductInfo extends Model { @@ -27,21 +39,38 @@ * 主键 */ private Long id; + @ExcelProperty("商品名称") + @TableField(exist = false) + private String skuName; + + @ExcelProperty("查询日期") + @JSONField(serializeUsing = DateDeserializer.class) + @TableField("create_time") + private Date createTime; + + /** + * 优惠信息 + */ + @ExcelProperty("优惠信息") + @TableField("discount") + private String discount; /** * 页面价格 */ + @ExcelProperty("页面价格") @TableField("price") private String price; /** + * 0 页面无效 1 价格偏高 + */ + @ExcelProperty("状态") + private String flag; + /** * 满减价格 */ @TableField("actual_price") private String actualPrice; - /** - * 优惠信息 - */ - @TableField("discount") - private String discount; + /** * 其他信息 @@ -52,17 +81,11 @@ @TableField("key_id") private Long keyId; - /** - * 0 页面无效 1 价格偏高 - */ - private String flag; - @JSONField(serializeUsing = DateDeserializer.class) - @TableField("create_time") - private Date createTime; - @TableField(exist = false) - private String skuName; + + @TableField(exist = false) private String skuUrl; + @ExcelProperty("控制价格") @TableField(exist = false) private String oldPrice; @Override diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/SearchKeys.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/SearchKeys.java index ed01581..376d846 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/model/SearchKeys.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/SearchKeys.java @@ -1,5 +1,12 @@ package com.casic.missiles.modular.system.model; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; import com.alibaba.fastjson.annotation.JSONField; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; @@ -18,6 +25,10 @@ * @since 2022-05-05 */ @Data +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ExcelIgnoreUnannotated @TableName("reptile_search_keys") public class SearchKeys extends Model { @@ -30,16 +41,19 @@ /** * 商品名称 */ + @ExcelProperty("商品名称") @TableField("sku_name") private String skuName; /** * 商品url */ + @ExcelProperty("京东链接") @TableField("sku_url") private String skuUrl; /** * 设定价格 */ + @ExcelProperty("控制价格") @TableField("price") private String price; /** diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/ISearchKeysService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ISearchKeysService.java index cb8894c..bcf92f4 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/service/ISearchKeysService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ISearchKeysService.java @@ -3,6 +3,8 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.casic.missiles.modular.system.model.SearchKeys; +import java.util.List; + /** *

* 关键字管理 服务类 @@ -13,4 +15,9 @@ */ public interface ISearchKeysService extends IService { + /** + * 保存导入数据 + * @param searchKeys + */ + void saveImportSearchKeys(List searchKeys); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/ProductInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/ProductInfoServiceImpl.java index 0962bfd..f88217d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/ProductInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/ProductInfoServiceImpl.java @@ -21,6 +21,7 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import org.springframework.stereotype.Service; +import org.springframework.util.ResourceUtils; import javax.annotation.Resource; import java.math.BigDecimal; @@ -50,9 +51,11 @@ @Resource private ISearchProgressService progressService; + @SneakyThrows @Override public CrawlingDTO searchProducts(String type, String searchId) { - System.setProperty("webdriver.chrome.driver", path); + System.out.println("++++++++++++++++++++++++++"+ ResourceUtils.getURL("classpath:").getPath()+"chromedriver.exe" ); + System.setProperty("webdriver.chrome.driver", ResourceUtils.getURL("classpath:").getPath()+"chromedriver.exe" ); List searchKeys = searchKeysService.list(); Date searchTime = new Date(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/SearchKeysServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/SearchKeysServiceImpl.java index 401b2f9..727ac3b 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/SearchKeysServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/SearchKeysServiceImpl.java @@ -1,11 +1,14 @@ package com.casic.missiles.modular.system.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.casic.missiles.modular.system.model.SearchKeys; import com.casic.missiles.modular.system.dao.SearchKeysMapper; +import com.casic.missiles.modular.system.model.SearchKeys; import com.casic.missiles.modular.system.service.ISearchKeysService; import org.springframework.stereotype.Component; -import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; /** *

@@ -18,4 +21,10 @@ @Component public class SearchKeysServiceImpl extends ServiceImpl implements ISearchKeysService { + @Override + public void saveImportSearchKeys(List searchKeys) { + List keys = this.list(); + Set sets = keys.stream().map(SearchKeys::getSkuUrl).collect(Collectors.toSet()); + this.saveBatch(searchKeys.stream().filter(key -> !sets.contains(key.getSkuUrl())).collect(Collectors.toList())); + } } diff --git a/casic-server/pom.xml b/casic-server/pom.xml index 0adbba2..1257fbe 100644 --- a/casic-server/pom.xml +++ b/casic-server/pom.xml @@ -42,6 +42,11 @@ com.casic + casic-export-support + ${extension.version} + + + com.casic casic-selenium-core ${extension.version} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ProductInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ProductInfoController.java index 3548742..0e25a98 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ProductInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ProductInfoController.java @@ -3,7 +3,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.modular.system.model.ProductInfo; @@ -11,11 +11,13 @@ import com.casic.missiles.modular.system.service.IProductInfoService; import com.casic.missiles.modular.system.service.ISearchKeysService; import com.casic.missiles.modular.system.service.ISearchProgressService; +import lombok.SneakyThrows; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import java.util.List; @@ -28,7 +30,7 @@ */ @Controller @RequestMapping("/productInfo") -public class ProductInfoController extends BaseController { +public class ProductInfoController extends ExportController { @Resource private ISearchKeysService searchKeysService; @Resource @@ -44,7 +46,7 @@ @ResponseBody public Object cachePut(Integer num) { ProgressDTO progressDTO = new ProgressDTO(100, num); - progressDTO.setId(IdWorker.getId()+""); + progressDTO.setId(IdWorker.getId() + ""); progressService.updateCache(progressDTO); return ResponseData.success(progressDTO); } @@ -70,6 +72,7 @@ /** * 获取商品信息管理分页列表 */ + @SneakyThrows @RequestMapping(value = "/listPage") @ResponseBody public Object listPage(String condition, String flag) { @@ -80,6 +83,28 @@ return ResponseData.success(super.packForBT(page)); } + @SneakyThrows + @RequestMapping(value = "/export") + @ResponseBody + public void export(String condition, String flag) { + Page page = PageFactory.defaultPage(); + page.setSize(Long.MAX_VALUE); + List productInfos = productInfoService.searchDbProductPricePage(condition, flag, page); + productInfos.stream().forEach(productInfo -> { + switch (productInfo.getFlag()){ + case "1": + productInfo.setFlag("页面失效");break; + case "2": + productInfo.setFlag("价格偏高");break; + default: + productInfo.setFlag("正常");break; + } + } + ); + this.exportExcel(ProductInfo.class, productInfos, "商品价格监测"); + } + + /** * 新增商品信息管理 */ diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/SearchKeysController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/SearchKeysController.java index 44c33c3..8f4e3b7 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/SearchKeysController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/SearchKeysController.java @@ -4,17 +4,20 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.model.form.IdForms; import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.modular.system.model.SearchKeys; import com.casic.missiles.modular.system.service.IProductInfoService; import com.casic.missiles.modular.system.service.ISearchKeysService; +import lombok.SneakyThrows; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; +import java.util.List; /** * 关键字管理控制器 @@ -24,7 +27,7 @@ */ @Controller @RequestMapping("/searchKeys") -public class SearchKeysController extends BaseController { +public class SearchKeysController extends ExportController { @Resource private ISearchKeysService searchKeysService; @@ -57,6 +60,15 @@ return ResponseData.success(searchKeysService.list(null)); } + @SneakyThrows + @RequestMapping(value = "/importExcel") + @ResponseBody + public Object importExcel(MultipartFile file) { + List searchKeys = this.importExcel(SearchKeys.class, file, null, null); + searchKeysService.saveImportSearchKeys(searchKeys); + return ResponseData.success(); + } + /** * 获取关键字管理分页列表 */ diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/ProductInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/ProductInfo.java index b196ac6..a1c7363 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/model/ProductInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/ProductInfo.java @@ -1,5 +1,12 @@ package com.casic.missiles.modular.system.model; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; import com.alibaba.fastjson.annotation.JSONField; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; @@ -18,6 +25,11 @@ * @since 2022-05-05 */ @Data +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ContentStyle(borderLeft = BorderStyleEnum.THIN,borderBottom =BorderStyleEnum.THIN,borderTop = BorderStyleEnum.THIN,borderRight = BorderStyleEnum.THIN) +@ExcelIgnoreUnannotated @TableName("reptile_product_info") public class ProductInfo extends Model { @@ -27,21 +39,38 @@ * 主键 */ private Long id; + @ExcelProperty("商品名称") + @TableField(exist = false) + private String skuName; + + @ExcelProperty("查询日期") + @JSONField(serializeUsing = DateDeserializer.class) + @TableField("create_time") + private Date createTime; + + /** + * 优惠信息 + */ + @ExcelProperty("优惠信息") + @TableField("discount") + private String discount; /** * 页面价格 */ + @ExcelProperty("页面价格") @TableField("price") private String price; /** + * 0 页面无效 1 价格偏高 + */ + @ExcelProperty("状态") + private String flag; + /** * 满减价格 */ @TableField("actual_price") private String actualPrice; - /** - * 优惠信息 - */ - @TableField("discount") - private String discount; + /** * 其他信息 @@ -52,17 +81,11 @@ @TableField("key_id") private Long keyId; - /** - * 0 页面无效 1 价格偏高 - */ - private String flag; - @JSONField(serializeUsing = DateDeserializer.class) - @TableField("create_time") - private Date createTime; - @TableField(exist = false) - private String skuName; + + @TableField(exist = false) private String skuUrl; + @ExcelProperty("控制价格") @TableField(exist = false) private String oldPrice; @Override diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/SearchKeys.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/SearchKeys.java index ed01581..376d846 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/model/SearchKeys.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/SearchKeys.java @@ -1,5 +1,12 @@ package com.casic.missiles.modular.system.model; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; import com.alibaba.fastjson.annotation.JSONField; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; @@ -18,6 +25,10 @@ * @since 2022-05-05 */ @Data +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ExcelIgnoreUnannotated @TableName("reptile_search_keys") public class SearchKeys extends Model { @@ -30,16 +41,19 @@ /** * 商品名称 */ + @ExcelProperty("商品名称") @TableField("sku_name") private String skuName; /** * 商品url */ + @ExcelProperty("京东链接") @TableField("sku_url") private String skuUrl; /** * 设定价格 */ + @ExcelProperty("控制价格") @TableField("price") private String price; /** diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/ISearchKeysService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ISearchKeysService.java index cb8894c..bcf92f4 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/service/ISearchKeysService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ISearchKeysService.java @@ -3,6 +3,8 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.casic.missiles.modular.system.model.SearchKeys; +import java.util.List; + /** *

* 关键字管理 服务类 @@ -13,4 +15,9 @@ */ public interface ISearchKeysService extends IService { + /** + * 保存导入数据 + * @param searchKeys + */ + void saveImportSearchKeys(List searchKeys); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/ProductInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/ProductInfoServiceImpl.java index 0962bfd..f88217d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/ProductInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/ProductInfoServiceImpl.java @@ -21,6 +21,7 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import org.springframework.stereotype.Service; +import org.springframework.util.ResourceUtils; import javax.annotation.Resource; import java.math.BigDecimal; @@ -50,9 +51,11 @@ @Resource private ISearchProgressService progressService; + @SneakyThrows @Override public CrawlingDTO searchProducts(String type, String searchId) { - System.setProperty("webdriver.chrome.driver", path); + System.out.println("++++++++++++++++++++++++++"+ ResourceUtils.getURL("classpath:").getPath()+"chromedriver.exe" ); + System.setProperty("webdriver.chrome.driver", ResourceUtils.getURL("classpath:").getPath()+"chromedriver.exe" ); List searchKeys = searchKeysService.list(); Date searchTime = new Date(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/SearchKeysServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/SearchKeysServiceImpl.java index 401b2f9..727ac3b 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/SearchKeysServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/SearchKeysServiceImpl.java @@ -1,11 +1,14 @@ package com.casic.missiles.modular.system.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.casic.missiles.modular.system.model.SearchKeys; import com.casic.missiles.modular.system.dao.SearchKeysMapper; +import com.casic.missiles.modular.system.model.SearchKeys; import com.casic.missiles.modular.system.service.ISearchKeysService; import org.springframework.stereotype.Component; -import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; /** *

@@ -18,4 +21,10 @@ @Component public class SearchKeysServiceImpl extends ServiceImpl implements ISearchKeysService { + @Override + public void saveImportSearchKeys(List searchKeys) { + List keys = this.list(); + Set sets = keys.stream().map(SearchKeys::getSkuUrl).collect(Collectors.toSet()); + this.saveBatch(searchKeys.stream().filter(key -> !sets.contains(key.getSkuUrl())).collect(Collectors.toList())); + } } diff --git a/casic-web/pom.xml b/casic-web/pom.xml index 8fd2522..ea45d78 100644 --- a/casic-web/pom.xml +++ b/casic-web/pom.xml @@ -69,6 +69,16 @@ com.casic + casic-file + ${extension.version} + + + com.casic + casic-file-support + ${extension.version} + + + com.casic casic-admin-core ${admin.version} @@ -83,17 +93,17 @@ casic-admin-support ${admin.version} - - - - - - + + com.casic + casic-export-support + ${extension.version} + mysql mysql-connector-java ${mysql.driver.version} + com.casic casic-area-starter diff --git a/casic-server/pom.xml b/casic-server/pom.xml index 0adbba2..1257fbe 100644 --- a/casic-server/pom.xml +++ b/casic-server/pom.xml @@ -42,6 +42,11 @@ com.casic + casic-export-support + ${extension.version} + + + com.casic casic-selenium-core ${extension.version} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ProductInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ProductInfoController.java index 3548742..0e25a98 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ProductInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ProductInfoController.java @@ -3,7 +3,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.modular.system.model.ProductInfo; @@ -11,11 +11,13 @@ import com.casic.missiles.modular.system.service.IProductInfoService; import com.casic.missiles.modular.system.service.ISearchKeysService; import com.casic.missiles.modular.system.service.ISearchProgressService; +import lombok.SneakyThrows; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import java.util.List; @@ -28,7 +30,7 @@ */ @Controller @RequestMapping("/productInfo") -public class ProductInfoController extends BaseController { +public class ProductInfoController extends ExportController { @Resource private ISearchKeysService searchKeysService; @Resource @@ -44,7 +46,7 @@ @ResponseBody public Object cachePut(Integer num) { ProgressDTO progressDTO = new ProgressDTO(100, num); - progressDTO.setId(IdWorker.getId()+""); + progressDTO.setId(IdWorker.getId() + ""); progressService.updateCache(progressDTO); return ResponseData.success(progressDTO); } @@ -70,6 +72,7 @@ /** * 获取商品信息管理分页列表 */ + @SneakyThrows @RequestMapping(value = "/listPage") @ResponseBody public Object listPage(String condition, String flag) { @@ -80,6 +83,28 @@ return ResponseData.success(super.packForBT(page)); } + @SneakyThrows + @RequestMapping(value = "/export") + @ResponseBody + public void export(String condition, String flag) { + Page page = PageFactory.defaultPage(); + page.setSize(Long.MAX_VALUE); + List productInfos = productInfoService.searchDbProductPricePage(condition, flag, page); + productInfos.stream().forEach(productInfo -> { + switch (productInfo.getFlag()){ + case "1": + productInfo.setFlag("页面失效");break; + case "2": + productInfo.setFlag("价格偏高");break; + default: + productInfo.setFlag("正常");break; + } + } + ); + this.exportExcel(ProductInfo.class, productInfos, "商品价格监测"); + } + + /** * 新增商品信息管理 */ diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/SearchKeysController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/SearchKeysController.java index 44c33c3..8f4e3b7 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/SearchKeysController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/SearchKeysController.java @@ -4,17 +4,20 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.model.form.IdForms; import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.modular.system.model.SearchKeys; import com.casic.missiles.modular.system.service.IProductInfoService; import com.casic.missiles.modular.system.service.ISearchKeysService; +import lombok.SneakyThrows; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; +import java.util.List; /** * 关键字管理控制器 @@ -24,7 +27,7 @@ */ @Controller @RequestMapping("/searchKeys") -public class SearchKeysController extends BaseController { +public class SearchKeysController extends ExportController { @Resource private ISearchKeysService searchKeysService; @@ -57,6 +60,15 @@ return ResponseData.success(searchKeysService.list(null)); } + @SneakyThrows + @RequestMapping(value = "/importExcel") + @ResponseBody + public Object importExcel(MultipartFile file) { + List searchKeys = this.importExcel(SearchKeys.class, file, null, null); + searchKeysService.saveImportSearchKeys(searchKeys); + return ResponseData.success(); + } + /** * 获取关键字管理分页列表 */ diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/ProductInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/ProductInfo.java index b196ac6..a1c7363 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/model/ProductInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/ProductInfo.java @@ -1,5 +1,12 @@ package com.casic.missiles.modular.system.model; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; import com.alibaba.fastjson.annotation.JSONField; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; @@ -18,6 +25,11 @@ * @since 2022-05-05 */ @Data +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ContentStyle(borderLeft = BorderStyleEnum.THIN,borderBottom =BorderStyleEnum.THIN,borderTop = BorderStyleEnum.THIN,borderRight = BorderStyleEnum.THIN) +@ExcelIgnoreUnannotated @TableName("reptile_product_info") public class ProductInfo extends Model { @@ -27,21 +39,38 @@ * 主键 */ private Long id; + @ExcelProperty("商品名称") + @TableField(exist = false) + private String skuName; + + @ExcelProperty("查询日期") + @JSONField(serializeUsing = DateDeserializer.class) + @TableField("create_time") + private Date createTime; + + /** + * 优惠信息 + */ + @ExcelProperty("优惠信息") + @TableField("discount") + private String discount; /** * 页面价格 */ + @ExcelProperty("页面价格") @TableField("price") private String price; /** + * 0 页面无效 1 价格偏高 + */ + @ExcelProperty("状态") + private String flag; + /** * 满减价格 */ @TableField("actual_price") private String actualPrice; - /** - * 优惠信息 - */ - @TableField("discount") - private String discount; + /** * 其他信息 @@ -52,17 +81,11 @@ @TableField("key_id") private Long keyId; - /** - * 0 页面无效 1 价格偏高 - */ - private String flag; - @JSONField(serializeUsing = DateDeserializer.class) - @TableField("create_time") - private Date createTime; - @TableField(exist = false) - private String skuName; + + @TableField(exist = false) private String skuUrl; + @ExcelProperty("控制价格") @TableField(exist = false) private String oldPrice; @Override diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/SearchKeys.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/SearchKeys.java index ed01581..376d846 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/model/SearchKeys.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/SearchKeys.java @@ -1,5 +1,12 @@ package com.casic.missiles.modular.system.model; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; import com.alibaba.fastjson.annotation.JSONField; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; @@ -18,6 +25,10 @@ * @since 2022-05-05 */ @Data +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ExcelIgnoreUnannotated @TableName("reptile_search_keys") public class SearchKeys extends Model { @@ -30,16 +41,19 @@ /** * 商品名称 */ + @ExcelProperty("商品名称") @TableField("sku_name") private String skuName; /** * 商品url */ + @ExcelProperty("京东链接") @TableField("sku_url") private String skuUrl; /** * 设定价格 */ + @ExcelProperty("控制价格") @TableField("price") private String price; /** diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/ISearchKeysService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ISearchKeysService.java index cb8894c..bcf92f4 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/service/ISearchKeysService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ISearchKeysService.java @@ -3,6 +3,8 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.casic.missiles.modular.system.model.SearchKeys; +import java.util.List; + /** *

* 关键字管理 服务类 @@ -13,4 +15,9 @@ */ public interface ISearchKeysService extends IService { + /** + * 保存导入数据 + * @param searchKeys + */ + void saveImportSearchKeys(List searchKeys); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/ProductInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/ProductInfoServiceImpl.java index 0962bfd..f88217d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/ProductInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/ProductInfoServiceImpl.java @@ -21,6 +21,7 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import org.springframework.stereotype.Service; +import org.springframework.util.ResourceUtils; import javax.annotation.Resource; import java.math.BigDecimal; @@ -50,9 +51,11 @@ @Resource private ISearchProgressService progressService; + @SneakyThrows @Override public CrawlingDTO searchProducts(String type, String searchId) { - System.setProperty("webdriver.chrome.driver", path); + System.out.println("++++++++++++++++++++++++++"+ ResourceUtils.getURL("classpath:").getPath()+"chromedriver.exe" ); + System.setProperty("webdriver.chrome.driver", ResourceUtils.getURL("classpath:").getPath()+"chromedriver.exe" ); List searchKeys = searchKeysService.list(); Date searchTime = new Date(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/SearchKeysServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/SearchKeysServiceImpl.java index 401b2f9..727ac3b 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/SearchKeysServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/SearchKeysServiceImpl.java @@ -1,11 +1,14 @@ package com.casic.missiles.modular.system.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.casic.missiles.modular.system.model.SearchKeys; import com.casic.missiles.modular.system.dao.SearchKeysMapper; +import com.casic.missiles.modular.system.model.SearchKeys; import com.casic.missiles.modular.system.service.ISearchKeysService; import org.springframework.stereotype.Component; -import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; /** *

@@ -18,4 +21,10 @@ @Component public class SearchKeysServiceImpl extends ServiceImpl implements ISearchKeysService { + @Override + public void saveImportSearchKeys(List searchKeys) { + List keys = this.list(); + Set sets = keys.stream().map(SearchKeys::getSkuUrl).collect(Collectors.toSet()); + this.saveBatch(searchKeys.stream().filter(key -> !sets.contains(key.getSkuUrl())).collect(Collectors.toList())); + } } diff --git a/casic-web/pom.xml b/casic-web/pom.xml index 8fd2522..ea45d78 100644 --- a/casic-web/pom.xml +++ b/casic-web/pom.xml @@ -69,6 +69,16 @@ com.casic + casic-file + ${extension.version} + + + com.casic + casic-file-support + ${extension.version} + + + com.casic casic-admin-core ${admin.version} @@ -83,17 +93,17 @@ casic-admin-support ${admin.version} - - - - - - + + com.casic + casic-export-support + ${extension.version} + mysql mysql-connector-java ${mysql.driver.version} + com.casic casic-area-starter diff --git a/casic-web/src/main/build/package.xml b/casic-web/src/main/build/package.xml index 5c09cfa..f54b519 100644 --- a/casic-web/src/main/build/package.xml +++ b/casic-web/src/main/build/package.xml @@ -44,6 +44,14 @@ /db/migration + src/main/resources/template + true + + * + + /template + + src/main/resources/i18n / diff --git a/casic-server/pom.xml b/casic-server/pom.xml index 0adbba2..1257fbe 100644 --- a/casic-server/pom.xml +++ b/casic-server/pom.xml @@ -42,6 +42,11 @@ com.casic + casic-export-support + ${extension.version} + + + com.casic casic-selenium-core ${extension.version} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ProductInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ProductInfoController.java index 3548742..0e25a98 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ProductInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ProductInfoController.java @@ -3,7 +3,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.modular.system.model.ProductInfo; @@ -11,11 +11,13 @@ import com.casic.missiles.modular.system.service.IProductInfoService; import com.casic.missiles.modular.system.service.ISearchKeysService; import com.casic.missiles.modular.system.service.ISearchProgressService; +import lombok.SneakyThrows; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import java.util.List; @@ -28,7 +30,7 @@ */ @Controller @RequestMapping("/productInfo") -public class ProductInfoController extends BaseController { +public class ProductInfoController extends ExportController { @Resource private ISearchKeysService searchKeysService; @Resource @@ -44,7 +46,7 @@ @ResponseBody public Object cachePut(Integer num) { ProgressDTO progressDTO = new ProgressDTO(100, num); - progressDTO.setId(IdWorker.getId()+""); + progressDTO.setId(IdWorker.getId() + ""); progressService.updateCache(progressDTO); return ResponseData.success(progressDTO); } @@ -70,6 +72,7 @@ /** * 获取商品信息管理分页列表 */ + @SneakyThrows @RequestMapping(value = "/listPage") @ResponseBody public Object listPage(String condition, String flag) { @@ -80,6 +83,28 @@ return ResponseData.success(super.packForBT(page)); } + @SneakyThrows + @RequestMapping(value = "/export") + @ResponseBody + public void export(String condition, String flag) { + Page page = PageFactory.defaultPage(); + page.setSize(Long.MAX_VALUE); + List productInfos = productInfoService.searchDbProductPricePage(condition, flag, page); + productInfos.stream().forEach(productInfo -> { + switch (productInfo.getFlag()){ + case "1": + productInfo.setFlag("页面失效");break; + case "2": + productInfo.setFlag("价格偏高");break; + default: + productInfo.setFlag("正常");break; + } + } + ); + this.exportExcel(ProductInfo.class, productInfos, "商品价格监测"); + } + + /** * 新增商品信息管理 */ diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/SearchKeysController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/SearchKeysController.java index 44c33c3..8f4e3b7 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/SearchKeysController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/SearchKeysController.java @@ -4,17 +4,20 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.model.form.IdForms; import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.modular.system.model.SearchKeys; import com.casic.missiles.modular.system.service.IProductInfoService; import com.casic.missiles.modular.system.service.ISearchKeysService; +import lombok.SneakyThrows; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; +import java.util.List; /** * 关键字管理控制器 @@ -24,7 +27,7 @@ */ @Controller @RequestMapping("/searchKeys") -public class SearchKeysController extends BaseController { +public class SearchKeysController extends ExportController { @Resource private ISearchKeysService searchKeysService; @@ -57,6 +60,15 @@ return ResponseData.success(searchKeysService.list(null)); } + @SneakyThrows + @RequestMapping(value = "/importExcel") + @ResponseBody + public Object importExcel(MultipartFile file) { + List searchKeys = this.importExcel(SearchKeys.class, file, null, null); + searchKeysService.saveImportSearchKeys(searchKeys); + return ResponseData.success(); + } + /** * 获取关键字管理分页列表 */ diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/ProductInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/ProductInfo.java index b196ac6..a1c7363 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/model/ProductInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/ProductInfo.java @@ -1,5 +1,12 @@ package com.casic.missiles.modular.system.model; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; import com.alibaba.fastjson.annotation.JSONField; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; @@ -18,6 +25,11 @@ * @since 2022-05-05 */ @Data +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ContentStyle(borderLeft = BorderStyleEnum.THIN,borderBottom =BorderStyleEnum.THIN,borderTop = BorderStyleEnum.THIN,borderRight = BorderStyleEnum.THIN) +@ExcelIgnoreUnannotated @TableName("reptile_product_info") public class ProductInfo extends Model { @@ -27,21 +39,38 @@ * 主键 */ private Long id; + @ExcelProperty("商品名称") + @TableField(exist = false) + private String skuName; + + @ExcelProperty("查询日期") + @JSONField(serializeUsing = DateDeserializer.class) + @TableField("create_time") + private Date createTime; + + /** + * 优惠信息 + */ + @ExcelProperty("优惠信息") + @TableField("discount") + private String discount; /** * 页面价格 */ + @ExcelProperty("页面价格") @TableField("price") private String price; /** + * 0 页面无效 1 价格偏高 + */ + @ExcelProperty("状态") + private String flag; + /** * 满减价格 */ @TableField("actual_price") private String actualPrice; - /** - * 优惠信息 - */ - @TableField("discount") - private String discount; + /** * 其他信息 @@ -52,17 +81,11 @@ @TableField("key_id") private Long keyId; - /** - * 0 页面无效 1 价格偏高 - */ - private String flag; - @JSONField(serializeUsing = DateDeserializer.class) - @TableField("create_time") - private Date createTime; - @TableField(exist = false) - private String skuName; + + @TableField(exist = false) private String skuUrl; + @ExcelProperty("控制价格") @TableField(exist = false) private String oldPrice; @Override diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/SearchKeys.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/SearchKeys.java index ed01581..376d846 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/model/SearchKeys.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/SearchKeys.java @@ -1,5 +1,12 @@ package com.casic.missiles.modular.system.model; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; import com.alibaba.fastjson.annotation.JSONField; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; @@ -18,6 +25,10 @@ * @since 2022-05-05 */ @Data +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ExcelIgnoreUnannotated @TableName("reptile_search_keys") public class SearchKeys extends Model { @@ -30,16 +41,19 @@ /** * 商品名称 */ + @ExcelProperty("商品名称") @TableField("sku_name") private String skuName; /** * 商品url */ + @ExcelProperty("京东链接") @TableField("sku_url") private String skuUrl; /** * 设定价格 */ + @ExcelProperty("控制价格") @TableField("price") private String price; /** diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/ISearchKeysService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ISearchKeysService.java index cb8894c..bcf92f4 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/service/ISearchKeysService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ISearchKeysService.java @@ -3,6 +3,8 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.casic.missiles.modular.system.model.SearchKeys; +import java.util.List; + /** *

* 关键字管理 服务类 @@ -13,4 +15,9 @@ */ public interface ISearchKeysService extends IService { + /** + * 保存导入数据 + * @param searchKeys + */ + void saveImportSearchKeys(List searchKeys); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/ProductInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/ProductInfoServiceImpl.java index 0962bfd..f88217d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/ProductInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/ProductInfoServiceImpl.java @@ -21,6 +21,7 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import org.springframework.stereotype.Service; +import org.springframework.util.ResourceUtils; import javax.annotation.Resource; import java.math.BigDecimal; @@ -50,9 +51,11 @@ @Resource private ISearchProgressService progressService; + @SneakyThrows @Override public CrawlingDTO searchProducts(String type, String searchId) { - System.setProperty("webdriver.chrome.driver", path); + System.out.println("++++++++++++++++++++++++++"+ ResourceUtils.getURL("classpath:").getPath()+"chromedriver.exe" ); + System.setProperty("webdriver.chrome.driver", ResourceUtils.getURL("classpath:").getPath()+"chromedriver.exe" ); List searchKeys = searchKeysService.list(); Date searchTime = new Date(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/SearchKeysServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/SearchKeysServiceImpl.java index 401b2f9..727ac3b 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/SearchKeysServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/SearchKeysServiceImpl.java @@ -1,11 +1,14 @@ package com.casic.missiles.modular.system.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.casic.missiles.modular.system.model.SearchKeys; import com.casic.missiles.modular.system.dao.SearchKeysMapper; +import com.casic.missiles.modular.system.model.SearchKeys; import com.casic.missiles.modular.system.service.ISearchKeysService; import org.springframework.stereotype.Component; -import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; /** *

@@ -18,4 +21,10 @@ @Component public class SearchKeysServiceImpl extends ServiceImpl implements ISearchKeysService { + @Override + public void saveImportSearchKeys(List searchKeys) { + List keys = this.list(); + Set sets = keys.stream().map(SearchKeys::getSkuUrl).collect(Collectors.toSet()); + this.saveBatch(searchKeys.stream().filter(key -> !sets.contains(key.getSkuUrl())).collect(Collectors.toList())); + } } diff --git a/casic-web/pom.xml b/casic-web/pom.xml index 8fd2522..ea45d78 100644 --- a/casic-web/pom.xml +++ b/casic-web/pom.xml @@ -69,6 +69,16 @@ com.casic + casic-file + ${extension.version} + + + com.casic + casic-file-support + ${extension.version} + + + com.casic casic-admin-core ${admin.version} @@ -83,17 +93,17 @@ casic-admin-support ${admin.version} - - - - - - + + com.casic + casic-export-support + ${extension.version} + mysql mysql-connector-java ${mysql.driver.version} + com.casic casic-area-starter diff --git a/casic-web/src/main/build/package.xml b/casic-web/src/main/build/package.xml index 5c09cfa..f54b519 100644 --- a/casic-web/src/main/build/package.xml +++ b/casic-web/src/main/build/package.xml @@ -44,6 +44,14 @@ /db/migration + src/main/resources/template + true + + * + + /template + + src/main/resources/i18n / diff --git a/casic-web/src/main/java/com/casic/missiles/CasicApplication.java b/casic-web/src/main/java/com/casic/missiles/CasicApplication.java index 460d4db..c5c4881 100644 --- a/casic-web/src/main/java/com/casic/missiles/CasicApplication.java +++ b/casic-web/src/main/java/com/casic/missiles/CasicApplication.java @@ -9,6 +9,8 @@ import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.transaction.annotation.EnableTransactionManagement; +import java.io.IOException; + /** * SpringBoot方式启动类 * @@ -26,6 +28,14 @@ public static void main(String[] args) { SpringApplication.run(CasicApplication.class, args); log.info("CasicApplication is success!"); + try { + String url = "http://localhost:8081/reptile/"; + Runtime runtime = Runtime.getRuntime(); + runtime.exec("rundll32 url.dll,FileProtocolHandler " + url); + } catch (IOException e) { + e.printStackTrace(); + } + } } diff --git a/casic-server/pom.xml b/casic-server/pom.xml index 0adbba2..1257fbe 100644 --- a/casic-server/pom.xml +++ b/casic-server/pom.xml @@ -42,6 +42,11 @@ com.casic + casic-export-support + ${extension.version} + + + com.casic casic-selenium-core ${extension.version} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ProductInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ProductInfoController.java index 3548742..0e25a98 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ProductInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ProductInfoController.java @@ -3,7 +3,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.modular.system.model.ProductInfo; @@ -11,11 +11,13 @@ import com.casic.missiles.modular.system.service.IProductInfoService; import com.casic.missiles.modular.system.service.ISearchKeysService; import com.casic.missiles.modular.system.service.ISearchProgressService; +import lombok.SneakyThrows; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import java.util.List; @@ -28,7 +30,7 @@ */ @Controller @RequestMapping("/productInfo") -public class ProductInfoController extends BaseController { +public class ProductInfoController extends ExportController { @Resource private ISearchKeysService searchKeysService; @Resource @@ -44,7 +46,7 @@ @ResponseBody public Object cachePut(Integer num) { ProgressDTO progressDTO = new ProgressDTO(100, num); - progressDTO.setId(IdWorker.getId()+""); + progressDTO.setId(IdWorker.getId() + ""); progressService.updateCache(progressDTO); return ResponseData.success(progressDTO); } @@ -70,6 +72,7 @@ /** * 获取商品信息管理分页列表 */ + @SneakyThrows @RequestMapping(value = "/listPage") @ResponseBody public Object listPage(String condition, String flag) { @@ -80,6 +83,28 @@ return ResponseData.success(super.packForBT(page)); } + @SneakyThrows + @RequestMapping(value = "/export") + @ResponseBody + public void export(String condition, String flag) { + Page page = PageFactory.defaultPage(); + page.setSize(Long.MAX_VALUE); + List productInfos = productInfoService.searchDbProductPricePage(condition, flag, page); + productInfos.stream().forEach(productInfo -> { + switch (productInfo.getFlag()){ + case "1": + productInfo.setFlag("页面失效");break; + case "2": + productInfo.setFlag("价格偏高");break; + default: + productInfo.setFlag("正常");break; + } + } + ); + this.exportExcel(ProductInfo.class, productInfos, "商品价格监测"); + } + + /** * 新增商品信息管理 */ diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/SearchKeysController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/SearchKeysController.java index 44c33c3..8f4e3b7 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/SearchKeysController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/SearchKeysController.java @@ -4,17 +4,20 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.model.form.IdForms; import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.modular.system.model.SearchKeys; import com.casic.missiles.modular.system.service.IProductInfoService; import com.casic.missiles.modular.system.service.ISearchKeysService; +import lombok.SneakyThrows; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; +import java.util.List; /** * 关键字管理控制器 @@ -24,7 +27,7 @@ */ @Controller @RequestMapping("/searchKeys") -public class SearchKeysController extends BaseController { +public class SearchKeysController extends ExportController { @Resource private ISearchKeysService searchKeysService; @@ -57,6 +60,15 @@ return ResponseData.success(searchKeysService.list(null)); } + @SneakyThrows + @RequestMapping(value = "/importExcel") + @ResponseBody + public Object importExcel(MultipartFile file) { + List searchKeys = this.importExcel(SearchKeys.class, file, null, null); + searchKeysService.saveImportSearchKeys(searchKeys); + return ResponseData.success(); + } + /** * 获取关键字管理分页列表 */ diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/ProductInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/ProductInfo.java index b196ac6..a1c7363 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/model/ProductInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/ProductInfo.java @@ -1,5 +1,12 @@ package com.casic.missiles.modular.system.model; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; import com.alibaba.fastjson.annotation.JSONField; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; @@ -18,6 +25,11 @@ * @since 2022-05-05 */ @Data +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ContentStyle(borderLeft = BorderStyleEnum.THIN,borderBottom =BorderStyleEnum.THIN,borderTop = BorderStyleEnum.THIN,borderRight = BorderStyleEnum.THIN) +@ExcelIgnoreUnannotated @TableName("reptile_product_info") public class ProductInfo extends Model { @@ -27,21 +39,38 @@ * 主键 */ private Long id; + @ExcelProperty("商品名称") + @TableField(exist = false) + private String skuName; + + @ExcelProperty("查询日期") + @JSONField(serializeUsing = DateDeserializer.class) + @TableField("create_time") + private Date createTime; + + /** + * 优惠信息 + */ + @ExcelProperty("优惠信息") + @TableField("discount") + private String discount; /** * 页面价格 */ + @ExcelProperty("页面价格") @TableField("price") private String price; /** + * 0 页面无效 1 价格偏高 + */ + @ExcelProperty("状态") + private String flag; + /** * 满减价格 */ @TableField("actual_price") private String actualPrice; - /** - * 优惠信息 - */ - @TableField("discount") - private String discount; + /** * 其他信息 @@ -52,17 +81,11 @@ @TableField("key_id") private Long keyId; - /** - * 0 页面无效 1 价格偏高 - */ - private String flag; - @JSONField(serializeUsing = DateDeserializer.class) - @TableField("create_time") - private Date createTime; - @TableField(exist = false) - private String skuName; + + @TableField(exist = false) private String skuUrl; + @ExcelProperty("控制价格") @TableField(exist = false) private String oldPrice; @Override diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/SearchKeys.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/SearchKeys.java index ed01581..376d846 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/model/SearchKeys.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/SearchKeys.java @@ -1,5 +1,12 @@ package com.casic.missiles.modular.system.model; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; import com.alibaba.fastjson.annotation.JSONField; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; @@ -18,6 +25,10 @@ * @since 2022-05-05 */ @Data +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ExcelIgnoreUnannotated @TableName("reptile_search_keys") public class SearchKeys extends Model { @@ -30,16 +41,19 @@ /** * 商品名称 */ + @ExcelProperty("商品名称") @TableField("sku_name") private String skuName; /** * 商品url */ + @ExcelProperty("京东链接") @TableField("sku_url") private String skuUrl; /** * 设定价格 */ + @ExcelProperty("控制价格") @TableField("price") private String price; /** diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/ISearchKeysService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ISearchKeysService.java index cb8894c..bcf92f4 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/service/ISearchKeysService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ISearchKeysService.java @@ -3,6 +3,8 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.casic.missiles.modular.system.model.SearchKeys; +import java.util.List; + /** *

* 关键字管理 服务类 @@ -13,4 +15,9 @@ */ public interface ISearchKeysService extends IService { + /** + * 保存导入数据 + * @param searchKeys + */ + void saveImportSearchKeys(List searchKeys); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/ProductInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/ProductInfoServiceImpl.java index 0962bfd..f88217d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/ProductInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/ProductInfoServiceImpl.java @@ -21,6 +21,7 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import org.springframework.stereotype.Service; +import org.springframework.util.ResourceUtils; import javax.annotation.Resource; import java.math.BigDecimal; @@ -50,9 +51,11 @@ @Resource private ISearchProgressService progressService; + @SneakyThrows @Override public CrawlingDTO searchProducts(String type, String searchId) { - System.setProperty("webdriver.chrome.driver", path); + System.out.println("++++++++++++++++++++++++++"+ ResourceUtils.getURL("classpath:").getPath()+"chromedriver.exe" ); + System.setProperty("webdriver.chrome.driver", ResourceUtils.getURL("classpath:").getPath()+"chromedriver.exe" ); List searchKeys = searchKeysService.list(); Date searchTime = new Date(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/SearchKeysServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/SearchKeysServiceImpl.java index 401b2f9..727ac3b 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/SearchKeysServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/SearchKeysServiceImpl.java @@ -1,11 +1,14 @@ package com.casic.missiles.modular.system.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.casic.missiles.modular.system.model.SearchKeys; import com.casic.missiles.modular.system.dao.SearchKeysMapper; +import com.casic.missiles.modular.system.model.SearchKeys; import com.casic.missiles.modular.system.service.ISearchKeysService; import org.springframework.stereotype.Component; -import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; /** *

@@ -18,4 +21,10 @@ @Component public class SearchKeysServiceImpl extends ServiceImpl implements ISearchKeysService { + @Override + public void saveImportSearchKeys(List searchKeys) { + List keys = this.list(); + Set sets = keys.stream().map(SearchKeys::getSkuUrl).collect(Collectors.toSet()); + this.saveBatch(searchKeys.stream().filter(key -> !sets.contains(key.getSkuUrl())).collect(Collectors.toList())); + } } diff --git a/casic-web/pom.xml b/casic-web/pom.xml index 8fd2522..ea45d78 100644 --- a/casic-web/pom.xml +++ b/casic-web/pom.xml @@ -69,6 +69,16 @@ com.casic + casic-file + ${extension.version} + + + com.casic + casic-file-support + ${extension.version} + + + com.casic casic-admin-core ${admin.version} @@ -83,17 +93,17 @@ casic-admin-support ${admin.version} - - - - - - + + com.casic + casic-export-support + ${extension.version} + mysql mysql-connector-java ${mysql.driver.version} + com.casic casic-area-starter diff --git a/casic-web/src/main/build/package.xml b/casic-web/src/main/build/package.xml index 5c09cfa..f54b519 100644 --- a/casic-web/src/main/build/package.xml +++ b/casic-web/src/main/build/package.xml @@ -44,6 +44,14 @@ /db/migration + src/main/resources/template + true + + * + + /template + + src/main/resources/i18n / diff --git a/casic-web/src/main/java/com/casic/missiles/CasicApplication.java b/casic-web/src/main/java/com/casic/missiles/CasicApplication.java index 460d4db..c5c4881 100644 --- a/casic-web/src/main/java/com/casic/missiles/CasicApplication.java +++ b/casic-web/src/main/java/com/casic/missiles/CasicApplication.java @@ -9,6 +9,8 @@ import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.transaction.annotation.EnableTransactionManagement; +import java.io.IOException; + /** * SpringBoot方式启动类 * @@ -26,6 +28,14 @@ public static void main(String[] args) { SpringApplication.run(CasicApplication.class, args); log.info("CasicApplication is success!"); + try { + String url = "http://localhost:8081/reptile/"; + Runtime runtime = Runtime.getRuntime(); + runtime.exec("rundll32 url.dll,FileProtocolHandler " + url); + } catch (IOException e) { + e.printStackTrace(); + } + } } diff --git a/casic-web/src/main/java/com/casic/missiles/controller/TemplateController.java b/casic-web/src/main/java/com/casic/missiles/controller/TemplateController.java new file mode 100644 index 0000000..2c72919 --- /dev/null +++ b/casic-web/src/main/java/com/casic/missiles/controller/TemplateController.java @@ -0,0 +1,69 @@ +package com.casic.missiles.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.util.ResourceUtils; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletResponse; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; + +/** + * 模板管理包 + * + * @author dev123 + * @Date 2018-11-19 13:15:14 + */ +@RestController +public class TemplateController extends BaseController { + private static Logger logger = LoggerFactory.getLogger(TemplateController.class); + + /** + * 文件模板下载 (待优化) + */ + @GetMapping("/template/download") + public void doPost(@RequestParam("filename") String filename, HttpServletResponse response) + throws ServletException, IOException { + String path = ResourceUtils.getURL("classpath:").getPath()+"template/"; + logger.info(path); + if (path.startsWith("/")) { + path = path.substring(1); + } + File file = new File(path, filename); + // 获取文件名 + String fileName = null; + if (filename.contains("/")) { + fileName = filename.substring(filename.lastIndexOf("/") + 1); + } else { + fileName = filename; + } + + // 设置以流的形式下载文件,这样可以实现任意格式的文件下载 + response.setContentType("application/octet-stream"); + response.addHeader("Content-Disposition", " attachment;filename=" + fileName); + response.setContentLength((int) file.length()); + + FileInputStream fis = null; + try { + fis = new FileInputStream(file); + byte[] buffer = new byte[1024]; + int readTmp = 0; + while ((readTmp = fis.read(buffer)) != -1) { + response.getOutputStream().write(buffer, 0, readTmp); + } + } catch (Exception e) { + logger.info(e.getMessage()); + e.printStackTrace(); + } finally { + response.getOutputStream().flush(); + response.getOutputStream().close(); + fis.close(); + } + } +} diff --git a/casic-server/pom.xml b/casic-server/pom.xml index 0adbba2..1257fbe 100644 --- a/casic-server/pom.xml +++ b/casic-server/pom.xml @@ -42,6 +42,11 @@ com.casic + casic-export-support + ${extension.version} + + + com.casic casic-selenium-core ${extension.version} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ProductInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ProductInfoController.java index 3548742..0e25a98 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ProductInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ProductInfoController.java @@ -3,7 +3,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.modular.system.model.ProductInfo; @@ -11,11 +11,13 @@ import com.casic.missiles.modular.system.service.IProductInfoService; import com.casic.missiles.modular.system.service.ISearchKeysService; import com.casic.missiles.modular.system.service.ISearchProgressService; +import lombok.SneakyThrows; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import java.util.List; @@ -28,7 +30,7 @@ */ @Controller @RequestMapping("/productInfo") -public class ProductInfoController extends BaseController { +public class ProductInfoController extends ExportController { @Resource private ISearchKeysService searchKeysService; @Resource @@ -44,7 +46,7 @@ @ResponseBody public Object cachePut(Integer num) { ProgressDTO progressDTO = new ProgressDTO(100, num); - progressDTO.setId(IdWorker.getId()+""); + progressDTO.setId(IdWorker.getId() + ""); progressService.updateCache(progressDTO); return ResponseData.success(progressDTO); } @@ -70,6 +72,7 @@ /** * 获取商品信息管理分页列表 */ + @SneakyThrows @RequestMapping(value = "/listPage") @ResponseBody public Object listPage(String condition, String flag) { @@ -80,6 +83,28 @@ return ResponseData.success(super.packForBT(page)); } + @SneakyThrows + @RequestMapping(value = "/export") + @ResponseBody + public void export(String condition, String flag) { + Page page = PageFactory.defaultPage(); + page.setSize(Long.MAX_VALUE); + List productInfos = productInfoService.searchDbProductPricePage(condition, flag, page); + productInfos.stream().forEach(productInfo -> { + switch (productInfo.getFlag()){ + case "1": + productInfo.setFlag("页面失效");break; + case "2": + productInfo.setFlag("价格偏高");break; + default: + productInfo.setFlag("正常");break; + } + } + ); + this.exportExcel(ProductInfo.class, productInfos, "商品价格监测"); + } + + /** * 新增商品信息管理 */ diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/SearchKeysController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/SearchKeysController.java index 44c33c3..8f4e3b7 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/SearchKeysController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/SearchKeysController.java @@ -4,17 +4,20 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.model.form.IdForms; import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.modular.system.model.SearchKeys; import com.casic.missiles.modular.system.service.IProductInfoService; import com.casic.missiles.modular.system.service.ISearchKeysService; +import lombok.SneakyThrows; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; +import java.util.List; /** * 关键字管理控制器 @@ -24,7 +27,7 @@ */ @Controller @RequestMapping("/searchKeys") -public class SearchKeysController extends BaseController { +public class SearchKeysController extends ExportController { @Resource private ISearchKeysService searchKeysService; @@ -57,6 +60,15 @@ return ResponseData.success(searchKeysService.list(null)); } + @SneakyThrows + @RequestMapping(value = "/importExcel") + @ResponseBody + public Object importExcel(MultipartFile file) { + List searchKeys = this.importExcel(SearchKeys.class, file, null, null); + searchKeysService.saveImportSearchKeys(searchKeys); + return ResponseData.success(); + } + /** * 获取关键字管理分页列表 */ diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/ProductInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/ProductInfo.java index b196ac6..a1c7363 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/model/ProductInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/ProductInfo.java @@ -1,5 +1,12 @@ package com.casic.missiles.modular.system.model; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; import com.alibaba.fastjson.annotation.JSONField; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; @@ -18,6 +25,11 @@ * @since 2022-05-05 */ @Data +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ContentStyle(borderLeft = BorderStyleEnum.THIN,borderBottom =BorderStyleEnum.THIN,borderTop = BorderStyleEnum.THIN,borderRight = BorderStyleEnum.THIN) +@ExcelIgnoreUnannotated @TableName("reptile_product_info") public class ProductInfo extends Model { @@ -27,21 +39,38 @@ * 主键 */ private Long id; + @ExcelProperty("商品名称") + @TableField(exist = false) + private String skuName; + + @ExcelProperty("查询日期") + @JSONField(serializeUsing = DateDeserializer.class) + @TableField("create_time") + private Date createTime; + + /** + * 优惠信息 + */ + @ExcelProperty("优惠信息") + @TableField("discount") + private String discount; /** * 页面价格 */ + @ExcelProperty("页面价格") @TableField("price") private String price; /** + * 0 页面无效 1 价格偏高 + */ + @ExcelProperty("状态") + private String flag; + /** * 满减价格 */ @TableField("actual_price") private String actualPrice; - /** - * 优惠信息 - */ - @TableField("discount") - private String discount; + /** * 其他信息 @@ -52,17 +81,11 @@ @TableField("key_id") private Long keyId; - /** - * 0 页面无效 1 价格偏高 - */ - private String flag; - @JSONField(serializeUsing = DateDeserializer.class) - @TableField("create_time") - private Date createTime; - @TableField(exist = false) - private String skuName; + + @TableField(exist = false) private String skuUrl; + @ExcelProperty("控制价格") @TableField(exist = false) private String oldPrice; @Override diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/SearchKeys.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/SearchKeys.java index ed01581..376d846 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/model/SearchKeys.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/SearchKeys.java @@ -1,5 +1,12 @@ package com.casic.missiles.modular.system.model; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; import com.alibaba.fastjson.annotation.JSONField; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; @@ -18,6 +25,10 @@ * @since 2022-05-05 */ @Data +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ExcelIgnoreUnannotated @TableName("reptile_search_keys") public class SearchKeys extends Model { @@ -30,16 +41,19 @@ /** * 商品名称 */ + @ExcelProperty("商品名称") @TableField("sku_name") private String skuName; /** * 商品url */ + @ExcelProperty("京东链接") @TableField("sku_url") private String skuUrl; /** * 设定价格 */ + @ExcelProperty("控制价格") @TableField("price") private String price; /** diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/ISearchKeysService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ISearchKeysService.java index cb8894c..bcf92f4 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/service/ISearchKeysService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ISearchKeysService.java @@ -3,6 +3,8 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.casic.missiles.modular.system.model.SearchKeys; +import java.util.List; + /** *

* 关键字管理 服务类 @@ -13,4 +15,9 @@ */ public interface ISearchKeysService extends IService { + /** + * 保存导入数据 + * @param searchKeys + */ + void saveImportSearchKeys(List searchKeys); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/ProductInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/ProductInfoServiceImpl.java index 0962bfd..f88217d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/ProductInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/ProductInfoServiceImpl.java @@ -21,6 +21,7 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import org.springframework.stereotype.Service; +import org.springframework.util.ResourceUtils; import javax.annotation.Resource; import java.math.BigDecimal; @@ -50,9 +51,11 @@ @Resource private ISearchProgressService progressService; + @SneakyThrows @Override public CrawlingDTO searchProducts(String type, String searchId) { - System.setProperty("webdriver.chrome.driver", path); + System.out.println("++++++++++++++++++++++++++"+ ResourceUtils.getURL("classpath:").getPath()+"chromedriver.exe" ); + System.setProperty("webdriver.chrome.driver", ResourceUtils.getURL("classpath:").getPath()+"chromedriver.exe" ); List searchKeys = searchKeysService.list(); Date searchTime = new Date(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/SearchKeysServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/SearchKeysServiceImpl.java index 401b2f9..727ac3b 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/SearchKeysServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/SearchKeysServiceImpl.java @@ -1,11 +1,14 @@ package com.casic.missiles.modular.system.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.casic.missiles.modular.system.model.SearchKeys; import com.casic.missiles.modular.system.dao.SearchKeysMapper; +import com.casic.missiles.modular.system.model.SearchKeys; import com.casic.missiles.modular.system.service.ISearchKeysService; import org.springframework.stereotype.Component; -import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; /** *

@@ -18,4 +21,10 @@ @Component public class SearchKeysServiceImpl extends ServiceImpl implements ISearchKeysService { + @Override + public void saveImportSearchKeys(List searchKeys) { + List keys = this.list(); + Set sets = keys.stream().map(SearchKeys::getSkuUrl).collect(Collectors.toSet()); + this.saveBatch(searchKeys.stream().filter(key -> !sets.contains(key.getSkuUrl())).collect(Collectors.toList())); + } } diff --git a/casic-web/pom.xml b/casic-web/pom.xml index 8fd2522..ea45d78 100644 --- a/casic-web/pom.xml +++ b/casic-web/pom.xml @@ -69,6 +69,16 @@ com.casic + casic-file + ${extension.version} + + + com.casic + casic-file-support + ${extension.version} + + + com.casic casic-admin-core ${admin.version} @@ -83,17 +93,17 @@ casic-admin-support ${admin.version} - - - - - - + + com.casic + casic-export-support + ${extension.version} + mysql mysql-connector-java ${mysql.driver.version} + com.casic casic-area-starter diff --git a/casic-web/src/main/build/package.xml b/casic-web/src/main/build/package.xml index 5c09cfa..f54b519 100644 --- a/casic-web/src/main/build/package.xml +++ b/casic-web/src/main/build/package.xml @@ -44,6 +44,14 @@ /db/migration + src/main/resources/template + true + + * + + /template + + src/main/resources/i18n / diff --git a/casic-web/src/main/java/com/casic/missiles/CasicApplication.java b/casic-web/src/main/java/com/casic/missiles/CasicApplication.java index 460d4db..c5c4881 100644 --- a/casic-web/src/main/java/com/casic/missiles/CasicApplication.java +++ b/casic-web/src/main/java/com/casic/missiles/CasicApplication.java @@ -9,6 +9,8 @@ import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.transaction.annotation.EnableTransactionManagement; +import java.io.IOException; + /** * SpringBoot方式启动类 * @@ -26,6 +28,14 @@ public static void main(String[] args) { SpringApplication.run(CasicApplication.class, args); log.info("CasicApplication is success!"); + try { + String url = "http://localhost:8081/reptile/"; + Runtime runtime = Runtime.getRuntime(); + runtime.exec("rundll32 url.dll,FileProtocolHandler " + url); + } catch (IOException e) { + e.printStackTrace(); + } + } } diff --git a/casic-web/src/main/java/com/casic/missiles/controller/TemplateController.java b/casic-web/src/main/java/com/casic/missiles/controller/TemplateController.java new file mode 100644 index 0000000..2c72919 --- /dev/null +++ b/casic-web/src/main/java/com/casic/missiles/controller/TemplateController.java @@ -0,0 +1,69 @@ +package com.casic.missiles.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.util.ResourceUtils; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletResponse; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; + +/** + * 模板管理包 + * + * @author dev123 + * @Date 2018-11-19 13:15:14 + */ +@RestController +public class TemplateController extends BaseController { + private static Logger logger = LoggerFactory.getLogger(TemplateController.class); + + /** + * 文件模板下载 (待优化) + */ + @GetMapping("/template/download") + public void doPost(@RequestParam("filename") String filename, HttpServletResponse response) + throws ServletException, IOException { + String path = ResourceUtils.getURL("classpath:").getPath()+"template/"; + logger.info(path); + if (path.startsWith("/")) { + path = path.substring(1); + } + File file = new File(path, filename); + // 获取文件名 + String fileName = null; + if (filename.contains("/")) { + fileName = filename.substring(filename.lastIndexOf("/") + 1); + } else { + fileName = filename; + } + + // 设置以流的形式下载文件,这样可以实现任意格式的文件下载 + response.setContentType("application/octet-stream"); + response.addHeader("Content-Disposition", " attachment;filename=" + fileName); + response.setContentLength((int) file.length()); + + FileInputStream fis = null; + try { + fis = new FileInputStream(file); + byte[] buffer = new byte[1024]; + int readTmp = 0; + while ((readTmp = fis.read(buffer)) != -1) { + response.getOutputStream().write(buffer, 0, readTmp); + } + } catch (Exception e) { + logger.info(e.getMessage()); + e.printStackTrace(); + } finally { + response.getOutputStream().flush(); + response.getOutputStream().close(); + fis.close(); + } + } +} diff --git a/casic-web/src/main/resources/template/product_info.xlsx b/casic-web/src/main/resources/template/product_info.xlsx new file mode 100644 index 0000000..48680cd --- /dev/null +++ b/casic-web/src/main/resources/template/product_info.xlsx Binary files differ