Commit 66ea68bd authored by shiyu's avatar shiyu

查价

parent e0fe1f97
......@@ -90,6 +90,11 @@ public class CategoryVo implements Serializable {
@ApiModelProperty(value = "存世量")
private Integer exiQuantity;
/**
* 介绍
*/
private String introduction;
/**
......@@ -156,6 +161,7 @@ public class CategoryVo implements Serializable {
this.desc = category.getDesc();
this.level = category.getLevel();
this.isLeaf = category.getIsLeaf();
this.introduction = category.getIntroduction();
if (!StringUtils.isEmpty(category.getExtra())) {
Map<String, Object> extraData = (Map<String, Object>) JSONUtils.parse(category.getExtra());
this.publishTime = extractExtra(extraData, "publishTime");
......@@ -342,6 +348,7 @@ public class CategoryVo implements Serializable {
category.setLevel(this.level);
category.setName(this.name);
category.setPid(this.pid);
category.setIntroduction(this.introduction);
category.setExtra(createExtra());
return category;
}
......
package com.wwdz.ch.core.entity;
import com.xxdxxs.entity.Entity;
import lombok.Data;
import java.util.List;
@Data
public class Chart implements Entity {
private List<String> xData;
private List<Object> values;
}
......@@ -15,6 +15,10 @@ public interface BidRecordDao {
List<BidRecord> queryByCid (Integer cid);
List<BidRecord> queryByCidOrderBySelf (BidRecordRequestDto dto);
List<BidRecord> queryByCid (BidRecordRequestDto dto);
List<BidRecord> query (BidRecordRequestDto dto);
void deleteById (Long id);
......
package com.wwdz.ch.db.domain;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import com.xxdxxs.entity.Entity;
import lombok.Data;
......
......@@ -39,6 +39,26 @@ public class BidRecordDaoImpl implements BidRecordDao {
return bidRecordMapper.selectByExample(example);
}
@Override
public List<BidRecord> queryByCidOrderBySelf(BidRecordRequestDto dto) {
BidRecordExample example = new BidRecordExample();
example.createCriteria().andCidEqualTo(dto.getCid()).andIsDeletedEqualTo(0);
example.setOrderByClause(dto.getSortColumn() + " " + dto.getOrder());
PageHelper.startPage(dto.getPage(), dto.getLimit());
return bidRecordMapper.selectByExample(example);
}
@Override
public List<BidRecord> queryByCid(BidRecordRequestDto dto) {
BidRecordExample example = new BidRecordExample();
BidRecordExample.Criteria criteria = example.createCriteria();
criteria.andCidEqualTo(dto.getCid()).andIsDeletedEqualTo(0);
JdbcHelper.ifPresent(dto.getStartBidTime(), criteria::andBidTimeGreaterThanOrEqualTo);
JdbcHelper.ifPresent(dto.getEndBidTime(), criteria::andBidTimeLessThanOrEqualTo);
example.setOrderByClause("update_time asc");
return bidRecordMapper.selectByExample(example);
}
@Override
public List<BidRecord> query(BidRecordRequestDto dto) {
BidRecordExample example = new BidRecordExample();
......
......@@ -33,6 +33,6 @@ public class WebMvcConfiguration implements WebMvcConfigurer {
, "/wx/user/loginByWx", "/wx/user/loginByMobile", "/wx/user/loginRegCaptcha", "/wx/user/updateRegCaptcha"
, "/wx/item/page", "/wx/item/info", "/wx/item/findNames"
, "/wx/favorites/info", "/wx/favorites/itemList"
, "/wx/keyword/recommend");
, "/wx/keyword/recommend", "/wx/queryPrice/**");
}
}
package com.wwdz.ch.wx.entity.request;
import com.xxdxxs.entity.Entity;
import lombok.Data;
@Data
public class QueryPriceRequestDto implements Entity {
private Integer cid;
}
package com.wwdz.ch.wx.entity.vo;
import com.wwdz.ch.db.domain.BidRecord;
import com.xxdxxs.entity.Entity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
@Data
public class BidRecordVo implements Entity {
private Long id;
private String buyer;
private String platform;
private Integer cid;
private List<String> images;
private Integer bidTime;
private Double price;
private String extra;
private String link;
/**
* 创建时间
*/
private Date createTime;
/**
* 更新时间
*/
private Date updateTime;
public BidRecordVo(BidRecord record) {
this.id = record.getId();
this.cid = record.getCid();
this.images = Arrays.asList(record.getImages().split(";"));
this.bidTime = record.getBidTime();
this.price = record.getPrice() / (double)100;
this.buyer = record.getBuyer();
this.platform = record.getPlatform();
this.extra = record.getExtra();
this.link = record.getLink();
this.createTime = record.getCreateTime();
this.updateTime = record.getUpdateTime();
}
}
package com.wwdz.ch.wx.entity.vo;
import com.alibaba.druid.support.json.JSONUtils;
import com.wwdz.ch.db.domain.Category;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.util.StringUtils;
import java.io.Serializable;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@ApiModel
@Data
public class CategoryVo implements Serializable {
private static final long serialVersionUID = 96458407347975312L;
@ApiModelProperty(value = "分类Id")
private Integer id;
@ApiModelProperty(value = "分类名称")
private String name;
@ApiModelProperty(value = "分类图片")
private String icon;
@ApiModelProperty(value = "父类目ID")
private Integer pid;
@ApiModelProperty(value = "层级")
private Integer level;
@ApiModelProperty(value = "描述")
private String desc;
@ApiModelProperty(value = "面值")
private String parValue;
@ApiModelProperty(value = "命名来源")
private String nameSrc;
@ApiModelProperty(value = "造币厂")
private String mint;
@ApiModelProperty(value = "铸造时间")
private String publishTime;
@ApiModelProperty(value = "铸造者")
private String publisher;
@ApiModelProperty(value = "王朝")
private String dynasty;
@ApiModelProperty(value = "品种代码")
private String serialNo;
@ApiModelProperty(value = "分类路径")
private String categoryPath;
@ApiModelProperty(value = "扩展名称")
private String extendName;
@ApiModelProperty(value = "材质")
private String material;
@ApiModelProperty(value = "直径范围")
private String diameter;
@ApiModelProperty(value = " 厚度范围")
private String thickness;
@ApiModelProperty(value = "重量范围")
private String weight;
@ApiModelProperty(value = "合金成分分析表图片路径")
private String caTableImage;
@ApiModelProperty(value = "是否叶子节点")
private Boolean isLeaf;
@ApiModelProperty(value = "存世量")
private Integer exiQuantity;
/**
* 介绍
*/
private String introduction;
/**
* 子类目
*/
private List<CategoryVo> children;
public String getCaTableImage() {
return caTableImage;
}
public void setCaTableImage(String caTableImage) {
this.caTableImage = caTableImage;
}
public Boolean getLeaf() {
return isLeaf;
}
public void setLeaf(Boolean leaf) {
isLeaf = leaf;
}
public String getParValue() {
return parValue;
}
public void setParValue(String parValue) {
this.parValue = parValue;
}
public String getNameSrc() {
return nameSrc;
}
public void setNameSrc(String nameSrc) {
this.nameSrc = nameSrc;
}
public String getMint() {
return mint;
}
public void setMint(String mint) {
this.mint = mint;
}
public String getMaterial() {
return material;
}
public void setMaterial(String material) {
this.material = material;
}
public CategoryVo(){}
public CategoryVo(Category category) {
this.id = category.getId();
this.name = category.getName();
this.icon = category.getIcon();
this.pid = category.getPid();
this.desc = category.getDesc();
this.level = category.getLevel();
this.isLeaf = category.getIsLeaf();
this.introduction = category.getIntroduction();
if (!StringUtils.isEmpty(category.getExtra())) {
Map<String, Object> extraData = (Map<String, Object>) JSONUtils.parse(category.getExtra());
this.publishTime = extractExtra(extraData, "publishTime");
this.publisher = extractExtra(extraData, "publisher");
this.exiQuantity = extractExtraInt(extraData, "exiQuantity");
this.dynasty = extractExtra(extraData, "dynasty");
this.diameter = extractExtraString(extraData, "diameter");
this.thickness = extractExtraString(extraData, "thickness");
this.weight = extractExtraString(extraData, "weight");
this.extendName = extractExtra(extraData, "extendName");
this.serialNo = extractExtra(extraData, "serialNo");
this.caTableImage = extractExtra(extraData, "caTableImage");
this.nameSrc = extractExtra(extraData, "nameSrc");
this.mint = extractExtra(extraData, "mint");
this.parValue = extractExtra(extraData, "parValue");
this.material = extractExtra(extraData, "material");
}
}
public static CategoryVo of(Category category) {
return new CategoryVo(category);
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getIcon() {
return icon;
}
public void setIcon(String icon) {
this.icon = icon;
}
public Integer getPid() {
return pid;
}
public void setPid(Integer pid) {
this.pid = pid;
}
public List<CategoryVo> getChildren() {
return children;
}
public void setChildren(List<CategoryVo> children) {
this.children = children;
}
public Integer getLevel() {
return level;
}
public void setLevel(Integer level) {
this.level = level;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
public String getPublishTime() {
return publishTime;
}
public void setPublishTime(String publishTime) {
this.publishTime = publishTime;
}
public String getPublisher() {
return publisher;
}
public void setPublisher(String publisher) {
this.publisher = publisher;
}
public Integer getExiQuantity() {
return exiQuantity;
}
public void setExiQuantity(Integer exiQuantity) {
this.exiQuantity = exiQuantity;
}
public String getDynasty() {
return dynasty;
}
public void setDynasty(String dynasty) {
this.dynasty = dynasty;
}
public String getSerialNo() {
return serialNo;
}
public void setSerialNo(String serialNo) {
this.serialNo = serialNo;
}
public String getCategoryPath() {
return categoryPath;
}
public void setCategoryPath(String categoryPath) {
this.categoryPath = categoryPath;
}
public String getExtendName() {
return extendName;
}
public void setExtendName(String extendName) {
this.extendName = extendName;
}
public String getDiameter() {
return diameter;
}
public void setDiameter(String diameter) {
this.diameter = diameter;
}
public String getThickness() {
return thickness;
}
public void setThickness(String thickness) {
this.thickness = thickness;
}
public String getWeight() {
return weight;
}
public void setWeight(String weight) {
this.weight = weight;
}
private String extractExtra(Map<String, Object> extraData, String key) {
if (null != extraData.get(key)) {
return extraData.get(key).toString();
}
return "";
}
private Integer extractExtraInt(Map<String, Object> extraData, String key) {
if (!StringUtils.isEmpty(extraData.get(key))) {
return Integer.valueOf(extraData.get(key).toString());
}
return null;
}
private String extractExtraString(Map<String, Object> extraData, String key) {
if (!StringUtils.isEmpty(extraData.get(key))) {
return extraData.get(key).toString();
}
return null;
}
public Category toDo() {
Category category = new Category();
category.setId(this.id);
category.setDesc(this.desc);
category.setIcon(this.icon);
category.setLevel(this.level);
category.setName(this.name);
category.setPid(this.pid);
category.setIntroduction(this.introduction);
category.setExtra(createExtra());
return category;
}
private String createExtra() {
Map<String, Object> extraObj = new HashMap<>();
extraObj.put("publishTime", this.publishTime);
extraObj.put("publisher", this.publisher);
extraObj.put("exiQuantity", this.exiQuantity);
extraObj.put("mint", this.mint);
extraObj.put("parValue", this.parValue);
extraObj.put("nameSrc",this.nameSrc);
extraObj.put("caTableImage", this.caTableImage);
extraObj.put("diameter", this.diameter);
extraObj.put("dynasty", this.dynasty);
extraObj.put("extendName", this.extendName);
extraObj.put("serialNo", this.serialNo);
extraObj.put("thickness", this.thickness);
extraObj.put("weight", this.weight);
extraObj.put("material", this.material);
return JSONUtils.toJSONString(extraObj);
}
}
......@@ -15,7 +15,6 @@ import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.Date;
import java.util.List;
......
package com.wwdz.ch.wx.impl;
import com.alipay.api.domain.CategoryVO;
import com.github.pagehelper.PageInfo;
import com.wwdz.ch.core.entity.Chart;
import com.wwdz.ch.core.type.PageSearchResult;
import com.wwdz.ch.core.type.Result;
import com.wwdz.ch.db.dao.BidRecordDao;
import com.wwdz.ch.db.dao.CategoryDao;
import com.wwdz.ch.db.domain.BidRecord;
import com.wwdz.ch.db.domain.Category;
import com.wwdz.ch.db.dto.request.BidRecordRequestDto;
import com.wwdz.ch.wx.entity.vo.BidRecordVo;
import com.wwdz.ch.wx.entity.vo.CategoryVo;
import com.wwdz.ch.wx.service.QueryPriceService;
import com.xxdxxs.utils.DateUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.time.*;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@Service
public class QueryPriceServiceImpl implements QueryPriceService {
private static final Logger logger = LoggerFactory.getLogger(QueryPriceServiceImpl.class);
@Autowired
CategoryDao categoryDao;
@Autowired
BidRecordDao bidRecordDao;
@Override
public Result queryPrice(Integer id) {
try {
Category category = categoryDao.findById(id);
//成交记录折线图
BidRecordRequestDto dto = new BidRecordRequestDto();
LocalDate now = LocalDate.now();
int nowMills = (int) now.atStartOfDay(ZoneOffset.UTC).toEpochSecond();
LocalDate starTime = now.minusYears(1);
int startMills = (int) starTime.atStartOfDay(ZoneOffset.UTC).toEpochSecond();
dto.setCid(id);
dto.setStartBidTime(startMills);
dto.setEndBidTime(nowMills);
List<BidRecord> bidRecordList = bidRecordDao.queryByCid(dto);
List<String> xData = new ArrayList<>();
List<Object> valueList = new ArrayList<>();
for (BidRecord bidRecord : bidRecordList) {
int bidTime = bidRecord.getBidTime();
Instant instant = Instant.ofEpochSecond(bidTime);
LocalDateTime date = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
String time = date.format(formatter);
xData.add(time);
valueList.add(bidRecord.getPrice() / (double)100 / (double)10000);
}
Chart chart = new Chart();
chart.setXData(xData);
chart.setValues(valueList);
Map<String, Object> map = new HashMap<>();
map.put("details", CategoryVo.of(category));
map.put("chart", chart);
return Result.success(map);
} catch (Exception e) {
logger.error("查询类目价格详情失败:{}", e);
}
return Result.failed();
}
@Override
public Result findBidRecord(BidRecordRequestDto dto) {
try {
List<BidRecord> bidRecordList = bidRecordDao.queryByCidOrderBySelf(dto);
List<BidRecordVo> bidRecordVos = new ArrayList<>();
bidRecordVos = bidRecordList.stream().map(i -> new BidRecordVo(i)).collect(Collectors.toList());
PageInfo pageInfo = PageInfo.of(bidRecordVos);
return Result.success(PageSearchResult.of(pageInfo));
} catch (Exception e) {
logger.info("成交记录查询失败:{}", e);
}
return Result.failed();
}
}
package com.wwdz.ch.wx.service;
import com.wwdz.ch.core.type.Result;
import com.wwdz.ch.db.dto.request.BidRecordRequestDto;
public interface QueryPriceService {
Result queryPrice(Integer id);
/**
* 查询该子类目的成交记录
* @param dto
* @return
*/
Result findBidRecord(BidRecordRequestDto dto);
}
package com.wwdz.ch.wx.web;
import com.alibaba.fastjson.JSON;
import com.wwdz.ch.core.consts.ResultCode;
import com.wwdz.ch.core.type.Result;
import com.wwdz.ch.db.dto.request.BidRecordRequestDto;
import com.wwdz.ch.wx.entity.request.QueryPriceRequestDto;
import com.wwdz.ch.wx.service.QueryPriceService;
import io.swagger.annotations.ApiOperation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/wx/queryPrice")
public class QueryPriceController {
private static final Logger logger = LoggerFactory.getLogger(QueryPriceController.class);
@Autowired
QueryPriceService queryPriceService;
@ApiOperation(value = "查价价格详情")
@PostMapping("/findDetails")
public Result findDetails(@RequestBody QueryPriceRequestDto dto) {
logger.info("【请求开始】查价价格详情,请求参数:{}", JSON.toJSONString(dto));
if (StringUtils.isEmpty(dto.getCid())) {
return Result.failed(ResultCode.PARAM_ERROR);
}
return queryPriceService.queryPrice(dto.getCid());
}
@ApiOperation(value = "查价成交记录")
@PostMapping("/findBidRecords")
public Result findBidRecords(@RequestBody BidRecordRequestDto dto) {
logger.info("【请求开始】查价成交记录,请求参数:{}", JSON.toJSONString(dto));
if (StringUtils.isEmpty(dto.getCid())) {
return Result.failed(ResultCode.PARAM_ERROR);
}
return queryPriceService.findBidRecord(dto);
}
}
......@@ -9,6 +9,11 @@ spring:
max-request-size: 50MB
location: /tmp
jackson:
date-format: yyyy-MM-dd HH:mm:ss
time-zone: GMT+8
serialization:
write-dates-as-timestamps: false
server:
port: 8085
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment