Commit 2e0c04db authored by 周健威's avatar 周健威

Merge branch 'dev' into 'master'

Dev-master-merge-0813

See merge request !5
parents fb35e713 0e1f8e85
......@@ -7,7 +7,7 @@ target/
.settings/
.classpath
ace-modules/ace-tool/src/main/resources/application-dev.yml
src/main/test/**
/src/main/test/**
logs/**
xx-order/xx-order-server/logs/**
*.log
......
......@@ -18,8 +18,32 @@ public class ResultCode {
// 车辆预定失败,请重试
public static int BOOKED_FAILED_CODE = Integer.valueOf(SystemProperty.getResultConfig("BOOKED_FAILED_CODE"));
// 车辆预定失败,请重试
public static int ONLY_BOOK_FROM_TODAY = Integer.valueOf(SystemProperty.getResultConfig("BOOKED_FAILED_CODE"));
//预定时间不能为空 DATE_TIME_IS_NULL
public static int DATE_TIME_IS_NULL = Integer.valueOf(SystemProperty.getResultConfig("DATE_TIME_IS_NULL"));
// 预定时间不能小于当前时间
public static int ONLY_BOOK_FROM_TODAY = Integer.valueOf(SystemProperty.getResultConfig("ONLY_BOOK_FROM_TODAY"));
// 只能预定两个月内的车辆
public static int ONLY_BOOK_TWO_MONTH = Integer.valueOf(SystemProperty.getResultConfig("ONLY_BOOK_TWO_MONTH"));
// 只能取消预定两个月内的车辆
public static int ONLY_UNBOOK_TWO_MONTH = Integer.valueOf(SystemProperty.getResultConfig("ONLY_UNBOOK_TWO_MONTH"));
// 添加车辆太多
public static int ADD_VEHICLE_MORE = Integer.valueOf(SystemProperty.getResultConfig("ADD_VEHICLE_MORE"));
// 停靠公司不能为空
public static int RET_COMPANY_CAN_NOT_BE_NULL = Integer.valueOf(SystemProperty.getResultConfig("RET_COMPANY_CAN_NOT_BE_NULL"));
// 车牌不能为空
public static int NUMBER_PLAT_CAN_NOT_BE_NULL = Integer.valueOf(SystemProperty.getResultConfig("NUMBER_PLAT_CAN_NOT_BE_NULL"));
// 选择日期不可取消预定
public static int VEHICLE_CAN_NOT_UNBOOK = Integer.valueOf(SystemProperty.getResultConfig("VEHICLE_CAN_NOT_UNBOOK"));
//预定日期为空
public static int BOOKED_DATE_IS_EMPTY = Integer.valueOf(SystemProperty.getResultConfig("BOOKED_DATE_IS_EMPTY"));
public static int TODAY_CAN_NOT_BOOK = Integer.valueOf(SystemProperty.getResultConfig("TODAY_CAN_NOT_BOOK"));
// 添加车辆失败,请重试
public static int ADD_VEHICLE_FAIL = Integer.valueOf(SystemProperty.getResultConfig("ADD_VEHICLE_FAIL"));
......
......@@ -214,7 +214,7 @@ BOOKED_FAILED_CODE = 4007
4007=车辆预定失败,请重试!
ONLY_BOOK_FROM_TODAY = 4008
4008=预定时间不能小于当前时间
4008=取消或预定时间不能小于当前时间
ADD_VEHICLE_FAIL = 4009
4009 = 添加车辆失败,请重试
......@@ -222,4 +222,29 @@ ADD_VEHICLE_FAIL = 4009
UPDATE_VEHICLE_FAIL = 4010
4010 = 修改车辆失败,请重试
DATE_TIME_IS_NULL = 4011
4011 = 预定时间不能为空
ONLY_BOOK_TWO_MONTH = 4012
4012 = 只能预定两月内的车辆
ONLY_UNBOOK_TWO_MONTH = 4013
4013 = 只能取消预定两月内的车辆
VEHICLE_CAN_NOT_UNBOOK = 4014
4014 = 选择日期不可取消预定
BOOKED_DATE_IS_EMPTY = 4015
4015 = 预定日期为空
TODAY_CAN_NOT_BOOK = 4016
4016 = 当天不可预定
ADD_VEHICLE_MORE = 4017
4017 = 添加车辆过多,请分批添加
RET_COMPANY_CAN_NOT_BE_NULL = 4018
4018 = 停靠公司不能为空
NUMBER_PLAT_CAN_NOT_BE_NULL = 4019
4019 = 车牌不能为空
\ No newline at end of file
......@@ -68,7 +68,8 @@ public class TokenAop {
if (AppUserDTO.class.equals(parameter.getType())){
//token为空
if (StringUtils.isEmpty(token)){
return ObjectRestResponse.createFailedResult(4004,"token不能为空");
// return ObjectRestResponse.createFailedResult(4004,"token不能为空");
args[i]= new AppUserDTO();
}
args[i]= userFeign.userDetailByToken(token).getData();
break;
......
......@@ -88,7 +88,7 @@ public class AppUserRelationBiz extends BaseBiz<AppUserRelationMapper,AppUserRel
}else {
//判断用户是否有有效的上线
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.setBindType(type);
relation.setBindTime(time);
......
......@@ -42,6 +42,7 @@ public class WaterMQHandler {
*/
@RabbitListener(queues = ORDER_WATER_QUEUE)
public void integralHandler(Message message, @Headers Map<String, Object> headers, Channel channel) {
log.info("拥金队列 messageJson:"+ JSONUtil.parse(message));
ExecutorService executorService = Executors.newCachedThreadPool();
executorService.execute(new Runnable() {
@Override
......
......@@ -20,7 +20,7 @@ import java.io.Serializable;
@JobHandler(value = "walletHandler")
@Component
@Slf4j
public class RentDepositJobHandler extends IJobHandler {
public class WalletJobHandler extends IJobHandler {
@Autowired
MyWaterBiz myWaterBiz;
......
......@@ -153,7 +153,7 @@ public class AppUserController extends CommonBaseController{
UserMemberVo memberVo=userMemberBiz.getMemberInfoByUserId(userid);
if(memberVo!=null){
BeanUtils.copyProperties(userDTO,memberVo);
userDTO.setPayCount(orderFeign.baseOrderCount(SYS_TRUE, "1,4,5,6,7", null, userid).getData());
userDTO.setPayCount(orderFeign.baseOrderCount(SYS_TRUE, "4,5,6,7", null, userid).getData());
Integer level=memberVo.getMemberLevel();
BaseUserMemberLevel memberLevel=userMemberLevelBiz.getLevel(level);
if (memberLevel!=null){
......
......@@ -16,6 +16,7 @@ import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.msg.TableResultResponse;
import com.github.wxiaoqi.security.common.rest.CommonBaseController;
import com.github.wxiaoqi.security.common.util.Query;
import com.xxfc.platform.vehicle.constant.ResCode.ResCode;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
......@@ -78,13 +79,13 @@ public class UserController extends CommonBaseController {
if (StringUtils.isNotBlank(username)) {
List<User> list = userBiz.getCountByUsername(username);
if (list.size() > 0) {
throw new RuntimeException("用户名不能重复");
return ObjectRestResponse.createFailedResult(ResCode.USER_IS_EXIST.getCode(), ResCode.USER_IS_EXIST.getDesc());
}
}
userBiz.insertSelective(vo);
//添加权限关系
groupBiz.modifyUserGroups(vo.getId(), vo.getMembers());
return new ObjectRestResponse();
return ObjectRestResponse.succ();
}
private void handleDataLimit(@RequestBody UserVO dto) {
......@@ -166,12 +167,12 @@ public class UserController extends CommonBaseController {
if (StringUtils.isNotBlank(username)) {
List<User> list = userBiz.getCountByUsername(username);
if (list.size() > 1) {
throw new RuntimeException("用户名不能重复");
return ObjectRestResponse.createFailedResult(ResCode.USER_IS_EXIST.getCode(), ResCode.USER_IS_EXIST.getDesc());
}
if (list.size() == 1) {
User user = list.get(0);
if (!user.getId().equals(vo.getId())) {
throw new RuntimeException("用户名不能重复");
return ObjectRestResponse.createFailedResult(ResCode.USER_IS_EXIST.getCode(), ResCode.USER_IS_EXIST.getDesc());
}
}
}
......
......@@ -45,6 +45,7 @@
<module>xx-im</module>
<module>xx-campsite</module>
<module>xx-activity</module>
<module>xx-user-behavior-collect</module>
</modules>
<packaging>pom</packaging>
<developers>
......
package com.xxfc.platform.activity.dto;
import lombok.Data;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/8/13 9:59
*/
@Data
public class ActivityListDTO {
private Long activity_startTime;
private Long activity_endTime;
}
package com.xxfc.platform.activity.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/8/12 19:01
*/
@Data
public class ActivityPopularizeRelationDTO implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主用户
*/
@ApiModelProperty(value = "主用户")
private Integer majorUserId;
/**
* 次要用户
*/
@ApiModelProperty(value = "次要用户")
private Integer minorUserId;
}
......@@ -2,6 +2,8 @@ package com.xxfc.platform.activity.feign;
import com.github.wxiaoqi.security.admin.dto.UserInfoDTO;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.xxfc.platform.activity.dto.ActivityListDTO;
import com.xxfc.platform.activity.dto.ActivityPopularizeRelationDTO;
import com.xxfc.platform.activity.entity.IntegralUserTotal;
import com.xxfc.platform.activity.vo.UserCouponVo;
import io.swagger.annotations.ApiModelProperty;
......@@ -46,11 +48,11 @@ public interface ActivityFeign {
@ApiOperation("优惠卷取消使用")
@RequestMapping(value = "/user/cancelUse", method = RequestMethod.POST)
public ObjectRestResponse cancelUse(@RequestParam(value = "TickerNo",defaultValue ="" ) String TickerNo);
public ObjectRestResponse cancelUse(@RequestParam(value = "TickerNo", defaultValue = "") String TickerNo);
@ApiOperation("新人有礼参加活动")
@RequestMapping(value = "/join/user", method = RequestMethod.POST)
public ObjectRestResponse join(@RequestParam(value = "userId",defaultValue ="0" ) Integer userId);
public ObjectRestResponse join(@RequestParam(value = "userId", defaultValue = "0") Integer userId);
@ApiModelProperty("获取用户积分")
@GetMapping(value = "/user/info")
......@@ -60,4 +62,13 @@ public interface ActivityFeign {
@GetMapping("/activity_data/clear")
ObjectRestResponse<Void> clearDate(@RequestParam(value = "userIds") List<Integer> userIds);
@ApiOperation("查询活动邀请数据")
@GetMapping("/activityPopularizeRelation/activity_popularize")
List<ActivityPopularizeRelationDTO> findActivityPopularizeRelationByActivityIdAndTime(@RequestParam(value = "activityId") Integer activityId,
@RequestParam(value = "startTime", required = false) Long startTime,
@RequestParam(value = "endTime", required = false) Long endTime);
@ApiOperation("查询活动的时间")
@GetMapping("/activityList/time/{activityId}")
ActivityListDTO findActivityStartTimeAndEndTimeById(@PathVariable(value = "activityId") Integer activityId);
}
package com.xxfc.platform.activity.biz;
import com.xxfc.platform.activity.dto.ActivityListDTO;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import com.xxfc.platform.activity.entity.ActivityList;
......@@ -10,6 +12,7 @@ import tk.mybatis.mapper.weekend.WeekendSqls;
import java.lang.reflect.InvocationTargetException;
import java.util.List;
import java.util.Objects;
/**
* 活动(活动列表)
......@@ -30,4 +33,14 @@ public class ActivityListBiz extends BaseBiz<ActivityListMapper,ActivityList> {
List<ActivityList> activityLists = selectByExample(exa);
return activityLists;
}
public ActivityListDTO findActivityStartTimeAndEndTimeById(Integer activityId) {
ActivityListDTO activityListDTO = new ActivityListDTO();
ActivityList activityList = mapper.selectByPrimaryKey(activityId);
if (Objects.nonNull(activityList)){
activityListDTO.setActivity_startTime(activityList.getStartTime());
activityListDTO.setActivity_endTime(activityList.getEndTime());
}
return activityListDTO;
}
}
\ No newline at end of file
package com.xxfc.platform.activity.biz;
import com.xxfc.platform.activity.dto.ActivityPopularizeRelationDTO;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.stereotype.Service;
import com.xxfc.platform.activity.entity.ActivityPopularizeRelation;
import com.xxfc.platform.activity.mapper.ActivityPopularizeRelationMapper;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import java.util.ArrayList;
import java.util.List;
/**
* 活动的参与者关系表
*
......@@ -15,4 +20,13 @@ import com.github.wxiaoqi.security.common.biz.BaseBiz;
*/
@Service
public class ActivityPopularizeRelationBiz extends BaseBiz<ActivityPopularizeRelationMapper,ActivityPopularizeRelation> {
public List<ActivityPopularizeRelationDTO> findActivityPopularizeRelationsByActivityIdAndTime(Integer activityId, Long startTime, Long endTime) {
List<ActivityPopularizeRelationDTO> activityPopularizeRelationDTOS = new ArrayList<>();
List<ActivityPopularizeRelationDTO> relations = mapper.findActivityPopularizeRelationsByActivityIdAndTime(activityId, startTime, endTime);
if (CollectionUtils.isNotEmpty(relations)){
activityPopularizeRelationDTOS.addAll(relations);
}
return activityPopularizeRelationDTOS;
}
}
\ No newline at end of file
......@@ -24,6 +24,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.List;
@Service
......@@ -65,8 +66,8 @@ public class IntegralUserRecordBiz extends BaseBiz<IntegralUserRecordMapper, Int
if (integralUserRecord.getPoint() == null) {
Integer point = 0;
if (oldValue.getPoint() == 0) {//没有基础分需要计算分数
//Integer amount = Integer.parseInt(new BigDecimal(integralUserRecord.getAmount()).divide(new BigDecimal("100"), 0, BigDecimal.ROUND_DOWN).toString());
Integer amount = Integer.parseInt(integralUserRecord.getAmount());
Integer amount = Integer.parseInt(new BigDecimal(integralUserRecord.getAmount()).divide(new BigDecimal("100"), 0, BigDecimal.ROUND_DOWN).toString());
//Integer amount = Integer.parseInt(integralUserRecord.getAmount());
JSONObject jsonObject = JSONObject.parseObject(oldValue.getOtherRule());
log.info("查询的其他规则json信息:jsonObject = {}", jsonObject);
if (jsonObject == null) {
......
package com.xxfc.platform.activity.mapper;
import com.xxfc.platform.activity.dto.ActivityPopularizeRelationDTO;
import com.xxfc.platform.activity.entity.ActivityPopularizeRelation;
import org.apache.ibatis.annotations.Param;
import tk.mybatis.mapper.common.Mapper;
import java.util.List;
/**
* 活动的参与者关系表
*
......@@ -12,4 +16,5 @@ import tk.mybatis.mapper.common.Mapper;
*/
public interface ActivityPopularizeRelationMapper extends Mapper<ActivityPopularizeRelation> {
List<ActivityPopularizeRelationDTO> findActivityPopularizeRelationsByActivityIdAndTime(@Param("activityId") Integer activityId, @Param("startTime") Long startTime, @Param("endTime") Long endTime);
}
......@@ -4,12 +4,14 @@ import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.rest.BaseController;
import com.xxfc.platform.activity.biz.ActivityListBiz;
import com.xxfc.platform.activity.biz.HomeActivitiesBiz;
import com.xxfc.platform.activity.dto.ActivityListDTO;
import com.xxfc.platform.activity.entity.ActivityList;
import com.xxfc.platform.activity.entity.ActivityManagement;
import com.xxfc.platform.activity.entity.HomeActivities;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
......@@ -34,4 +36,9 @@ public class ActivityListController extends BaseController<ActivityListBiz,Activ
// List<ActivityList> list= baseBiz.activities();
return ObjectRestResponse.succ(activities);
}
@GetMapping("/time/{activityId}")
public ActivityListDTO findActivityStartTimeAndEndTimeById(@PathVariable(value = "activityId") Integer activityId){
return baseBiz.findActivityStartTimeAndEndTimeById(activityId);
}
}
\ No newline at end of file
......@@ -2,13 +2,26 @@ package com.xxfc.platform.activity.rest;
import com.github.wxiaoqi.security.common.rest.BaseController;
import com.xxfc.platform.activity.biz.ActivityPopularizeRelationBiz;
import com.xxfc.platform.activity.dto.ActivityPopularizeRelationDTO;
import com.xxfc.platform.activity.entity.ActivityPopularizeRelation;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
@RequestMapping("activityPopularizeRelation")
public class ActivityPopularizeRelationController extends BaseController<ActivityPopularizeRelationBiz,ActivityPopularizeRelation> {
@GetMapping("/activity_popularize")
public List<ActivityPopularizeRelationDTO> findActivityPopularizeRelationByActivityIdAndTime(@RequestParam(value = "activityId") Integer activityId,
@RequestParam(value = "startTime",required = false) Long startTime,
@RequestParam(value = "endTime",required = false) Long endTime){
return baseBiz.findActivityPopularizeRelationsByActivityIdAndTime(activityId,startTime,endTime);
}
}
\ 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.activity.mapper.ActivityPopularizeRelationMapper">
<!-- 可根据自己的需求,是否要使用 -->
<resultMap type="com.xxfc.platform.activity.entity.ActivityPopularizeRelation" id="activityPopularizeRelationMap">
<result property="id" column="id"/>
<result property="crtTime" column="crt_time"/>
<result property="updTime" column="upd_time"/>
<result property="popularizeId" column="popularize_id"/>
<result property="majorUserId" column="major_user_id"/>
<result property="minorUserId" column="minor_user_id"/>
</resultMap>
<select id="findActivityPopularizeRelationsByActivityIdAndTime" resultMap="activityPopularizeRelationMap">
select * from `activity_popularize_relation` where `popularize_id`=#{activityId}
<if test="startTime != 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>
</select>
</mapper>
\ No newline at end of file
......@@ -435,27 +435,27 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> {
private void sendQueue(OrderMQDTO orderMQDTO, Integer sign) {
try {
orderMQDTO.setSign(sign);
// SendMsgDTO sendMsgDTO = new SendMsgDTO(){{
// setExchange(ORDER_TOPIC);
// }};
// sendMsgDTO.setJson(JSONUtil.toJsonStr(orderMQDTO));
SendMsgDTO sendMsgDTO = new SendMsgDTO(){{
setExchange(ORDER_TOPIC);
}};
sendMsgDTO.setJson(JSONUtil.toJsonStr(orderMQDTO));
switch (sign) {
case 2:
// sendMsgDTO.setRoutKey(KEY_ORDER_CANCEL);
mqSenderFeign.sendMessage(ORDER_TOPIC, KEY_ORDER_CANCEL, JSONUtil.toJsonStr(orderMQDTO));
sendMsgDTO.setRoutKey(KEY_ORDER_CANCEL);
// mqSenderFeign.sendMessage(ORDER_TOPIC, KEY_ORDER_CANCEL, JSONUtil.toJsonStr(orderMQDTO));
break;
case 4:
// sendMsgDTO.setRoutKey(KEY_ORDER_PAY);
mqSenderFeign.sendMessage(ORDER_TOPIC, KEY_ORDER_PAY, JSONUtil.toJsonStr(orderMQDTO));
sendMsgDTO.setRoutKey(KEY_ORDER_PAY);
// mqSenderFeign.sendMessage(ORDER_TOPIC, KEY_ORDER_PAY, JSONUtil.toJsonStr(orderMQDTO));
break;
case 6:
// sendMsgDTO.setRoutKey(KEY_ORDER_FINLISH);
mqSenderFeign.sendMessage(ORDER_TOPIC, KEY_ORDER_FINLISH, JSONUtil.toJsonStr(orderMQDTO));
sendMsgDTO.setRoutKey(KEY_ORDER_FINLISH);
// mqSenderFeign.sendMessage(ORDER_TOPIC, KEY_ORDER_FINLISH, JSONUtil.toJsonStr(orderMQDTO));
break;
default:
break;
}
// mqSenderFeign.postSendMessage(BeanUtil.beanToMap(sendMsgDTO, Boolean.FALSE, Boolean.TRUE));
mqSenderFeign.postSendMessage(sendMsgDTO);
} catch (Exception e) {
log.error(e.getMessage(), e);
}
......
......@@ -169,4 +169,10 @@ public class OrderDepositRefundRecordBiz extends BaseBiz<DepositRefundRecordMapp
}
}
public void completeRecordStatus(Integer crosstownId, DepositRefundStatus depositRefundStatus) {
DepositRefundRecord depositRefundRecord = findByCrossIdAndStatus(crosstownId, depositRefundStatus.getCode());
depositRefundRecord.setIscomplete(Boolean.TRUE);
updateSelectiveById(depositRefundRecord);
}
}
......@@ -28,7 +28,6 @@ import com.github.wxiaoqi.security.common.biz.BaseBiz;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
......@@ -82,14 +81,14 @@ public class OrderRefundBiz extends BaseBiz<OrderRefundMapper,OrderRefund> {
//未退还, 进行挂起保留违章预备金 的退还
if(RefundStatusEnum.NONE.getCode().equals(orderMQDTO.getRefundStatus())) {
Integer crosstownTypeEnum;
Integer depositRefundRecordStatus;
DepositRefundStatus depositRefundRecordStatus;
//判断是否定损过
if(SYS_TRUE.equals(orderMQDTO.getOrderRentVehicleDetail().getFixedLossStatus())) {
crosstownTypeEnum = CrosstownTypeEnum.FIXED_LOSS.getCode();
depositRefundRecordStatus = DepositRefundStatus.FIXLOSSREFUND.getCode();
depositRefundRecordStatus = DepositRefundStatus.FIXLOSSREFUND;
}else {
crosstownTypeEnum = CrosstownTypeEnum.ARRIVE.getCode();
depositRefundRecordStatus = DepositRefundStatus.REFUNDARRIVAL.getCode();
depositRefundRecordStatus = DepositRefundStatus.REFUNDARRIVAL;
}
OrderVehicleCrosstown crosstown = crosstownBiz.selectOne(new OrderVehicleCrosstown(){{
setOrderId(orderMQDTO.getId());
......@@ -111,7 +110,7 @@ public class OrderRefundBiz extends BaseBiz<OrderRefundMapper,OrderRefund> {
String refundDesc = "退还押金:"+ refundAmont.toString()+ "(已扣除 违章预备金:"+ illegalReserve.toString();
try{
if(null != crosstown.getDedDetail()) {
List<DedDetailDTO> dddList = JSONUtil.toBean(crosstown.getDedDetail(), List.class);
List<DedDetailDTO> dddList = JSONUtil.toList(JSONUtil.parseArray(crosstown.getDedDetail()), DedDetailDTO.class);
for(DedDetailDTO ddd : dddList) {
refundDesc += ", "+ ddd.getDeductions()+ ":"+ ddd.getCost();
}
......@@ -122,10 +121,10 @@ public class OrderRefundBiz extends BaseBiz<OrderRefundMapper,OrderRefund> {
refundDesc += ")";
refundTrigger(orderMQDTO, orderMQDTO.getOrderRentVehicleDetail(), illegalReserve, originalRefundAmount, refundAmont, refundDesc, RefundStatusEnum.RESIDUE_ILLEGAL.getCode(), RefundTypeEnum.PART_DEPOSIT);
DepositRefundRecord depositRefundRecord = orderDepositRefundRecordBiz.findByCrossIdAndStatus(crosstown.getId(), depositRefundRecordStatus);
depositRefundRecord.setIscomplete(Boolean.TRUE);
orderDepositRefundRecordBiz.updateSelectiveById(depositRefundRecord);
// DepositRefundRecord depositRefundRecord = orderDepositRefundRecordBiz.findByCrossIdAndStatus(crosstown.getId(), depositRefundRecordStatus);
// depositRefundRecord.setIscomplete(Boolean.TRUE);
// orderDepositRefundRecordBiz.updateSelectiveById(depositRefundRecord);
orderDepositRefundRecordBiz.completeRecordStatus(crosstown.getId(), depositRefundRecordStatus);
orderMsgBiz.handelMsgDeposit(orderMQDTO.getOrderRentVehicleDetail(), orderMQDTO, userFeign.userDetailById(orderMQDTO.getUserId()).getData());
}
// else {
......
......@@ -187,7 +187,7 @@ public class OrderVehicleCrosstownBiz extends BaseBiz<OrderVehicaleCrosstownMapp
}
if( vehicle.getMileageLastUpdate() != null) {
//判断车辆公里数
if (orderVehicleCrosstownDto.getMileage() == null || orderVehicleCrosstownDto.getMileage() < vehicle.getMileageLastUpdate()) {
if (orderVehicleCrosstownDto.getMileage() == null || orderVehicleCrosstownDto.getMileage() <= vehicle.getMileageLastUpdate()) {
return ObjectRestResponse.createFailedResult(500, "请输入车辆仪表盘实际公里数!");
}
}
......
......@@ -52,6 +52,9 @@ public class RentDepositJobHandler extends IJobHandler {
@Autowired
OrderVehicleCrosstownBiz crosstownBiz;
@Autowired
OrderDepositRefundRecordBiz orderDepositRefundRecordBiz;
@Autowired
OrderViolationBiz orderViolationBiz;
......@@ -78,9 +81,9 @@ public class RentDepositJobHandler extends IJobHandler {
//三十天
List<BaseOrder> lists = baseOrderBiz.selectByExample(new Example.Builder(BaseOrder.class)
//订单已完成的租车订单
.where(WeekendSqls.<BaseOrder>custom().andEqualTo(BaseOrder::getType, OrderTypeEnum.RENT_VEHICLE)
.andEqualTo(BaseOrder::getStatus, OrderStatusEnum.ORDER_FINISH) //已完成的订单
.andEqualTo(BaseOrder::getRefundStatus, RefundStatusEnum.RESIDUE_ILLEGAL) //已归还了部分押金
.where(WeekendSqls.<BaseOrder>custom().andEqualTo(BaseOrder::getType, OrderTypeEnum.RENT_VEHICLE.getCode())
.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)
).build());
......@@ -109,15 +112,21 @@ public class RentDepositJobHandler extends IJobHandler {
setIsDel(SYS_FALSE);
}});
String refundDesc = "退还押金:";
BigDecimal refundAmont;
if(null != orderViolation) {
//还车扣除款 剩余的 钱,再减去违章预备金
BigDecimal refundAmont = orvd.getReturnPayResidue().subtract(orderViolation.getPrice());
String refundDesc = "退还押金:"+ refundAmont.toString()+ "(已扣除 违章扣款:"+ refundAmont.toString();
refundAmont = orvd.getReturnPayResidue().subtract(orderViolation.getPrice());
refundDesc += refundAmont.toString()+ "(已扣除 违章扣款:"+ refundAmont.toString();
refundDesc += ")";
}else {
refundAmont = orvd.getReturnPayResidue();
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(
......
......@@ -84,7 +84,7 @@ public class BackStageOrderController extends CommonBaseController implements Us
if (userDTO == null) {
return ObjectRestResponse.succ(new PageDataVO<>());
}
if(dto.getType() != 3) {
if(dto.getType() != null && dto.getType() != 3) {
List<BranchCompany> branchCompanies = vehicleFeign.companyAll(userDTO.getDataAll(), userDTO.getDataCompany(), userDTO.getDataZone());
List<Integer> companyIds = branchCompanies.stream().map(BranchCompany::getId).collect(Collectors.toList());
dto.setCompanyIds(companyIds);
......@@ -97,12 +97,19 @@ public class BackStageOrderController extends CommonBaseController implements Us
if (userIds != null && userIds.size() > 0) {
ObjectRestResponse<List<AppUserVo>> objectRestResponse = userFeign.getByUserIds(userIds);
log.info("获取用户信息:objectRestResponse = {}", objectRestResponse.getData());
Map<String, AppUserVo> appUserVoMap = objectRestResponse.getData() == null ? new HashMap<String, AppUserVo>()
: objectRestResponse.getData().parallelStream().collect(Collectors.toMap(v -> v.getUserid().toString().trim(), v -> v));
Map<Integer, AppUserVo> appvoMap = new HashMap<Integer, AppUserVo>();
if(objectRestResponse.getData() != null) {
for(AppUserVo appUserVo : objectRestResponse.getData()) {
if(appUserVo != null) {
appvoMap.put(appUserVo.getUserid(), appUserVo);
}
}
}
for (OrderListVo orderPageVO : list) {
AppUserVo appUserVo = appUserVoMap.get(orderPageVO.getUserId().toString());
if (null != appUserVo) {
AppUserVo appUserVo = appvoMap.get(orderPageVO.getUserId());
if(appUserVo != null) {
orderPageVO.setTelephone(appUserVo.getUsername());
orderPageVO.setUsername(appUserVo.getNickname());
}
......@@ -174,6 +181,24 @@ public class BackStageOrderController extends CommonBaseController implements Us
dto.setEndTime(new Date().getTime());
}
}
UserDTO userDTO = getAdminUserInfo();
if (userDTO == null) {
return ObjectRestResponse.succ(new PageDataVO<>());
}
List<BranchCompany> branchCompanies = vehicleFeign.companyAll(userDTO.getDataAll(), userDTO.getDataCompany(), userDTO.getDataZone());
List<Integer> companyIds = branchCompanies.stream().map(BranchCompany::getId).collect(Collectors.toList());
if(dto.getStartCompanyId() != null) {
if(companyIds.size() > 0) {
if(companyIds.contains(dto.getStartCompanyId())) {
companyIds.clear();
companyIds.add(dto.getStartCompanyId());
} else {
return ObjectRestResponse.succ();
}
} else {
companyIds.add(dto.getStartCompanyId());
}
}
Query query = new Query(dto);
PageDataVO<OrderPageVO> pageDataVO = PageDataVO.pageInfo(query, () -> baseOrderBiz.getRentVehicle(query.getSuper()));
for (OrderPageVO orderPageVO : pageDataVO.getData()) {
......
......@@ -205,6 +205,7 @@ public class BaseOrderController extends CommonBaseController implements UserRes
}
log.info("no:" + no + ",时间戳:" + System.currentTimeMillis());
OrderPageVO orderPageVO = page.getData().get(0);
orderPageVO.setQrcodeStr(qrcodePrefix);
orderPageVO.setItems(orderItemBiz.selectList(new OrderItem(){{
setOrderId(orderPageVO.getId());
}}));
......
......@@ -192,8 +192,12 @@
<if test="startTime != null and (status == 5 || status == 6 || status == -1)">
and r.end_time between #{startTime} and #{endTime}
</if>
<if test="startCompanyId != null">
and r.start_company_id = #{startCompanyId}
<if test="companyIds != null and companyIds.size > 0">
and r.start_company_id in
<foreach collection="companyIds" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</if>
<if test="status == 4">
order by r.start_time
......
......@@ -36,7 +36,7 @@ public class TourGoodController extends BaseController<TourGoodBiz, TourGood> {
public ObjectRestResponse<TourGood> getGoodList(@RequestParam(value = "page", required = true) Integer page, @RequestParam(value = "limit",defaultValue = "10") Integer limit,
@RequestParam(value = "query", required = false) String query, @RequestParam(value = "latitude", required = false) Double latitude,
@RequestParam(value = "longitude", required = false) Double longitude, @RequestParam(value = "tagId", required = false) Integer tagId,
@RequestParam(value = "distance", defaultValue = "100.00") Double distance) {
@RequestParam(value = "distance", defaultValue = "100") Double distance) {
return baseBiz.getGoodList(page, limit, query, latitude, longitude, tagId, distance);
}
......
......@@ -59,7 +59,10 @@
IFNULL(ROUND(( (2 * ASIN( SQRT( POW( SIN((latitude * PI() / 180.0- #{params.latitude}* PI() / 180.0)/2), 2)+COS( latitude * PI() / 180.0)*COS( #{params.latitude} * PI() / 180.0)
*POW(SIN((longitude * PI() / 180.0 - #{params.longitude}* PI() /180.0)/2),2))))*6378.137)*10000)/10000 ,0 ) AS distance
FROM tour_good_site WHERE type=2 ) gs ON t.id=gs.good_id
where t.is_del=0 AND t.status=1 and gs.distance &lt; #{params.distance}
where t.is_del=0 AND t.status=1
<if test="params.distance != null and params.distance != ''and params.distance >0">
and gs.distance &lt; #{params.distance}
</if>
<if test="params.query != null and params.query != ''">
and (t.`name` like CONCAT('%',#{params.query},'%') or t.introduce like CONCAT('%',#{params.query},'%'))
</if>
......
package com.xxfc.platform.universal.feign;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.xxfc.platform.universal.dto.SendMsgDTO;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.*;
import java.util.Map;
......@@ -15,6 +14,6 @@ public interface MQSenderFeign {
public ObjectRestResponse sendMessage(@RequestParam(value = "exchange") String exchange, @RequestParam(value = "routKey")String routKey, @RequestParam(value = "json") String json);
@PostMapping(value = "/message/sendMessage")
public ObjectRestResponse postSendMessage(@RequestParam("entity") Map<String, Object> entity);
public ObjectRestResponse postSendMessage(@RequestBody SendMsgDTO dto);
}
......@@ -19,6 +19,7 @@ public class MQSenderController {
}
@PostMapping(value = "/sendMessage")
@ResponseBody
public ObjectRestResponse sendMessage(@RequestBody SendMsgDTO dto) {
return mqServiceBiZ.sendMessage(dto.getExchange(), dto.getRoutKey(), dto.getJson());
}
......
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>ace-security</artifactId>
<groupId>com.github.wxiaoqi</groupId>
<version>2.0-SNAPSHOT</version>
</parent>
<groupId>com.xxfc.platform</groupId>
<modules>
<module>xx-user-behavior-api</module>
<module>xx-user-behavior-server</module>
</modules>
<modelVersion>4.0.0</modelVersion>
<packaging>pom</packaging>
<artifactId>xx-behavior</artifactId>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<groupId>com.xxfc.common</groupId>
<artifactId>xx-common-platform</artifactId>
<version>2.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>com.xxfc.platform</groupId>
<artifactId>xx-user-behavior-api</artifactId>
</project>
\ No newline at end of file
package com.xxfc.platform.user.behavior.common;
/**
* @author libin
* @version 1.0
* @description 用户行为枚举
* @data 2019/8/12 14:57
*/
public enum BehaviorEnum {
/**
* 弹窗曝光
*/
DIALOG_WINDOW(0, "弹窗曝光"),
/**
* 立即前往(弹窗)
*/
DIALOG_WINDOW_TO(1, "立即前往(弹窗)"),
/**
* banner 点击
*/
BANNER_CLICK(2, "banner点击"),
/**
* 精彩活动点击
*/
WONDERFUL_ACTIVITY_CLICK(3, "精彩活动点击"),
/**
* 注册
*/
REGISTRY(4, "成功注册"),
/**
* 活动页面访问量
*/
ACTIVITY_VISITS(5,"活动页面访问"),
/**
* 领取任务
*/
CLAIM_TASK(6, "领取任务"),
/**
* 分享
*/
SHARE(7, "成功分享"),
/**
* App访问
*/
APP_VISIT_COUNT(8,"App访问量"),
/**
* 成功邀请人数
*/
SUCCESS_INVIT(9,"成功邀请人数"),
/**
* 成功邀请人数大于10
*/
SUCCESS_MORE_10_INVIT(10,"成功邀请人数大于10"),
/**
* 立即领取(活动详情页)
*/
IMMEDIATELY_TO_RECEIVE(11,"立即领取(活动详情页)");
BehaviorEnum(int code, String name) {
this.code = code;
this.name = name;
}
private int code;
private String name;
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
package com.xxfc.platform.user.behavior.common;
/**
* @author libin
* @version 1.0
* @description 身份枚举
* @data 2019/8/12 14:53
*/
public enum IdentityEnum {
/**
* 游客
*/
VISITOR(1),
/**
* app用户
*/
USER(2);
private int code;
IdentityEnum(int code){
this.code = code;
}
public int getCode() {
return code;
}
public void setCode(int 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 14:16
*/
@Data
public class BehaviorTypeDTO {
private String name;
private Integer code;
}
package com.xxfc.platform.user.behavior.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/8/12 14:13
*/
@Data
public class CustomerBehaviorNoteDTO implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty("主键id")
private Integer id;
@ApiModelProperty(value = "用户id")
private String customerId;
/**
* 访问者身份 {@link com.xxfc.platform.user.behavior.common.IdentityEnum}
*/
@ApiModelProperty(value = "1-游客;2-用户")
private Integer customerType;
/**
* 行为类型 {@link com.xxfc.platform.user.behavior.common.BehaviorEnum}
*/
@ApiModelProperty(value = "行为类型(见枚举)")
private Integer type;
@ApiModelProperty(value = "类型id")
private Integer typeId;
@ApiModelProperty(value = "请求id")
private String requestId;
}
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 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;
}
package com.xxfc.platform.user.behavior.entity;
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.util.Objects;
/**
* 用户行为记录表
*
* @author libin
* @email 18178966185@163.com
* @date 2019-08-12 14:03:55
*/
@Data
@Table(name = "customer_behavior_notes")
public class CustomerBehaviorNotes implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(generator = "JDBC")
@ApiModelProperty("主键id")
private Integer id;
@Column(name = "customer_id")
@ApiModelProperty(value = "用户id")
private String customerId;
/**
* 访问者身份 {@link com.xxfc.platform.user.behavior.common.IdentityEnum}
*/
@Column(name = "customer_type")
@ApiModelProperty(value = "1-游客;2-用户")
private Integer customerType;
/**
* 行为类型 {@link com.xxfc.platform.user.behavior.common.BehaviorEnum}
*/
@Column(name = "type")
@ApiModelProperty(value = "行为类型")
private Integer type;
@Column(name = "type_id")
@ApiModelProperty(value = "类型id")
private Integer typeId;
@Column(name = "crt_time")
@ApiModelProperty(value = "创建时间", hidden = true)
private Long crtTime;
@Column(name = "request_id")
@ApiModelProperty(value = "请求id")
private String requestId;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
CustomerBehaviorNotes that = (CustomerBehaviorNotes) o;
return Objects.equals(customerId, that.customerId);
}
@Override
public int hashCode() {
return Objects.hash(customerId);
}
}
package com.xxfc.platform.user.behavior.vo;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/8/12 18:32
*/
@Data
@Builder(toBuilder = true)
@NoArgsConstructor
@AllArgsConstructor
public class BehaviorNoteCollectVo implements Serializable {
/**
* @see com.xxfc.platform.user.behavior.common.BehaviorEnum + 成功邀请人数 ,邀请人数>=10 ,App 访问量
* 行为
*/
private String behavior;
/**
* 日访问数
*/
private long p_count;
/**
* 日平均访问数
*/
private long p_avg_count;
/**
* 用户每日访问总数
*/
private long u_count;
/**
* 用户每日平均访问总数
*/
private long u_avg_count;
}
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<groupId>com.xxfc.common</groupId>
<artifactId>xx-common-platform-web</artifactId>
<version>2.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>com.xxfc.platform</groupId>
<artifactId>xx-user-behavior-server</artifactId>
<dependencies>
<!-- 自己项目 -->
<dependency>
<groupId>com.xxfc.platform</groupId>
<artifactId>xx-user-behavior-api</artifactId>
<version>2.0-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.github.wxiaoqi</groupId>
<artifactId>ace-admin-api</artifactId>
<version>2.0-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.xxfc.platform</groupId>
<artifactId>xx-activity-api</artifactId>
<version>2.0-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
\ No newline at end of file
package com.xxfc.platform.user.behavior;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import tk.mybatis.spring.annotation.MapperScan;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/8/12 10:04
*/
@EnableDiscoveryClient
@EnableFeignClients(basePackages = "com.xxfc.platform.*.feign")
@MapperScan(basePackages = "com.xxfc.platform.user.behavior.mapper")
@SpringBootApplication
public class UserBeHaviorApplication {
public static void main(String[] 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 java.util.List;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/8/13 14:10
*/
@Service
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.BehaviorTypeDTO;
import com.xxfc.platform.user.behavior.entity.BehaviorType;
import com.xxfc.platform.user.behavior.mapper.BehaviorTypeMapper;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/8/13 14:09
*/
@Service
public class BehaviorTypeBiz extends BaseBiz<BehaviorTypeMapper, BehaviorType> {
public List<BehaviorTypeDTO> findBehaviorTypesByIds(List<Integer> typeIds){
List<BehaviorTypeDTO> behaviorTypeDTOS = new ArrayList<>();
List<BehaviorType> behaviorTypes = mapper.selectByIdList(typeIds);
BehaviorTypeDTO behaviorTypeDTO;
for (BehaviorType behaviorType : behaviorTypes) {
behaviorTypeDTO = new BehaviorTypeDTO();
BeanUtils.copyProperties(behaviorType,behaviorTypeDTO);
behaviorTypeDTOS.add(behaviorTypeDTO);
}
return behaviorTypeDTOS;
}
}
package com.xxfc.platform.user.behavior.biz;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.xxfc.platform.activity.dto.ActivityListDTO;
import com.xxfc.platform.activity.dto.ActivityPopularizeRelationDTO;
import com.xxfc.platform.activity.feign.ActivityFeign;
import com.xxfc.platform.user.behavior.common.BehaviorEnum;
import com.xxfc.platform.user.behavior.dto.ActivityBehaviorDTO;
import com.xxfc.platform.user.behavior.dto.BehaviorTypeDTO;
import com.xxfc.platform.user.behavior.dto.CustomerBehaviorNoteDTO;
import com.xxfc.platform.user.behavior.entity.CustomerBehaviorNotes;
import com.xxfc.platform.user.behavior.mapper.CustomerBehaviorNotesMapper;
import com.xxfc.platform.user.behavior.vo.BehaviorNoteCollectVo;
import lombok.RequiredArgsConstructor;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.time.Instant;
import java.time.temporal.ChronoUnit;
import java.util.*;
import java.util.stream.Collectors;
/**
* 用户行为记录表
*
* @author libin
* @email 18178966185@163.com
* @date 2019-08-12 14:03:55
*/
@Service
@RequiredArgsConstructor(onConstructor = @__({@Autowired}))
public class CustomerBehaviorNotesBiz extends BaseBiz<CustomerBehaviorNotesMapper, CustomerBehaviorNotes> {
private final ActivityFeign activityFeign;
private final BehaviorTypeBiz behaviorTypeBiz;
private final ActivityBehaviorBiz activityBehaviorBiz;
public void saveCustomerBehavior(CustomerBehaviorNoteDTO customerBehaviorNoteDTO) {
CustomerBehaviorNotes customerBehaviorNotes = new CustomerBehaviorNotes();
BeanUtils.copyProperties(customerBehaviorNoteDTO, customerBehaviorNotes);
customerBehaviorNotes.setCrtTime(Instant.now().toEpochMilli());
mapper.insertSelective(customerBehaviorNotes);
}
public List<BehaviorNoteCollectVo> findBehaviorCollectByActivityId(Integer activityId, Long startTime, Long endTime) {
List<BehaviorNoteCollectVo> behaviorNoteCollectVos = new ArrayList<>();
List<CustomerBehaviorNotes> customerBehaviorNotes = mapper.selectByActivityIdAndTime(activityId, startTime, endTime);
boolean isEmpty = CollectionUtils.isEmpty(customerBehaviorNotes);
List<ActivityPopularizeRelationDTO> popularizeRelations = new ArrayList<>();
Map<Integer, List<CustomerBehaviorNotes>> behaviorAndDataMap = null;
if (!isEmpty) {
//邀请成功记录
popularizeRelations = activityFeign.findActivityPopularizeRelationByActivityIdAndTime(activityId, startTime, endTime);
behaviorAndDataMap = customerBehaviorNotes.stream().collect(Collectors.groupingBy(CustomerBehaviorNotes::getType, Collectors.toList()));
}
//获取时间间隔
long between_day = getBetween_day(activityId, startTime, endTime);
between_day = Math.abs(between_day) == 0 ? 1 : Math.abs(between_day);
List<ActivityBehaviorDTO> activityBehaviorDTOS = activityBehaviorBiz.findActivityBehaviorsByActivityId(activityId);
List<Integer> behaviorTypeIds = activityBehaviorDTOS.stream().map(ActivityBehaviorDTO::getBehaviorTypeId).collect(Collectors.toList());
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());
Map<Integer, String> codeAndName = behaviorTypeDTOS.stream().collect(Collectors.toMap(BehaviorTypeDTO::getCode, BehaviorTypeDTO::getName));
BehaviorNoteCollectVo behaviorNoteCollectVo;
for (BehaviorEnum behaviorEnum : behaviorEnums) {
behaviorNoteCollectVo = new BehaviorNoteCollectVo();
behaviorNoteCollectVo.setBehavior(codeAndName.get(behaviorEnum.getCode()));
if (isEmpty) {
behaviorNoteCollectVos.add(behaviorNoteCollectVo);
continue;
} else {
long default_p_total, default_p_avg, default_u_total, default_u_avg;
switch (behaviorEnum) {
case SUCCESS_INVIT:
default_p_total = popularizeRelations.size();
default_p_avg = (default_p_total / between_day);
default_u_total = default_p_total;
default_u_avg = default_p_avg;
break;
case SUCCESS_MORE_10_INVIT:
default_p_total = popularizeRelations.stream().collect(Collectors.groupingBy(ActivityPopularizeRelationDTO::getMajorUserId, Collectors.counting())).values().stream().filter(x -> x >= 10).count();
default_p_avg = default_p_total / between_day;
default_u_total = default_p_total;
default_u_avg = default_p_avg;
break;
case APP_VISIT_COUNT:
default_p_total = mapper.selectAppVvisitsByType(BehaviorEnum.APP_VISIT_COUNT.getCode());
default_p_avg = default_p_total / between_day;
default_u_total = default_p_total;
default_u_avg = default_p_avg;
break;
default:
//访问量
List<CustomerBehaviorNotes> customerBehaviors = behaviorAndDataMap == null ? Collections.EMPTY_LIST : behaviorAndDataMap.get(behaviorEnum.getCode());
boolean typeIsEmpty = CollectionUtils.isEmpty(customerBehaviors);
default_p_total = typeIsEmpty ? 0 : customerBehaviors.size();
default_p_avg = default_p_total / between_day;
//用户访问量
Set<CustomerBehaviorNotes> customerBehaviorsSet = new HashSet<>(typeIsEmpty ? Collections.EMPTY_SET : customerBehaviors);
default_u_total = customerBehaviorsSet.size();
default_u_avg = default_u_total / between_day;
break;
}
behaviorNoteCollectVo.setP_count(default_p_total);
behaviorNoteCollectVo.setP_avg_count(default_p_avg);
behaviorNoteCollectVo.setU_count(default_u_total);
behaviorNoteCollectVo.setU_avg_count(default_u_avg);
behaviorNoteCollectVos.add(behaviorNoteCollectVo);
}
}
return behaviorNoteCollectVos;
}
private long getBetween_day(Integer activityId, Long startTime, Long endTime) {
long between_day = 0;
if (startTime != null && endTime != null) {
between_day = ChronoUnit.DAYS.between(Instant.ofEpochMilli(startTime), Instant.ofEpochMilli(endTime));
} else {
ActivityListDTO activityListDTO = activityFeign.findActivityStartTimeAndEndTimeById(activityId);
if (startTime != null) {
between_day = ChronoUnit.DAYS.between(Instant.ofEpochMilli(startTime), Instant.now());
}
if (endTime != null) {
between_day = ChronoUnit.DAYS.between(Instant.ofEpochMilli(activityListDTO.getActivity_startTime()), Instant.ofEpochMilli(endTime));
}
if (startTime == null && endTime == null) {
between_day = ChronoUnit.DAYS.between(Instant.ofEpochMilli(activityListDTO.getActivity_startTime()), Instant.now());
}
}
return between_day;
}
}
\ No newline at end of file
package com.xxfc.platform.user.behavior.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.ParameterBuilder;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.schema.ModelRef;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Parameter;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
import java.util.ArrayList;
import java.util.List;
/**
* @Description : swagger配置配置
* @Author : Mars
* @Date : 2017年9月6日
*/
@Configuration
@EnableSwagger2
public class SwaggerConfig {
/**
* Every Docket bean is picked up by the swagger-mvc framework - allowing for multiple
* swagger groups i.e. same code base multiple swagger resource listings.
*/
@Bean
public Docket customDocket() {
ParameterBuilder ticketPar = new ParameterBuilder();
List<Parameter> pars = new ArrayList<Parameter>();
ticketPar.name("Authorization").description("user Authorization")
.modelRef(new ModelRef("string")).parameterType("header")
//header中的ticket参数非必填,传空也可以
.required(false).build();
//根据每个方法名也知道当前方法在设置什么参数
pars.add(ticketPar.build());
return new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.basePackage("com.xxfc.platform.activity.rest"))
.build()
.globalOperationParameters(pars)
.apiInfo(apiInfo());
}
ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("api swagger document")
.description("前后端联调swagger api 文档")
.version("2.1.5.5")
.build();
}
}
\ No newline at end of file
package com.xxfc.platform.user.behavior.config;
import com.github.wxiaoqi.security.common.handler.GlobalExceptionHandler;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/8/12 15:27
*/
@Configuration("campsiteWebConfig")
@Primary
public class WebConfiguration implements WebMvcConfigurer {
@Bean
GlobalExceptionHandler getGlobalExceptionHandler() {
return new GlobalExceptionHandler();
}
}
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 `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.entity.BehaviorType;
import tk.mybatis.mapper.additional.idlist.IdListMapper;
import tk.mybatis.mapper.common.Mapper;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/8/13 14:13
*/
public interface BehaviorTypeMapper extends Mapper<BehaviorType>, IdListMapper<BehaviorType,Integer> {
}
package com.xxfc.platform.user.behavior.mapper;
import com.xxfc.platform.user.behavior.entity.CustomerBehaviorNotes;
import org.apache.ibatis.annotations.Param;
import tk.mybatis.mapper.common.Mapper;
import java.util.List;
/**
* 用户行为记录表
*
* @author libin
* @email 18178966185@163.com
* @date 2019-08-12 14:03:55
*/
public interface CustomerBehaviorNotesMapper extends Mapper<CustomerBehaviorNotes> {
List<CustomerBehaviorNotes> selectByActivityIdAndTime(@Param("activityId") Integer activityId,@Param("startTime") Long startTime,@Param("endTime") Long endTime);
long selectAppVvisitsByType(@Param("code") int code);
}
package com.xxfc.platform.user.behavior.rest;
import com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.xxfc.platform.user.behavior.biz.CustomerBehaviorNotesBiz;
import com.xxfc.platform.user.behavior.common.IdentityEnum;
import com.xxfc.platform.user.behavior.dto.CustomerBehaviorNoteDTO;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Objects;
/**
* @author libin
* @version 1.0
* @description 用户行为日志*记录
* @data 2019/8/12 14:14
*/
@RestController
@RequestMapping("/customerBehaviorNotes")
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class CustomerBehaviorNotesController {
private final CustomerBehaviorNotesBiz customerBehaviorNotesBiz;
@PostMapping("/app/unauth/save")
public ObjectRestResponse<Void> saveCustomerBehavior(@RequestBody CustomerBehaviorNoteDTO customerBehaviorNoteDTO, AppUserDTO appUserDTO) {
if (Objects.nonNull(appUserDTO.getUserid())) {
customerBehaviorNoteDTO.setCustomerId(String.valueOf(appUserDTO.getUserid()));
customerBehaviorNoteDTO.setCustomerType(IdentityEnum.USER.getCode());
}else {
customerBehaviorNoteDTO.setCustomerType(IdentityEnum.VISITOR.getCode());
}
customerBehaviorNotesBiz.saveCustomerBehavior(customerBehaviorNoteDTO);
return ObjectRestResponse.succ();
}
}
\ No newline at end of file
package com.xxfc.platform.user.behavior.rest.admin;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.xxfc.platform.user.behavior.biz.CustomerBehaviorNotesBiz;
import com.xxfc.platform.user.behavior.vo.BehaviorNoteCollectVo;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* @author libin
* @version 1.0
* @description 用户行为日志*后台统计
* @data 2019/8/12 15:16
*/
@RestController
@RequestMapping("/admin/customerBehaviorNotes")
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class CustomerBehaviorNotesAdminController {
private final CustomerBehaviorNotesBiz customerBehaviorNotesBiz;
@GetMapping("/collect/{activityId}")
public ObjectRestResponse<List<BehaviorNoteCollectVo>> findCollectByActivityId(@PathVariable(value = "activityId") Integer activityId,
@RequestParam(value = "startTime", required = false) Long startTime,
@RequestParam(value = "endTime", required = false) Long endTime) {
List<BehaviorNoteCollectVo> behaviorNoteCollectVos = customerBehaviorNotesBiz.findBehaviorCollectByActivityId(activityId, startTime, endTime);
return ObjectRestResponse.succ(behaviorNoteCollectVos);
}
}
spring:
application:
name: xx-user-behavior
profiles:
active: dev
cloud:
nacos:
config:
file-extension: yaml
---
spring:
profiles: dev
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848
#共用配置,暂定一个
shared-dataids: common-dev.yaml,mongodb-log-dev.yaml
---
spring:
profiles: pro
cloud:
nacos:
config:
server-addr: 10.5.52.2:8848
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
<!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径 -->
<property name="LOG_HOME" value="${system.log.path:-logs}"/>
<!-- 彩色日志依赖的渲染类 -->
<conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />
<conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" />
<conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" />
<!-- 彩色日志格式 -->
<property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <!--1. 输出到控制台-->
<filter class="com.github.wxiaoqi.security.common.filter.NacosLogFilter"></filter>
<encoder>
<Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
<charset>UTF-8</charset> <!-- 设置字符集 -->
</encoder>
</appender>
<appender name="SYSTEM_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><!-- 按照每天生成日志文件 -->
<filter class="com.github.wxiaoqi.security.common.filter.DenyFilter"></filter>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>${LOG_HOME}/sys.%d{yyyy-MM-dd}.log</FileNamePattern><!--日志文件输出的文件名 -->
<MaxHistory>30</MaxHistory><!--日志文件保留天数 -->
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<Pattern>${CONSOLE_LOG_PATTERN}</Pattern><!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
</encoder>
</appender>
<appender name="WEB_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><!-- 按照每天生成日志文件 -->
<filter class="com.github.wxiaoqi.security.common.filter.AcceptFilter"></filter>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>${LOG_HOME}/log.%d{yyyy-MM-dd}.log</FileNamePattern><!--日志文件输出的文件名 -->
<MaxHistory>30</MaxHistory><!--日志文件保留天数 -->
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<Pattern>${CONSOLE_LOG_PATTERN}</Pattern><!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="STDOUT" />
<appender-ref ref="SYSTEM_FILE" />
<appender-ref ref="WEB_FILE" />
</root>
</configuration>
\ 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.user.behavior.mapper.CustomerBehaviorNotesMapper">
<!-- 可根据自己的需求,是否要使用 -->
<resultMap type="com.xxfc.platform.user.behavior.entity.CustomerBehaviorNotes" id="customerBehaviorNotesMap">
<result property="id" column="id"/>
<result property="customerId" column="customer_id"/>
<result property="customerType" column="customer_type"/>
<result property="type" column="type"/>
<result property="typeId" column="type_id"/>
<result property="crtTime" column="crt_time"/>
<result property="requestId" column="request_id"/>
</resultMap>
<select id="selectByActivityIdAndTime" resultMap="customerBehaviorNotesMap">
select * from `customer_behavior_notes` where `type_id`=#{activityId}
<if test="startTime != 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>
</select>
<select id="selectAppVvisitsByType" resultType="long">
select count(id) from `customer_behavior_notes` where `type`=#{code}
</select>
</mapper>
\ No newline at end of file
......@@ -53,6 +53,7 @@ public enum ResCode {
ORDER_DETAIL_IS_NOT_EXIST(10001, "订单详情不可查询"),
YOU_AUTH_FAIL(-2,"无权限查看此信息"),
ORDER_IS_NOT_PAY(10002, "订单未支付"),
USER_IS_EXIST(10003, "用户名已存在");
;
/**
* 返回码
......
......@@ -2,6 +2,8 @@ package com.xxfc.platform.vehicle.pojo;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class AddOrUpdateAccompanyingItem {
......@@ -17,6 +19,7 @@ public class AddOrUpdateAccompanyingItem {
*/
private Integer type;
private BigDecimal price;
/**
* 备注
......
......@@ -17,9 +17,16 @@ public class CompanyDetail extends BranchCompany {
// if(0 != detailAddrStr.length()) {
//
// }
String name = sysRegion.getName()
.replace("省", "")
.replace("市", "")
.replace("县", "")
.replace("区", "");
if( !detailAddrStr.toString().contains(name)) {
detailAddrStr.append(sysRegion.getName());
}
}
}
detailAddrStr.append(this.getAddrDetail());
return detailAddrStr.toString();
......
package com.xxfc.platform.vehicle.pojo.dto;
import com.github.wxiaoqi.security.common.vo.PageParam;
import lombok.Data;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/8/12 16:08
*/
@Data
public class AccompanyingItemFindDTO extends PageParam {
private String name;
private Integer type;
}
......@@ -13,7 +13,7 @@ import com.xxfc.platform.vehicle.constant.RedisKey;
import com.xxfc.platform.vehicle.entity.AccompanyingItem;
import com.xxfc.platform.vehicle.mapper.AccompanyingItemMapper;
import com.xxfc.platform.vehicle.pojo.AddOrUpdateAccompanyingItem;
import com.xxfc.platform.vehicle.pojo.QueryAccompanyItemVo;
import com.xxfc.platform.vehicle.pojo.dto.AccompanyingItemFindDTO;
import com.xxfc.platform.vehicle.pojo.vo.AccompanyingItemVo;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.beanutils.BeanUtils;
......@@ -29,7 +29,6 @@ import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@Service
......@@ -69,15 +68,12 @@ public class AccompanyingItemBiz extends BaseBiz<AccompanyingItemMapper, Accompa
/**
* 按页查询,
* 注意,此处一共名称的模糊查询是预测其数据量较少,有变化后考虑加入全文索引
* @param queryAccompanyItemVo
* @return
* @throws Exception
*/
public PageDataVO<AccompanyingItem> getByPage(QueryAccompanyItemVo queryAccompanyItemVo) throws Exception{
Map<String,String> params = BeanUtils.describe(queryAccompanyItemVo);
PageHelper.startPage(queryAccompanyItemVo.getPage(),queryAccompanyItemVo.getLimit());
List<AccompanyingItem> accompanyingItems = mapper.getAllByPage(params);
public PageDataVO<AccompanyingItem> getByPage(AccompanyingItemFindDTO accompanyingItemFindDTO){
PageHelper.startPage(accompanyingItemFindDTO.getPage(),accompanyingItemFindDTO.getLimit());
List<AccompanyingItem> accompanyingItems = mapper.getAllPageByNameOrType(accompanyingItemFindDTO.getName(),accompanyingItemFindDTO.getType());
PageInfo<AccompanyingItem> accompanyingItemsPageInfo = new PageInfo<>(accompanyingItems);
return PageDataVO.pageInfo(accompanyingItemsPageInfo);
}
......
......@@ -159,7 +159,7 @@ public class ConstantBiz extends BaseBiz<ConstantMapper,Constant> {
return Boolean.FALSE;
}
if(constants.size()>MAX_BATCH_SIZE_CONSTANT_UPDATE){
throw new IllegalArgumentException(" exceed max batch size");
throw new BaseException(" exceed max batch size");
}
return Boolean.TRUE;
......@@ -198,7 +198,7 @@ public class ConstantBiz extends BaseBiz<ConstantMapper,Constant> {
return 0;
}
if(codes.size()>MAX_BATCH_SIZE_CONSTANT_UPDATE){
throw new IllegalArgumentException(" exceed max batch size");
throw new BaseException(" exceed max batch size");
}
List<String> delCodes = Lists.newArrayList();
for(Integer code:codes){
......
......@@ -208,7 +208,7 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> implements UserR
public RestResponse add(List<AddOrUpdateVehicleVo> addOrUpdateVehicleVoList) throws Exception{
if(addOrUpdateVehicleVoList.size()>MAX_BATCH_SIZE_VEHICLE){
throw new BaseException("添加的车辆数量过多!");
throw new BaseException(ResultCode.ADD_VEHICLE_MORE);
}
for(AddOrUpdateVehicleVo addOrUpdateVehicleVo:addOrUpdateVehicleVoList) {
......@@ -217,7 +217,7 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> implements UserR
BeanUtilsBean.getInstance().copyProperties(vehicle, addOrUpdateVehicleVo);
if (addOrUpdateVehicleVo.getParkBranchCompanyId()==null) {
throw new BaseException("停靠公司不能为空");
throw new BaseException(ResultCode.RET_COMPANY_CAN_NOT_BE_NULL);
}
vehicle.setId(UUID.randomUUID().toString());
......@@ -251,7 +251,7 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> implements UserR
// }
if(addOrUpdateVehicleVo.getNumberPlate() == null){
throw new BaseException("车牌不能为空");
throw new BaseException(ResultCode.NUMBER_PLAT_CAN_NOT_BE_NULL);
}
List<Vehicle> vehicles = mapper.lockByCode(addOrUpdateVehicleVo);
return vehicles;
......@@ -265,14 +265,14 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> implements UserR
@Transactional
public RestResponse update(List<AddOrUpdateVehicleVo> addOrUpdateVehicleVoList) throws Exception{
if(addOrUpdateVehicleVoList.size()>MAX_BATCH_SIZE_VEHICLE){
throw new BaseException("exceed max batch size");
throw new BaseException(ResultCode.ADD_VEHICLE_MORE);
}
for(AddOrUpdateVehicleVo addOrUpdateVehicleVo:addOrUpdateVehicleVoList){
Vehicle vehicle = new Vehicle();
BeanUtilsBean.getInstance().copyProperties(vehicle, addOrUpdateVehicleVo);
if (addOrUpdateVehicleVo.getParkBranchCompanyId()==null) {
throw new BaseException("Stop at branch office cannot be empty");
throw new BaseException(ResultCode.RET_COMPANY_CAN_NOT_BE_NULL);
}
//悲观锁,检查是否已存在车牌或编码
......@@ -305,7 +305,7 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> implements UserR
*/
public RestResponse discard(List<String> idList){
if(idList.size()>MAX_BATCH_SIZE_VEHICLE){
throw new BaseException("exceed max batch size");
throw new BaseException(ResultCode.ADD_VEHICLE_MORE);
}
Map<String,Object> params = Maps.newHashMap();
params.put("idList",idList);
......@@ -327,6 +327,10 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> implements UserR
checkIfVehicleExists(bookVehicleVo.getVehicleId());
//提取日期和相应的预定目标日期
Map<String,List<String>> yearMonthAndDate = Maps.newHashMap();
//预定时间不能为空
if(StringUtils.isBlank(bookVehicleVo.getBookStartDate()) || StringUtils.isBlank(bookVehicleVo.getBookEndDate())){
throw new BaseException(ResultCode.DATE_TIME_IS_NULL);
}
String[] bookStartDateArray = bookVehicleVo.getBookStartDate().split(" ");
String[] bookEndDateArray = bookVehicleVo.getBookEndDate().split(" ");
......@@ -337,7 +341,7 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> implements UserR
//转换日期范围为列表,并检查是否合法
fillDateList4DatePeriod(yearMonthAndDate,startDay,endDay);
if(yearMonthAndDate.size()>3){//连续的日期最多夸3个月
throw new BaseException(" you can only within 2 month");
throw new BaseException(ResultCode.ONLY_BOOK_TWO_MONTH);
}
for(Map.Entry<String,List<String>> entry:yearMonthAndDate.entrySet()){
Boolean rsEach = applyVehicle4EmployeePerMonth(bookVehicleVo.getVehicleId(),entry.getValue(),entry.getKey());
......@@ -412,6 +416,10 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> implements UserR
checkIfVehicleExists(bookVehicleVo.getVehicleId());
//提取日期和相应的预定目标日期
Map<String,List<String>> yearMonthAndDate = Maps.newHashMap();
//预定时间不能为空
if(StringUtils.isBlank(bookVehicleVo.getBookStartDate()) || StringUtils.isBlank(bookVehicleVo.getBookEndDate())){
throw new BaseException(ResultCode.DATE_TIME_IS_NULL);
}
DateTime startDay =DateTime.parse(bookVehicleVo.getBookStartDate(),DATE_TIME_FORMATTER);
DateTime endDay =DateTime.parse(bookVehicleVo.getBookEndDate(), DATE_TIME_FORMATTER);
......@@ -419,7 +427,7 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> implements UserR
//转换日期范围为列表,并检查是否合法
fillDateList4DatePeriod(yearMonthAndDate,startDay,endDay);
if(yearMonthAndDate.size()>3){//连续的日期最多夸3个月
throw new BaseException(" 只可以预约两个月内的车辆");
throw new BaseException(ResultCode.ONLY_BOOK_TWO_MONTH);
}
//检查车辆是否可以预定
for(Map.Entry<String,List<String>> entry:yearMonthAndDate.entrySet()){
......@@ -462,7 +470,7 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> implements UserR
//修改相关车辆预定记录
Boolean hasSuc = bookedVehicle(bookVehicleVo);
if(!hasSuc){
throw new BaseException("车辆预定失败");
throw new BaseException(ResultCode.BOOKED_FAILED_CODE);
}
//添加随车物品
......@@ -503,7 +511,7 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> implements UserR
//转换日期范围为列表,并检查是否合法
fillDateList4DatePeriod(yearMonthAndDate,startDay,endDay);
if(yearMonthAndDate.size()>3){//连续的日期最多夸3个月
throw new BaseException(" 只可以预约两个月内的车辆");
throw new BaseException(ResultCode.ONLY_BOOK_TWO_MONTH);
}
for(Map.Entry<String,List<String>> entry:yearMonthAndDate.entrySet()){
Boolean rsEach = applyVehicle4EmployeePerMonth(bookVehicleVo.getVehicleId(),entry.getValue(),entry.getKey());
......@@ -594,16 +602,16 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> implements UserR
* @return
*/
@Transactional
public RestResponse<Integer> reviewVehicleBooking(Integer operatorId, Long bookRecordId,Integer rsStatus,String userName){
public RestResponse<Integer> reviewVehicleBooking(Integer operatorId, Long bookRecordId,Integer rsStatus,String userName) throws Exception{
try {
//获取相关申请记录
VehicleBookRecord vehicleBookRecord = vehicleBookRecordBiz.selectById(bookRecordId);
//申请记录验证
if(vehicleBookRecord == null){
throw new BaseException(" invalid book record");
return RestResponse.codeAndMessage(ResCode.VEHICLE_BOOK_RECORD_IS_NOT_EXIST.getCode(), ResCode.VEHICLE_BOOK_RECORD_IS_NOT_EXIST.getDesc());
}
if(!VehicleBookRecordStatus.APPLY.getCode().equals(vehicleBookRecord.getStatus())){
throw new BaseException(ResCode.VEHICLE_BOOKED_RECORD_ALREADY_CHANGED.getDesc(), ResCode.VEHICLE_BOOKED_RECORD_ALREADY_CHANGED.getCode());
if(VehicleBookRecordStatus.APPROVE.getCode().equals(vehicleBookRecord.getStatus())){
return RestResponse.codeAndMessage(ResCode.VEHICLE_BOOKED_RECORD_ALREADY_CHANGED.getCode(), ResCode.VEHICLE_BOOKED_RECORD_ALREADY_CHANGED.getDesc());
}
//转换为相应预定参数
BookVehicleVO bookVehicleVo = new BookVehicleVO();
......@@ -663,7 +671,7 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> implements UserR
VehicleBookRecord vehicleBookRecord = vehicleBookRecordBiz.selectById(bookRecordId);
//申请记录验证
if(vehicleBookRecord == null){
throw new BaseException(" invalid book record");
return RestResponse.codeAndMessage(ResCode.VEHICLE_BOOK_RECORD_IS_NOT_EXIST.getCode(), ResCode.VEHICLE_BOOK_RECORD_IS_NOT_EXIST.getDesc());
}
//已通过审核的可以取消预定
if(!VehicleBookRecordStatus.APPROVE.getCode().equals(vehicleBookRecord.getStatus())){
......@@ -679,7 +687,7 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> implements UserR
//取消预定
Boolean hasSuc = unbookVehicle(bookVehicleVo);
if(!hasSuc){
throw new IllegalArgumentException(" invalid book record ");
return RestResponse.codeAndMessage(ResCode.VEHICLE_BOOK_RECORD_IS_NOT_EXIST.getCode(), ResCode.VEHICLE_BOOK_RECORD_IS_NOT_EXIST.getDesc());
}
//修改预定状态,写入取消人
Map<String,Object> updateParam = Maps.newHashMap();
......@@ -751,7 +759,7 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> implements UserR
//转换日期范围为列表,并检查是否合法
fillDateList4DatePeriod(yearMonthAndDate,startDay,endDay);
if(yearMonthAndDate.size()>3){//连续的日期最多夸3个月
throw new BaseException(" 只可以预约两个月内的车辆");
throw new BaseException(ResultCode.ONLY_BOOK_TWO_MONTH);
}
Boolean rs = Boolean.TRUE;
for(Map.Entry<String,List<String>> entry:yearMonthAndDate.entrySet()){
......@@ -789,7 +797,7 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> implements UserR
params.put("yearMonth",yearMonth);
//加入更新条件
if(CollectionUtils.isEmpty(bookedDates)){
throw new BaseException(" there are no day to book");
throw new BaseException(ResultCode.BOOKED_DATE_IS_EMPTY);
}
Map<String,List<String>> yearMonthAndDate = new HashMap<>();
yearMonthAndDate.put(vehicleBookInfo.getYearMonth(),bookedDates);
......@@ -830,7 +838,7 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> implements UserR
for( DateTime curDate = startDay;curDate.compareTo(endDay)<=0;curDate=curDate.plusDays(1)){
String curDateStr = curDate.toString(DEFAULT_DATE_TIME_FORMATTER);
if(curDateStr.compareTo(DateTime.now().toString(DEFAULT_DATE_TIME_FORMATTER))<0){
throw new BaseException("只可以取消当前时间之后的车辆");
throw new BaseException(ResultCode.ONLY_BOOK_FROM_TODAY);
}
String curYearMonth = curDate.toString(YEARMONTH_DATE_TIME_FORMATTER);
if(!yearMonthAndDate.containsKey(curYearMonth)){
......@@ -860,7 +868,7 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> implements UserR
}
if(yearMonthAndDate.size()>3){//连续的日期最多夸3个月
throw new BaseException(" 只可以预约两个月内的车辆");
throw new BaseException(ResultCode.ONLY_BOOK_TWO_MONTH);
}
}
......@@ -879,7 +887,7 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> implements UserR
uinbookDateList4DatePeriod(yearMonthAndDate,startDay,endDay);
if(yearMonthAndDate.size()>3){//连续的日期最多夸3个月
throw new BaseException(" 只可以预约两个月内的车辆");
throw new BaseException(ResultCode.ONLY_UNBOOK_TWO_MONTH);
}
Boolean rs = Boolean.TRUE;
for(Map.Entry<String,List<String>> entry:yearMonthAndDate.entrySet()){
......@@ -900,7 +908,7 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> implements UserR
params.put("yearMonth",yearMonth);
//加入更新条件
if(CollectionUtils.isEmpty(unbookDates)){
throw new BaseException(" 车辆不可预定");
throw new BaseException(ResultCode.VEHICLE_CAN_NOT_UNBOOK);
}
Map<String,List<String>> yearMonthAndDate = new HashMap<>();
yearMonthAndDate.put(yearMonth,unbookDates);
......@@ -927,7 +935,7 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> implements UserR
public void fillBookedDateSearchParam(Map<String, Object> params,
Map<String,List<String>> yearMonthAndDate,Map<String,List<String>> yearMonthAndDateNotBooked){
if(MapUtils.isEmpty(yearMonthAndDate)&&MapUtils.isEmpty(yearMonthAndDateNotBooked)){//没有预定信息查询条件
throw new BaseException("没有预订信息!");
throw new BaseException(ResultCode.BOOKED_DATE_IS_EMPTY);
}
Map<String,Map<String,Integer>> yearMonthAndParam = new HashMap<>();
......@@ -972,7 +980,8 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> implements UserR
}
for (String dateStr:entry.getValue()) {//已预定作为条件,该位与1作与运算必定为1
if(bookedYearMonth.contains(dateStr)){
throw new BaseException("同一天既作为未预定查询条件又作为已预定查询条件");
log.info("当天不可预定,日期为:dateStr = {}", dateStr);
throw new BaseException(ResultCode.TODAY_CAN_NOT_BOOK);
}
DateTime dateTime = DateTime.parse(dateStr, DEFAULT_DATE_TIME_FORMATTER);
//仅对应位为1的整形值
......
......@@ -39,15 +39,15 @@ public class VehicleBookHourInfoBiz extends BaseBiz<VehicleBookHourInfoMapper, V
startDate = simpleDateFormat.parse(bookStartDate);
endDate = simpleDateFormat.parse(bookEndDate);
}catch (Exception e) {
e.printStackTrace();
}
//判定时间是否合法
if (bookStartDate.compareTo(DateTime.now().toString(DEFAULT_DATE_TIME_FORMATTER)) < 0) {
throw new BaseException(ResultCode.getMsg(ResultCode.ONLY_BOOK_FROM_TODAY));
throw new BaseException(ResultCode.ONLY_BOOK_FROM_TODAY);
}
if (bookStartDate.compareTo(bookEndDate) > 0) {
throw new BaseException("预定开始日期不能大于结束日期!");
throw new BaseException(ResultCode.ONLY_BOOK_FROM_TODAY);
}
Map<String, Integer> predictableHours = Maps.newHashMap();
//预定开始小时
......
package com.xxfc.platform.vehicle.mapper;
import com.xxfc.platform.vehicle.entity.AccompanyingItem;
import org.apache.ibatis.annotations.Param;
import tk.mybatis.mapper.common.Mapper;
import java.util.List;
import java.util.Map;
public interface AccompanyingItemMapper extends Mapper<AccompanyingItem> {
public List<AccompanyingItem> getAllByPage(Map<String, String> params);
public List<AccompanyingItem> getByIdList(List<Integer> idList);
public Integer updateStatusById(AccompanyingItem accompanyingItem);
List<AccompanyingItem> getAllPageByNameOrType(@Param("name") String name, @Param("type") Integer type);
List<AccompanyingItem> getByIdList(List<Integer> idList);
}
package com.xxfc.platform.vehicle.rest;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONException;
import com.github.wxiaoqi.security.auth.client.annotation.IgnoreClientToken;
import com.github.wxiaoqi.security.common.vo.PageDataVO;
import com.xxfc.platform.vehicle.biz.AccompanyingItemBiz;
import com.xxfc.platform.vehicle.common.BaseController;
import com.xxfc.platform.vehicle.common.CustomIllegalParamException;
import com.xxfc.platform.vehicle.common.RestResponse;
import com.xxfc.platform.vehicle.constant.ResCode.ResCode;
import com.xxfc.platform.vehicle.entity.AccompanyingItem;
import com.xxfc.platform.vehicle.pojo.AddOrUpdateAccompanyingItem;
import com.github.wxiaoqi.security.common.vo.PageDataVO;
import com.xxfc.platform.vehicle.pojo.QueryAccompanyItemVo;
import com.xxfc.platform.vehicle.pojo.dto.AccompanyingItemFindDTO;
import com.xxfc.platform.vehicle.pojo.vo.AccompanyingItemVo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
......@@ -46,17 +42,9 @@ public class AccompanyingItemController extends BaseController<AccompanyingItemB
}
@RequestMapping(value ="/page",method = RequestMethod.GET)
public RestResponse<PageDataVO<AccompanyingItem>> getByPage(@RequestParam String queryAccompanyItemVoJson) throws Exception{
QueryAccompanyItemVo queryAccompanyItemVo = null;
try {
queryAccompanyItemVo = JSON.parseObject(queryAccompanyItemVoJson,QueryAccompanyItemVo.class);
return RestResponse.data(baseBiz.getByPage(queryAccompanyItemVo));
} catch (JSONException ex) {
return RestResponse.code(ResCode.INVALID_REST_REQ_PARAM.getCode());
} catch (CustomIllegalParamException ex){
return RestResponse.code(ResCode.INVALID_REST_REQ_PARAM.getCode());
}
@RequestMapping(value ="/page",method = RequestMethod.POST)
public RestResponse<PageDataVO<AccompanyingItem>> getByPage(@RequestBody AccompanyingItemFindDTO accompanyingItemFindDTO){
return RestResponse.data(baseBiz.getByPage(accompanyingItemFindDTO));
}
@RequestMapping(value ="",method = RequestMethod.POST)
......
......@@ -2,11 +2,11 @@
<!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.AccompanyingItemMapper">
<select id="getAllByPage" parameterType="java.util.Map" resultType="com.xxfc.platform.vehicle.entity.AccompanyingItem">
<select id="getAllPageByNameOrType" parameterType="java.util.Map" resultType="com.xxfc.platform.vehicle.entity.AccompanyingItem">
select
`id`, `type`, `name`, `remark`, `create_time`, `update_time`
`id`, `type`, `name`, `remark`,`price`, `create_time`, `update_time`
from
vehicle.accompanying_item
`accompanying_item`
where
1 = 1
<if test="name != null and name != ''">
......@@ -24,9 +24,9 @@
<select id="getByIdList" parameterType="java.util.List" resultType="com.xxfc.platform.vehicle.entity.AccompanyingItem">
select
`id`, `type`, `name`, `remark`, `create_time`, `update_time`
`id`, `type`, `name`,`price`,`remark`, `create_time`, `update_time`
from
vehicle.accompanying_item
accompanying_item
where `id` in
<foreach collection="list" index="i" item="item" open="(" close=")" separator=",">
#{item}
......
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