提交 5970d4a0 authored 作者: liuhaiquan's avatar liuhaiquan

修改创建货单一个车辆只能绑定一个定向单的拦截逻辑

上级 1292537a
......@@ -7,6 +7,7 @@ import com.msl.common.dao.BaseDao;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Set;
/**
* @Author: huyufan
......@@ -40,4 +41,5 @@ public interface OrderGoodsTruckBindDao extends BaseDao<OrderGoodsTruckBindMappe
List<OrderGoodsTruckBind> getTrucksBindByOrderGoodsNo(String orderGoodsNo,String truckNo);
List<OrderGoodsTruckBind> judgeTruckIsBindDxOrder(Set<String> set);
}
......@@ -14,6 +14,7 @@ import org.springframework.stereotype.Repository;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Set;
/**
* @Author: huyufan
......@@ -124,4 +125,12 @@ public class OrderGoodsTruckBindDaoImpl extends BaseDaoImpl<OrderGoodsTruckBindM
query.orderByDesc(OrderGoodsTruckBind :: getCreateTime);
return baseMapper.selectList(query);
}
@Override
public List<OrderGoodsTruckBind> judgeTruckIsBindDxOrder(Set<String> set) {
LambdaQueryWrapper<OrderGoodsTruckBind> query = new LambdaQueryWrapper<>();
query.in(OrderGoodsTruckBind::getTruckNo, set);
query.in(OrderGoodsTruckBind :: getStatus,OrderGoodsTruckBindEnum.Status.SUCCESS.getCode(),OrderGoodsTruckBindEnum.Status.GET.getCode());
return baseMapper.selectList(query);
}
}
......@@ -2,21 +2,31 @@ package com.clx.performance.strategy;
import com.clx.order.enums.OrderStopEnum;
import com.clx.order.enums.ResultEnum;
import com.clx.order.params.OrderGoodsChildParams;
import com.clx.order.params.OrderGoodsParams;
import com.clx.order.vo.feign.FeignOrderVO;
import com.clx.performance.constant.RabbitKeyConstants;
import com.clx.performance.dao.OrderGoodsTruckBindDao;
import com.clx.performance.model.OrderGoodsTruckBind;
import com.clx.performance.utils.SpringContextUtils;
import com.msl.common.exception.ServiceSystemException;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessageBuilder;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import java.time.LocalDateTime;
import java.util.HashSet;
import java.util.List;
import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors;
@Slf4j
public abstract class GoodsOrderStrategy {
/**
* 不同的用车需求执行不同的策略 1:one 2:two 3:three
* 用车需求: 1平台车辆 2部分平台车辆 3自有车辆
......@@ -33,6 +43,28 @@ public abstract class GoodsOrderStrategy {
if(Objects.equals(orderInfo.getStopFlag(), OrderStopEnum.Status.YES.getCode())){
throw new ServiceSystemException(ResultEnum.DATA_ERROR,"订单已暂停,无法进行提量");
}
//多个定向单不允许车辆重复
List<OrderGoodsChildParams> orderGoodsChildParams = orderGoodsParams.getOrderGoodsChildParams();
Set<String> set = new HashSet<>();
int i = 0;
for (OrderGoodsChildParams item : orderGoodsChildParams) {
if(CollectionUtils.isNotEmpty(item.getTruckList())){
set.addAll(item.getTruckList());
i = i+item.getTruckList().size();
}
}
if(!Objects.equals(set.size(),i) ){
throw new ServiceSystemException(ResultEnum.DATA_ERROR,"定向单选择车辆重复");
}
OrderGoodsTruckBindDao orderGoodsTruckBindDao = SpringContextUtils.getBeanByClass(OrderGoodsTruckBindDao.class);
List<OrderGoodsTruckBind> binds = orderGoodsTruckBindDao.judgeTruckIsBindDxOrder(set);
if(CollectionUtils.isNotEmpty(binds)){
List<String> repeatBind = binds.stream().map(OrderGoodsTruckBind::getTruckNo).collect(Collectors.toList());
String trucks = repeatBind.stream().collect(Collectors.joining(", "));
throw new ServiceSystemException(ResultEnum.DATA_ERROR,"已被定向单绑定车辆:"+ trucks);
}
//根据不同的订单类型创建不同的货单
LocalDateTime sendLazyTime = goodsOrderProcess(orderGoodsParams, orderInfo, now);
......
package com.clx.performance.utils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.Map;
/**
*
* Spring 工具类
*/
@Component
public class SpringContextUtils implements ApplicationContextAware {
private static ConfigurableApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext context) throws BeansException {
applicationContext = (ConfigurableApplicationContext) context;
}
/**
* 获取ApplicationContext对象
*/
public static ApplicationContext getApplicationContext(){
return applicationContext;
}
/**
* 停止应用程序
*/
public static void close(){
if(applicationContext != null){
applicationContext.close();
}
}
/**
* 根据bean的名称获取bean
*/
public static Object getBeanByName(String name){
return applicationContext.getBean(name);
}
/**
* 根据bean的class来查找对象
*/
public static <T> T getBeanByClass(Class<T> clazz){
return applicationContext.getBean(clazz);
}
/**
* 根据bean的class来查找所有的对象(包括子类)
*/
public static <T> Map<String, T> getBeansByClass(Class<T> c){
return applicationContext.getBeansOfType(c);
}
/**
* 获取HttpServletRequest
*/
public static HttpServletRequest getRequest() {
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes();
return attributes.getRequest();
}
/**
* 获取HttpSession
*/
public static HttpSession getSession() {
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes();
return attributes.getRequest().getSession();
}
/**
* 获取完整的请求URL
*/
public static String getRequestUrl(){
return getRequestUrl(getRequest());
}
/**
* 获取完整的请求URL
*/
public static String getRequestUrl(HttpServletRequest request){
//当前请求路径
String currentUrl = request.getRequestURL().toString();
//请求参数
String queryString = request.getQueryString();
if(!StringUtils.isEmpty(queryString)){
currentUrl = currentUrl + "?" + queryString;
}
String result = "";
try {
result = URLEncoder.encode(currentUrl,"UTF-8");
} catch (UnsupportedEncodingException e) {
//ignore
}
return result;
}
/**
* 获取请求的客户端IP
*/
public static String getRequestIp(HttpServletRequest request) {
String ip = request.getHeader("X-Forwarded-For");
if(StringUtils.isNoneBlank(ip) && !"unKnown".equalsIgnoreCase(ip)){
//多次反向代理后会有多个ip值,第一个ip才是真实ip
int index = ip.indexOf(",");
if(index != -1){
return ip.substring(0,index);
}else{
return ip;
}
}
ip = request.getHeader("X-Real-IP");
if(StringUtils.isNoneBlank(ip) && !"unKnown".equalsIgnoreCase(ip)){
return ip;
}
return request.getRemoteAddr();
}
}
\ No newline at end of file
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论