Commit 6cda71d8 authored by jiaorz's avatar jiaorz

Merge branch 'base-modify' of http://113.105.137.151:22280/youjj/cloud-platform into base-modify

# Conflicts:
#	ace-modules/ace-admin-api/src/main/java/com/github/wxiaoqi/security/admin/feign/UserFeign.java
#	xx-order/xx-order-api/src/main/java/com/xxfc/platform/order/entity/BaseOrder.java
#	xx-order/xx-order-server/src/main/java/com/xxfc/platform/order/rest/BaseOrderController.java
parents db37bd1e 5befbd76
......@@ -7,3 +7,4 @@ target/
.settings/
.classpath
ace-modules/ace-tool/src/main/resources/application-dev.yml
src/main/test/**
\ No newline at end of file
......@@ -4,6 +4,8 @@ package com.github.wxiaoqi.security.common.constant;
* Created by ace on 2017/8/29.
*/
public class CommonConstants {
public static final int SYS_TRUE = 1;
public static final int SYS_FALSE = 0;
public final static String RESOURCE_TYPE_MENU = "menu";
public final static String RESOURCE_TYPE_BTN = "button";
// 用户token异常
......
......@@ -9,7 +9,7 @@ import org.springframework.web.bind.annotation.RestControllerAdvice;
@RestControllerAdvice("com.xxfc.platform")
public class PlatformExceptionHandler {
@ExceptionHandler(value = {BaseException.class,Exception.class})
@ExceptionHandler(value = {BaseException.class})
public BaseResponse baseExceptionHandler(Exception e) {
if (e instanceof BaseException){
BaseException be = (BaseException) e;
......
......@@ -35,4 +35,4 @@ APP_TRADE_TYPE=APP
#支付回调
weixinHost=xxtest.upyuns.com
#证书存放目录
APICLIENT_CERT=D:\\server\\cert\\apiclient_cert.p12
APICLIENT_CERT=D:\\cert\\1514583081_20181017_cert.p12
......@@ -17,11 +17,15 @@ import com.github.wxiaoqi.security.common.msg.BaseResponse;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.rest.BaseController;
import com.github.wxiaoqi.security.common.util.process.ResultCode;
import com.github.wxiaoqi.security.common.util.process.SystemConfig;
import io.swagger.models.auth.In;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* ${DESCRIPTION}
......@@ -69,4 +73,23 @@ public class PublicController {
}
return new ObjectRestResponse<AppUserDetail>().rel(true).data(user);
}
//批量获取用户信息
@RequestMapping(value = "/app/userinfo-by-id", method = RequestMethod.GET)
public @ResponseBody
Map<Integer,Object> userDetailById(List<Integer> userids) throws Exception {
Map<Integer,Object> map=new HashMap<>();
for (Integer userid:userids) {
AppUserDetail user = detailBiz.getUserByUserid(userid);
if (user == null) {
user=new AppUserDetail();
user.setHeadimgurl(SystemConfig.USER_HEADER_URL_DEFAULT);
}
map.put(userid,user);
}
return map;
}
}
......@@ -29,10 +29,10 @@ public class CampsiteShopCarousel implements Serializable {
private Integer id;
/**
* 商家id
* 营地id
*/
@Column(name = "shop_id")
@ApiModelProperty(value = "商家id")
@ApiModelProperty(value = "营地id")
private Integer shopId;
/**
......
......@@ -9,7 +9,7 @@ import lombok.Data;
/**
* 店铺类型表
* 店铺与类型
*
* @author libin
* @email 18178966185@163.com
......
......@@ -196,6 +196,14 @@ public class BaseOrder implements Serializable {
@ApiModelProperty(value = "是否有优惠")
private Long hasDiscount;
/**
* 是否已支付
*/
@Column(name = "has_pay")
@ApiModelProperty(value = "是否已支付")
private Integer hasPay;
@Transient
private String username;
......
package com.xxfc.platform.order.entity;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.*;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* 订单退款记录表
*
* @author zjw
* @email nishijjo@qq.com
* @date 2019-06-18 11:08:09
*/
@Data
@Table(name = "order_refund")
public class OrderRefund implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键
*/
@Id
@GeneratedValue(generator = "JDBC")
@ApiModelProperty("主键")
private Integer id;
/**
* 订单id
*/
@Column(name = "order_id")
@ApiModelProperty(value = "订单id")
private Integer orderId;
/**
* 退款对应的流水号
*/
@Column(name = "trade_no")
@ApiModelProperty(value = "退款对应的流水号")
private Integer tradeNo;
/**
* 退款时间
*/
@Column(name = "refund_time")
@ApiModelProperty(value = "退款时间")
private Long refundTime;
/**
* 退款类型 1--订单款;2--押金
*/
@Column(name = "refund_type")
@ApiModelProperty(value = "退款类型 1--订单款;2--押金")
private Integer refundType;
/**
* 退款状态 0--失败;1--成功
*/
@Column(name = "refund_status")
@ApiModelProperty(value = "退款状态 0--失败;1--成功")
private Integer refundStatus;
/**
* 退款金额
*/
@Column(name = "refund_amount")
@ApiModelProperty(value = "退款金额")
private Integer refundAmount;
/**
* 退款说明
*/
@Column(name = "refund_desc")
@ApiModelProperty(value = "退款说明")
private String refundDesc;
/**
* 创建时间
*/
@Column(name = "crt_time")
@ApiModelProperty(value = "创建时间", hidden = true )
private Long crtTime;
}
......@@ -50,11 +50,6 @@ public class AddRentVehicleDTO{
@ApiModelProperty(value = "还车地点")
private String endAddr;
//费用详情
@Column(name = "cost_detail")
@ApiModelProperty(value = "费用详情")
private String costDetail;
//取车城市编号
@Column(name = "start_city")
@ApiModelProperty(value = "取车城市编号")
......
......@@ -17,6 +17,8 @@ public class RentVehiclePriceVO extends OrderPriceVO{
BigDecimal deposit;
@ApiModelProperty(value = "天数")
Integer dayNum;
@ApiModelProperty(value = "车辆天数")
Integer vehicleDayNum;
@ApiModelProperty(value = "车辆个数")
Integer vehicleNum;
@ApiModelProperty(value = "司机个数")
......
......@@ -6,15 +6,23 @@ import com.github.wxiaoqi.security.common.util.process.ResultCode;
import com.xxfc.platform.order.contant.enumerate.OrderStatusEnum;
import com.xxfc.platform.order.contant.enumerate.OrderTypeEnum;
import com.xxfc.platform.order.entity.BaseOrder;
import com.xxfc.platform.order.entity.OrderRefund;
import com.xxfc.platform.order.entity.OrderRentVehicleDetail;
import com.xxfc.platform.order.mapper.BaseOrderMapper;
import com.xxfc.platform.order.pojo.order.OrderPageVO;
import com.xxfc.platform.universal.feign.ThirdFeign;
import com.xxfc.platform.universal.vo.OrderRefundVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import static com.github.wxiaoqi.security.common.constant.CommonConstants.SYS_TRUE;
/**
*
*
......@@ -24,6 +32,16 @@ import java.util.Map;
*/
@Service
public class BaseOrderBiz extends BaseBiz<BaseOrderMapper,BaseOrder> {
@Autowired
OrderRentVehicleBiz orderRentVehicleBiz;
@Autowired
OrderRefundBiz orderRefundBiz;
@Autowired
ThirdFeign thirdFeign;
public List<OrderPageVO> pageByParm(Map<String, Object> paramMap){
return mapper.pageByParm(paramMap);
}
......@@ -51,6 +69,32 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper,BaseOrder> {
setStatus(OrderStatusEnum.ORDER_CANCEL.getCode());
setCancelReason(baseOrder.getCancelReason());
}});
//触发退款流程
//判断是否已支付
if(baseOrder.getHasPay().equals(SYS_TRUE)) {
//判断订单类型
if(OrderTypeEnum.RentVehicle.getCode().equals(baseOrder.getType())) {
OrderRentVehicleDetail orvd = orderRentVehicleBiz.selectOne(new OrderRentVehicleDetail(){{
setOrderId(baseOrder.getId());
}});
//计算退款金额
// 1、押金 + 租金(规则扣除)
BigDecimal refundAmont = orvd.getDeposit().add(baseOrder.getGoodsAmount());
thirdFeign.refund(new OrderRefundVo(){{
setAmount(baseOrder.getRealAmount().multiply(new BigDecimal("100")).intValue());
setRefundAmount(refundAmont.multiply(new BigDecimal("100")).intValue());
setOrderNo(baseOrder.getNo());
setRefundDesc("取消订单退款:"+ refundAmont.toString());
}});
//创建订单退款记录
}else if (OrderTypeEnum.TOUR.getCode().equals(baseOrder.getType())) {
}
}
}else {
throw new BaseException(ResultCode.FAILED_CODE);
}
......
package com.xxfc.platform.order.biz;
import org.springframework.stereotype.Service;
import com.xxfc.platform.order.entity.OrderRefund;
import com.xxfc.platform.order.mapper.OrderRefundMapper;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
/**
* 订单退款记录表
*
* @author zjw
* @email nishijjo@qq.com
* @date 2019-06-18 11:08:09
*/
@Service
public class OrderRefundBiz extends BaseBiz<OrderRefundMapper,OrderRefund> {
}
\ No newline at end of file
package com.xxfc.platform.order.mapper;
import com.xxfc.platform.order.entity.OrderRefund;
import tk.mybatis.mapper.common.Mapper;
/**
* 订单退款记录表
*
* @author zjw
* @email nishijjo@qq.com
* @date 2019-06-18 11:08:09
*/
public interface OrderRefundMapper extends Mapper<OrderRefund> {
}
......@@ -5,7 +5,6 @@ import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import com.github.wxiaoqi.security.admin.entity.AppUserDetail;
import com.github.wxiaoqi.security.admin.feign.UserFeign;
import com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO;
import com.github.wxiaoqi.security.admin.feign.dto.UserDTO;
import com.github.wxiaoqi.security.auth.client.annotation.IgnoreClientToken;
import com.github.wxiaoqi.security.auth.client.annotation.IgnoreUserToken;
......@@ -45,9 +44,10 @@ import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import static com.github.wxiaoqi.security.common.constant.CommonConstants.SYS_TRUE;
@Controller
@RequestMapping("baseOrder")
@Api(value = "订单", tags = {"订单"})
......@@ -316,26 +316,24 @@ public class BaseOrderController extends CommonBaseController {
baseOrder.setOutTradeNo(dto.getTradeNo());
baseOrderBiz.updateById(baseOrder);
} else {
log.error(" exception notifyUrl : " + JSONUtil.toJsonStr(dto));
}
if (OrderStatusEnum.ORDER_UNPAY.getCode().equals(baseOrder.getStatus())) {
BaseOrder updateOrder = new BaseOrder() {{
setNo(dto.getOrderNo());
setStatus(OrderStatusEnum.ORDER_TOSTART.getCode());
setOutTradeNo(dto.getTradeNo());
setHasPay(SYS_TRUE);
setPayTime(System.currentTimeMillis());
}};
baseOrderBiz.updateSelectiveById(updateOrder);
} else {
log.error(" exception notifyUrl : " + JSONUtil.toJsonStr(dto));
}
return new ObjectRestResponse().rel(true);
}
public AppUserDTO getUserDetail() {
String token = request.getHeader("Authorization");
if (StringUtils.isBlank(token)) {
return null;
}
ObjectRestResponse<AppUserDTO> objectRestResponse = userFeign.userDetailByToken(token);
if (objectRestResponse.getData() == null) {
return null;
}else{
log.error(" exception notifyUrl : " + JSONUtil.toJsonStr(dto));
}
return objectRestResponse.getData();
return new ObjectRestResponse().rel(true);
}
/**
* 订单查询类
*/
......@@ -393,5 +391,4 @@ public class BaseOrderController extends CommonBaseController {
@ApiModelProperty(value = "支付订单(流水)号")
private String tradeNo;
}
}
\ No newline at end of file
}
package com.xxfc.platform.order.rest;
import com.github.wxiaoqi.security.common.rest.BaseController;
import com.xxfc.platform.order.biz.OrderRefundBiz;
import com.xxfc.platform.order.entity.OrderRefund;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("orderRefund")
public class OrderRefundController extends BaseController<OrderRefundBiz,OrderRefund> {
}
\ No newline at end of file
......@@ -78,7 +78,7 @@ public abstract class AbstractOrderHandle<Biz extends BaseBiz, Detail extends Or
detail.setOrderId(detail.getOrder().getId());
detailBiz.insertSelective(detail);
detail.getOrder().setDetailId(detail.getId());
baseOrderBiz.updateById(detail.getOrder());
baseOrderBiz.updateSelectiveById(detail.getOrder());
}
// /**
......
......@@ -97,17 +97,17 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl
//当前用户
AppUserDTO dto = detail.getAppUserDTO();
// //如果用户存在,并且为会员,并且车辆有优惠价
// if(null != dto && detail.getRentFreeDay() > 0 && dto.getRentFreeDays() > 0) {
// if(detail.getDayNum() > dto.getRentFreeDays()) {
// freeDayNum = dto.getRentFreeDays();
// }else {
// freeDayNum = detail.getDayNum();
// }
// vehicleDayNum = detail.getDayNum() - freeDayNum;
// }else {
// vehicleDayNum = detail.getDayNum();
// }
//如果用户存在,并且为会员,并且车辆有优惠价
if(null != dto && detail.getRentFreeDay() > 0 && dto.getRentFreeDays() > 0) {
if(detail.getDayNum() > dto.getRentFreeDays()) {
freeDayNum = dto.getRentFreeDays();
}else {
freeDayNum = detail.getDayNum();
}
vehicleDayNum = detail.getDayNum() - freeDayNum;
}else {
vehicleDayNum = detail.getDayNum();
}
//计算价格
//计算车辆费用
......@@ -130,7 +130,7 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl
}else {
modelAmount = vehicleModel.getPrice();
}
vehicleAmount = vehicleAmount.add(modelAmount.multiply(BigDecimal.valueOf(detail.getDayNum())));
vehicleAmount = vehicleAmount.add(modelAmount.multiply(BigDecimal.valueOf(vehicleDayNum)));
if(DRIVER_TYPE_COMPANY.equals(detail.getDriverType())) {
//计算司机费用
driverAmount = driverAmount.add(DRIVER_PRICE.multiply(BigDecimal.valueOf(detail.getDayNum())));
......@@ -160,11 +160,12 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl
rvp.setDamageSafePrice(DAMAGE_SAFE);
rvp.setModelName(vehicleModel.getName());
rvp.setDayNum(detail.getDayNum());
rvp.setVehicleDayNum(vehicleDayNum);
rvp.setVehicleNum(1);
rvp.setDriverNum(1);
//设置收费明细
costDetail(rvp, handlechildren(detail));
costDetail(rvp, handlechildren(detail, vehicleDayNum));
return rvp;
}
......@@ -186,8 +187,11 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl
return modelAmount;
}
private String handlechildren(RentVehicleBO detail) {
StringBuffer childrenStr = new StringBuffer("${tem_0101}");
private String handlechildren(RentVehicleBO detail, Integer vehicleDayNum) {
StringBuffer childrenStr = new StringBuffer("");
if(vehicleDayNum > 0) {
childrenStr.append(",${tem_0101}");
}
if(DRIVER_TYPE_COMPANY.equals(detail.getDriverType())) {
childrenStr.append(",${tem_0102}");
}
......@@ -195,6 +199,9 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl
if(DRIVER_TYPE_DAMAGE_SAFE.equals(detail.getDamageSafe())) {
childrenStr.append(",${tem_0104}");
}
if(childrenStr.length() > 0){
childrenStr.deleteCharAt(1);
}
return childrenStr.toString();
}
......
......@@ -57,7 +57,7 @@ public class OrderTourService extends AbstractOrderHandle<OrderTourDetailBiz, To
VehicleFeign vehicleFeign;
private static Integer IS_CHILD = 0;
private static Integer IS_CHILD = 1;
// private static BigDecimal DRIVER_PRICE = new BigDecimal("600.00");
// private static BigDecimal DAMAGE_SAFE = new BigDecimal("100.00"); //车损免赔
......@@ -113,11 +113,11 @@ public class OrderTourService extends AbstractOrderHandle<OrderTourDetailBiz, To
bo.setStartCityName(sysRegion.getName());
//设置verificationId 核销id
bo.setVerificationId(tourFeign.entityList(BeanUtil.beanToMap(new TourGoodVerification(){{
setSpeId(bo.getSpePriceId());
setGoodId(bo.getGoodId());
setSiteId(bo.getSiteId());
}})).getData().get(0).getId());
// bo.setVerificationId(tourFeign.entityList(BeanUtil.beanToMap(new TourGoodVerification(){{
// setSpeId(bo.getSpePriceId());
// setGoodId(bo.getGoodId());
// setSiteId(bo.getSiteId());
// }})).getData().get(0).getId());
//扣減庫存
tourFeign.stock(bo.getSpePriceId(), bo.getTotalNumber());
......
<?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.order.mapper.OrderRefundMapper">
<!-- 可根据自己的需求,是否要使用 -->
<resultMap type="com.xxfc.platform.order.entity.OrderRefund" id="orderRefundMap">
<result property="id" column="id"/>
<result property="orderId" column="order_id"/>
<result property="tradeNo" column="trade_no"/>
<result property="refundTime" column="refund_time"/>
<result property="refundType" column="refund_type"/>
<result property="refundStatus" column="refund_status"/>
<result property="refundAmount" column="refund_amount"/>
<result property="refundDesc" column="refund_desc"/>
<result property="crtTime" column="crt_time"/>
</resultMap>
</mapper>
\ No newline at end of file
......@@ -72,6 +72,11 @@ public class TourGoodDTO {
@ApiModelProperty(value = "状态:0-未发布;1-上架;2-下架")
private Integer status;
//是否省外;0-省内;1-省外
@ApiModelProperty(value = "是否省外;0-省内;1-省外")
private Integer isOutside;
//是否推荐:0-未推荐;1-已推荐
@ApiModelProperty(value = "是否推荐:0-未推荐;1-已推荐")
private Integer recommend;
......
package com.xxfc.platform.tour.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author libin
......@@ -10,6 +13,9 @@ import lombok.Data;
* @data 2019/6/12 13:50
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class TourTagBannerDTO {
......
......@@ -91,6 +91,11 @@ public class TourGood implements Serializable {
@ApiModelProperty(value = "状态:0-未发布;1-上架;2-下架")
private Integer status;
//是否省外;0-省内;1-省外
@Column(name = "is_outside")
@ApiModelProperty(value = "是否省外;0-省内;1-省外")
private Integer isOutside;
//创建时间
@Column(name = "crt_time")
@ApiModelProperty(value = "创建时间", hidden = true )
......
......@@ -84,6 +84,10 @@ public class TourGoodDetailVo {
@ApiModelProperty(value = "更新时间", hidden = true )
private Long updTime;
//是否省外;0-省内;1-省外
@ApiModelProperty(value = "是否省外;0-省内;1-省外")
private Integer isOutside;
//是否推荐:0-未推荐;1-已推荐
@ApiModelProperty(value = "是否推荐:0-未推荐;1-已推荐")
private Integer recommend;
......
......@@ -2,11 +2,6 @@ package com.xxfc.platform.tour.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import java.io.Serializable;
import java.math.BigDecimal;
......@@ -74,6 +69,10 @@ public class TourGoodVo implements Serializable {
@ApiModelProperty(value = "状态:0-未发布;1-上架;2-下架")
private Integer status;
//是否省外;0-省内;1-省外
@ApiModelProperty(value = "是否省外;0-省内;1-省外")
private Integer isOutside;
//天数
@ApiModelProperty(value = "天数")
private Integer number;
......
......@@ -4,6 +4,7 @@ import com.github.wxiaoqi.security.admin.feign.dto.UserDTO;
import com.github.wxiaoqi.security.common.vo.PageDataVO;
import com.xxfc.platform.tour.dto.TourTagBannerDTO;
import com.xxfc.platform.tour.mapper.TourTagBannerMapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
......@@ -13,9 +14,7 @@ import com.github.wxiaoqi.security.common.biz.BaseBiz;
import org.springframework.transaction.annotation.Transactional;
import java.time.Instant;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.*;
import java.util.stream.Collectors;
/**
......@@ -26,6 +25,7 @@ import java.util.stream.Collectors;
* @date 2019-06-06 11:41:51
*/
@Service
@Slf4j
public class TourTagBannerBiz extends BaseBiz<TourTagBannerMapper,TourTagBanner> {
public List<TourTagBanner> findById(long tid) {
......@@ -43,7 +43,6 @@ public class TourTagBannerBiz extends BaseBiz<TourTagBannerMapper,TourTagBanner>
* @return
*/
public PageDataVO<TourTagBanner> findTourTagBannerWithPage(Integer pageNo,Integer pageSize){
return PageDataVO.pageInfo(pageNo,pageSize,()->mapper.findAllByState(0));
}
......@@ -66,6 +65,9 @@ public class TourTagBannerBiz extends BaseBiz<TourTagBannerMapper,TourTagBanner>
*/
@Transactional(rollbackFor = Exception.class)
public int save(TourTagBannerDTO tourTagBannerDTO, UserDTO userDTO) {
if (log.isDebugEnabled()){
log.debug("保存的轮播图信息:[{}]",tourTagBannerDTO);
}
TourTagBanner tourTagBanner = new TourTagBanner();
BeanUtils.copyProperties(tourTagBannerDTO,tourTagBanner);
//设置相关信息
......@@ -75,6 +77,24 @@ public class TourTagBannerBiz extends BaseBiz<TourTagBannerMapper,TourTagBanner>
return mapper.insert(tourTagBanner);
}
/**
* 批量保存
* @param tourTagBannerDTOS
* @param userDTO
* @return
*/
public int saveBatch(List<TourTagBannerDTO> tourTagBannerDTOS,UserDTO userDTO){
if (log.isDebugEnabled()){
log.debug("批量保存的轮播图信息:[{}]",tourTagBannerDTOS);
}
tourTagBannerDTOS.stream().peek(tourTagBannerDTO -> {
tourTagBannerDTO.setCrtTime(Instant.now().toEpochMilli());
tourTagBannerDTO.setCrtName(userDTO.getUsername());
tourTagBannerDTO.setIsDel(0);
}).count();
return mapper.insertBatch(tourTagBannerDTOS);
}
/**
* 根据标签id查询
* @param tagId
......@@ -116,9 +136,10 @@ public class TourTagBannerBiz extends BaseBiz<TourTagBannerMapper,TourTagBanner>
mapper.updateTourTagBannerStatusByTagId(tourTagBannerDTOS.get(0).getTagId(),1,Instant.now().toEpochMilli());
}
}
tourTagBannerDTOS.stream().filter(tourTagBannerDTO -> Objects.isNull(tourTagBannerDTO.getId())).peek(tourTagBannerDTO -> {
save(tourTagBannerDTO,userDTO);
}).count();
List<TourTagBannerDTO> tagBannerDTOS = tourTagBannerDTOS.stream().filter(tourTagBannerDTO -> Objects.isNull(tourTagBannerDTO.getId())).collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(tagBannerDTOS)){
saveBatch(tagBannerDTOS,userDTO);
}
}
/**
......@@ -128,8 +149,24 @@ public class TourTagBannerBiz extends BaseBiz<TourTagBannerMapper,TourTagBanner>
*/
@Transactional(rollbackFor = Exception.class)
public int updateTourBanner(TourTagBannerDTO tourTagBannerDTO,UserDTO userDTO){
if (log.isDebugEnabled()){
log.debug("更改的banner信息:[{}]",tourTagBannerDTO);
}
tourTagBannerDTO.setUpdName(userDTO.getUsername());
tourTagBannerDTO.setUpdTime(Instant.now().toEpochMilli());
return mapper.updateTourTagBanner(tourTagBannerDTO);
}
/**
* 根据标签ids查询
* @param tagIds
* @return
*/
public Map<Integer, List<TourTagBannerDTO>> findTourTagBannersByTagIds(List<Integer> tagIds) {
List<TourTagBannerDTO> tourTagBannerDTOS = mapper.findByTagIdsAndStatus(tagIds,0);
if (log.isDebugEnabled()){
log.debug("根据标签集合id查询出banner信息:[{}]",tourTagBannerDTOS);
}
return tourTagBannerDTOS.stream().collect(Collectors.groupingBy(TourTagBannerDTO::getTagId));
}
}
\ No newline at end of file
......@@ -8,8 +8,8 @@ import com.xxfc.platform.tour.dto.TourTagAndBannerDTO;
import com.xxfc.platform.tour.dto.TourTagBannerDTO;
import com.xxfc.platform.tour.dto.TourTagDTO;
import com.xxfc.platform.tour.mapper.TourTagMapper;
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.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
......@@ -23,6 +23,7 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
/**
* 旅游路线标签
......@@ -32,6 +33,7 @@ import java.util.Objects;
* @date 2019-06-06 11:41:51
*/
@Service
@Slf4j
public class TourTagBiz extends BaseBiz<TourTagMapper,TourTag> {
......@@ -74,22 +76,34 @@ public class TourTagBiz extends BaseBiz<TourTagMapper,TourTag> {
* @return
*/
public PageDataVO<TourTagAndBannerDTO> findTourTagWithPage(Integer pageNo, Integer pageSize) {
PageDataVO<TourTagAndBannerDTO> tourTagAndBannerDTOPageDataVO = new PageDataVO<>();
//根据分页条件查询出旅游标签的信息
PageDataVO<TourTag> pageDataVO = PageDataVO.pageInfo(pageNo, pageSize, () -> mapper.findAllByIsDel(TourTag.builder().isDel(0).build()));
List<TourTag> tourTags = pageDataVO.getData();
if (log.isDebugEnabled()){
log.debug("旅游分页查询标签:[{}]",tourTags);
}
if (CollectionUtils.isEmpty(tourTags)){
return tourTagAndBannerDTOPageDataVO;
}
List<TourTagAndBannerDTO> tourTagAndBannerDTOS = new ArrayList<>();
//根据标签ids查询banner
List<Integer> tagIds = tourTags.stream().map(TourTag::getId).collect(Collectors.toList());
Map<Integer, List<TourTagBannerDTO>> tourTagBannerMap = tourTagBannerBiz.findTourTagBannersByTagIds(tagIds);
tourTags.forEach(tourTag -> {
});
for (TourTag tourTag:tourTags){
//vo转换
TourTagDTO tourTagDTO = new TourTagDTO();
BeanUtils.copyProperties(tourTag,tourTagDTO);
//根据旅游标签id查询出标签banner相关信息
List<TourTagBannerDTO> tagBannerDTOS = tourTagBannerBiz.findTourTagBannersByTagId(tourTag.getId());
List<TourTagBannerDTO> tagBannerDTOS = tourTagBannerMap.get(tourTag.getId());
//banner 数量
tourTagDTO.setBannerNums(tagBannerDTOS.size());
tourTagDTO.setBannerNums(tagBannerDTOS==null?0:tagBannerDTOS.size());
tourTagAndBannerDTOS.add(TourTagAndBannerDTO.builder().tourTagDTO(tourTagDTO).tourTagBannerDTOS(tagBannerDTOS).build());
});
}
//组装数据
PageDataVO<TourTagAndBannerDTO> tourTagAndBannerDTOPageDataVO = new PageDataVO<>();
tourTagAndBannerDTOPageDataVO.setData(tourTagAndBannerDTOS);
tourTagAndBannerDTOPageDataVO.setPageNum(pageDataVO.getPageNum());
tourTagAndBannerDTOPageDataVO.setPageSize(pageDataVO.getPageSize());
......@@ -107,10 +121,16 @@ public class TourTagBiz extends BaseBiz<TourTagMapper,TourTag> {
public TourTagAndBannerDTO findTourTagById(Integer tagId){
//根据旅游标签id查询出标签信息
TourTag tourTag = mapper.findById(tagId);
if (log.isDebugEnabled()){
log.debug("根据标签id=[{}]查询出标签信息:[{}]",tagId,tourTag);
}
TourTagDTO tourTagDTO = new TourTagDTO();
BeanUtils.copyProperties(tourTag,tourTagDTO);
//根据旅游标签id查询出标签对应的轮播图信息
List<TourTagBannerDTO> tourTagBannerDTOS = tourTagBannerBiz.findTourTagBannersByTagId(tagId);
if (log.isDebugEnabled()){
log.debug("根据标签id=[{}],查询出轮播图信息:[{}]",tagId,tourTagBannerDTOS);
}
TourTagAndBannerDTO tourTagAndBannerDTO = new TourTagAndBannerDTO();
//组装数据
tourTagAndBannerDTO.setTourTagDTO(tourTagDTO);
......@@ -125,6 +145,9 @@ public class TourTagBiz extends BaseBiz<TourTagMapper,TourTag> {
*/
@Transactional(rollbackFor = Exception.class)
public int saveTourTag(TourTagAndBannerDTO tourTagAndBannerDTO, UserDTO userDTO) {
if (log.isDebugEnabled()){
log.debug("传入保存的标签信息:[{}]",tourTagAndBannerDTO);
}
TourTagDTO tourTagDTO = tourTagAndBannerDTO.getTourTagDTO();
List<TourTagBannerDTO> tourTagBannerDTOS = tourTagAndBannerDTO.getTourTagBannerDTOS();
//设置标签创建的相关信息
......@@ -137,10 +160,8 @@ public class TourTagBiz extends BaseBiz<TourTagMapper,TourTag> {
return effectRows;
}
//保存标签轮播图
tourTagBannerDTOS.forEach(tourTagBannerDTO -> {
tourTagBannerDTO.setTagId(tourTagDTO.getId());
tourTagBannerBiz.save(tourTagBannerDTO,userDTO);
});
tourTagBannerDTOS.stream().peek(tourTagBannerDTO -> tourTagBannerDTO.setTagId(tourTagDTO.getId())).count();
tourTagBannerBiz.saveBatch(tourTagBannerDTOS,userDTO);
return effectRows;
}
......@@ -169,6 +190,9 @@ public class TourTagBiz extends BaseBiz<TourTagMapper,TourTag> {
*/
@Transactional(rollbackFor = Exception.class)
public int updateTourTag(TourTagAndBannerDTO tourTagAndBannerDTO, UserDTO userDTO) {
if (log.isDebugEnabled()){
log.debug("更改的旅游标签信息:[{}]",tourTagAndBannerDTO);
}
TourTagDTO tourTagDTO = tourTagAndBannerDTO.getTourTagDTO();
//修改旅游标签信息
tourTagDTO.setUpdTime(Instant.now().toEpochMilli());
......@@ -178,6 +202,9 @@ public class TourTagBiz extends BaseBiz<TourTagMapper,TourTag> {
}
//修改标签的相关轮播图
List<TourTagBannerDTO> tourTagBannerDTOS = tourTagAndBannerDTO.getTourTagBannerDTOS();
if (log.isDebugEnabled()){
log.debug("更改标签对应的轮播图信息:[{}]",tourTagBannerDTOS);
}
tourTagBannerDTOS.stream().filter(tourTagBannerDTO -> Objects.isNull(tourTagBannerDTO.getTagId())).peek(tourTagBannerDTO -> tourTagBannerDTO.setTagId(tourTagDTO.getId())).count();
tourTagBannerBiz.updateTourBannerByBatch(tourTagBannerDTOS,userDTO);
return effrows;
......
......@@ -2,7 +2,6 @@ package com.xxfc.platform.tour.mapper;
import com.xxfc.platform.tour.dto.TourTagBannerDTO;
import com.xxfc.platform.tour.entity.TourTagBanner;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
......@@ -68,4 +67,19 @@ public interface TourTagBannerMapper extends Mapper<TourTagBanner> {
* @param status
*/
void updateTourBannerStatusByTagannerIdsAndTagId(@Param("tourTagBannerIds") List<Long> tourTagBannerIds, @Param("tagId") Integer tagId,@Param("status") Integer status);
/**
* 根据标签ids 查询
* @param tagIds
* @param status
* @return
*/
List<TourTagBannerDTO> findByTagIdsAndStatus(@Param("tagIds") List<Integer> tagIds, @Param("status") Integer status);
/**
* 批量插入
* @param tourTagBannerDTOS
* @return
*/
int insertBatch(@Param("tourTagBanners") List<TourTagBannerDTO> tourTagBannerDTOS);
}
......@@ -20,7 +20,7 @@ import org.springframework.web.bind.annotation.*;
*/
@RestController
@RequestMapping("/admin/tourBanner")
@Api(value = "banner后台接口")
@Api(value = "banner后台接口",tags = "banner后台接口")
public class TourBannerAdminController extends TourBaseController<TourBannerBiz> {
/**
......@@ -51,7 +51,7 @@ public class TourBannerAdminController extends TourBaseController<TourBannerBiz>
}
/**
* 分查询banner
* 分查询banner
* @param pageNo
* @param pageSize
* @return
......
......@@ -47,7 +47,7 @@ public class TourGoodAdminController extends BaseController<TourGoodBiz, TourGoo
@ApiOperation("后台旅游上下架")
@RequestMapping(value = "/admin/upStatus", method = RequestMethod.POST)
@RequestMapping(value = "/admin/upStatus", method = RequestMethod.GET)
public ObjectRestResponse upStatus(
@RequestParam(value = "id",defaultValue = "0")Integer id,
@RequestParam(value = "status",defaultValue = "1")Integer status) {
......
......@@ -22,7 +22,7 @@ import java.util.List;
*/
@RestController
@RequestMapping("/admin/tourTag")
@Api(value = "后台*旅游标签")
@Api(value = "后台*旅游标签",tags = "后台*旅游标签")
public class TourTagAdminController extends TourBaseController<TourTagBiz> {
/**
* 分页查询标签
......
......@@ -24,6 +24,7 @@
<result property="isMember" column="is_member"/>
<result property="stock" column="stock"/>
<result property="unit" column="unit"/>
<result property="isOutside" column="is_outside"/>
</resultMap>
<resultMap type="com.xxfc.platform.tour.vo.TourGoodVo" id="tourGoodVoMap">
......@@ -47,12 +48,13 @@
<result property="stock" column="stock"/>
<result property="unit" column="unit"/>
<result property="tagNames" column="tagNames"/>
<result property="isOutside" column="is_outside"/>
</resultMap>
<!--查询旅游路线列表-->
<select id="getGoodList" parameterType="java.util.Map" resultMap="tourGoodMap">
SELECT * from tour_good t
where 1=1
where t.is_del=1 AND t.g.status=1
<if test="params.query != null and params.query != ''">
and (t.`name` like CONCAT('%',#{params.query},'%') or t.introduce like CONCAT('%',#{params.query},'%'))
</if>
......@@ -85,6 +87,7 @@
LEFT JOIN tour_good_tag tag ON g.id=tag.good_id
LEFT JOIN tour_tag t ON tag.tag_id=t.id
<where>
g.is_del=0
<if test="params.name != null and params.name != ''">
and (g.`name` like CONCAT('%',#{params.name},'%') or g.introduce like CONCAT('%',#{params.name},'%'))
</if>
......
......@@ -16,6 +16,18 @@
<result property="isDel" column="is_del"/>
</resultMap>
<resultMap id="tourTagBannerDTOMap" type="com.xxfc.platform.tour.dto.TourTagBannerDTO">
<result property="id" column="id"/>
<result property="title" column="title"/>
<result property="cover" column="cover"/>
<result property="crtName" column="crt_name"/>
<result property="crtTime" column="crt_time"/>
<result property="updName" column="upd_name"/>
<result property="updTime" column="upd_time"/>
<result property="url" column="url"/>
<result property="isDel" column="is_del"/>
</resultMap>
<delete id="updateTourBannerStatusByTagannerIdsAndTagId">
update tour_tag_banner set `is_del`=#{status} where tag_id=#{tagId} and id not in
<foreach collection="tourTagBannerIds" item="id" index="index" open="(" close=")" separator=",">
......@@ -23,4 +35,17 @@
</foreach>
</delete>
<select id="findByTagIdsAndStatus" resultMap="tourTagBannerDTOMap">
select * from `tour_tag_banner` where `is_del`=#{status} and `tag_id` in
<foreach collection="tagIds" item="tagId" separator="," close=")" open="(">
#{tagId}
</foreach>
</select>
<insert id="insertBatch" keyProperty="id" keyColumn="id" useGeneratedKeys="true">
insert into `tour_tag_banner`(`title`,`cover`,`crt_name`,`tag_id`,`crt_time`)values
<foreach collection="tourTagBanners" item="tagbanner" separator=",">
(#{tagbanner.title},#{tagbanner.cover},#{tagbanner.crtName},#{tagbanner.tagId} ,#{tagbanner.crtTime})
</foreach>
</insert>
</mapper>
\ No newline at end of file
......@@ -24,10 +24,6 @@ public class OrderRefundVo{
@ApiModelProperty(value = "订单号")
private String orderNo;
//用户id
@ApiModelProperty(value = "用户id")
private Integer userId;
//支付金额
@ApiModelProperty(value = "支付金额")
private Integer amount;
......@@ -36,9 +32,6 @@ public class OrderRefundVo{
@ApiModelProperty(value = "退款金额")
private Integer refundAmount;
//支付接口返回的流水号
@ApiModelProperty(value = "支付接口返回的流水号")
private String serialNumber;
//退款描述
@ApiModelProperty(value = "退款描述")
......
......@@ -7,8 +7,6 @@ import java.util.HashMap;
import java.util.Map;
import java.util.Random;
import javax.net.ssl.SSLContext;
import com.github.wxiaoqi.security.common.util.process.SystemConfig;
import com.xxfc.platform.universal.weixin.util.Snowflake;
import com.xxfc.platform.universal.weixin.util.WeChatSignUtil;
import com.xxfc.platform.universal.weixin.util.XmlUtils;
import lombok.extern.slf4j.Slf4j;
......@@ -36,15 +34,15 @@ public class WxPayRefundUtils {
// private static final String pay_appId = "wx81470220f10b266e";
// private static final String pay_mchId = "1423414902";
// private static final String subMchId = "1511773781";
private static final String APICLIENT_CERT = SystemConfig.APICLIENT_CERT;
//private static final String APICLIENT_CERT = SystemConfig.APICLIENT_CERT;
// private static final String pay_partnerKey =
// "CNITR89201000CNITR89201000FUWUSH";
public static boolean refund(String pay_appId, String pay_mchId,String pay_partnerKey,
String out_trade_no,String out_refund_no, String total_fee, String refund_fee, String refund_desc) {
String out_trade_no,String out_refund_no, String total_fee, String refund_fee, String refund_desc,String apiclient_cert) {
String result = postXML(URL, genXML(pay_appId, pay_mchId,pay_partnerKey, out_trade_no,out_refund_no, total_fee,
refund_fee, refund_desc), pay_mchId);
System.out.println(result);
refund_fee, refund_desc), pay_mchId,apiclient_cert);
log.info(result);
// 判定退款操作结果是否正确
String return_msg = "<return_msg><![CDATA[OK]]></return_msg>";
String result_code = "<result_code><![CDATA[SUCCESS]]></result_code>";
......@@ -52,8 +50,8 @@ public class WxPayRefundUtils {
return result.contains(result_code) && result.contains(return_msg) && result.contains(return_code);
}
private static String postXML(String url, String xml, String pay_mchId) {
try (FileInputStream ips = new FileInputStream(new File(APICLIENT_CERT));) {
private static String postXML(String url, String xml, String pay_mchId,String apiclient_cert) {
try (FileInputStream ips = new FileInputStream(new File(apiclient_cert));) {
KeyStore keyStore = KeyStore.getInstance("PKCS12");
keyStore.load(ips, pay_mchId.toCharArray());
SSLContext sslContext = SSLContexts.custom().loadKeyMaterial(keyStore, pay_mchId.toCharArray()).build();
......
package com.xxfc.platform.universal.biz;
import com.alibaba.fastjson.JSONObject;
import com.github.wxiaoqi.security.common.util.OrderUtil;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.github.wxiaoqi.security.common.util.OrderUtil;
import com.github.wxiaoqi.security.common.util.process.ResultCode;
import com.github.wxiaoqi.security.common.util.process.SystemConfig;
import com.github.wxiaoqi.security.common.util.result.JsonResultUtil;
import com.xxfc.platform.universal.entity.OrderPay;
import com.xxfc.platform.universal.entity.OrderRefund;
import com.xxfc.platform.universal.mapper.OrderRefundMapper;
import com.xxfc.platform.universal.vo.OrderRefundVo;
......@@ -15,7 +14,11 @@ import com.xxfc.platform.universal.weixin.util.Snowflake;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import tk.mybatis.mapper.entity.Example;
import java.util.List;
/**
* 订单支付退款表
......@@ -28,6 +31,10 @@ import org.springframework.stereotype.Service;
@Slf4j
public class OrderRefundBiz extends BaseBiz<OrderRefundMapper,OrderRefund> {
@Autowired
private OrderPayBiz payBiz;
@Value("${universal.cert}")
private String APICLIENT_CERT ;
//申请退款
public JSONObject refund(OrderRefundVo orderRefundVo)throws Exception{
......@@ -35,7 +42,7 @@ public class OrderRefundBiz extends BaseBiz<OrderRefundMapper,OrderRefund> {
log.error("-----参数为空-----------");
return JsonResultUtil.createFailedResult(ResultCode.NULL_CODE, "参数为空");
}
String out_trade_no=orderRefundVo.getOrderNo();
String order_no=orderRefundVo.getOrderNo();
String appid= SystemConfig.APP_ID;
String mchId=SystemConfig.APP_PARTNER;
String partnerKey=SystemConfig.APP_PARTNER_KEY;
......@@ -43,26 +50,36 @@ public class OrderRefundBiz extends BaseBiz<OrderRefundMapper,OrderRefund> {
Integer refundAmount=orderRefundVo.getRefundAmount();
String refundDesc =StringUtils.isNotBlank(orderRefundVo.getRefundDesc())?orderRefundVo.getRefundDesc(): "审核通过,退款";
String out_refund_no = Snowflake.build() + "";
if(StringUtils.isBlank(out_trade_no)||StringUtils.isBlank(appid)||StringUtils.isBlank(mchId)||StringUtils.isBlank(partnerKey)
if(StringUtils.isBlank(order_no)||StringUtils.isBlank(appid)||StringUtils.isBlank(mchId)||StringUtils.isBlank(partnerKey)
||payAmount==null||payAmount==0||refundAmount==null||refundAmount==0){
log.error("-----参数为空-----------");
return JsonResultUtil.createFailedResult(ResultCode.NULL_CODE, "参数为空");
}
Example example =new Example(OrderPay.class);
example.createCriteria().andEqualTo("orderNo", order_no).andEqualTo("isDel",0).andEqualTo("status",1);
List<OrderPay> list=payBiz.selectByExample(example);
if(list.size()==0){
log.error("---支付回调---trade_no====="+order_no+"----订单不存在或未支付");
return JsonResultUtil.createFailedResult(ResultCode.FAILED_CODE, order_no+"订单不存在或未支付");
}
OrderPay orderPay=list.get(0);
String out_trade_no=orderPay.getTradeNo();
boolean flag=WxPayRefundUtils.refund(appid,mchId,partnerKey,out_trade_no,out_refund_no,payAmount+"",
refundAmount+"",refundDesc);
refundAmount+"",refundDesc,APICLIENT_CERT);
if(flag){
OrderRefund orderRefund= new OrderRefund();
BeanUtils.copyProperties(orderRefund,orderRefundVo);
if(StringUtils.isNotBlank(orderRefund.getRefundDesc())){
orderRefund.setRefundDesc(refundDesc);
}
orderRefund.setUserId(orderPay.getUserId());
orderRefund.setStatus(2);
orderRefund.setFinishTime(System.currentTimeMillis());
String trade_no = OrderUtil.GetOrderNumber("");
orderRefund.setRefundTradeNo(trade_no);
orderRefund.setOutRefundNo(out_refund_no);
orderRefund.setRefundTradeNo(out_refund_no);
orderRefund.setOutRefundNo(out_trade_no);
orderRefund.setSerialNumber(orderPay.getSerialNumber());
insertSelective(orderRefund);
return JsonResultUtil.createSuccessResultWithObj(trade_no);
return JsonResultUtil.createSuccessResultWithObj(out_refund_no);
}
return JsonResultUtil.createDefaultFail();
}
......
package com.xxfc.platform.vehicle.constant;
/**
* @author libin
* @version 1.0
* @description 车型评分类型
* @data 2019/6/18 15:39
*/
public enum VehicleScoreType {
/**
* 服务态度
*/
SERVICE,
/**
* 司机
*/
DRIVER,
/**
* 检验感受
*/
EXPERIENCE;
}
package com.xxfc.platform.vehicle.entity;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.*;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* 用户评分表
*
* @author libin
* @email 18178966185@163.com
* @date 2019-06-18 15:03:58
*/
@Data
@Table(name = "vehicle_user_score")
public class VehicleUserScore 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.vehicle.pojo.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.vehicle.pojo.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
* @author libin
* @version 1.0
* @description 车型评分
* @data 2019/6/18 15:15
*/
@Data
public class VehicleUserScoreDTO {
@ApiModelProperty("主键id")
private Integer id;
/**
* 用户id
*/
@ApiModelProperty(value = "用户id")
private Integer userId;
/**
* 订单id
*/
@ApiModelProperty(value = "订单id")
private Integer orderId;
/**
* 车型id
*/
@ApiModelProperty(value = "车型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.vehicle.pojo.vo;
import lombok.Data;
/**
* @author libin
* @version 1.0
* @description TODO
* @data 2019/6/18 15:26
*/
@Data
public class VehicleUserScoreVo {
}
package com.xxfc.platform.vehicle.biz;
import com.alibaba.fastjson.JSONObject;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.github.wxiaoqi.security.common.vo.PageDataVO;
import com.xxfc.platform.vehicle.entity.VehicleUserScore;
import com.xxfc.platform.vehicle.mapper.VehicleUserScoreMapper;
import com.xxfc.platform.vehicle.pojo.dto.ScoreTypeDTO;
import com.xxfc.platform.vehicle.pojo.dto.VehicleUserScoreDTO;
import com.xxfc.platform.vehicle.pojo.vo.VehicleUserScoreVo;
import io.swagger.annotations.ApiModelProperty;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import java.time.Instant;
import java.util.List;
/**
* 用户评分表
*
* @author libin
* @email 18178966185@163.com
* @date 2019-06-18 15:03:58
*/
@Service
public class VehicleUserScoreBiz extends BaseBiz<VehicleUserScoreMapper, VehicleUserScore> {
/**
* 根据车型id查询
* @param modelId
* @return
*/
public PageDataVO<VehicleUserScoreVo> findVehicleUserScorePageByModelId(Integer modelId) {
return null;
}
/**
* 保存评分
* @param vehicleUserScoreDTO
* @return
*/
public int saveVehicleUserScore(VehicleUserScoreDTO vehicleUserScoreDTO) {
vehicleUserScoreDTO.setCrtTime(Instant.now().toEpochMilli());
List<ScoreTypeDTO> scoretype = vehicleUserScoreDTO.getScoretype();
vehicleUserScoreDTO.setComment(JSONObject.toJSONString(scoretype));
double avgScore = scoretype.stream().mapToInt(ScoreTypeDTO::getScore).average().getAsDouble();
VehicleUserScore vehicleUserScore = new VehicleUserScore();
BeanUtils.copyProperties(vehicleUserScoreDTO,vehicleUserScore);
//vehicleUserScore.setAveScore();
return mapper.insertSelective(vehicleUserScore);
}
}
\ No newline at end of file
package com.xxfc.platform.vehicle.mapper;
import com.xxfc.platform.vehicle.entity.VehicleUserScore;
import tk.mybatis.mapper.common.Mapper;
/**
* 用户评分表
*
* @author libin
* @email 18178966185@163.com
* @date 2019-06-18 15:03:58
*/
public interface VehicleUserScoreMapper extends Mapper<VehicleUserScore> {
}
package com.xxfc.platform.vehicle.rest;
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.vehicle.biz.VehicleUserScoreBiz;
import com.xxfc.platform.vehicle.entity.VehicleUserScore;
import com.xxfc.platform.vehicle.pojo.dto.VehicleUserScoreDTO;
import com.xxfc.platform.vehicle.pojo.vo.VehicleUserScoreVo;
import org.springframework.web.bind.annotation.*;
/**
* @author libin
* @version 1.0
* @description 评分
* @data 2019/6/18 15:32
*/
@RestController
@RequestMapping("vehicleUserScore")
public class VehicleUserScoreController extends BaseController<VehicleUserScoreBiz, VehicleUserScore> {
/**
* 保存评分
* @param vehicleUserScoreDTO
* @return
*/
@PostMapping("/score")
public ObjectRestResponse<Void> saveVehicleUserScore(VehicleUserScoreDTO vehicleUserScoreDTO){
int effectRows = getBaseBiz().saveVehicleUserScore(vehicleUserScoreDTO);
if (effectRows>0){
return ObjectRestResponse.succ();
}
return ObjectRestResponse.createDefaultFail();
}
/**
* 根据车型查询评分列表
*
* @param modelId
* @return
*/
@GetMapping("/scores")
public ObjectRestResponse<PageDataVO<VehicleUserScoreVo>> findVehicleUserScorePageByModelId(@RequestParam("modelId") Integer modelId) {
PageDataVO<VehicleUserScoreVo> pageDataVO = getBaseBiz().findVehicleUserScorePageByModelId(modelId);
return ObjectRestResponse.succ(pageDataVO);
}
}
\ 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.vehicle.mapper.VehicleUserScoreMapper">
<!-- 可根据自己的需求,是否要使用 -->
<resultMap type="com.xxfc.platform.vehicle.entity.VehicleUserScore" id="vehicleUserScoreMap">
<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>
</mapper>
\ No newline at end of file
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