Commit 62f17fe7 authored by 周健威's avatar 周健威

修改计价

parent 5ce3b5e3
...@@ -118,5 +118,5 @@ public class OrderTourDetail implements Serializable { ...@@ -118,5 +118,5 @@ public class OrderTourDetail implements Serializable {
//具体商品(商品项)id //具体商品(商品项)id
@Column(name = "spe_price_id") @Column(name = "spe_price_id")
@ApiModelProperty(value = "具体商品(商品项)id") @ApiModelProperty(value = "具体商品(商品项)id")
private String spePriceId; private Integer spePriceId;
} }
...@@ -12,4 +12,5 @@ public class RentVehicleBO extends OrderRentVehicleDetail implements OrderDetail ...@@ -12,4 +12,5 @@ public class RentVehicleBO extends OrderRentVehicleDetail implements OrderDetail
private BaseOrder order; private BaseOrder order;
private VehicleModel vehicleModel; private VehicleModel vehicleModel;
private BookVehicleVO bookVehicleVO; private BookVehicleVO bookVehicleVO;
private Integer damageSafe;
} }
package com.xxfc.platform.order.pojo.order; package com.xxfc.platform.order.pojo.order;
import com.github.wxiaoqi.security.admin.entity.User;
import com.xxfc.platform.order.entity.BaseOrder; import com.xxfc.platform.order.entity.BaseOrder;
import com.xxfc.platform.order.entity.OrderRentVehicleDetail; import com.xxfc.platform.order.entity.OrderRentVehicleDetail;
import com.xxfc.platform.order.entity.OrderTourDetail; import com.xxfc.platform.order.entity.OrderTourDetail;
import com.xxfc.platform.order.entity.inter.OrderDetail; import com.xxfc.platform.order.entity.inter.OrderDetail;
import com.xxfc.platform.tour.entity.TourGood;
import com.xxfc.platform.tour.entity.TourUser; import com.xxfc.platform.tour.entity.TourUser;
import com.xxfc.platform.vehicle.entity.VehicleModel; import com.xxfc.platform.vehicle.entity.VehicleModel;
import lombok.Data; import lombok.Data;
...@@ -13,7 +15,9 @@ import java.util.List; ...@@ -13,7 +15,9 @@ import java.util.List;
@Data @Data
public class TourBO extends OrderTourDetail implements OrderDetail { public class TourBO extends OrderTourDetail implements OrderDetail {
private BaseOrder order; private BaseOrder order;
TourGood tourGood;
List<TourUser> tourUsers; List<TourUser> tourUsers;
Integer number; Integer number;
Integer childNumber; Integer childNumber;
User user;
} }
...@@ -11,6 +11,8 @@ public class RentVehiclePriceVO extends OrderPriceVO{ ...@@ -11,6 +11,8 @@ public class RentVehiclePriceVO extends OrderPriceVO{
BigDecimal vehicleAmount; BigDecimal vehicleAmount;
@ApiModelProperty(value = "司机价格") @ApiModelProperty(value = "司机价格")
BigDecimal driverAmount; BigDecimal driverAmount;
@ApiModelProperty(value = "免赔付价格")
BigDecimal damageSafeAmount;
@ApiModelProperty(value = "押金价格") @ApiModelProperty(value = "押金价格")
BigDecimal deposit; BigDecimal deposit;
@ApiModelProperty(value = "天数") @ApiModelProperty(value = "天数")
...@@ -25,6 +27,8 @@ public class RentVehiclePriceVO extends OrderPriceVO{ ...@@ -25,6 +27,8 @@ public class RentVehiclePriceVO extends OrderPriceVO{
BigDecimal modelAmount; BigDecimal modelAmount;
@ApiModelProperty(value = "司机单价") @ApiModelProperty(value = "司机单价")
BigDecimal driverPrice; BigDecimal driverPrice;
@ApiModelProperty(value = "免赔付单价")
BigDecimal damageSafePrice;
@ApiModelProperty(value = "费用详情") @ApiModelProperty(value = "费用详情")
private String costDetail; private String costDetail;
} }
...@@ -7,24 +7,34 @@ import java.math.BigDecimal; ...@@ -7,24 +7,34 @@ import java.math.BigDecimal;
@Data @Data
public class TourPriceVO extends OrderPriceVO{ public class TourPriceVO extends OrderPriceVO{
@ApiModelProperty(value = "车辆价格")
BigDecimal vehicleAmount;
@ApiModelProperty(value = "司机价格")
BigDecimal driverAmount;
@ApiModelProperty(value = "押金价格")
BigDecimal deposit;
@ApiModelProperty(value = "天数")
Integer dayNum;
@ApiModelProperty(value = "车辆个数")
Integer vehicleNum;
@ApiModelProperty(value = "司机个数")
Integer driverNum;
@ApiModelProperty(value = "车型名称")
String modelName;
@ApiModelProperty(value = "车型价格")
BigDecimal modelAmount;
@ApiModelProperty(value = "司机单价")
BigDecimal driverPrice;
@ApiModelProperty(value = "费用详情") @ApiModelProperty(value = "费用详情")
private String costDetail; private String costDetail;
@ApiModelProperty(value = "成人人数")
private Integer number;
@ApiModelProperty(value = "儿童人数")
private Integer childNumber;
//大人单价"
@ApiModelProperty(value = "大人单价")
private BigDecimal price;
//大人总价
@ApiModelProperty(value = "大人总价")
private BigDecimal totalPrice;
//大人真实总价(优惠后的价格)
@ApiModelProperty(value = "大人真实总价(优惠后的价格)")
private BigDecimal realPrice;
//儿童单价
@ApiModelProperty(value = "儿童单价")
private BigDecimal childPrice;
//儿童总价
@ApiModelProperty(value = "儿童总价")
private BigDecimal totalChildPrice;
//儿童真实总价(优惠后的价格)
@ApiModelProperty(value = "儿童真实总价(优惠后的价格)")
private BigDecimal realChildPrice;
} }
...@@ -25,30 +25,36 @@ import java.util.stream.Collectors; ...@@ -25,30 +25,36 @@ import java.util.stream.Collectors;
public class OrderTemplateBiz extends BaseBiz<OrderTemplateMapper,OrderTemplate> { public class OrderTemplateBiz extends BaseBiz<OrderTemplateMapper,OrderTemplate> {
public String result (OrderTemplate orderTemplate, Dict dict) { public String result (OrderTemplate orderTemplate, Dict dict) {
// TemplateEngine engine = TemplateUtil.createEngine(new TemplateConfig()); TemplateEngine engine = TemplateUtil.createEngine();
// OrderCostDetail orderCostDetail = orderCostDetailBiz.selectById(OrderCostEnum.RentVehicle.getCode()); String result = "";
// Template template = engine.getTemplate(orderCostDetail.getTemplate()); Template template;
// String result = template.render(Dict.parse(pojo)); // //预处理
// pojo.setCostDetail(result); // template = engine.getTemplate(orderTemplate.getTemplate());
// result = template.render(new Dict(preprocessMap));
//获取所有模板
List<OrderTemplate> all = this.selectListAll(); List<OrderTemplate> all = this.selectListAll();
Map<String, Object> allCodeMap = all.parallelStream().collect(Collectors.toMap(item -> "tem_"+ item.getCode(), OrderTemplate::getTemplate)); Map<String, Object> allCodeMap = all.parallelStream().collect(Collectors.toMap(item -> "tem_"+ item.getCode(), OrderTemplate::getTemplate));
List<String> codes = all.parallelStream().map(OrderTemplate::getCode).collect(Collectors.toList()); List<String> codes = all.parallelStream().map(OrderTemplate::getCode).collect(Collectors.toList());
String result = "";
TemplateEngine engine = TemplateUtil.createEngine();
//匹配模板 ParamKey() 判断是否存在别的模板 //匹配模板 ParamKey() 判断是否存在别的模板
List<String> list = Arrays.asList(orderTemplate.getParamKey().split(",")).parallelStream().filter(item -> codes.contains(item)).collect(Collectors.toList()); List<String> list = Arrays.asList(orderTemplate.getParamKey().split(",")).parallelStream().filter(item -> codes.contains(item)).collect(Collectors.toList());
if(list.size() > 0) { if(list.size() > 0) {
allCodeMap.remove("tem_0101"); template = engine.getTemplate(orderTemplate.getTemplate());
Template template = engine.getTemplate(orderTemplate.getTemplate());
result = template.render(new Dict(allCodeMap)); result = template.render(new Dict(allCodeMap));
} }
//匹配参数 填充参数 //匹配参数 填充参数
template = engine.getTemplate(result);
result = template.render(dict);
return result; return result;
} }
// public Map<String, OrderTemplate> allCodeMap() { public String result (String templateStr, Map map) {
// return this.selectListAll().parallelStream().collect(Collectors.toMap(OrderTemplate::getCode, template -> template)); TemplateEngine engine = TemplateUtil.createEngine();
// } Template template = engine.getTemplate(templateStr);
return template.render(map);
}
} }
\ No newline at end of file
...@@ -84,5 +84,10 @@ public class OrderRentVehicleController extends CommonBaseController { ...@@ -84,5 +84,10 @@ public class OrderRentVehicleController extends CommonBaseController {
@ApiModelProperty(value = "天数") @ApiModelProperty(value = "天数")
private Integer dayNum; private Integer dayNum;
//是否购买免赔
@ApiModelProperty(value = "是否购买免赔 1--是")
private Integer damageSafe;
} }
} }
\ No newline at end of file
...@@ -15,6 +15,7 @@ import com.xxfc.platform.order.pojo.order.TourBO; ...@@ -15,6 +15,7 @@ import com.xxfc.platform.order.pojo.order.TourBO;
import com.xxfc.platform.order.pojo.price.RentVehiclePriceVO; import com.xxfc.platform.order.pojo.price.RentVehiclePriceVO;
import com.xxfc.platform.order.pojo.price.TourPriceVO; import com.xxfc.platform.order.pojo.price.TourPriceVO;
import com.xxfc.platform.order.service.OrderTourService; import com.xxfc.platform.order.service.OrderTourService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.Data; import lombok.Data;
...@@ -29,6 +30,7 @@ import javax.persistence.Column; ...@@ -29,6 +30,7 @@ import javax.persistence.Column;
@Controller @Controller
@RequestMapping("orderTour") @RequestMapping("orderTour")
@Api(value="旅游订单",tags={"旅游订单"})
public class OrderTourController extends BaseController<OrderTourDetailBiz,OrderTourDetail> { public class OrderTourController extends BaseController<OrderTourDetailBiz,OrderTourDetail> {
@Autowired @Autowired
......
...@@ -6,6 +6,7 @@ import cn.hutool.extra.template.Template; ...@@ -6,6 +6,7 @@ import cn.hutool.extra.template.Template;
import cn.hutool.extra.template.TemplateConfig; import cn.hutool.extra.template.TemplateConfig;
import cn.hutool.extra.template.TemplateEngine; import cn.hutool.extra.template.TemplateEngine;
import cn.hutool.extra.template.TemplateUtil; import cn.hutool.extra.template.TemplateUtil;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.xxfc.platform.order.biz.OrderCostDetailBiz; import com.xxfc.platform.order.biz.OrderCostDetailBiz;
import com.xxfc.platform.order.biz.OrderRentVehicleBiz; import com.xxfc.platform.order.biz.OrderRentVehicleBiz;
import com.xxfc.platform.order.biz.OrderTemplateBiz; import com.xxfc.platform.order.biz.OrderTemplateBiz;
...@@ -13,6 +14,7 @@ import com.xxfc.platform.order.contant.enumerate.OrderCostEnum; ...@@ -13,6 +14,7 @@ import com.xxfc.platform.order.contant.enumerate.OrderCostEnum;
import com.xxfc.platform.order.contant.enumerate.OrderStatusEnum; import com.xxfc.platform.order.contant.enumerate.OrderStatusEnum;
import com.xxfc.platform.order.contant.enumerate.OrderTypeEnum; import com.xxfc.platform.order.contant.enumerate.OrderTypeEnum;
import com.xxfc.platform.order.entity.OrderCostDetail; import com.xxfc.platform.order.entity.OrderCostDetail;
import com.xxfc.platform.order.entity.OrderTemplate;
import com.xxfc.platform.order.pojo.order.RentVehicleBO; import com.xxfc.platform.order.pojo.order.RentVehicleBO;
import com.xxfc.platform.order.pojo.price.RentVehiclePriceVO; import com.xxfc.platform.order.pojo.price.RentVehiclePriceVO;
import com.xxfc.platform.vehicle.entity.VehicleModel; import com.xxfc.platform.vehicle.entity.VehicleModel;
...@@ -24,6 +26,9 @@ import org.springframework.stereotype.Service; ...@@ -24,6 +26,9 @@ import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct; import javax.annotation.PostConstruct;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@Service @Service
@Log4j @Log4j
...@@ -32,6 +37,7 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl ...@@ -32,6 +37,7 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl
private static BigDecimal DRIVER_PRICE = new BigDecimal("600.00"); private static BigDecimal DRIVER_PRICE = new BigDecimal("600.00");
private static BigDecimal DAMAGE_SAFE = new BigDecimal("100.00"); //车损免赔 private static BigDecimal DAMAGE_SAFE = new BigDecimal("100.00"); //车损免赔
private static Integer DRIVER_TYPE_COMPANY = 1; private static Integer DRIVER_TYPE_COMPANY = 1;
private static Integer DRIVER_TYPE_DAMAGE_SAFE = 1;
// private static BigDecimal DEPOSIT = new BigDecimal("20000.00"); // private static BigDecimal DEPOSIT = new BigDecimal("20000.00");
@Autowired @Autowired
...@@ -83,6 +89,7 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl ...@@ -83,6 +89,7 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl
BigDecimal goodsAmount = BigDecimal.ZERO; BigDecimal goodsAmount = BigDecimal.ZERO;
BigDecimal vehicleAmount = BigDecimal.ZERO; BigDecimal vehicleAmount = BigDecimal.ZERO;
BigDecimal driverAmount = BigDecimal.ZERO; BigDecimal driverAmount = BigDecimal.ZERO;
BigDecimal damageSafeAmount = BigDecimal.ZERO;
//计算价格 //计算价格
//计算车辆费用 //计算车辆费用
...@@ -92,6 +99,12 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl ...@@ -92,6 +99,12 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl
//计算司机费用 //计算司机费用
driverAmount = driverAmount.add(DRIVER_PRICE.multiply(BigDecimal.valueOf(detail.getDayNum()))); driverAmount = driverAmount.add(DRIVER_PRICE.multiply(BigDecimal.valueOf(detail.getDayNum())));
} }
if(DRIVER_TYPE_DAMAGE_SAFE.equals(detail.getDamageSafe())) {
//免赔费用
damageSafeAmount = damageSafeAmount.add(DAMAGE_SAFE.multiply(BigDecimal.valueOf(detail.getDayNum())));
}
//商品价格 //商品价格
goodsAmount = goodsAmount.add(vehicleAmount).add(driverAmount); goodsAmount = goodsAmount.add(vehicleAmount).add(driverAmount);
//总价格(包含押金) //总价格(包含押金)
...@@ -103,42 +116,52 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl ...@@ -103,42 +116,52 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl
rvp.setGoodsAmount(goodsAmount); rvp.setGoodsAmount(goodsAmount);
rvp.setDriverAmount(driverAmount); rvp.setDriverAmount(driverAmount);
rvp.setVehicleAmount(vehicleAmount); rvp.setVehicleAmount(vehicleAmount);
rvp.setDamageSafeAmount(damageSafeAmount);
rvp.setRealAmount(orderAmount); rvp.setRealAmount(orderAmount);
rvp.setDeposit(vehicleModel.getDeposit()); rvp.setDeposit(vehicleModel.getDeposit());
rvp.setModelAmount(vehicleModel.getPrice()); rvp.setModelAmount(vehicleModel.getPrice());
rvp.setDriverPrice(DRIVER_PRICE); rvp.setDriverPrice(DRIVER_PRICE);
rvp.setDamageSafePrice(DAMAGE_SAFE);
rvp.setModelName(vehicleModel.getName()); rvp.setModelName(vehicleModel.getName());
rvp.setDayNum(detail.getDayNum()); rvp.setDayNum(detail.getDayNum());
rvp.setVehicleNum(1); rvp.setVehicleNum(1);
rvp.setDriverNum(1); rvp.setDriverNum(1);
detail.setCostDetail(costDetail(rvp)); //设置收费明细
costDetail(rvp, handlechildren(detail));
return rvp; return rvp;
} }
private String handlechildren(RentVehicleBO detail) {
StringBuffer childrenStr = new StringBuffer("${tem_0101}");
if(DRIVER_TYPE_COMPANY.equals(detail.getDriverType())) {
childrenStr.append(",${tem_0102}");
}
childrenStr.append(",${tem_0103}");
if(DRIVER_TYPE_DAMAGE_SAFE.equals(detail.getDamageSafe())) {
childrenStr.append(",${tem_0104}");
}
return childrenStr.toString();
}
/** /**
* 计算费用明细 * 计算费用明细
* @param vo * @param vo
* @return * @return
*/ */
private String costDetail(RentVehiclePriceVO vo) { private void costDetail(RentVehiclePriceVO vo, String children) {
//orderTemplateBiz.result(orderTemplateBiz.selectById(OrderCostEnum.RentVehicle.getCode()), Dict.parse(pojo)); OrderTemplate template = orderTemplateBiz.selectById(OrderCostEnum.RentVehicle.getCode());
TemplateEngine engine = TemplateUtil.createEngine(new TemplateConfig()); template.setTemplate(orderTemplateBiz.result(template.getTemplate(), new HashMap(){{
OrderCostDetail orderCostDetail = orderCostDetailBiz.selectById(OrderCostEnum.RentVehicle.getCode()); put("children", children);
Template template = engine.getTemplate(orderCostDetail.getTemplate()); }}));
String result = template.render(Dict.parse(vo)); String result = orderTemplateBiz.result(template, Dict.parse(vo));
vo.setCostDetail(result); vo.setCostDetail(result);
return result;
} }
private String acquireVehicle(RentVehicleBO detail) { private void acquireVehicle(RentVehicleBO detail) {
//根据车型、时间、距离,门店,预定车辆 //根据车型、时间、距离,门店,预定车辆
BookVehicleVO bookVehicleVO = new BookVehicleVO(){{ BookVehicleVO bookVehicleVO = detail.getBookVehicleVO();
// setBookStartDate(detail.getS); ObjectRestResponse<String> orr = vehicleFeign.rentApplyVehicle(bookVehicleVO);
}}; detail.setVehicleId(orr.getData());
// vehicleFeign.rentApplyVehicle()
String vehicleId = "0e9a88db-cb1b-48a4-b307-40f89eed906f";
detail.setVehicleId(vehicleId);
return vehicleId;
} }
} }
...@@ -2,10 +2,12 @@ package com.xxfc.platform.order.service; ...@@ -2,10 +2,12 @@ package com.xxfc.platform.order.service;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.lang.Dict; import cn.hutool.core.lang.Dict;
import cn.hutool.core.util.StrUtil;
import cn.hutool.extra.template.Template; import cn.hutool.extra.template.Template;
import cn.hutool.extra.template.TemplateConfig; import cn.hutool.extra.template.TemplateConfig;
import cn.hutool.extra.template.TemplateEngine; import cn.hutool.extra.template.TemplateEngine;
import cn.hutool.extra.template.TemplateUtil; import cn.hutool.extra.template.TemplateUtil;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.xxfc.platform.order.biz.OrderCostDetailBiz; import com.xxfc.platform.order.biz.OrderCostDetailBiz;
import com.xxfc.platform.order.biz.OrderRentVehicleBiz; import com.xxfc.platform.order.biz.OrderRentVehicleBiz;
import com.xxfc.platform.order.biz.OrderTemplateBiz; import com.xxfc.platform.order.biz.OrderTemplateBiz;
...@@ -13,11 +15,15 @@ import com.xxfc.platform.order.contant.enumerate.OrderCostEnum; ...@@ -13,11 +15,15 @@ import com.xxfc.platform.order.contant.enumerate.OrderCostEnum;
import com.xxfc.platform.order.contant.enumerate.OrderStatusEnum; import com.xxfc.platform.order.contant.enumerate.OrderStatusEnum;
import com.xxfc.platform.order.contant.enumerate.OrderTypeEnum; import com.xxfc.platform.order.contant.enumerate.OrderTypeEnum;
import com.xxfc.platform.order.entity.OrderCostDetail; import com.xxfc.platform.order.entity.OrderCostDetail;
import com.xxfc.platform.order.entity.OrderTemplate;
import com.xxfc.platform.order.pojo.order.RentVehicleBO; import com.xxfc.platform.order.pojo.order.RentVehicleBO;
import com.xxfc.platform.order.pojo.order.TourBO; import com.xxfc.platform.order.pojo.order.TourBO;
import com.xxfc.platform.order.pojo.price.RentVehiclePriceVO; import com.xxfc.platform.order.pojo.price.RentVehiclePriceVO;
import com.xxfc.platform.order.pojo.price.TourPriceVO;
import com.xxfc.platform.tour.dto.TourSpePriceDTO; import com.xxfc.platform.tour.dto.TourSpePriceDTO;
import com.xxfc.platform.tour.entity.TourGood;
import com.xxfc.platform.tour.feign.TourFeign; import com.xxfc.platform.tour.feign.TourFeign;
import com.xxfc.platform.tour.vo.TourSpePriceVo;
import com.xxfc.platform.vehicle.entity.VehicleModel; import com.xxfc.platform.vehicle.entity.VehicleModel;
import com.xxfc.platform.vehicle.feign.VehicleFeign; import com.xxfc.platform.vehicle.feign.VehicleFeign;
import lombok.extern.log4j.Log4j; import lombok.extern.log4j.Log4j;
...@@ -26,6 +32,7 @@ import org.springframework.stereotype.Service; ...@@ -26,6 +32,7 @@ import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct; import javax.annotation.PostConstruct;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.HashMap;
@Service @Service
@Log4j @Log4j
...@@ -34,12 +41,11 @@ public class OrderTourService extends AbstractOrderHandle<OrderRentVehicleBiz, T ...@@ -34,12 +41,11 @@ public class OrderTourService extends AbstractOrderHandle<OrderRentVehicleBiz, T
@Autowired @Autowired
TourFeign tourFeign; TourFeign tourFeign;
private static BigDecimal DRIVER_PRICE = new BigDecimal("600.00"); // private static BigDecimal DRIVER_PRICE = new BigDecimal("600.00");
private static BigDecimal DAMAGE_SAFE = new BigDecimal("100.00"); //车损免赔 // private static BigDecimal DAMAGE_SAFE = new BigDecimal("100.00"); //车损免赔
// private static BigDecimal DEPOSIT = new BigDecimal("20000.00"); private static Integer LEVEL_DEFAULT = 0;
private static Integer NUMBER_ZERO = 0;
@Autowired // private static BigDecimal DEPOSIT = new BigDecimal("20000.00");-
VehicleFeign vehicleFeign;
@Autowired @Autowired
OrderCostDetailBiz orderCostDetailBiz; OrderCostDetailBiz orderCostDetailBiz;
...@@ -56,8 +62,8 @@ public class OrderTourService extends AbstractOrderHandle<OrderRentVehicleBiz, T ...@@ -56,8 +62,8 @@ public class OrderTourService extends AbstractOrderHandle<OrderRentVehicleBiz, T
@Override @Override
public void initDetail(TourBO bo) { public void initDetail(TourBO bo) {
super.initDetail(bo); super.initDetail(bo);
//VehicleModel vehicleModel = vehicleFeign.get(bo.getModelId()).getData(); TourGood tourGood = tourFeign.get(bo.getGoodId()).getData();
//bo.setVehicleModel(vehicleModel); bo.setTourGood(tourGood);
} }
@Override @Override
...@@ -65,62 +71,74 @@ public class OrderTourService extends AbstractOrderHandle<OrderRentVehicleBiz, T ...@@ -65,62 +71,74 @@ public class OrderTourService extends AbstractOrderHandle<OrderRentVehicleBiz, T
//设置订单状态为3 //设置订单状态为3
bo.getOrder().setStatus(OrderStatusEnum.ORDER_UNPAY.getCode()); bo.getOrder().setStatus(OrderStatusEnum.ORDER_UNPAY.getCode());
//设置订单图片 //设置订单图片
//bo.getOrder().setPicture(bo.getVehicleModel().getPicture()); bo.getOrder().setPicture(bo.getTourGood().getCover());
//设置订单名称 //设置订单名称
//bo.getOrder().setName(bo.getVehicleModel().getName()); bo.getOrder().setName(bo.getTourGood().getName());
super.handleDetail(bo); super.handleDetail(bo);
} }
@Override @Override
public void handleCalculate(TourBO bo) { public void handleCalculate(TourBO bo) {
RentVehiclePriceVO rvpv = calculatePrice(bo); TourPriceVO tpv = calculatePrice(bo);
BeanUtil.copyProperties(rvpv, bo.getOrder()); BeanUtil.copyProperties(tpv, bo.getOrder());
BeanUtil.copyProperties(rvpv, bo); BeanUtil.copyProperties(tpv, bo);
} }
@Override @Override
public RentVehiclePriceVO calculatePrice(TourBO detail) { public TourPriceVO calculatePrice(TourBO detail) {
BigDecimal orderAmount = BigDecimal.ZERO; BigDecimal orderAmount = BigDecimal.ZERO;
BigDecimal goodsAmount = BigDecimal.ZERO; BigDecimal goodsAmount = BigDecimal.ZERO;
BigDecimal tourAmount = BigDecimal.ZERO; BigDecimal tourAmount = BigDecimal.ZERO;
BigDecimal realAmount = BigDecimal.ZERO;
//计算旅游价格 //计算旅游价格
tourFeign.refund(new TourSpePriceDTO(){{ ObjectRestResponse<TourSpePriceVo> objectRestResponse = tourFeign.refund(new TourSpePriceDTO(){{
setChildNumber(detail.getChildNumber());
setChildNumber(detail.getChildNumber()); setChildNumber(detail.getChildNumber());
setNumber(detail.getNumber());
setLevel(LEVEL_DEFAULT);
setSpeId(detail.getSpePriceId());
//setUserId(detail.getUser().getId());
}}); }});
TourSpePriceVo tourSpePriceVo = objectRestResponse.getData();
//总价
tourAmount = tourAmount.add(tourSpePriceVo.getTotalPrice()).add(tourSpePriceVo.getChildPrice());
//计算价格
//计算车辆费用
// VehicleModel vehicleModel = vehicleFeign.get(detail.getModelId()).getData();
// vehicleAmount = vehicleAmount.add(vehicleModel.getPrice().multiply(BigDecimal.valueOf(detail.getDayNum())));
// if(DRIVER_TYPE_COMPANY.equals(detail.getDriverType())) {
// //计算司机费用
// driverAmount = driverAmount.add(DRIVER_PRICE.multiply(BigDecimal.valueOf(detail.getDayNum())));
// }
//商品价格 //商品价格
// goodsAmount = goodsAmount.add(vehicleAmount).add(driverAmount); goodsAmount = goodsAmount.add(tourAmount);
//总价格(包含押金) //总价格
// orderAmount = orderAmount.add(goodsAmount).add(DEPOSIT); orderAmount = orderAmount.add(goodsAmount);
//真实价格
//生成订单明细 realAmount = realAmount.add(tourSpePriceVo.getRealPrice()).add(tourSpePriceVo.getRealChildPrice());
RentVehiclePriceVO rvp = new RentVehiclePriceVO();
rvp.setOrderAmount(orderAmount); //生成订单明细
rvp.setGoodsAmount(goodsAmount); TourPriceVO tpv = BeanUtil.toBean(tourSpePriceVo, TourPriceVO.class);
// rvp.setDriverAmount(driverAmount); tpv.setOrderAmount(orderAmount);
// rvp.setVehicleAmount(vehicleAmount); tpv.setGoodsAmount(goodsAmount);
rvp.setRealAmount(orderAmount); tpv.setRealAmount(realAmount);
// rvp.setDeposit(DEPOSIT); tpv.setNumber(detail.getNumber());
// rvp.setModelAmount(vehicleModel.getPrice()); tpv.setChildNumber(detail.getChildNumber());
rvp.setDriverPrice(DRIVER_PRICE);
// rvp.setModelName(vehicleModel.getName()); //设置收费明细
rvp.setDayNum(detail.getDayNum()); costDetail(tpv, handlechildren(detail));
rvp.setVehicleNum(1); return tpv;
rvp.setDriverNum(1); }
//detail.setCostDetail(costDetail(rvp)); private String handlechildren(TourBO detail) {
return rvp; StringBuffer childrenStr = new StringBuffer("");
if(NUMBER_ZERO < detail.getNumber()) {
childrenStr.append(",${tem_0201}");
}
if(NUMBER_ZERO < detail.getChildNumber()) {
childrenStr.append(",${tem_0202}");
}
String str = childrenStr.toString();
if(str.length() > 0) {
str = str.substring(1, str.length());
}
return str;
} }
/** /**
...@@ -128,13 +146,12 @@ public class OrderTourService extends AbstractOrderHandle<OrderRentVehicleBiz, T ...@@ -128,13 +146,12 @@ public class OrderTourService extends AbstractOrderHandle<OrderRentVehicleBiz, T
* @param vo * @param vo
* @return * @return
*/ */
private String costDetail(RentVehiclePriceVO vo) { private void costDetail(TourPriceVO vo, String children) {
//orderTemplateBiz.result(orderTemplateBiz.selectById(OrderCostEnum.RentVehicle.getCode()), Dict.parse(pojo)); OrderTemplate template = orderTemplateBiz.selectById(OrderCostEnum.RentVehicle.getCode());
TemplateEngine engine = TemplateUtil.createEngine(new TemplateConfig()); template.setTemplate(orderTemplateBiz.result(template.getTemplate(), new HashMap(){{
OrderCostDetail orderCostDetail = orderCostDetailBiz.selectById(OrderCostEnum.RentVehicle.getCode()); put("children", children);
Template template = engine.getTemplate(orderCostDetail.getTemplate()); }}));
String result = template.render(Dict.parse(vo)); String result = orderTemplateBiz.result(template, Dict.parse(vo));
vo.setCostDetail(result); vo.setCostDetail(result);
return result;
} }
} }
...@@ -10,6 +10,8 @@ import org.junit.runner.RunWith; ...@@ -10,6 +10,8 @@ import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import java.util.HashMap;
@Slf4j @Slf4j
@RunWith(SpringJUnit4ClassRunner.class) @RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes={OrderApplication.class}) @SpringBootTest(classes={OrderApplication.class})
...@@ -24,11 +26,19 @@ public class RegionTest { ...@@ -24,11 +26,19 @@ public class RegionTest {
TemplateEngine engine = TemplateUtil.createEngine(new TemplateConfig()); TemplateEngine engine = TemplateUtil.createEngine(new TemplateConfig());
//假设我们引入的是Beetl引擎,则: //假设我们引入的是Beetl引擎,则:
Template template = engine.getTemplate("{\"key\":\"费用明细\",\"val\":\"\",\"children\":[{\"key\":\"车辆租赁费\",\"val\":\"¥${vehicleAmount}\",\"children\":[{\"key\":\"${modelName}\",\"val\":\"¥${modelAmount}/天\"},{\"key\":\"租用天数\",\"val\":\"${dayNum}天\"},{\"key\":\"房车数量\",\"val\":\"${vehicleNum}辆\"}]},{\"key\":\"服务费(司机)\",\"val\":\"¥${driverAmount}\",\"children\":[{\"key\":\"欣新司机\",\"val\":\"¥${driverPrice}/天\"},{\"key\":\"司机数量\",\"val\":\"{driverNum}个\"},{\"key\":\"房车数量\",\"val\":\"${dayNum}天\"}]},{\"key\":\"用车押金\",\"val\":\"¥${deposit}\"}]}"); //Template template = engine.getTemplate("{\"key\":\"费用明细\",\"val\":\"\",\"children\":[{\"key\":\"车辆租赁费\",\"val\":\"¥${vehicleAmount}\",\"children\":[{\"key\":\"${modelName}\",\"val\":\"¥${modelAmount}/天\"},{\"key\":\"租用天数\",\"val\":\"${dayNum}天\"},{\"key\":\"房车数量\",\"val\":\"${vehicleNum}辆\"}]},{\"key\":\"服务费(司机)\",\"val\":\"¥${driverAmount}\",\"children\":[{\"key\":\"欣新司机\",\"val\":\"¥${driverPrice}/天\"},{\"key\":\"司机数量\",\"val\":\"{driverNum}个\"},{\"key\":\"房车数量\",\"val\":\"${dayNum}天\"}]},{\"key\":\"用车押金\",\"val\":\"¥${deposit}\"}]}");
Template template = engine.getTemplate("${[a,b,c]}");
//Dict本质上为Map,此处可用Map //Dict本质上为Map,此处可用Map
// String result = template.render(Dict.create().set("name", "Hutool").set("name2", "Hutool2")); // String result = template.render(Dict.create().set("name", "Hutool").set("name2", "Hutool2"));
String result = ""; String result = "";
result = template.render(new HashMap<String, Object>(){{
put("a", 123);
put("b", 456);
put("c", 789);
}});
//template.render( //template.render(
//Dict.parse(new RentVehiclePriceVO(new BigDecimal("126800.03"), new BigDecimal("106800.03"), new BigDecimal("105000.03"), new BigDecimal("1800"), new BigDecimal("20000")))); //Dict.parse(new RentVehiclePriceVO(new BigDecimal("126800.03"), new BigDecimal("106800.03"), new BigDecimal("105000.03"), new BigDecimal("1800"), new BigDecimal("20000"))));
......
...@@ -5,12 +5,15 @@ import com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO; ...@@ -5,12 +5,15 @@ import com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO;
import com.github.wxiaoqi.security.auth.client.config.UserAuthConfig; import com.github.wxiaoqi.security.auth.client.config.UserAuthConfig;
import com.github.wxiaoqi.security.common.biz.BaseBiz; import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.github.wxiaoqi.security.common.rest.BaseController; import com.github.wxiaoqi.security.common.rest.BaseController;
import com.github.wxiaoqi.security.common.rest.CommonBaseController;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
@Slf4j @Slf4j
public class TourBaseController<Biz extends BaseBiz>extends BaseController { public class TourBaseController<Biz extends BaseBiz> extends CommonBaseController {
@Autowired
protected Biz baseBiz;
@Autowired @Autowired
protected UserFeign userFeign; protected UserFeign userFeign;
......
...@@ -3,11 +3,10 @@ package com.xxfc.platform.tour.feign; ...@@ -3,11 +3,10 @@ package com.xxfc.platform.tour.feign;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse; import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.xxfc.platform.tour.dto.TourSpePriceDTO; import com.xxfc.platform.tour.dto.TourSpePriceDTO;
import com.xxfc.platform.tour.entity.TourGood;
import com.xxfc.platform.tour.vo.TourSpePriceVo; import com.xxfc.platform.tour.vo.TourSpePriceVo;
import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
/** /**
...@@ -28,6 +27,10 @@ public interface TourFeign { ...@@ -28,6 +27,10 @@ public interface TourFeign {
public ObjectRestResponse<TourSpePriceVo> refund(@RequestBody TourSpePriceDTO spePriceDto); public ObjectRestResponse<TourSpePriceVo> refund(@RequestBody TourSpePriceDTO spePriceDto);
@RequestMapping(value = "/spe/stock", method = RequestMethod.GET) @RequestMapping(value = "/spe/stock", method = RequestMethod.GET)
public ObjectRestResponse<TourSpePriceVo> stock(Integer speId,Integer number); public ObjectRestResponse<TourSpePriceVo> stock(@RequestParam Integer speId, @RequestParam Integer number);
@RequestMapping(value = "/tourGood/{id}", method = RequestMethod.GET)
public ObjectRestResponse<TourGood> get(@PathVariable int id);
} }
...@@ -34,13 +34,21 @@ public class TourSpePriceVo { ...@@ -34,13 +34,21 @@ public class TourSpePriceVo {
@ApiModelProperty(value = "大人总价") @ApiModelProperty(value = "大人总价")
private BigDecimal totalPrice; private BigDecimal totalPrice;
//大人真实总价(优惠后的价格)
@ApiModelProperty(value = "大人真实总价(优惠后的价格)")
private BigDecimal realPrice;
//儿童单价 //儿童单价
@ApiModelProperty(value = "儿童单价") @ApiModelProperty(value = "儿童单价")
private BigDecimal childPrice; private BigDecimal childPrice;
//儿童总价 //儿童总价
@ApiModelProperty(value = "儿童总价") @ApiModelProperty(value = "儿童总价")
private BigDecimal totaiChildPrice; private BigDecimal totalChildPrice;
//儿童真实总价(优惠后的价格)
@ApiModelProperty(value = "儿童真实总价(优惠后的价格)")
private BigDecimal realChildPrice;
//库存 //库存
@ApiModelProperty(value = "库存") @ApiModelProperty(value = "库存")
......
package com.xxfc.platform.tour.biz; package com.xxfc.platform.tour.biz;
import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse; import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.util.process.ResultCode; import com.github.wxiaoqi.security.common.util.process.ResultCode;
import com.xxfc.platform.tour.dto.TourSpePriceDTO; import com.xxfc.platform.tour.dto.TourSpePriceDTO;
import com.xxfc.platform.tour.entity.TourGoodSpePrice; import com.xxfc.platform.tour.entity.TourGoodSpePrice;
import com.xxfc.platform.tour.mapper.TourGoodSpePriceMapper; import com.xxfc.platform.tour.mapper.TourGoodSpePriceMapper;
import com.xxfc.platform.tour.vo.TourSpePriceVo; import com.xxfc.platform.tour.vo.TourSpePriceVo;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.github.wxiaoqi.security.common.biz.BaseBiz; import com.github.wxiaoqi.security.common.biz.BaseBiz;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode; import java.math.RoundingMode;
/** /**
* 旅游商品规格表 * 旅游商品规格表
* *
* @author zjw * @author zjw
* @email nishijjo@qq.com * @email nishijjo@qq.com
* @date 2019-06-06 11:41:51 * @date 2019-06-06 11:41:51
*/ */
@Service @Service
@Slf4j @Slf4j
public class TourGoodSpeBiz extends BaseBiz<TourGoodSpePriceMapper, TourGoodSpePrice> { public class TourGoodSpeBiz extends BaseBiz<TourGoodSpePriceMapper, TourGoodSpePrice> {
public ObjectRestResponse<TourSpePriceVo> getPricesByuserid(TourSpePriceDTO priceDto) { public ObjectRestResponse<TourSpePriceVo> getPricesByuserid(TourSpePriceDTO priceDto) {
if (priceDto == null || priceDto.getUserId() == null || priceDto.getUserId() == 0 || if (priceDto == null || priceDto.getUserId() == null || priceDto.getUserId() == 0 ||
priceDto.getNumber() == null || priceDto.getNumber() == 0||priceDto.getSpeId()==null) { priceDto.getNumber() == null || priceDto.getNumber() == 0||priceDto.getSpeId()==null) {
return ObjectRestResponse.createFailedResult(ResultCode.NULL_CODE, "参数为空"); return ObjectRestResponse.createFailedResult(ResultCode.NULL_CODE, "参数为空");
} }
TourSpePriceVo priceVo = new TourSpePriceVo(); TourSpePriceVo priceVo = new TourSpePriceVo();
Integer speId = priceDto.getSpeId(); Integer speId = priceDto.getSpeId();
Integer number = priceDto.getNumber(); Integer number = priceDto.getNumber();
Integer childNumber = priceDto.getChildNumber() == null ? 0 : priceDto.getChildNumber(); Integer childNumber = priceDto.getChildNumber() == null ? 0 : priceDto.getChildNumber();
if (speId != null) { if (speId != null) {
TourGoodSpePrice spePrice = mapper.selectByPrimaryKey(speId); TourGoodSpePrice spePrice = mapper.selectByPrimaryKey(speId);
if (spePrice != null) { if (spePrice != null) {
Integer level = priceDto.getLevel(); Integer level = priceDto.getLevel();
priceVo.setUserId(priceDto.getUserId()); priceVo.setUserId(priceDto.getUserId());
priceVo.setLevel(priceDto.getLevel()); priceVo.setLevel(priceDto.getLevel());
priceVo.setStock(spePrice.getStock()); priceVo.setStock(spePrice.getStock());
BigDecimal price = spePrice.getPrice(); BigDecimal price = spePrice.getPrice();
BigDecimal childPrice = spePrice.getChildPrice(); BigDecimal childPrice = spePrice.getChildPrice();
if (level != null && level > 0) { if (level != null && level > 0) {
String memberPrice = spePrice.getMemberPrice(); String memberPrice = spePrice.getMemberPrice();
JSONArray array = JSONArray.parseArray(memberPrice); JSONArray array = JSONArray.parseArray(memberPrice);
if (array.size() > 0) { if (array.size() > 0) {
for (Object obj : array) { for (Object obj : array) {
JSONObject jsonObject = JSONObject.parseObject(obj.toString()); JSONObject jsonObject = JSONObject.parseObject(obj.toString());
Integer levels = jsonObject.getInteger("level"); Integer levels = jsonObject.getInteger("level");
if (level == levels) { if (level == levels) {
String money = jsonObject.getString("price"); String money = jsonObject.getString("price");
price = new BigDecimal(StringUtils.isNotBlank(money) ? money : "0.00"); price = new BigDecimal(StringUtils.isNotBlank(money) ? money : "0.00");
String childMoney = jsonObject.getString("child_price"); String childMoney = jsonObject.getString("child_price");
childPrice = new BigDecimal(StringUtils.isNotBlank(childMoney) ? childMoney : "0.00"); childPrice = new BigDecimal(StringUtils.isNotBlank(childMoney) ? childMoney : "0.00");
break; break;
} }
} }
} }
} }
BigDecimal totalPrice = price.multiply(new BigDecimal(number)).setScale(2, RoundingMode.HALF_UP); BigDecimal totalPrice = price.multiply(new BigDecimal(number)).setScale(2, RoundingMode.HALF_UP);
BigDecimal totalChildPrice = childNumber > 0 ? price.multiply(new BigDecimal(childNumber)).setScale(2, RoundingMode.HALF_UP): new BigDecimal("0.00"); BigDecimal totalChildPrice = childNumber > 0 ? price.multiply(new BigDecimal(childNumber)).setScale(2, RoundingMode.HALF_UP): new BigDecimal("0.00");
priceVo.setPrice(price); priceVo.setPrice(price);
priceVo.setChildPrice(childPrice); priceVo.setChildPrice(childPrice);
priceVo.setTotalPrice(totalPrice); priceVo.setTotalPrice(totalPrice);
priceVo.setTotaiChildPrice(totalChildPrice); priceVo.setTotalChildPrice(totalChildPrice);
return ObjectRestResponse.succ(priceVo); return ObjectRestResponse.succ(priceVo);
} }
} }
return ObjectRestResponse.createDefaultFail(); return ObjectRestResponse.createDefaultFail();
} }
//减库存 //减库存
public ObjectRestResponse cutStock(Integer speId,Integer number) { public ObjectRestResponse cutStock(Integer speId,Integer number) {
TourGoodSpePrice spePrice = mapper.selectByPrimaryKey(speId); TourGoodSpePrice spePrice = mapper.selectByPrimaryKey(speId);
if (spePrice != null && spePrice.getStock() > 0 && spePrice.getStock() >= number) { if (spePrice != null && spePrice.getStock() > 0 && spePrice.getStock() >= number) {
mapper.updStockById(speId, number); mapper.updStockById(speId, number);
return ObjectRestResponse.succ(); return ObjectRestResponse.succ();
} else { } else {
return ObjectRestResponse.createFailedResult(ResultCode.STOCK_CODE, "库存不足"); return ObjectRestResponse.createFailedResult(ResultCode.STOCK_CODE, "库存不足");
} }
} }
} }
\ No newline at end of file
#spring: #spring:
# application: # application:
# name: vehicle # name: vehicle
# cloud: # cloud:
# nacos: # nacos:
# config: # config:
# server-addr: 127.0.0.1:8848 # server-addr: 127.0.0.1:8848
# file-extension: yaml # file-extension: yaml
# profiles: # profiles:
# active: dev # active: dev
spring: spring:
profiles: profiles:
active: dev active: dev
application: application:
name: xx-tour name: xx-tour
cloud: cloud:
nacos: nacos:
config: config:
file-extension: yaml file-extension: yaml
--- ---
spring: spring:
profiles: dev profiles: dev
cloud: cloud:
nacos: nacos:
config: config:
server-addr: 10.1.37.192:8848 server-addr: 127.0.0.1:8848
--- ---
spring: spring:
profiles: pro profiles: pro
cloud: cloud:
nacos: nacos:
config: config:
server-addr: 10.5.52.2:8848 server-addr: 10.5.52.2:8848
\ 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