Commit 008339bb authored by libin's avatar libin

营地、评价

parent 08c2af74
......@@ -107,7 +107,4 @@ public abstract class BaseBiz<M extends Mapper<T>, T> {
List<T> list = mapper.selectByExample(example);
return new TableResultResponse<T>(result.getTotal(), list);
}
}
......@@ -117,7 +117,7 @@ public class CampsiteShopAdminDTO {
* 具体地址
*/
@ApiModelProperty(value = "具体地址")
private String adress;
private String address;
/**
* 客服电话
......
......@@ -20,6 +20,8 @@ import lombok.NoArgsConstructor;
@Api("轮播图详细列表")
public class CampsiteShopCarouselDetailDTO {
private Integer id;
/**
* 图片地址
*/
......
......@@ -119,7 +119,7 @@ public class CampsiteShopDTO implements Serializable {
* 具体地址
*/
@ApiModelProperty(value = "具体地址")
private String adress;
private String address;
/**
* 客服电话
......
......@@ -22,7 +22,7 @@ public class CampsiteShopTagDTO implements Serializable {
private static final long serialVersionUID = 1L;
private Long id;
private Integer id;
/**
* 店铺id
*/
......@@ -39,7 +39,7 @@ public class CampsiteShopTagDTO implements Serializable {
* 类型名称
*/
@ApiModelProperty(value = "类型名称")
private String tagName;
private String name;
/**
* 创建时间
......
......@@ -143,9 +143,9 @@ public class CampsiteShop implements Serializable {
/**
* 具体地址
*/
@Column(name = "adress")
@Column(name = "address")
@ApiModelProperty(value = "具体地址")
private String adress;
private String address;
/**
* 客服电话
......
......@@ -9,6 +9,7 @@ import lombok.NoArgsConstructor;
import javax.persistence.Table;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
......@@ -41,7 +42,7 @@ public class CampsiteShopAdminPageVo implements Serializable {
* 店铺类型名称
*/
@ApiModelProperty(value = "店铺类型名称")
private List<String> storeTypeName;
private List<String> storeTypeName = new ArrayList<>();
/**
* 热度值
*/
......
package com.xxfc.platform.campsite.vo;
import com.xxfc.platform.campsite.dto.CampsiteShopCarouselDTO;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
* @author libin
* @version 1.0
* @description TODO
* @data 2019/6/19 18:07
*/
@Data
public class CampsiteShopAdminVO {
/**
* 主键id
*/
@ApiModelProperty("主键id")
private Integer id;
/**
* 店铺名称
*/
@ApiModelProperty(value = "店铺名称")
private String name;
/**
* 店铺logo
*/
@ApiModelProperty(value = "店铺logo")
private String logo;
/**
* 店铺介绍
*/
@ApiModelProperty(value = "店铺介绍")
private String intro;
/**
* 店铺URL
*/
@ApiModelProperty(value = "店铺URL")
private String url;
/**
* 主要联系人
*/
@ApiModelProperty(value = "主要联系人")
private String concat;
/**
* 联系人身份证号
*/
@ApiModelProperty(value = "联系人身份证号")
private String idNumber;
/**
* 联系人电话
*/
@ApiModelProperty(value = "联系人电话")
private String phone;
/**
* 公司id
*/
@ApiModelProperty(value = "公司id")
private Integer companyId;
/**
* 公司名称
*/
@ApiModelProperty(value = "公司名称")
private String companyName;
/**
* 开店时间
*/
@ApiModelProperty(value = "开店时间")
private Long startTime;
/**
* 地址-省/直辖市(编码)
*/
@ApiModelProperty(value = "地址-省/直辖市(编码)")
private Integer province;
/**
* 地址-省/直辖市(名称)
*/
@ApiModelProperty(value = "地址-省/直辖市(名称)")
private String provinceName;
/**
* 地址-市
*/
@ApiModelProperty(value = "地址-市")
private Integer city;
/**
* 地址-市(名称)
*/
@ApiModelProperty(value = "地址-市(名称)")
private String cityName;
/**
* 经度
*/
@ApiModelProperty(value = "经度")
private Double longitude;
/**
* 纬度
*/
@ApiModelProperty(value = "纬度")
private Double latitude;
/**
* 具体地址
*/
@ApiModelProperty(value = "具体地址")
private String address;
/**
* 客服电话
*/
@ApiModelProperty(value = "客服电话")
private String servicePhone;
/**
* 配套设施&收费
*/
@ApiModelProperty(value = "配套设施&收费")
private String configure;
/**
* 店铺详情
*/
@ApiModelProperty(value = "店铺详情")
private String content;
/**
* 店铺状态:0-未开业;1-已开业
*/
@ApiModelProperty(value = "店铺状态:0-未开业;1-已开业")
private Integer status;
/**
* 热度值
*/
@ApiModelProperty(value = "热度值")
private Integer hot;
/**
* 上下架状态 0-创建状态 1-上架 2-下架
*/
@ApiModelProperty(value = "上下架状态 0-创建状态 1-上架 2-下架")
private Integer saleState;
/**
* 轮播图
*/
private List<CampsiteShopCarouselVo> carouse;
/**
* 营地类型
*/
private List<CampsiteTagListVo> campsiteTagListVos;
}
package com.xxfc.platform.campsite.vo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author libin
* @version 1.0
* @description TODO
* @data 2019/6/17 18:23
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Api("轮播图详细列表")
public class CampsiteShopCarouselAdminDetailVo {
private Integer id;
/**
* 商家id
*/
@ApiModelProperty(value = "商家id")
private Integer shopId;
/**
* 访问链接
*/
@ApiModelProperty(value = "访问链接")
private String url;
/**
* 轮播图片链接
*/
@ApiModelProperty(value = "轮播图片链接")
private String imgUrl;
}
......@@ -34,7 +34,7 @@ public class CampsiteShopTagBiz extends BaseBiz<CampsiteShopTagMapper,CampsiteSh
* @param id
* @return
*/
public List<String> findByCampsiteShopId(Integer id) {
public List<CampsiteShopTagDTO> findByCampsiteShopId(Integer id) {
return mapper.findByCampsiteShopId(id);
}
......@@ -49,7 +49,7 @@ public class CampsiteShopTagBiz extends BaseBiz<CampsiteShopTagMapper,CampsiteSh
return null;
}
Map<Integer, List<String>> shopOfTagsMap = campsiteShopTagDTOS.stream()
.collect(Collectors.groupingBy(CampsiteShopTagDTO::getShopId,Collectors.mapping(CampsiteShopTagDTO::getTagName,Collectors.toList())));
.collect(Collectors.groupingBy(CampsiteShopTagDTO::getShopId,Collectors.mapping(CampsiteShopTagDTO::getName,Collectors.toList())));
return shopOfTagsMap;
}
......
......@@ -3,6 +3,7 @@ package com.xxfc.platform.campsite.biz;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import com.github.wxiaoqi.security.common.vo.PageDataVO;
import com.sun.org.apache.regexp.internal.RE;
import com.xxfc.platform.campsite.dto.CampsiteTagListDTO;
import com.xxfc.platform.campsite.vo.CampsiteTagListVo;
import com.xxfc.platform.campsite.vo.CampsiteTagVo;
......@@ -62,6 +63,31 @@ public class CampsiteTagBiz extends BaseBiz<CampsiteTagMapper,CampsiteTag> {
return tagVoPageDataVO;
}
tagVoPageDataVO = JSONObject.parseObject(JSONObject.toJSONString(pageDataVO),new TypeReference<PageDataVO<CampsiteTagVo>>(){});
tagVoPageDataVO.getData().sort(Comparator.comparing(CampsiteTagVo::getRank).reversed().thenComparing(Comparator.comparing(CampsiteTagVo::getCtrTime).reversed()));
return tagVoPageDataVO;
}
/**
* 更改是否作为筛选条件
* @param id
* @param status
* @return
*/
public int updateCampsiteTagIsSearchStatus(Integer id, Integer status) {
return mapper.updateCampsiteTagIsearchStatus(id,status);
}
/**
* 营地类型名检验
* @param id
* @param name
* @return
*/
public Boolean checkTagNameExist(Integer id, String name) {
int count = mapper.checkTagNameExist(id,name);
if (count == 0){
return false;
}
return true;
}
}
\ No newline at end of file
......@@ -55,4 +55,12 @@ public interface CampsiteShopMapper extends Mapper<CampsiteShop> {
* @return
*/
int updateCampsiteSaleStatus(@Param("id") Integer id, @Param("status") Integer status);
/**
* 检验营地名称
* @param id
* @param name
* @return
*/
int checkNameExist(@Param("id") Integer id,@Param("name") String name);
}
......@@ -23,8 +23,7 @@ public interface CampsiteShopTagMapper extends Mapper<CampsiteShopTag> {
* @param shopId
* @return
*/
@Select("select `name` from campsite_shop_tag as `cst` left join campsite_tag as `ct` on cst.tag_id=ct.id where `shop_id`=#{shopId}")
List<String> findByCampsiteShopId(Integer shopId);
List<CampsiteShopTagDTO> findByCampsiteShopId(Integer shopId);
/**
* 根据店铺ids查询
......
......@@ -36,4 +36,21 @@ public interface CampsiteTagMapper extends Mapper<CampsiteTag> {
List<CampsiteTagDTO> finCampsiteTagsAll();
/**
* 更改筛选条件状态
* @param id
* @param status
* @return
*/
int updateCampsiteTagIsearchStatus(@Param("id") Integer id, @Param("status") Integer status);
/**
* 检验营地类型名
* @param id
* @param name
* @return
*/
int checkTagNameExist(@Param("id") Integer id,@Param("name") String name);
}
......@@ -8,6 +8,7 @@ import com.xxfc.platform.campsite.dto.CampsiteShopAdminDTO;
import com.xxfc.platform.campsite.dto.CampsiteShopAdminFindDTO;
import com.xxfc.platform.campsite.entity.CampsiteShop;
import com.xxfc.platform.campsite.vo.CampsiteShopAdminPageVo;
import com.xxfc.platform.campsite.vo.CampsiteShopAdminVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;
......@@ -29,8 +30,8 @@ public class CampsiteShopAdminController extends BaseController<CampsiteShopBiz,
* @return
*/
@ApiOperation(value = "营地列表")
@GetMapping("/pages")
public ObjectRestResponse<PageDataVO<CampsiteShopAdminPageVo>> findCampsiteShopPage(CampsiteShopAdminFindDTO campsiteShopAdminFindDTO){
@PostMapping("/pages")
public ObjectRestResponse<PageDataVO<CampsiteShopAdminPageVo>> findCampsiteShopPage(@RequestBody CampsiteShopAdminFindDTO campsiteShopAdminFindDTO){
PageDataVO<CampsiteShopAdminPageVo> pageVoPageDataVO = getBaseBiz().findCampsiteShopPage(campsiteShopAdminFindDTO);
return ObjectRestResponse.succ(pageVoPageDataVO);
}
......@@ -78,4 +79,16 @@ public class CampsiteShopAdminController extends BaseController<CampsiteShopBiz,
}
return ObjectRestResponse.createDefaultFail();
}
@GetMapping("/exist")
public ObjectRestResponse<Boolean> checkCampsiteNameExist(@RequestParam(value = "id",required = false) Integer id,@RequestParam("name") String name){
Boolean exist = getBaseBiz().campsiteNameExist(id,name==null?"":name.trim());
return ObjectRestResponse.succ(exist);
}
@GetMapping("/campsite/{id}")
public ObjectRestResponse<CampsiteShopAdminVO> findByCampsiteId(@PathVariable("id") Integer id){
CampsiteShopAdminVO campsiteShopAdminVO = getBaseBiz().findByCampsiteId(id);
return ObjectRestResponse.succ(campsiteShopAdminVO);
}
}
\ No newline at end of file
......@@ -43,4 +43,19 @@ public class CampsiteTagAdminController extends BaseController<CampsiteTagBiz,Ca
return ObjectRestResponse.succ(tagVoPageDataVO);
}
@PutMapping("/searchStatus")
public ObjectRestResponse<Void> updateIsSearchStatus(@RequestParam("id") Integer id,@RequestParam("status") Integer status){
int effectRows = getBaseBiz().updateCampsiteTagIsSearchStatus(id,status);
if (effectRows>0){
return ObjectRestResponse.succ();
}
return ObjectRestResponse.createDefaultFail();
}
@GetMapping("/exist")
public ObjectRestResponse<Boolean> checkTagNameExist(@RequestParam(value = "id",required = false) Integer id,@RequestParam("name") String name){
Boolean exist = getBaseBiz().checkTagNameExist(id,name==null?"":name.trim());
return ObjectRestResponse.succ(exist);
}
}
\ No newline at end of file
......@@ -14,7 +14,7 @@
</resultMap>
<select id="findCarousesByShopId" resultType="com.xxfc.platform.campsite.dto.CampsiteShopCarouselDetailDTO">
select `img_url`as `imgUrl`,`url`as `url` from `campsite_shop_carousel` where shop_id=#{shopId}
select `id` as `id`,`img_url`as `imgUrl`,`url`as `url` from `campsite_shop_carousel` where shop_id=#{shopId} and `is_del`=0;
</select>
<update id="updateCarouseStatus">
......
......@@ -22,7 +22,7 @@
<result property="cityName" column="city_name"/>
<result property="longitude" column="longitude"/>
<result property="latitude" column="latitude"/>
<result property="adress" column="adress"/>
<result property="address" column="address"/>
<result property="servicePhone" column="service_phone"/>
<result property="configure" column="configure"/>
<result property="content" column="content"/>
......@@ -47,7 +47,7 @@
</select>
<select id="findCampsiteShopDetailById" resultType="com.xxfc.platform.campsite.dto.CampsiteShopDetailDTO">
select `name` as `name`,`province_name` as `provinceName`,`city_name` as `cityName`,`adress` as `address`,
select `name` as `name`,`province_name` as `provinceName`,`city_name` as `cityName`,`address` as `address`,
`content` as `content`,`configure` as `configure`,`longitude` as `longitude`,`latitude` as `latitude` from `campsite_shop` where `id`=#{id}
</select>
......@@ -55,21 +55,9 @@
SELECT `id`,`name`,`hot`,`crt_time` as `crtTime`,`sale_state` as
`saleState` FROM `campsite_shop`
where `is_del`=0
<if test="startTime != null || endTime!=null">
<choose>
<when test="startTime!=null and endTime!=null">
and crt_time between #{startTime} and #{endTime}
</when>
<otherwise>
<if test="startTime!=null">
and crt_time=#{startTime}
</if>
<if test="endTime != null">
and crt_time=#{endTime}
</if>
</otherwise>
</choose>
</if>
<if test="startTime != null and endTime!=null">
and crt_time between #{startTime} and #{endTime}
</if>
<if test="name != null and name != ''">
and `name` like concat('%',#{name},'%')
</if>
......@@ -82,4 +70,11 @@
<update id="updateCampsiteSaleStatus">
update `campsite_shop` set `sale_state`=#{status} where `id`=#{id}
</update>
<select id="checkNameExist" resultType="int">
select count(`id`) from `campsite_shop` where `name`=#{name}
<if test="id != null">
and `id`!=#{id}
</if>
</select>
</mapper>
\ No newline at end of file
......@@ -14,13 +14,17 @@
</resultMap>
<select id="findByCampsiteShopIds" resultType="com.xxfc.platform.campsite.dto.CampsiteShopTagDTO">
select cst.shop_id as `shopId`,cst.tag_id as `tagId`,ct.name as `tagName` from `campsite_shop_tag` as `cst` inner join `campsite_tag` as `ct` on cst.tag_id=ct.id where cst.is_del=0
and cst.tag_id in
<foreach collection="cspIds" item="tagId" separator="," open="(" close=")">
#{tagId}
select cst.shop_id as `shopId`,cst.tag_id as `tagId`,ct.name as `name` from `campsite_shop_tag` as `cst` inner join `campsite_tag` as `ct` on cst.tag_id=ct.id where cst.is_del=0
and cst.shop_id in
<foreach collection="cspIds" item="spid" separator="," open="(" close=")">
#{spid}
</foreach>
</select>
<select id="findByCampsiteShopId" resultType="com.xxfc.platform.campsite.dto.CampsiteShopTagDTO">
select ct.id as `id`,ct.name as `name` from campsite_shop_tag as `cst` left join campsite_tag as `ct` on cst.tag_id=ct.id where `shop_id`=#{shopId}
</select>
<update id="updateCampsiteTagStatus">
update `campsite_shop_tag` set `is_del`=#{status} where `shop_id`=#{shopId}
<if test="ids != null and ids.size() != 0">
......@@ -42,4 +46,5 @@
delete from `campsite_shop_tag` where `shop_id`=#{shopId} ;
</delete>
</mapper>
\ No newline at end of file
......@@ -35,4 +35,15 @@
<select id="finCampsiteTagsAll" resultMap="campsiteTagDTOMap">
select * from `campsite_tag` where `is_del`=0
</select>
<update id="updateCampsiteTagIsearchStatus">
update `campsite_tag` set `is_search`=#{status} where `id`=#{id}
</update>
<select id="checkTagNameExist" resultType="int">
select count(`id`) from `campsite_tag` where `name`=#{name}
<if test="id != null">
and `id`!=#{id}
</if>
</select>
</mapper>
\ No newline at end of file
......@@ -57,7 +57,7 @@ public class CampsiteShopBizTest {
campsiteShopAdminDTO.setProvinceName("浙江省");
campsiteShopAdminDTO.setCity(2342342);
campsiteShopAdminDTO.setCityName("台州市");
campsiteShopAdminDTO.setAdress("胡同路23号");
campsiteShopAdminDTO.setAddress("胡同路23号");
campsiteShopAdminDTO.setConcat("zhangsan");
campsiteShopAdminDTO.setConfigure("dsaasdfasdfa");
campsiteShopAdminDTO.setContent("sadfasdfasdfasd");
......
package com.xxfc.platform.tour.dto;
import com.xxfc.platform.vehicle.constant.VehicleScoreType;
import lombok.Data;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
/**
* @author libin
* @version 1.0
* @description TODO
* @data 2019/6/18 15:45
*/
@Data
public class ScoreTypeDTO {
/**
* 评分类型
*/
@Enumerated(EnumType.STRING)
private VehicleScoreType vehicleScoreType;
/**
* 评分
*/
private int score;
}
package com.xxfc.platform.tour.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.util.List;
/**
* @author libin
* @version 1.0
* @description 商品评分
* @data 2019/6/18 15:15
*/
@Data
public class TourUserScoreDTO {
@ApiModelProperty("主键id")
private Integer id;
/**
* 订单id
*/
@ApiModelProperty(value = "订单id")
@NotNull(message = "订单id不能为空")
private Integer orderId;
/**
* 商品id
*/
@ApiModelProperty(value = "商品id")
@NotNull(message = "商品id不能为空")
private Integer modelId;
/**
* 评分类型
*/
@ApiModelProperty(value = "评分类型")
private Integer type;
/**
* 评价分
*/
@ApiModelProperty(value = "评价分")
private Integer aveScore;
/**
* 评分明细
*/
@ApiModelProperty(value = "评分明细")
private String scores;
/**
* 是否匿名;0-否;1-是
*/
@ApiModelProperty(value = "是否匿名;0-否;1-是")
private Integer isAnony;
/**
* 评价
*/
@ApiModelProperty(value = "评价")
private String comment;
/**
* 图片
*/
@ApiModelProperty(value = "图片")
private String imgs;
/**
* 状态:0-未审核;1-已审核;2-审核不通过
*/
@ApiModelProperty(value = "状态:0-未审核;1-已审核;2-审核不通过")
private Integer status;
/**
* 创建时间
*/
@ApiModelProperty(value = "创建时间", hidden = true )
private Long crtTime;
/**
* 更新时间
*/
@ApiModelProperty(value = "更新时间", hidden = true )
private Long updTime;
/**
* 是否删除;0-正常;1-删除
*/
@ApiModelProperty(value = "是否删除;0-正常;1-删除")
private Integer isDel;
/**
* 服务类型评分
*/
@ApiModelProperty(value = "服务类型评分")
private List<ScoreTypeDTO> scoretype;
}
\ No newline at end of file
package com.xxfc.platform.tour.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @author libin
* @version 1.0
* @description 商品评分
* @data 2019/6/18 15:15
*/
@Data
public class TourUserScoreDetailDTO {
/**
* 用户id
*/
@ApiModelProperty("用户id")
private Integer userId;
/**
* 评价分
*/
@ApiModelProperty(value = "评价分")
private Integer aveScore;
/**
* 评价
*/
@ApiModelProperty(value = "评价")
private String comment;
/**
* 图片
*/
@ApiModelProperty(value = "图片")
private String imgs;
/**
* 商品名称
*/
@ApiModelProperty(value ="商品名称")
private String name;
/**
* 商品描述
*/
@ApiModelProperty(value = "商品描述")
private String describes;
/**
* 商品封面
*/
@ApiModelProperty(value = "商品封面")
private String cover;
/**
* 创建时间
*/
@ApiModelProperty(value = "创建时间", hidden = true )
private Long crtTime;
/**
* 评分明细
*/
@ApiModelProperty(value = "评分明细")
private String scores;
}
\ No newline at end of file
package com.xxfc.platform.tour.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @author libin
* @version 1.0
* @description 商品评分
* @data 2019/6/18 15:15
*/
@Data
public class TourUserScoreListDTO {
/**
* 用户id
*/
@ApiModelProperty(value = "用户id")
private Integer userId;
/**
* 评价分
*/
@ApiModelProperty(value = "评价分")
private Integer aveScore;
/**
* 是否匿名;0-否;1-是
*/
@ApiModelProperty(value = "是否匿名;0-否;1-是")
private Integer isAnony;
/**
* 评价
*/
@ApiModelProperty(value = "评价")
private String comment;
/**
* 图片
*/
@ApiModelProperty(value = "图片")
private String imgs;
/**
* 创建时间
*/
@ApiModelProperty(value = "创建时间", hidden = true )
private Long crtTime;
}
\ No newline at end of file
package com.xxfc.platform.tour.entity;
import java.io.Serializable;
import javax.persistence.*;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* 用户评分表
*
* @author libin
* @email 18178966185@163.com
* @date 2019-06-21 20:27:43
*/
@Data
@Table(name = "tour_user_score")
public class TourUserScore implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键id
*/
@Id
@GeneratedValue(generator = "JDBC")
@ApiModelProperty("主键id")
private Integer id;
/**
* 用户id
*/
@Column(name = "user_id")
@ApiModelProperty(value = "用户id")
private Integer userId;
/**
* 订单id
*/
@Column(name = "order_id")
@ApiModelProperty(value = "订单id")
private Integer orderId;
/**
* 商品id
*/
@Column(name = "model_id")
@ApiModelProperty(value = "商品id")
private Integer modelId;
/**
* 评分类型
*/
@Column(name = "type")
@ApiModelProperty(value = "评分类型")
private Integer type;
/**
* 评价分
*/
@Column(name = "ave_score")
@ApiModelProperty(value = "评价分")
private Integer aveScore;
/**
* 评分明细
*/
@Column(name = "scores")
@ApiModelProperty(value = "评分明细")
private String scores;
/**
* 是否匿名;0-否;1-是
*/
@Column(name = "is_anony")
@ApiModelProperty(value = "是否匿名;0-否;1-是")
private Integer isAnony;
/**
* 评价
*/
@Column(name = "comment")
@ApiModelProperty(value = "评价")
private String comment;
/**
* 图片
*/
@Column(name = "imgs")
@ApiModelProperty(value = "图片")
private String imgs;
/**
* 状态:0-未审核;1-已审核;2-审核不通过
*/
@Column(name = "status")
@ApiModelProperty(value = "状态:0-未审核;1-已审核;2-审核不通过")
private Integer status;
/**
* 创建时间
*/
@Column(name = "crt_time")
@ApiModelProperty(value = "创建时间", hidden = true )
private Long crtTime;
/**
* 更新时间
*/
@Column(name = "upd_time")
@ApiModelProperty(value = "更新时间", hidden = true )
private Long updTime;
/**
* 是否删除;0-正常;1-删除
*/
@Column(name = "is_del")
@ApiModelProperty(value = "是否删除;0-正常;1-删除")
private Integer isDel;
}
package com.xxfc.platform.tour.vo;
import com.xxfc.platform.vehicle.constant.VehicleScoreType;
import lombok.Data;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
/**
* @author libin
* @version 1.0
* @description TODO
* @data 2019/6/18 15:45
*/
@Data
public class ScoreTypeVo {
/**
* 评分类型
*/
@Enumerated(EnumType.STRING)
private VehicleScoreType vehicleScoreType;
/**
* 评分
*/
private int score;
}
package com.xxfc.platform.tour.vo;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.annotations.ApiOperation;
import lombok.Data;
import java.util.List;
/**
* @author libin
* @version 1.0
* @description 订单评价vo
* @data 2019/6/18 15:26
*/
@Data
public class TourUserScoreVo {
/**
* 主键id
*/
@ApiModelProperty("主键id")
private Integer id;
/**
* 用户id
*/
@ApiModelProperty("用户id")
private String userId;
/**
* 用户名
*/
@ApiModelProperty(value = "用户名")
private String userName;
/**
* 用户头像地址
*/
@ApiModelProperty(value = "用户头像地址")
private String headUrl;
/**
* 评分类型
*/
@ApiModelProperty(value = "评分类型")
private Integer type;
/**
* 评价分
*/
@ApiModelProperty(value = "评价分")
private Integer aveScore;
/**
* 是否匿名;0-否;1-是
*/
@ApiModelProperty(value = "是否匿名;0-否;1-是")
private Integer isAnony;
/**
* 评价
*/
@ApiModelProperty(value = "评价")
private String comment;
/**
* 图片
*/
@ApiModelProperty(value = "图片")
private String imgs;
/**
* 商品名称
*/
@ApiModelProperty(value ="商品名称")
private String name;
/**
* 商品封面
*/
@ApiModelProperty(value = "商品封面")
private String cover;
/**
* 商品描述
*/
@ApiModelProperty(value = "商品描述")
private String describes;
/**
* 创建时间
*/
@ApiModelProperty(value = "创建时间", hidden = true )
private Long crtTime;
/**
* 类型-评分
*/
private List<ScoreTypeVo> scoreTypeVos;
}
package com.xxfc.platform.tour.biz;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import com.github.wxiaoqi.security.admin.feign.UserFeign;
import com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO;
import com.github.wxiaoqi.security.admin.vo.AppUserVo;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.vo.PageDataVO;
import com.xxfc.platform.tour.dto.ScoreTypeDTO;
import com.xxfc.platform.tour.dto.TourUserScoreDTO;
import com.xxfc.platform.tour.dto.TourUserScoreDetailDTO;
import com.xxfc.platform.tour.dto.TourUserScoreListDTO;
import com.xxfc.platform.tour.vo.ScoreTypeVo;
import com.xxfc.platform.tour.vo.TourUserScoreVo;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import com.xxfc.platform.tour.entity.TourUserScore;
import com.xxfc.platform.tour.mapper.TourUserScoreMapper;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import javax.annotation.Resource;
import java.time.Instant;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
* 用户评分表
*
* @author libin
* @email 18178966185@163.com
* @date 2019-06-21 20:27:43
*/
@Service
@Slf4j
public class TourUserScoreBiz extends BaseBiz<TourUserScoreMapper,TourUserScore> {
@Resource
private UserFeign userFeign;
/**
* 根据商品id查询
* @param goodId
* @return
*/
public PageDataVO<TourUserScoreVo> findTourUserScorePageByGoodId(Integer goodId, Integer pageNo, Integer pageSize) {
PageDataVO<TourUserScoreVo> pageDataVO = new PageDataVO<>();
//根据模型id查找
PageDataVO<TourUserScoreListDTO> tourUserScoreDTOPageDataVO = PageDataVO.pageInfo(pageNo,pageSize,()->mapper.findyByGoodIdAndApproved(goodId,1));
List<TourUserScoreListDTO> dataVOData = tourUserScoreDTOPageDataVO.getData();
if (CollectionUtils.isEmpty(dataVOData)){
return pageDataVO;
}
if (log.isDebugEnabled()){
log.debug("根据商品id查找出的评价:【{}】",dataVOData);
}
//设置用户信息
List<Integer> userIds = dataVOData.stream().map(TourUserScoreListDTO::getUserId).distinct().collect(Collectors.toList());
List<AppUserVo> appUserVos = userFeign.getByUserIds(userIds).getData();
if (log.isDebugEnabled()){
log.debug("根据用户ids查询出用户信息:【{}】",appUserVos);
}
Map<Integer, AppUserVo> userMap = appUserVos.stream().collect(Collectors.toMap(AppUserVo::getUserid, Function.identity()));
List<TourUserScoreVo> tourUserScoreVos = dataVOData.stream().map(vehicleUserScoreListDTO -> {
TourUserScoreVo tourUserScoreVo = new TourUserScoreVo();
BeanUtils.copyProperties(vehicleUserScoreListDTO, tourUserScoreVo);
tourUserScoreVo.setUserName(userMap.get(vehicleUserScoreListDTO.getUserId()).getNickname());
tourUserScoreVo.setHeadUrl(userMap.get(vehicleUserScoreListDTO.getUserId()).getHeadimgurl());
return tourUserScoreVo;
}).sorted(Comparator.comparing(TourUserScoreVo::getCrtTime).reversed()).collect(Collectors.toList());
//组装数据
pageDataVO.setPageNum(tourUserScoreDTOPageDataVO.getPageNum());
pageDataVO.setPageSize(tourUserScoreDTOPageDataVO.getPageSize());
pageDataVO.setTotalCount(tourUserScoreDTOPageDataVO.getTotalCount());
pageDataVO.setTotalPage(tourUserScoreDTOPageDataVO.getTotalPage());
pageDataVO.setData(tourUserScoreVos);
return pageDataVO;
}
/**
* 保存评分
* @param tourUserScoreDTO
* @return
*/
public int saveTourUserScore(TourUserScoreDTO tourUserScoreDTO, AppUserDTO appUserDTO) {
if (log.isDebugEnabled()){
log.debug("用户:【{}】,评分的数据:【{}】",appUserDTO.getNickname(),tourUserScoreDTO);
}
tourUserScoreDTO.setCrtTime(Instant.now().toEpochMilli());
List<ScoreTypeDTO> scoretype = tourUserScoreDTO.getScoretype();
int avgScore =0;
if (CollectionUtils.isNotEmpty(scoretype)) {
//评分明细
tourUserScoreDTO.setScores(JSONObject.toJSONString(scoretype));
//计算平均分值
double avgScored = scoretype.stream().mapToInt(ScoreTypeDTO::getScore).average().getAsDouble();
avgScore = Long.valueOf(Math.round(avgScored)).intValue();
//更改商品的评分
/* if (0 != avgScore) {
tourGoodBiz.updateScoreByModelIdAndavgScore(tourUserScoreDTO.getGoodId(), avgScore);
}*/
}
TourUserScore trourUserScore = new TourUserScore();
BeanUtils.copyProperties(tourUserScoreDTO,trourUserScore);
trourUserScore.setAveScore(avgScore);
trourUserScore.setUserId(appUserDTO.getUserid());
trourUserScore.setUpdTime(Instant.now().toEpochMilli());
return mapper.insertSelective(trourUserScore);
}
/**
* 根据订单id查询订单评价
* @param orderId
* @return
*/
public TourUserScoreVo findTourUserScoreDetailByOrderId(Integer orderId) {
TourUserScoreVo toureUserScoreVo = new TourUserScoreVo();
//根据订单id查询
TourUserScoreDetailDTO tourUserScoreDetailDTO = mapper.findTourUserScoreDetailByOrderId(orderId);
if (log.isDebugEnabled()){
log.debug("根据订单id:【{}】查询到的订单评价内容:【{}】",orderId,tourUserScoreDetailDTO);
}
BeanUtils.copyProperties(tourUserScoreDetailDTO,toureUserScoreVo);
//评分明细数据转换
String scores = tourUserScoreDetailDTO.getScores();
if (StringUtils.isNotEmpty(scores)){
List<ScoreTypeVo> typeVos = JSONObject.parseObject(scores, new TypeReference<List<ScoreTypeVo>>() {});
toureUserScoreVo.setScoreTypeVos(typeVos);
}
//根据用户id查询用户信息
ObjectRestResponse<List<AppUserVo>> appuserResponse = userFeign.getByUserIds(Arrays.asList(tourUserScoreDetailDTO.getUserId()));
if (log.isDebugEnabled()){
log.debug("根据用户id:【{}】查询到的用户信息:【{}】",tourUserScoreDetailDTO.getUserId(),appuserResponse.getData());
}
AppUserVo appUserVo = appuserResponse.getData().get(0);
toureUserScoreVo.setUserName(appUserVo.getNickname());
toureUserScoreVo.setHeadUrl(appUserVo.getHeadimgurl());
return toureUserScoreVo;
}
}
\ No newline at end of file
package com.xxfc.platform.tour.mapper;
import com.xxfc.platform.tour.dto.TourUserScoreDetailDTO;
import com.xxfc.platform.tour.dto.TourUserScoreListDTO;
import com.xxfc.platform.tour.entity.TourUserScore;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import tk.mybatis.mapper.common.Mapper;
import java.util.List;
/**
* 用户评分表
*
* @author libin
* @email 18178966185@163.com
* @date 2019-06-21 20:27:43
*/
public interface TourUserScoreMapper extends Mapper<TourUserScore> {
/**
* 根据审核状态和车型id查询评论
* @param goodId
* @param status
* @return
*/
@Select("select `user_id` as `userId`,`comment` as `comment`,`ave_score` as `aveScore`,`is_anony` as `isAnony`,`imgs` as `imgs`,`crt_time` as `crtTime` from `tour_user_score` where `model_id`=#{goodId}")
List<TourUserScoreListDTO> findyByGoodIdAndApproved(@Param("goodId") Integer goodId, @Param("status") Integer status);
/**
* 根据订单查询评价
* @param orderId
* @return
*/
TourUserScoreDetailDTO findTourUserScoreDetailByOrderId(Integer orderId);
}
package com.xxfc.platform.tour.rest;
import com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO;
import com.github.wxiaoqi.security.common.annotation.BeanValid;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.rest.BaseController;
import com.github.wxiaoqi.security.common.vo.PageDataVO;
import com.xxfc.platform.tour.biz.TourUserScoreBiz;
import com.xxfc.platform.tour.dto.TourUserScoreDTO;
import com.xxfc.platform.tour.entity.TourUserScore;
import com.xxfc.platform.tour.vo.TourUserScoreVo;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("tourUserScore")
public class TourUserScoreController extends BaseController<TourUserScoreBiz,TourUserScore> {
/**
* 保存评论
* @param tourUserScoreDTO
* @param appUserDTO
* @return
*/
@PostMapping("/score")
public ObjectRestResponse<Void> saveTourUserScore(@RequestBody @BeanValid TourUserScoreDTO tourUserScoreDTO, AppUserDTO appUserDTO){
int effectRows = getBaseBiz().saveTourUserScore(tourUserScoreDTO,appUserDTO);
if (effectRows>0){
return ObjectRestResponse.succ();
}
return ObjectRestResponse.createDefaultFail();
}
/**
* 根据车型查询评论列表 根据评分时间排序
*
* @param modelId
* @param pageNo
* @param pageSize
* @return
*/
@GetMapping("/app/unauth/scores")
public ObjectRestResponse<PageDataVO<TourUserScoreVo>> findVehicleUserScorePageByModelId(@RequestParam("modelId") Integer modelId,
@RequestParam(value = "pageNo",required = false,defaultValue = "1")Integer pageNo,
@RequestParam(value = "pageSize",required = false,defaultValue = "10") Integer pageSize) {
PageDataVO<TourUserScoreVo> pageDataVO = getBaseBiz().findTourUserScorePageByGoodId(modelId,pageNo,pageSize);
return ObjectRestResponse.succ(pageDataVO);
}
/**
* 根据订单id查询评价详情
* @param orderId
* @return
*/
@GetMapping("/score/order/{orderId}")
public ObjectRestResponse findVehicleUserScoreDetailByOrderId(@PathVariable("orderId") Integer orderId){
TourUserScoreVo vehicleUserScoreVo = getBaseBiz().findTourUserScoreDetailByOrderId(orderId);
return ObjectRestResponse.succ(vehicleUserScoreVo);
}
}
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xxfc.platform.tour.mapper.TourUserScoreMapper">
<!-- 可根据自己的需求,是否要使用 -->
<resultMap type="com.xxfc.platform.tour.entity.TourUserScore" id="tourUserScoreMap">
<result property="id" column="id"/>
<result property="userId" column="user_id"/>
<result property="orderId" column="order_id"/>
<result property="modelId" column="model_id"/>
<result property="type" column="type"/>
<result property="aveScore" column="ave_score"/>
<result property="scores" column="scores"/>
<result property="isAnony" column="is_anony"/>
<result property="comment" column="comment"/>
<result property="imgs" column="imgs"/>
<result property="status" column="status"/>
<result property="crtTime" column="crt_time"/>
<result property="updTime" column="upd_time"/>
<result property="isDel" column="is_del"/>
</resultMap>
<select id="findTourUserScoreDetailByOrderId"
resultType="com.xxfc.platform.tour.dto.TourUserScoreDetailDTO">
SELECT tus.user_id as `userId`,tus.ave_score as `aveScore`,tus.comment as `comment`, tus.imgs as `imgs`,tus.crt_time as `crtTime`,tus.scores as `scores`,tg.name as `name`,tg.describes as `describes`,tg.cover as `cover`
FROM `tour_user_score` as `tus` left JOIN `tour_good` as `tg` on tus.model_id=tg.id WHERE tus.order_id=#{orderId} ;
</select>
</mapper>
......@@ -24,7 +24,7 @@ public interface VehicleUserScoreMapper extends Mapper<VehicleUserScore> {
* @param status
* @return
*/
@Select("select `user_id` as `userId`,`comment` as `comment`,`ave_score` as `aveScore`,`is_anony` as `isAnony`,`imgs` as `imgs`,`crt_time` as `crtTime` from `vehicle_user_score` where `model_id`=#{modelId} and `status`=#{status}")
@Select("select `user_id` as `userId`,`comment` as `comment`,`ave_score` as `aveScore`,`is_anony` as `isAnony`,`imgs` as `imgs`,`crt_time` as `crtTime` from `vehicle_user_score` where `model_id`=#{modelId}")
List<VehicleUserScoreListDTO> findyByModelIdAndApproved(@Param("modelId") Integer modelId, @Param("status") Integer status);
/**
......
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