Commit 0874c398 authored by jiaorz's avatar jiaorz

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

parents bb260df2 0c752b80
...@@ -88,7 +88,7 @@ public class AppUserRelationBiz extends BaseBiz<AppUserRelationMapper,AppUserRel ...@@ -88,7 +88,7 @@ public class AppUserRelationBiz extends BaseBiz<AppUserRelationMapper,AppUserRel
}else { }else {
//判断用户是否有有效的上线 //判断用户是否有有效的上线
log.info("----userId==="+userId+"----bindTime===="+bindTime+"----relation.getBindTime()==="+relation.getBindTime()); log.info("----userId==="+userId+"----bindTime===="+bindTime+"----relation.getBindTime()==="+relation.getBindTime());
if(relation.getParentId()==null||relation.getParentId()==0||(relation.getIsForever()!=1&&relation.getBindTime()<bindTime)){ if(relation.getParentId()==null||relation.getParentId()==0||(relation.getIsForever()!=1&&validTime>0&&relation.getBindTime()<bindTime)){
relation.setParentId(parentId); relation.setParentId(parentId);
relation.setBindType(type); relation.setBindType(type);
relation.setBindTime(time); relation.setBindTime(time);
......
...@@ -73,4 +73,7 @@ public class CampsiteShopDetailDTO { ...@@ -73,4 +73,7 @@ public class CampsiteShopDetailDTO {
*/ */
private String logo; private String logo;
@ApiModelProperty(value = "海报背景")
private String posterBackground;
} }
...@@ -170,4 +170,6 @@ public class CampsiteShopAdminVO { ...@@ -170,4 +170,6 @@ public class CampsiteShopAdminVO {
*/ */
private List<CampsiteTagListVo> campsiteTagListVos; private List<CampsiteTagListVo> campsiteTagListVos;
@ApiModelProperty(value = "海报背景")
private String posterBackground;
} }
...@@ -97,4 +97,7 @@ public class CampsiteShopDetailVo { ...@@ -97,4 +97,7 @@ public class CampsiteShopDetailVo {
* 店铺logo * 店铺logo
*/ */
private String logo; private String logo;
@ApiModelProperty(value = "海报背景")
private String posterBackground;
} }
...@@ -58,7 +58,7 @@ ...@@ -58,7 +58,7 @@
<!--根据id查询详情--> <!--根据id查询详情-->
<select id="findCampsiteShopDetailById" resultType="com.xxfc.platform.campsite.dto.CampsiteShopDetailDTO"> <select id="findCampsiteShopDetailById" resultType="com.xxfc.platform.campsite.dto.CampsiteShopDetailDTO">
select `name` as `name`,`province_name` as `provinceName`,`city_name` as `cityName`,`address` as `address`,`service_phone` as `phone`,`logo` as `logo`, select `name` as `name`,`province_name` as `provinceName`,`city_name` as `cityName`,`address` as `address`,`service_phone` as `phone`,`logo` as `logo`,`poster_background` as `posterBackground` ,
`content` as `content`,`configure` as `configure`,`longitude` as `longitude`,`latitude` as `latitude` from `campsite_shop` where `id`=#{id} `content` as `content`,`configure` as `configure`,`longitude` as `longitude`,`latitude` as `latitude` from `campsite_shop` where `id`=#{id}
</select> </select>
......
...@@ -127,28 +127,6 @@ public class OrderRefundBiz extends BaseBiz<OrderRefundMapper,OrderRefund> { ...@@ -127,28 +127,6 @@ public class OrderRefundBiz extends BaseBiz<OrderRefundMapper,OrderRefund> {
orderDepositRefundRecordBiz.completeRecordStatus(crosstown.getId(), depositRefundRecordStatus); orderDepositRefundRecordBiz.completeRecordStatus(crosstown.getId(), depositRefundRecordStatus);
orderMsgBiz.handelMsgDeposit(orderMQDTO.getOrderRentVehicleDetail(), orderMQDTO, userFeign.userDetailById(orderMQDTO.getUserId()).getData()); orderMsgBiz.handelMsgDeposit(orderMQDTO.getOrderRentVehicleDetail(), orderMQDTO, userFeign.userDetailById(orderMQDTO.getUserId()).getData());
} }
// else {
// //还车扣除款 剩余的 钱,再减去违章预备金
// BigDecimal originalRefundAmount = orderMQDTO.getOrderRentVehicleDetail().getReturnPayResidue();
// BigDecimal refundAmont = originalRefundAmount;
// String refundDesc = "退还剩余违章保证金:"+ refundAmont.toString();
//
// //已退还部分, 进行剩余的保留违章预备金 的退还
// //获取违章记录
// List<OrderViolation> orderViolations = orderViolationBiz.selectList(new OrderViolation(){{
// setDetailId(orderMQDTO.getOrderRentVehicleDetail().getId());
// }});
//
// if(orderViolations.size() > 0) {
// refundDesc += "(已扣除 违章金额:"+ illegalReserve.toString();
// for(OrderViolation ov : orderViolations) {
// refundDesc += ", "+ ov.getPrice();
// refundAmont = refundAmont.subtract(ov.getPrice());
// }
// refundDesc += ")";
// refundTrigger(orderMQDTO, orderMQDTO.getOrderRentVehicleDetail(), illegalReserve, originalRefundAmount, refundAmont, refundDesc, RefundStatusEnum.REFUND_DEPOSIT.getCode(), RefundTypeEnum.RESIDUE_DEPOSIT);
// }
// }
} }
public void refundTrigger(BaseOrder baseOrder, OrderRentVehicleDetail orvd, BigDecimal residueAmount, BigDecimal originalRefundAmount, BigDecimal refundAmont, String refundDesc, Integer refundStatus, RefundTypeEnum refundTypeEnum) { public void refundTrigger(BaseOrder baseOrder, OrderRentVehicleDetail orvd, BigDecimal residueAmount, BigDecimal originalRefundAmount, BigDecimal refundAmont, String refundDesc, Integer refundStatus, RefundTypeEnum refundTypeEnum) {
...@@ -162,46 +140,52 @@ public class OrderRefundBiz extends BaseBiz<OrderRefundMapper,OrderRefund> { ...@@ -162,46 +140,52 @@ public class OrderRefundBiz extends BaseBiz<OrderRefundMapper,OrderRefund> {
} }
/** /**
* 租车退款流程(不含押金的通用方法) * 租车(包括旅游)退款流程
* @param baseOrder * @param baseOrder
* @param startTime
* @param dicParentKey
*/
public void rentRefundProcess(BaseOrder baseOrder, Long startTime, String dicParentKey){
rentRefundProcess(baseOrder, BigDecimal.ZERO, startTime, dicParentKey);
}
/**
* 租车(包括旅游)退款流程(含押金)
* @param baseOrder
* @param depositAmount
* @param timeLag 与开始时间的时间差 * @param timeLag 与开始时间的时间差
* @param dicParentKey * @param dicParentKey
*/ */
public void rentRefundProcess(BaseOrder baseOrder, BigDecimal depositAmount, Long timeLag, String dicParentKey) { public void rentRefundProcess(BaseOrder baseOrder, Long timeLag, String dicParentKey) {
//计算退款金额 //计算退款金额
// 1、押金 + 租金(规则扣除) //商品价格 - 优惠券减免的价格
BigDecimal originalRefundAmount = BigDecimal.ZERO.add(baseOrder.getGoodsAmount().subtract(baseOrder.getCouponAmount())); BigDecimal originalRefundAmount = BigDecimal.ZERO.add(baseOrder.getGoodsAmount().subtract(baseOrder.getCouponAmount()));
StringBuilder refundDescBuilder = new StringBuilder("取消订单退款:"); StringBuilder refundDescBuilder = new StringBuilder("取消订单退款:");
if(null == depositAmount) {
depositAmount = BigDecimal.ZERO;
}else {
//触发押金退款
refundSubProcess(baseOrder, refundDescBuilder.toString(), depositAmount, depositAmount, RefundTypeEnum.DEPOSIT.getCode(), RefundStatusEnum.ALL.getCode());
}
//商品价格 - 优惠券减免的价格
BigDecimal refundGoodsAmount = calculateRefund(originalRefundAmount, timeLag, dicParentKey, refundDescBuilder); BigDecimal refundGoodsAmount = calculateRefund(originalRefundAmount, timeLag, dicParentKey, refundDescBuilder);
refundGoodsAmount = refundGoodsAmount.setScale(2, RoundingMode.HALF_UP); refundGoodsAmount = refundGoodsAmount.setScale(2, RoundingMode.HALF_UP);
//退款金额 //退款金额
// BigDecimal refundAmount = depositAmount.add(refundGoodsAmount);
// originalRefundAmount = depositAmount.add(originalRefundAmount);
BigDecimal refundAmount = refundGoodsAmount; BigDecimal refundAmount = refundGoodsAmount;
//退款子流程: 订单基础,退款描述,退款金额 //退款子流程: 订单基础,退款描述,退款金额
refundSubProcess(baseOrder, refundDescBuilder.toString(), originalRefundAmount, refundAmount, RefundTypeEnum.ORDER_FUND.getCode(), RefundStatusEnum.ALL.getCode()); refundSubProcess(baseOrder, refundDescBuilder.toString(), originalRefundAmount, refundAmount, RefundTypeEnum.ORDER_FUND.getCode(), RefundStatusEnum.ALL.getCode());
} }
/**
* 租车押金退款流程
* @param baseOrder
* @param depositAmount
* @param timeLag 与开始时间的时间差
* @param dicParentKey
* @param originalDeductAmount
*/
public void rentRefundDepositProcess(BaseOrder baseOrder, BigDecimal depositAmount, Long timeLag, String dicParentKey, BigDecimal originalDeductAmount) {
// 1、押金 + 租金(规则扣除)
BigDecimal originalRefundAmount = BigDecimal.ZERO.add(depositAmount);
BigDecimal refundAmount = BigDecimal.ZERO.add(depositAmount);
StringBuilder refundDescBuilder = new StringBuilder("取消订单押金退款:");
if(null != originalDeductAmount && BigDecimal.ZERO.compareTo(originalDeductAmount) < 0) {
//通过原扣除款 计算剩余款
BigDecimal residueAmount = calculateRefund(originalDeductAmount, timeLag, dicParentKey, refundDescBuilder);
residueAmount = residueAmount.setScale(2, RoundingMode.HALF_UP);
//退款金额 :押金 - (原扣除款 - 剩余款)
refundAmount = originalRefundAmount.subtract(originalDeductAmount.subtract(residueAmount));
}
//触发押金退款
refundSubProcess(baseOrder, refundDescBuilder.toString(), originalRefundAmount, refundAmount, RefundTypeEnum.DEPOSIT.getCode(), RefundStatusEnum.ALL.getCode());
}
public BigDecimal calculateRefund(BigDecimal goodsAmount, Long timeLag, String dicParentKey, StringBuilder refundDescBuilder) { public BigDecimal calculateRefund(BigDecimal goodsAmount, Long timeLag, String dicParentKey, StringBuilder refundDescBuilder) {
BigDecimal refundGoodsAmount = goodsAmount; BigDecimal refundGoodsAmount = goodsAmount;
......
...@@ -8,10 +8,7 @@ import com.github.wxiaoqi.security.common.exception.BaseException; ...@@ -8,10 +8,7 @@ import com.github.wxiaoqi.security.common.exception.BaseException;
import com.github.wxiaoqi.security.common.util.IntervalUtil; import com.github.wxiaoqi.security.common.util.IntervalUtil;
import com.github.wxiaoqi.security.common.util.process.ResultCode; import com.github.wxiaoqi.security.common.util.process.ResultCode;
import com.xxfc.platform.order.biz.*; import com.xxfc.platform.order.biz.*;
import com.xxfc.platform.order.contant.enumerate.OrderStatusEnum; import com.xxfc.platform.order.contant.enumerate.*;
import com.xxfc.platform.order.contant.enumerate.OrderTypeEnum;
import com.xxfc.platform.order.contant.enumerate.RefundStatusEnum;
import com.xxfc.platform.order.contant.enumerate.RefundTypeEnum;
import com.xxfc.platform.order.entity.*; import com.xxfc.platform.order.entity.*;
import com.xxfc.platform.order.pojo.mq.OrderMQDTO; import com.xxfc.platform.order.pojo.mq.OrderMQDTO;
import com.xxfc.platform.tour.feign.TourFeign; import com.xxfc.platform.tour.feign.TourFeign;
...@@ -49,6 +46,9 @@ public class OrderCancelBiz { ...@@ -49,6 +46,9 @@ public class OrderCancelBiz {
@Autowired @Autowired
BaseOrderBiz baseOrderBiz; BaseOrderBiz baseOrderBiz;
@Autowired
OrderItemBiz orderItemBiz;
@Autowired @Autowired
OrderMemberDetailBiz orderMemberDetailBiz; OrderMemberDetailBiz orderMemberDetailBiz;
...@@ -119,18 +119,34 @@ public class OrderCancelBiz { ...@@ -119,18 +119,34 @@ public class OrderCancelBiz {
setOrderId(baseOrder.getId()); setOrderId(baseOrder.getId());
}}); }});
//原退还押金
BigDecimal freeDayAmount = BigDecimal.ZERO;
//判断是否使用免费天数,并且进行扣款
if(null != orvd.getFreeDays() && orvd.getFreeDays() > 0) {
OrderItem orderItem = orderItemBiz.selectOne(new OrderItem(){{
setType(ItemTypeEnum.VEHICLE_MODEL.getCode());
setOrderId(baseOrder.getId());
}});
freeDayAmount = orderItem.getUnitPrice().multiply(new BigDecimal(orvd.getFreeDays()+ ""));
}
//如果超过出发时间,不能取消订单 //如果超过出发时间,不能取消订单
//根据时间处理goodsAmount //根据时间处理goodsAmount
//获取出发时间 到现在 距离时间 //获取出发时间 到现在 距离时间
Long timeLag = orvd.getStartTime() - System.currentTimeMillis(); Long timeLag = orvd.getStartTime() - System.currentTimeMillis();
if(timeLag < 0) { //后面允许开始时间过后可以取消订单
throw new BaseException(ResultCode.FAILED_CODE, new HashSet<String>(){{ // if(timeLag < 0) {
add("已超过出发时间,不能取消订单"); // throw new BaseException(ResultCode.FAILED_CODE, new HashSet<String>(){{
}}); // add("已超过出发时间,不能取消订单");
} // }});
// }
//退款流程 //退款流程
orderRefundBiz.rentRefundProcess(hasUpdateOrder, orvd.getDeposit(), timeLag, APP_ORDER+ "_"+ RENT_REFUND); //退押金
orderRefundBiz.rentRefundDepositProcess(hasUpdateOrder, orvd.getDeposit(), timeLag, APP_ORDER+ "_"+ RENT_REFUND, freeDayAmount);
//退订单款
orderRefundBiz.rentRefundProcess(hasUpdateOrder, timeLag, APP_ORDER+ "_"+ RENT_REFUND);
//已付款的取消订单发送消息 //已付款的取消订单发送消息
try { try {
......
...@@ -71,74 +71,61 @@ public class RentDepositJobHandler extends IJobHandler { ...@@ -71,74 +71,61 @@ public class RentDepositJobHandler extends IJobHandler {
UserFeign userFeign; UserFeign userFeign;
@Override @Override
public ReturnT<String> execute(String idLastNumInterval) throws Exception { public ReturnT<String> execute(String idLastNumInterval) {
Map<String, Dictionary> dictionaryMap = thirdFeign.dictionaryGetAll4Map().getData(); Map<String, Dictionary> dictionaryMap = thirdFeign.dictionaryGetAll4Map().getData();
Integer rentDepositAutoRefundTime = new Integer(dictionaryMap.get(APP_ORDER+ "_"+ DictionaryKey.RENT_DEPOSIT_AUTO_REFUND_TIME).getDetail()); Integer rentDepositAutoRefundTime = new Integer(dictionaryMap.get(APP_ORDER+ "_"+ DictionaryKey.RENT_DEPOSIT_AUTO_REFUND_TIME).getDetail());
try { try {
// for(int i = 0; i < 10; i++) { List<BaseOrder> lists = baseOrderBiz.selectByExample(new Example.Builder(BaseOrder.class)
// if(IntervalUtil.staticIsInTheInterval(String.valueOf(i), idLastNumInterval)) { //订单已完成的租车订单
//三十天 .where(WeekendSqls.<BaseOrder>custom().andEqualTo(BaseOrder::getType, OrderTypeEnum.RENT_VEHICLE.getCode())
List<BaseOrder> lists = baseOrderBiz.selectByExample(new Example.Builder(BaseOrder.class) .andEqualTo(BaseOrder::getStatus, OrderStatusEnum.ORDER_FINISH.getCode()) //已完成的订单
//订单已完成的租车订单 .andEqualTo(BaseOrder::getRefundStatus, RefundStatusEnum.RESIDUE_ILLEGAL.getCode()) //已归还了部分押金
.where(WeekendSqls.<BaseOrder>custom().andEqualTo(BaseOrder::getType, OrderTypeEnum.RENT_VEHICLE.getCode()) .andLessThanOrEqualTo(BaseOrder::getCrtTime, DateUtil.date(System.currentTimeMillis() - (rentDepositAutoRefundTime * 60 * 1000)))
.andEqualTo(BaseOrder::getStatus, OrderStatusEnum.ORDER_FINISH.getCode()) //已完成的订单
.andEqualTo(BaseOrder::getRefundStatus, RefundStatusEnum.RESIDUE_ILLEGAL.getCode()) //已归还了部分押金
.andLessThanOrEqualTo(BaseOrder::getCrtTime, DateUtil.date(System.currentTimeMillis() - (rentDepositAutoRefundTime * 60 * 1000)))
// .andLike(BaseOrder::getId, "%"+ i) // .andLike(BaseOrder::getId, "%"+ i)
).build()); ).build());
//处理自动退剩余押金 //处理自动退剩余押金
for(BaseOrder baseOrder : lists) { for(BaseOrder baseOrder : lists) {
OrderRentVehicleDetail orvd = orderRentVehicleBiz.selectOne(new OrderRentVehicleDetail() {{ OrderRentVehicleDetail orvd = orderRentVehicleBiz.selectOne(new OrderRentVehicleDetail() {{
setOrderId(baseOrder.getId()); setOrderId(baseOrder.getId());
}}); }});
Integer crosstownTypeEnum; Integer crosstownTypeEnum;
//判断是否定损过 //判断是否定损过
if(SYS_TRUE.equals(orvd.getFixedLossStatus())) { if(SYS_TRUE.equals(orvd.getFixedLossStatus())) {
crosstownTypeEnum = CrosstownTypeEnum.FIXED_LOSS.getCode(); crosstownTypeEnum = CrosstownTypeEnum.FIXED_LOSS.getCode();
}else { }else {
crosstownTypeEnum = CrosstownTypeEnum.ARRIVE.getCode(); crosstownTypeEnum = CrosstownTypeEnum.ARRIVE.getCode();
} }
OrderVehicleCrosstown crosstown = crosstownBiz.selectOne(new OrderVehicleCrosstown(){{ OrderVehicleCrosstown crosstown = crosstownBiz.selectOne(new OrderVehicleCrosstown(){{
setOrderId(baseOrder.getId()); setOrderId(baseOrder.getId());
setType(crosstownTypeEnum); setType(crosstownTypeEnum);
}}); }});
if(crosstown.getCrtTime().compareTo(System.currentTimeMillis() - (rentDepositAutoRefundTime * 60 * 1000)) < 0) { if(crosstown.getCrtTime().compareTo(System.currentTimeMillis() - (rentDepositAutoRefundTime * 60 * 1000)) < 0) {
OrderViolation orderViolation = orderViolationBiz.selectOne(new OrderViolation(){{ OrderViolation orderViolation = orderViolationBiz.selectOne(new OrderViolation(){{
setDetailId(orvd.getId()); setDetailId(orvd.getId());
setIsDel(SYS_FALSE); setIsDel(SYS_FALSE);
}}); }});
String refundDesc = "退还押金:"; String refundDesc = "退还押金:";
BigDecimal refundAmont; BigDecimal refundAmont;
if(null != orderViolation) { if(null != orderViolation) {
//还车扣除款 剩余的 钱,再减去违章预备金 //还车扣除款 剩余的 钱,再减去违章预备金
refundAmont = orvd.getReturnPayResidue().subtract(orderViolation.getPrice()); refundAmont = orvd.getReturnPayResidue().subtract(orderViolation.getPrice());
refundDesc += refundAmont.toString()+ "(已扣除 违章扣款:"+ refundAmont.toString(); refundDesc += refundAmont.toString()+ "(已扣除 违章扣款:"+ refundAmont.toString();
refundDesc += ")"; refundDesc += ")";
}else { }else {
refundAmont = orvd.getReturnPayResidue(); refundAmont = orvd.getReturnPayResidue();
refundDesc += refundAmont.toString(); refundDesc += refundAmont.toString();
}
orderRefundBiz.refundTrigger(baseOrder, orvd, BigDecimal.ZERO, orvd.getReturnPayResidue(), refundAmont, refundDesc, RefundStatusEnum.REFUND_DEPOSIT.getCode(), RefundTypeEnum.RESIDUE_DEPOSIT);
orderDepositRefundRecordBiz.completeRecordStatus(crosstown.getId(), DepositRefundStatus.VIOLATIONARRIVAL);
orderMsgBiz.handelMsgDeposit(orvd, baseOrder, userFeign.userDetailById(baseOrder.getUserId()).getData());
}
//获取交车时间
// List<OrderVehicleCrosstown> crosstowns = crosstownBiz.selectByExample(
// new Example.Builder(BaseOrder.class)
// .where(WeekendSqls.<OrderVehicleCrosstown>custom()
// .andIn(OrderVehicleCrosstown::getType, Lists.newArrayList(CrosstownTypeEnum.ARRIVE.getCode(), CrosstownTypeEnum.FIXED_LOSS.getCode()))
// .andEqualTo(OrderVehicleCrosstown::getOrderId, baseOrder.getId())).build());
} }
orderRefundBiz.refundTrigger(baseOrder, orvd, BigDecimal.ZERO, orvd.getReturnPayResidue(), refundAmont, refundDesc, RefundStatusEnum.REFUND_DEPOSIT.getCode(), RefundTypeEnum.RESIDUE_DEPOSIT);
orderDepositRefundRecordBiz.completeRecordStatus(crosstown.getId(), DepositRefundStatus.VIOLATIONARRIVAL);
orderMsgBiz.handelMsgDeposit(orvd, baseOrder, userFeign.userDetailById(baseOrder.getUserId()).getData());
}
// } }
// }
ReturnT returnT = new ReturnT(); ReturnT returnT = new ReturnT();
returnT.setCode(100); returnT.setCode(100);
returnT.setMsg("成功"); returnT.setMsg("成功");
......
...@@ -8,10 +8,14 @@ import com.github.wxiaoqi.security.common.rest.BaseController; ...@@ -8,10 +8,14 @@ import com.github.wxiaoqi.security.common.rest.BaseController;
import com.github.wxiaoqi.security.common.util.Query; import com.github.wxiaoqi.security.common.util.Query;
import com.github.wxiaoqi.security.common.vo.PageParam; import com.github.wxiaoqi.security.common.vo.PageParam;
import com.xxfc.platform.order.biz.BaseOrderBiz; import com.xxfc.platform.order.biz.BaseOrderBiz;
import com.xxfc.platform.order.biz.OrderItemBiz;
import com.xxfc.platform.order.biz.OrderRefundBiz; import com.xxfc.platform.order.biz.OrderRefundBiz;
import com.xxfc.platform.order.biz.inner.OrderCancelBiz; import com.xxfc.platform.order.biz.inner.OrderCancelBiz;
import com.xxfc.platform.order.contant.enumerate.ItemTypeEnum;
import com.xxfc.platform.order.contant.enumerate.OrderTypeEnum; import com.xxfc.platform.order.contant.enumerate.OrderTypeEnum;
import com.xxfc.platform.order.entity.OrderItem;
import com.xxfc.platform.order.entity.OrderRefund; import com.xxfc.platform.order.entity.OrderRefund;
import com.xxfc.platform.order.entity.OrderRentVehicleDetail;
import com.xxfc.platform.order.pojo.order.OrderPageVO; import com.xxfc.platform.order.pojo.order.OrderPageVO;
import com.xxfc.platform.universal.constant.DictionaryKey; import com.xxfc.platform.universal.constant.DictionaryKey;
import lombok.Data; import lombok.Data;
...@@ -23,11 +27,11 @@ import org.springframework.web.bind.annotation.RequestMethod; ...@@ -23,11 +27,11 @@ import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.ResponseBody;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode;
import static com.github.wxiaoqi.security.common.constant.CommonConstants.SYS_FALSE; import static com.github.wxiaoqi.security.common.constant.CommonConstants.SYS_FALSE;
import static com.github.wxiaoqi.security.common.constant.CommonConstants.SYS_TRUE; import static com.github.wxiaoqi.security.common.constant.CommonConstants.SYS_TRUE;
import static com.xxfc.platform.universal.constant.DictionaryKey.TOUR_IN_REFUND; import static com.xxfc.platform.universal.constant.DictionaryKey.*;
import static com.xxfc.platform.universal.constant.DictionaryKey.TOUR_REFUND;
@Controller @Controller
@RequestMapping("orderRefund") @RequestMapping("orderRefund")
...@@ -39,6 +43,9 @@ public class OrderRefundController extends BaseController<OrderRefundBiz,OrderRe ...@@ -39,6 +43,9 @@ public class OrderRefundController extends BaseController<OrderRefundBiz,OrderRe
@Autowired @Autowired
OrderRefundBiz orderRefundBiz; OrderRefundBiz orderRefundBiz;
@Autowired
OrderItemBiz orderItemBiz;
@Autowired @Autowired
UserFeign userFeign; UserFeign userFeign;
...@@ -67,8 +74,29 @@ public class OrderRefundController extends BaseController<OrderRefundBiz,OrderRe ...@@ -67,8 +74,29 @@ public class OrderRefundController extends BaseController<OrderRefundBiz,OrderRe
case RENT_VEHICLE: case RENT_VEHICLE:
orderRefundAmount = orderRefundBiz.calculateRefund(orderPageVO.getGoodsAmount().subtract(orderPageVO.getCouponAmount()) orderRefundAmount = orderRefundBiz.calculateRefund(orderPageVO.getGoodsAmount().subtract(orderPageVO.getCouponAmount())
, orderPageVO.getOrderRentVehicleDetail().getStartTime() - System.currentTimeMillis() , orderPageVO.getOrderRentVehicleDetail().getStartTime() - System.currentTimeMillis()
, DictionaryKey.APP_ORDER+ "_"+ DictionaryKey.RENT_REFUND , DictionaryKey.APP_ORDER+ "_"+ RENT_REFUND
, refundDescBuilder); , refundDescBuilder);
OrderRentVehicleDetail orvd = orderPageVO.getOrderRentVehicleDetail();
Long timeLag = orvd.getStartTime() - System.currentTimeMillis();
//原退还押金
BigDecimal originalDeductAmount = BigDecimal.ZERO;
BigDecimal originalRefundAmount = BigDecimal.ZERO.add(orvd.getDeposit());
//判断是否使用免费天数,并且进行扣款
if(null != orvd.getFreeDays() && orvd.getFreeDays() > 0) {
refundDescBuilder = new StringBuilder("");
OrderItem orderItem = orderItemBiz.selectOne(new OrderItem(){{
setType(ItemTypeEnum.VEHICLE_MODEL.getCode());
setOrderId(orderPageVO.getId());
}});
originalDeductAmount = orderItem.getUnitPrice().multiply(new BigDecimal(orvd.getFreeDays()+ ""));
}
BigDecimal residueAmount = orderRefundBiz.calculateRefund(originalDeductAmount, timeLag, APP_ORDER+ "_"+ RENT_REFUND, refundDescBuilder);
residueAmount = residueAmount.setScale(2, RoundingMode.HALF_UP);
//押金剩余款 :押金 - (原扣除款 - 剩余款)
//退款金额 :订单剩余款 + 押金剩余款
orderRefundAmount = orderRefundAmount.add(originalRefundAmount.subtract(originalDeductAmount.subtract(residueAmount)));
break; break;
case TOUR: case TOUR:
//判断是省内还是省外 //判断是省内还是省外
......
...@@ -16,7 +16,7 @@ public enum BehaviorEnum { ...@@ -16,7 +16,7 @@ public enum BehaviorEnum {
/** /**
* 立即前往(弹窗) * 立即前往(弹窗)
*/ */
DIALOG_WINDOW_TO(1, "立即前往(活动详情页)"), DIALOG_WINDOW_TO(1, "立即前往(弹窗)"),
/** /**
* banner 点击 * banner 点击
...@@ -26,12 +26,12 @@ public enum BehaviorEnum { ...@@ -26,12 +26,12 @@ public enum BehaviorEnum {
/** /**
* 精彩活动点击 * 精彩活动点击
*/ */
WONDERFUL_ACTIVITY_CLICK(3, "精活动点击"), WONDERFUL_ACTIVITY_CLICK(3, "精活动点击"),
/** /**
* 注册 * 注册
*/ */
REGISTRY(4, "注册"), REGISTRY(4, "注册成功"),
/** /**
* 活动页面访问量 * 活动页面访问量
...@@ -46,7 +46,7 @@ public enum BehaviorEnum { ...@@ -46,7 +46,7 @@ public enum BehaviorEnum {
/** /**
* 分享 * 分享
*/ */
SHARE(7, "分享"), SHARE(7, "成功分享"),
/** /**
* App访问 * App访问
...@@ -61,7 +61,12 @@ public enum BehaviorEnum { ...@@ -61,7 +61,12 @@ public enum BehaviorEnum {
/** /**
* 成功邀请人数大于10 * 成功邀请人数大于10
*/ */
SUCCESS_MORE_10_INVIT(10,"成功邀请人数大于10"); SUCCESS_MORE_10_INVIT(10,"成功邀请人数大于10"),
/**
* 立即领取(活动详情页)
*/
IMMEDIATELY_TO_RECEIVE(11,"立即领取(活动详情页)");
BehaviorEnum(int code, String name) { BehaviorEnum(int code, String name) {
this.code = code; this.code = code;
......
package com.xxfc.platform.user.behavior.dto;
import lombok.Data;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/8/13 14:16
*/
@Data
public class ActivityBehaviorDTO {
private Integer activityId;
private Integer behaviorTypeId;
}
package com.xxfc.platform.user.behavior.dto;
import lombok.Data;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/8/13 17:05
*/
@Data
public class ActivityBehaviorRelationDTO {
/**
* @see com.xxfc.platform.user.behavior.common.BehaviorEnum
* 行为类型
*/
private Integer type;
/**
* 业务id (banner 精彩活动 app弹窗)
*/
private Integer bizId;
/**
* 活动id
*/
private Integer activityId;
}
package com.xxfc.platform.user.behavior.dto;
import lombok.Data;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/8/13 14:16
*/
@Data
public class BehaviorTypeDTO {
private String name;
private Integer code;
}
package com.xxfc.platform.user.behavior.entity;
import lombok.Data;
import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/8/13 14:02
*/
@Data
@Table(name = "activity_behavior")
public class ActivityBehavior {
@Id
@GeneratedValue(generator = "JDBC")
private Integer id;
@Column(name = "activity_id")
private Integer activityId;
@Column(name = "behavior_type_id")
private Integer behaviorTypeId;
}
package com.xxfc.platform.user.behavior.entity;
import lombok.Data;
import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/8/13 17:05
*/
@Data
@Table(name = "activity_behavior_relation")
public class ActivityBehaviorRelation {
@Id
@GeneratedValue(generator = "JDBC")
private Integer id;
/**
* @see com.xxfc.platform.user.behavior.common.BehaviorEnum
* 行为类型
*/
private Integer type;
/**
* 业务id (banner 精彩活动 app弹窗)
*/
@Column(name = "biz_id")
private Integer bizId;
/**
* 活动id
*/
@Column(name = "activity_id")
private Integer activityId;
}
package com.xxfc.platform.user.behavior.entity;
import lombok.Data;
import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/8/13 14:02
*/
@Data
@Table(name = "behavior_type")
public class BehaviorType {
@Id
@GeneratedValue(generator = "JDBC")
private Integer id;
@Column(name = "name")
private String name;
@Column(name = "code")
private Integer code;
}
...@@ -19,7 +19,7 @@ import java.io.Serializable; ...@@ -19,7 +19,7 @@ import java.io.Serializable;
@AllArgsConstructor @AllArgsConstructor
public class BehaviorNoteCollectVo implements Serializable { public class BehaviorNoteCollectVo implements Serializable {
/** /**
* @see com.xxfc.platform.user.behavior.common.BehaviorEnum + 成功邀请人数 ,邀请人数>=10 ,App 访问量 * @see com.xxfc.platform.user.behavior.common.BehaviorEnum
* 行为 * 行为
*/ */
private String behavior; private String behavior;
......
...@@ -2,6 +2,7 @@ package com.xxfc.platform.user.behavior; ...@@ -2,6 +2,7 @@ package com.xxfc.platform.user.behavior;
import org.springframework.boot.SpringApplication; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients; import org.springframework.cloud.openfeign.EnableFeignClients;
import tk.mybatis.spring.annotation.MapperScan; import tk.mybatis.spring.annotation.MapperScan;
...@@ -13,9 +14,12 @@ import tk.mybatis.spring.annotation.MapperScan; ...@@ -13,9 +14,12 @@ import tk.mybatis.spring.annotation.MapperScan;
* @data 2019/8/12 10:04 * @data 2019/8/12 10:04
*/ */
@EnableDiscoveryClient @EnableDiscoveryClient
@EnableFeignClients(basePackages = "com.xxfc.platform.*.feign") @EnableFeignClients(basePackages = {"com.xxfc.platform.*.feign","com.github.wxiaoqi.security.*.feign"})
@MapperScan(basePackages = "com.xxfc.platform.user.behavior.mapper") @MapperScan(basePackages = "com.xxfc.platform.user.behavior.mapper")
@SpringBootApplication @SpringBootApplication(scanBasePackages ={
"com.xxfc.platform",
"com.github.wxiaoqi.security.admin.support"
},exclude = {MongoAutoConfiguration.class})
public class UserBeHaviorApplication { public class UserBeHaviorApplication {
public static void main(String[] args) { public static void main(String[] args) {
SpringApplication.run(UserBeHaviorApplication.class,args); SpringApplication.run(UserBeHaviorApplication.class,args);
......
package com.xxfc.platform.user.behavior.biz;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.xxfc.platform.user.behavior.dto.ActivityBehaviorDTO;
import com.xxfc.platform.user.behavior.entity.ActivityBehavior;
import com.xxfc.platform.user.behavior.mapper.ActivityBehaviorMapper;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/8/13 14:10
*/
@Service
@Transactional(rollbackFor = Exception.class)
public class ActivityBehaviorBiz extends BaseBiz<ActivityBehaviorMapper, ActivityBehavior> {
public List<ActivityBehaviorDTO> findActivityBehaviorsByActivityId(Integer activityId){
return mapper.selectbyActivityId(activityId);
}
}
package com.xxfc.platform.user.behavior.biz;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.xxfc.platform.user.behavior.dto.ActivityBehaviorRelationDTO;
import com.xxfc.platform.user.behavior.entity.ActivityBehaviorRelation;
import com.xxfc.platform.user.behavior.mapper.ActivityBehaviorRelationMapper;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/8/13 17:12
*/
@Service
@Transactional(rollbackFor = Exception.class)
public class ActivityBehaviorRelationBiz extends BaseBiz<ActivityBehaviorRelationMapper, ActivityBehaviorRelation> {
public List<ActivityBehaviorRelationDTO> findActivityBehaviorRelationsByActivityId(Integer activityId){
return mapper.selectAllByActivityId(activityId);
}
}
package com.xxfc.platform.user.behavior.biz;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.xxfc.platform.user.behavior.dto.BehaviorTypeDTO;
import com.xxfc.platform.user.behavior.entity.BehaviorType;
import com.xxfc.platform.user.behavior.mapper.BehaviorTypeMapper;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/8/13 14:09
*/
@Service
@Transactional(rollbackFor = Exception.class)
public class BehaviorTypeBiz extends BaseBiz<BehaviorTypeMapper, BehaviorType> {
public List<BehaviorTypeDTO> findBehaviorTypesByIds(List<Integer> typeIds){
return mapper.selectAllByIdList(typeIds);
}
}
...@@ -5,6 +5,9 @@ import com.xxfc.platform.activity.dto.ActivityListDTO; ...@@ -5,6 +5,9 @@ import com.xxfc.platform.activity.dto.ActivityListDTO;
import com.xxfc.platform.activity.dto.ActivityPopularizeRelationDTO; import com.xxfc.platform.activity.dto.ActivityPopularizeRelationDTO;
import com.xxfc.platform.activity.feign.ActivityFeign; import com.xxfc.platform.activity.feign.ActivityFeign;
import com.xxfc.platform.user.behavior.common.BehaviorEnum; import com.xxfc.platform.user.behavior.common.BehaviorEnum;
import com.xxfc.platform.user.behavior.dto.ActivityBehaviorDTO;
import com.xxfc.platform.user.behavior.dto.ActivityBehaviorRelationDTO;
import com.xxfc.platform.user.behavior.dto.BehaviorTypeDTO;
import com.xxfc.platform.user.behavior.dto.CustomerBehaviorNoteDTO; import com.xxfc.platform.user.behavior.dto.CustomerBehaviorNoteDTO;
import com.xxfc.platform.user.behavior.entity.CustomerBehaviorNotes; import com.xxfc.platform.user.behavior.entity.CustomerBehaviorNotes;
import com.xxfc.platform.user.behavior.mapper.CustomerBehaviorNotesMapper; import com.xxfc.platform.user.behavior.mapper.CustomerBehaviorNotesMapper;
...@@ -14,10 +17,12 @@ import org.apache.commons.collections.CollectionUtils; ...@@ -14,10 +17,12 @@ import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.time.Instant; import java.time.Instant;
import java.time.temporal.ChronoUnit; import java.time.temporal.ChronoUnit;
import java.util.*; import java.util.*;
import java.util.concurrent.atomic.AtomicLong;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
...@@ -28,11 +33,18 @@ import java.util.stream.Collectors; ...@@ -28,11 +33,18 @@ import java.util.stream.Collectors;
* @date 2019-08-12 14:03:55 * @date 2019-08-12 14:03:55
*/ */
@Service @Service
@Transactional(rollbackFor = Exception.class)
@RequiredArgsConstructor(onConstructor = @__({@Autowired})) @RequiredArgsConstructor(onConstructor = @__({@Autowired}))
public class CustomerBehaviorNotesBiz extends BaseBiz<CustomerBehaviorNotesMapper, CustomerBehaviorNotes> { public class CustomerBehaviorNotesBiz extends BaseBiz<CustomerBehaviorNotesMapper, CustomerBehaviorNotes> {
private final ActivityFeign activityFeign; private final ActivityFeign activityFeign;
private final BehaviorTypeBiz behaviorTypeBiz;
private final ActivityBehaviorBiz activityBehaviorBiz;
private final ActivityBehaviorRelationBiz activityBehaviorRelationBiz;
public void saveCustomerBehavior(CustomerBehaviorNoteDTO customerBehaviorNoteDTO) { public void saveCustomerBehavior(CustomerBehaviorNoteDTO customerBehaviorNoteDTO) {
CustomerBehaviorNotes customerBehaviorNotes = new CustomerBehaviorNotes(); CustomerBehaviorNotes customerBehaviorNotes = new CustomerBehaviorNotes();
BeanUtils.copyProperties(customerBehaviorNoteDTO, customerBehaviorNotes); BeanUtils.copyProperties(customerBehaviorNoteDTO, customerBehaviorNotes);
...@@ -43,82 +55,196 @@ public class CustomerBehaviorNotesBiz extends BaseBiz<CustomerBehaviorNotesMappe ...@@ -43,82 +55,196 @@ public class CustomerBehaviorNotesBiz extends BaseBiz<CustomerBehaviorNotesMappe
public List<BehaviorNoteCollectVo> findBehaviorCollectByActivityId(Integer activityId, Long startTime, Long endTime) { public List<BehaviorNoteCollectVo> findBehaviorCollectByActivityId(Integer activityId, Long startTime, Long endTime) {
List<BehaviorNoteCollectVo> behaviorNoteCollectVos = new ArrayList<>(); List<BehaviorNoteCollectVo> behaviorNoteCollectVos = new ArrayList<>();
List<CustomerBehaviorNotes> customerBehaviorNotes = mapper.selectByActivityIdAndTime(activityId,startTime,endTime);
boolean isEmpty = CollectionUtils.isEmpty(customerBehaviorNotes); //1.根据活动id查询活动行为
List<ActivityPopularizeRelationDTO> popularizeRelations = new ArrayList<>(); List<ActivityBehaviorDTO> activityBehaviorDTOS = activityBehaviorBiz.findActivityBehaviorsByActivityId(activityId);
Map<Integer, List<CustomerBehaviorNotes>> behaviorAndDataMap = null; if (CollectionUtils.isEmpty(activityBehaviorDTOS)) {
if (!isEmpty) { return Collections.EMPTY_LIST;
//邀请成功记录 }
popularizeRelations= activityFeign.findActivityPopularizeRelationByActivityIdAndTime(activityId, startTime, endTime); List<Integer> behaviorTypeIds = activityBehaviorDTOS.stream().map(ActivityBehaviorDTO::getBehaviorTypeId).collect(Collectors.toList());
behaviorAndDataMap= customerBehaviorNotes.stream().collect(Collectors.groupingBy(CustomerBehaviorNotes::getType, Collectors.toList())); //根据活动行为ids查询行为
List<BehaviorTypeDTO> behaviorTypeDTOS = behaviorTypeBiz.findBehaviorTypesByIds(behaviorTypeIds);
List<Integer> behaviorCodes = behaviorTypeDTOS.stream().map(BehaviorTypeDTO::getCode).collect(Collectors.toList());
//过滤出活动行为的枚举类
Set<BehaviorEnum> behaviorEnums = EnumSet.allOf(BehaviorEnum.class).stream().filter(behaviorEnum -> behaviorCodes.contains(behaviorEnum.getCode())).collect(Collectors.toSet());
//2.获取时间间隔和开始时间与结束时间转换
AtomicLong startAtomic = new AtomicLong(startTime == null ? 0 : startTime);
AtomicLong endAtomic = new AtomicLong(endTime == null ? 0 : endTime);
long between_day = getBetweenDayAndprocessStartTimeAndEndTime(activityId, startAtomic, endAtomic);
//3.根据活动id 、开始时间、结束时间查询统计数据
List<CustomerBehaviorNotes> customerBehaviorNotes = mapper.selectByActivityIdAndTime(activityId, startAtomic.get(), endAtomic.get());
Map<Integer, List<CustomerBehaviorNotes>> behaviorAndDataMap = new HashMap<>(20);
if (CollectionUtils.isNotEmpty(customerBehaviorNotes)) {
behaviorAndDataMap = customerBehaviorNotes.stream().collect(Collectors.groupingBy(CustomerBehaviorNotes::getType, Collectors.toList()));
} }
//获取时间间隔 //4.邀请成功记录
long between_day = getBetween_day(activityId, startTime, endTime); List<ActivityPopularizeRelationDTO> popularizeRelations = activityFeign.findActivityPopularizeRelationByActivityIdAndTime(activityId, startAtomic.get(), endAtomic.get());
//5.查询banner点击 弹窗曝光,立即前往,精选活动数据
List<ActivityBehaviorRelationDTO> activityBehaviorRelations = activityBehaviorRelationBiz.findActivityBehaviorRelationsByActivityId(activityId);
Map<Integer, List<CustomerBehaviorNotes>> behaviorTypeAndDataOfBizMap = new HashMap<>(20);
if (CollectionUtils.isNotEmpty(activityBehaviorRelations)) {
List<Integer> bizIds = activityBehaviorRelations.stream().map(ActivityBehaviorRelationDTO::getBizId).collect(Collectors.toList());
List<CustomerBehaviorNotes> customerBehaviorNotesbiz = mapper.selectAllByTypeIdsAndTime(bizIds, startAtomic.get(), endAtomic.get());
//业务数据转换map
if (CollectionUtils.isNotEmpty(customerBehaviorNotesbiz)) {
behaviorTypeAndDataOfBizMap = customerBehaviorNotesbiz.stream().collect(Collectors.groupingBy(CustomerBehaviorNotes::getType, Collectors.toList()));
}
}
between_day = Math.abs(between_day)==0?1:Math.abs(between_day); //6.数据统计处理
EnumSet<BehaviorEnum> behaviorEnums = EnumSet.allOf(BehaviorEnum.class);
BehaviorNoteCollectVo behaviorNoteCollectVo; BehaviorNoteCollectVo behaviorNoteCollectVo;
for (BehaviorEnum behaviorEnum : behaviorEnums) { for (BehaviorEnum behaviorEnum : behaviorEnums) {
behaviorNoteCollectVo = new BehaviorNoteCollectVo(); behaviorNoteCollectVo = new BehaviorNoteCollectVo();
behaviorNoteCollectVo.setBehavior(behaviorEnum.getName()); behaviorNoteCollectVo.setBehavior(behaviorEnum.getName());
if (isEmpty) { long default_p_total, default_p_avg;
behaviorNoteCollectVos.add(behaviorNoteCollectVo); ActionAcount actionAcount;
continue; switch (behaviorEnum) {
} else { //成功邀请人数统计
long default_p_total,default_p_avg,default_u_total,default_u_avg; case SUCCESS_INVIT:
switch (behaviorEnum) { actionAcount = new ActionAcount();
case SUCCESS_INVIT: default_p_total = popularizeRelations.size();
default_p_total = popularizeRelations.size(); default_p_avg = (default_p_total / between_day);
default_p_avg= (default_p_total / between_day); actionAcount.setDefault_p_total(default_p_total);
default_u_total = default_p_total; actionAcount.setDefault_p_avg(default_p_avg);
default_u_avg = default_p_avg; actionAcount.setDefault_u_total(default_p_total);
break; actionAcount.setDefault_u_avg(default_p_avg);
case SUCCESS_MORE_10_INVIT: break;
default_p_total = popularizeRelations.stream().collect(Collectors.groupingBy(ActivityPopularizeRelationDTO::getMajorUserId, Collectors.counting())).values().stream().filter(x -> x >= 10).count(); //成功邀请人数大于10的统计
default_p_avg = default_p_total / between_day; case SUCCESS_MORE_10_INVIT:
default_u_total = default_p_total; actionAcount = new ActionAcount();
default_u_avg = default_p_avg; default_p_total = popularizeRelations.stream().collect(Collectors.groupingBy(ActivityPopularizeRelationDTO::getMajorUserId, Collectors.counting())).values().stream().filter(x -> x >= 10).count();
break; default_p_avg = default_p_total / between_day;
default: actionAcount.setDefault_p_total(default_p_total);
//访问量 actionAcount.setDefault_p_avg(default_p_avg);
List<CustomerBehaviorNotes> customerBehaviors = behaviorAndDataMap==null?Collections.EMPTY_LIST:behaviorAndDataMap.get(behaviorEnum.getCode()); actionAcount.setDefault_u_total(default_p_total);
boolean typeIsEmpty = CollectionUtils.isEmpty(customerBehaviors); actionAcount.setDefault_u_avg(default_p_avg);
default_p_total = typeIsEmpty?0:customerBehaviors.size(); break;
default_p_avg = default_p_total / between_day; //App访问量统计
//用户访问量 case APP_VISIT_COUNT:
Set<CustomerBehaviorNotes> customerBehaviorsSet = new HashSet<>(typeIsEmpty?Collections.EMPTY_SET:customerBehaviors); actionAcount = new ActionAcount();
default_u_total = customerBehaviorsSet.size(); default_p_total = mapper.selectAppVvisitsByType(BehaviorEnum.APP_VISIT_COUNT.getCode());
default_u_avg = default_u_total / between_day; default_p_avg = default_p_total / between_day;
break; actionAcount.setDefault_p_total(default_p_total);
} actionAcount.setDefault_p_avg(default_p_avg);
behaviorNoteCollectVo.setP_count(default_p_total); actionAcount.setDefault_u_total(default_p_total);
behaviorNoteCollectVo.setP_avg_count(default_p_avg); actionAcount.setDefault_u_avg(default_p_avg);
behaviorNoteCollectVo.setU_count(default_u_total); break;
behaviorNoteCollectVo.setU_avg_count(default_u_avg); //banner点击 精选活动 立即前往 弹窗曝光 数据统计
behaviorNoteCollectVos.add(behaviorNoteCollectVo); case BANNER_CLICK:
case WONDERFUL_ACTIVITY_CLICK:
case DIALOG_WINDOW_TO:
case DIALOG_WINDOW:
actionAcount = new ActionAcount(between_day, behaviorTypeAndDataOfBizMap).invoke(behaviorEnum);
break;
//其它类型的数据统计
default:
actionAcount = new ActionAcount(between_day, behaviorAndDataMap).invoke(behaviorEnum);
break;
} }
behaviorNoteCollectVo.setP_count(actionAcount.getDefault_p_total());
behaviorNoteCollectVo.setP_avg_count(actionAcount.getDefault_p_avg());
behaviorNoteCollectVo.setU_count(actionAcount.getDefault_u_total());
behaviorNoteCollectVo.setU_avg_count(actionAcount.getDefault_u_avg());
behaviorNoteCollectVos.add(behaviorNoteCollectVo);
} }
return behaviorNoteCollectVos; return behaviorNoteCollectVos;
} }
private long getBetween_day(Integer activityId, Long startTime, Long endTime) { /**
long between_day = 0; * 获取时间间隔 和 开始与结束时间的处理
if (startTime!=null && endTime !=null){ * @param activityId 活动id
between_day = ChronoUnit.DAYS.between(Instant.ofEpochMilli(startTime), Instant.ofEpochMilli(endTime)); * @param startTime 筛选的开始时间
}else { * @param endTime 筛选的结束时间
* @return
*/
private long getBetweenDayAndprocessStartTimeAndEndTime(Integer activityId, AtomicLong startTime, AtomicLong endTime) {
if (startTime.get() == 0 || endTime.get() == 0) {
ActivityListDTO activityListDTO = activityFeign.findActivityStartTimeAndEndTimeById(activityId); ActivityListDTO activityListDTO = activityFeign.findActivityStartTimeAndEndTimeById(activityId);
if (startTime!=null){ Instant now = Instant.now();
between_day = ChronoUnit.DAYS.between(Instant.ofEpochMilli(startTime),Instant.now()); if (startTime.get() != 0) {
endTime.set(now.toEpochMilli());
} }
if (endTime!=null){ if (endTime.get() != 0) {
between_day = ChronoUnit.DAYS.between(Instant.ofEpochMilli(activityListDTO.getActivity_startTime()),Instant.ofEpochMilli(endTime)); startTime.set(activityListDTO.getActivity_startTime());
} }
if (startTime == null && endTime == null){ if (startTime.get() == 0 && endTime.get() == 0) {
between_day = ChronoUnit.DAYS.between(Instant.ofEpochMilli(activityListDTO.getActivity_startTime()),Instant.now()); startTime.set(activityListDTO.getActivity_startTime());
endTime.set(now.toEpochMilli());
} }
} }
return between_day; long between_day = ChronoUnit.DAYS.between(Instant.ofEpochMilli(startTime.get()), Instant.ofEpochMilli(endTime.get()));
return Math.abs(between_day) == 0 ? 1 : Math.abs(between_day);
}
private class ActionAcount {
private long between_day;
private Map<Integer, List<CustomerBehaviorNotes>> behaviorMap;
private long default_p_total;
private long default_p_avg;
private long default_u_total;
private long default_u_avg;
public ActionAcount(long between_day, Map<Integer, List<CustomerBehaviorNotes>> behaviorMap) {
this.between_day = between_day;
this.behaviorMap = behaviorMap;
}
public ActionAcount() {
}
public ActionAcount invoke(BehaviorEnum behaviorEnum) {
List<CustomerBehaviorNotes> behaviorTypeData = behaviorMap.get(behaviorEnum.getCode());
boolean isEmpty = CollectionUtils.isEmpty(behaviorTypeData);
default_p_total = isEmpty ? 0 : behaviorTypeData.size();
default_p_avg = default_p_total / between_day;
Set<CustomerBehaviorNotes> behaviorTypeDataSet = new HashSet<>(isEmpty ? Collections.EMPTY_SET : behaviorTypeData);
default_u_total = behaviorTypeDataSet.size();
default_u_avg = default_u_total / between_day;
return this;
}
public long getDefault_p_total() {
return default_p_total;
}
public long getDefault_p_avg() {
return default_p_avg;
}
public long getDefault_u_total() {
return default_u_total;
}
public long getDefault_u_avg() {
return default_u_avg;
}
public void setBetween_day(long between_day) {
this.between_day = between_day;
}
public void setBehaviorMap(Map<Integer, List<CustomerBehaviorNotes>> behaviorMap) {
this.behaviorMap = behaviorMap;
}
public void setDefault_p_total(long default_p_total) {
this.default_p_total = default_p_total;
}
public void setDefault_p_avg(long default_p_avg) {
this.default_p_avg = default_p_avg;
}
public void setDefault_u_total(long default_u_total) {
this.default_u_total = default_u_total;
}
public void setDefault_u_avg(long default_u_avg) {
this.default_u_avg = default_u_avg;
}
} }
} }
\ No newline at end of file
package com.xxfc.platform.user.behavior.mapper;
import com.xxfc.platform.user.behavior.dto.ActivityBehaviorDTO;
import com.xxfc.platform.user.behavior.entity.ActivityBehavior;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
import tk.mybatis.mapper.common.Mapper;
import java.util.List;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/8/13 14:10
*/
public interface ActivityBehaviorMapper extends Mapper<ActivityBehavior> {
@Select("select `activity_id`,`behavior_type_id` from `activity_behavior` where `activity_id`=#{activityId}")
@Results(value = {
@Result(column = "activity_id",property = "activityId"),
@Result(column = "behavior_type_id",property = "behaviorTypeId")
})
List<ActivityBehaviorDTO> selectbyActivityId(@Param("activityId") Integer activityId);
}
package com.xxfc.platform.user.behavior.mapper;
import com.xxfc.platform.user.behavior.dto.ActivityBehaviorRelationDTO;
import com.xxfc.platform.user.behavior.entity.ActivityBehaviorRelation;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
import tk.mybatis.mapper.common.Mapper;
import java.util.List;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/8/13 17:11
*/
public interface ActivityBehaviorRelationMapper extends Mapper<ActivityBehaviorRelation> {
@Select("select `type`,`biz_id`,`activity_id` from `activity_behavior_relation` where `activity_id`=#{activityId}")
@Results(value = {
@Result(property = "type",column = "type"),
@Result(property = "bizId",column = "biz_id"),
@Result(property = "activityId",column = "activity_id")
})
List<ActivityBehaviorRelationDTO> selectAllByActivityId(@Param("activityId") Integer activityId);
}
package com.xxfc.platform.user.behavior.mapper;
import com.xxfc.platform.user.behavior.dto.BehaviorTypeDTO;
import com.xxfc.platform.user.behavior.entity.BehaviorType;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
import tk.mybatis.mapper.additional.idlist.IdListMapper;
import tk.mybatis.mapper.common.Mapper;
import java.util.List;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/8/13 14:13
*/
public interface BehaviorTypeMapper extends Mapper<BehaviorType>, IdListMapper<BehaviorType,Integer> {
@Select("<script>select `name`,`code` from behavior_type where `id` in <foreach collection='typeIds' open='(' item='typeId' separator=',' close=')'> #{typeId}</foreach></script>")
@Results(value = {
@Result(column = "name",property = "name"),
@Result(column ="code",property = "code")
})
List<BehaviorTypeDTO> selectAllByIdList(@Param("typeIds") List<Integer> typeIds);
}
...@@ -16,4 +16,8 @@ import java.util.List; ...@@ -16,4 +16,8 @@ import java.util.List;
public interface CustomerBehaviorNotesMapper extends Mapper<CustomerBehaviorNotes> { public interface CustomerBehaviorNotesMapper extends Mapper<CustomerBehaviorNotes> {
List<CustomerBehaviorNotes> selectByActivityIdAndTime(@Param("activityId") Integer activityId,@Param("startTime") Long startTime,@Param("endTime") Long endTime); List<CustomerBehaviorNotes> selectByActivityIdAndTime(@Param("activityId") Integer activityId,@Param("startTime") Long startTime,@Param("endTime") Long endTime);
long selectAppVvisitsByType(@Param("code") int code);
List<CustomerBehaviorNotes> selectAllByTypeIdsAndTime(@Param("bizIds") List<Integer> bizIds,@Param("startTime") Long startTime,@Param("endTime") Long endTime);
} }
...@@ -21,13 +21,13 @@ import java.util.Objects; ...@@ -21,13 +21,13 @@ import java.util.Objects;
* @data 2019/8/12 14:14 * @data 2019/8/12 14:14
*/ */
@RestController @RestController
@RequestMapping("customerBehaviorNotes") @RequestMapping("/customerBehaviorNotes")
@RequiredArgsConstructor(onConstructor = @__(@Autowired)) @RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class CustomerBehaviorNotesController { public class CustomerBehaviorNotesController {
private final CustomerBehaviorNotesBiz customerBehaviorNotesBiz; private final CustomerBehaviorNotesBiz customerBehaviorNotesBiz;
@PostMapping("app/unauth/save") @PostMapping("/app/unauth/save")
public ObjectRestResponse<Void> saveCustomerBehavior(@RequestBody CustomerBehaviorNoteDTO customerBehaviorNoteDTO, AppUserDTO appUserDTO) { public ObjectRestResponse<Void> saveCustomerBehavior(@RequestBody CustomerBehaviorNoteDTO customerBehaviorNoteDTO, AppUserDTO appUserDTO) {
if (Objects.nonNull(appUserDTO.getUserid())) { if (Objects.nonNull(appUserDTO.getUserid())) {
customerBehaviorNoteDTO.setCustomerId(String.valueOf(appUserDTO.getUserid())); customerBehaviorNoteDTO.setCustomerId(String.valueOf(appUserDTO.getUserid()));
......
...@@ -26,4 +26,25 @@ ...@@ -26,4 +26,25 @@
and <![CDATA[ `crt_time` <= #{endTime}]]> and <![CDATA[ `crt_time` <= #{endTime}]]>
</if> </if>
</select> </select>
<select id="selectAppVvisitsByType" resultType="long">
select count(id) from `customer_behavior_notes` where `type`=#{code}
</select>
<select id="selectAllByTypeIdsAndTime" resultMap="customerBehaviorNotesMap">
select * from `customer_behavior_notes` where `type_id` in
<foreach collection="bizIds" item="bizId" open="(" close=")" separator=",">
#{bizId}
</foreach>
<if test="startTime != null != null and endTime !=null">
and `crt_time` between #{startTime} and #{endTime}
</if>
<if test="startTime != null and endTime == null">
and <![CDATA[`crt_time` >= #{startTime}]]>
</if>
<if test="endTime != null and startTime == null">
and <![CDATA[ `crt_time` <= #{endTime}]]>
</if>
and `type` in(0,1,2,3)
</select>
</mapper> </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