@ -1,13 +1,11 @@
package com.logpm.distribution.service.impl ;
import com.alibaba.fastjson.JSONObject ;
import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder ;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper ;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper ;
import com.baomidou.mybatisplus.core.metadata.IPage ;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils ;
import com.logpm.basicdata.entity.BasicdataWarehouseEntity ;
import com.logpm.basicdata.feign.IBasicdataClientClient ;
import com.logpm.basicdata.feign.IBasicdataWarehouseClient ;
import com.logpm.business.dto.BusinessPreListDTO ;
import com.logpm.business.entity.DistributionBusinessPreOrderEntity ;
@ -15,31 +13,27 @@ import com.logpm.business.vo.DistributionBusinessPreOrderListVO;
import com.logpm.business.vo.DistributionBusinessPreOrderVO ;
import com.logpm.distribution.bean.Resp ;
import com.logpm.distribution.dto.DistributionBusinessPreOrderDTO ;
import com.logpm.distribution.dto.DistributionStockArticleOweDTO ;
import com.logpm.distribution.entity.DistributionParcelListEntity ;
import com.logpm.distribution.entity.DistributionStockArticleEntity ;
import com.logpm.distribution.mapper.DistributionBusinessPreOrderMapper ;
import com.logpm.distribution.service.IDistributionAsyncService ;
import com.logpm.distribution.service.IDistributionBusinessPreOrderService ;
import com.logpm.distribution.service.IDistributionParcelListService ;
import com.logpm.distribution.service.IDistributionStockArticleService ;
import com.logpm.trunkline.dto.InComingDTO ;
import com.logpm.trunkline.feign.IInComingClient ;
import lombok.AllArgsConstructor ;
import org.springblade.common.annotations.ChangeAsync ;
import org.springblade.common.annotations.LogpmAsync ;
import org.springblade.common.exception.CustomerException ;
import org.springblade.common.constant.IncomingTypeEnum ;
import org.springblade.core.log.exception.ServiceException ;
import org.springblade.core.mp.base.BaseServiceImpl ;
import org.springblade.core.mp.support.Query ;
import org.springblade.core.tool.api.R ;
import org.springblade.core.tool.utils.BeanUtil ;
import org.springframework.scheduling.annotation.Async ;
import org.springframework.stereotype.Service ;
import java.util.ArrayList ;
import java.util.Arrays ;
import java.util.List ;
import java.util.Map ;
import java.util.concurrent.CompletableFuture ;
import java.util.concurrent.ExecutionException ;
import java.util.stream.Collectors ;
@Service
@ -50,7 +44,9 @@ public class IDistributionBusinessPreOrderServiceImpl extends BaseServiceImpl<Di
private final IBasicdataWarehouseClient basicdataWarehouseClient ;
private final IDistributionParcelListService distributionParcelListService ;
private final IDistributionAsyncService distributionAsyncService ;
// private final IDistributionAsyncService distributionAsyncService;
private final IInComingClient inComingClient ;
@Override
public Boolean inOrder ( String ids ) throws ServiceException {
@ -59,31 +55,70 @@ public class IDistributionBusinessPreOrderServiceImpl extends BaseServiceImpl<Di
List < String > idArray = Arrays . asList ( ids . split ( "," ) ) ;
QueryWrapper wrapper = new QueryWrapper ( ) ;
wrapper . in ( "id" , idArray ) ;
InComingDTO inComingDTO = new InComingDTO ( ) ;
StringBuffer sb = new StringBuffer ( ) ;
List < DistributionBusinessPreOrderEntity > list = baseMapper . selectList ( wrapper ) ;
List < DistributionBusinessPreOrderEntity > data = new ArrayList < > ( ) ;
for ( DistributionBusinessPreOrderEntity distributionBusinessPreOrderEntity : list ) {
if ( distributionBusinessPreOrderEntity . getInWarehouse ( ) = = 1 ) {
throw new ServiceException ( "存在已入库的包件" ) ;
}
//调用方法 执行批量入库
DistributionStockArticleEntity stockArticleEntity = buildDistributionStockArticleEntity ( distributionBusinessPreOrderEntity ) ;
if ( stockArticleEntity = = null ) {
throw new ServiceException ( "订单信息错误,请联系管理员!" ) ;
if ( ! sb . toString ( ) . isEmpty ( ) ) {
sb . append ( "," ) ;
}
// 保存包件
distributionBusinessPreOrderEntity . setWarehouseId ( stockArticleEntity . getWarehouseId ( ) ) ;
distributionBusinessPreOrderEntity . setWarehouse ( stockArticleEntity . getWarehouse ( ) ) ;
distributionBusinessPreOrderEntity . setStockArticleId ( stockArticleEntity . getId ( ) ) ;
buildDistributionParcelListEntity ( distributionBusinessPreOrderEntity ) ;
sb . append ( distributionBusinessPreOrderEntity . getOrderPackageCode ( ) ) ;
data . add ( distributionBusinessPreOrderEntity ) ;
}
BasicdataWarehouseEntity myCurrentWarehouse = basicdataWarehouseClient . getMyCurrentWarehouse ( ) ;
inComingDTO . setOrderPackageCode ( sb . toString ( ) ) ;
inComingDTO . setIncomingType ( IncomingTypeEnum . LINE_INCOMING . getCode ( ) ) ;
inComingDTO . setWarehouseId ( myCurrentWarehouse . getId ( ) ) ;
inComingDTO . setWarehouseName ( myCurrentWarehouse . getName ( ) ) ;
R r = inComingClient . incomingPackage ( inComingDTO ) ;
if ( r . isSuccess ( ) ) {
// 更新成功
// 更新入库状态
// 调用入库方法
distributionBusinessPreOrderEntity . setInWarehouse ( 1 ) ;
baseMapper . updateById ( distributionBusinessPreOrderEntity ) ;
for ( DistributionBusinessPreOrderEntity distributionBusinessPreOrderEntity : data ) {
distributionBusinessPreOrderEntity . setInWarehouse ( 1 ) ;
baseMapper . updateById ( distributionBusinessPreOrderEntity ) ;
}
}
return true ;
}
@Override
public Integer inOrderByOrderPackageCode ( String orderPackageCode ) {
int a = baseMapper . updateBusinessPreOrderByOrderPackageCode ( orderPackageCode ) ;
return a ;
// QueryWrapper wrapper = new QueryWrapper();
// wrapper.eq("order_package_code", orderPackageCode);
// wrapper.eq("in_warehouse",0);
// wrapper.eq("is_deleted","0");
// List<DistributionBusinessPreOrderEntity> list = baseMapper.selectList(wrapper);
//
// for (DistributionBusinessPreOrderEntity distributionBusinessPreOrderEntity : data) {
//
// distributionBusinessPreOrderEntity.setInWarehouse(1);
// baseMapper.updateById(distributionBusinessPreOrderEntity);
// }
}
@Override
public IPage < DistributionBusinessPreOrderVO > pacgeList ( Map < String , Object > distributionBusinessPreOrderDTO , IPage < DistributionBusinessPreOrderVO > page ) {
DistributionBusinessPreOrderDTO param = JSONObject . parseObject ( JSONObject . toJSONString ( distributionBusinessPreOrderDTO ) , DistributionBusinessPreOrderDTO . class ) ;
@ -137,80 +172,80 @@ public class IDistributionBusinessPreOrderServiceImpl extends BaseServiceImpl<Di
public Resp inOrderWarehourse ( String orderPackageCode , String reservationCode ) {
// 查询当前预约单所有的包件
LambdaQueryWrapper < DistributionBusinessPreOrderEntity > queryWrapper = new LambdaQueryWrapper < > ( ) ;
queryWrapper . eq ( DistributionBusinessPreOrderEntity : : getReservationCode , reservationCode ) ;
List < DistributionBusinessPreOrderEntity > list = baseMapper . selectList ( queryWrapper ) ;
// 寻找 当前匹配的包条
DistributionBusinessPreOrderEntity t = null ;
DistributionBusinessPreOrderEntity t1 = null ;
for ( DistributionBusinessPreOrderEntity distributionBusinessPreOrderEntity : list ) {
if ( distributionBusinessPreOrderEntity . getOrderPackageCode ( ) . equals ( orderPackageCode ) ) {
// 找到匹配的包条码
if ( distributionBusinessPreOrderEntity . getInWarehouse ( ) = = 1 ) {
return Resp . scanSuccess ( "扫描成功" , "包件已入库" ) ;
} else {
t = distributionBusinessPreOrderEntity ;
}
}
if ( t1 = = null ) {
t1 = distributionBusinessPreOrderEntity ;
}
}
if ( t = = null ) {
try {
DistributionBusinessPreOrderEntity finalT = t1 ;
CompletableFuture < DistributionParcelListEntity > distributionParcelListEntityCompletableFuture = CompletableFuture . supplyAsync ( ( ) - > this . selectByOrderPackageCode ( orderPackageCode , finalT . getAcceptWarehouseId ( ) ) ) ;
DistributionParcelListEntity distributionParcelListEntity = distributionParcelListEntityCompletableFuture . get ( ) ;
// 如找到了 保存在当前的这个配送计划任务中
if ( distributionParcelListEntity ! = null ) {
// 保存包件
t = BeanUtil . copy ( distributionParcelListEntity , DistributionBusinessPreOrderEntity . class ) ;
t . setDriverName ( finalT . getDriverName ( ) ) ;
t . setVehicleName ( finalT . getVehicleName ( ) ) ;
t . setDistrCarNumber ( finalT . getTrainNumber ( ) ) ;
t . setOperationStatus ( 1 ) ;
t . setInWarehouse ( 0 ) ;
this . save ( t ) ;
list . add ( t ) ;
}
} catch ( InterruptedException | ExecutionException e ) {
log . error ( "inOrderWarehourse:" , e ) ;
throw new ServiceException ( "包件信息不存在!" ) ;
}
}
// 保存订单
DistributionStockArticleEntity stockArticleEntity = buildDistributionStockArticleEntity ( t ) ;
if ( stockArticleEntity = = null ) {
return Resp . scanFail ( "操作失败" , "包件数据不存在" ) ;
}
// 保存包件
t . setWarehouseId ( stockArticleEntity . getWarehouseId ( ) ) ;
t . setWarehouse ( stockArticleEntity . getWarehouse ( ) ) ;
t . setStockArticleId ( stockArticleEntity . getId ( ) ) ;
buildDistributionParcelListEntity ( t ) ;
// 调用入库方法
t . setInWarehouse ( 1 ) ;
baseMapper . updateById ( t ) ;
queryWrapper . eq ( DistributionBusinessPreOrderEntity : : getInWarehouse , 1 ) ;
Long l = baseMapper . selectCount ( queryWrapper ) ;
return Resp . scanSuccess ( "扫描成功" , l + "件 ") ;
// // 查询当前预约单所有的包件
//
// LambdaQueryWrapper<DistributionBusinessPreOrderEntity> queryWrapper = new LambdaQueryWrapper<>();
// queryWrapper.eq(DistributionBusinessPreOrderEntity::getReservationCode, reservationCode);
// List<DistributionBusinessPreOrderEntity> list = baseMapper.selectList(queryWrapper);
//
// // 寻找 当前匹配的包条
// DistributionBusinessPreOrderEntity t = null;
// DistributionBusinessPreOrderEntity t1 = null;
// for (DistributionBusinessPreOrderEntity distributionBusinessPreOrderEntity : list) {
// if (distributionBusinessPreOrderEntity.getOrderPackageCode().equals(orderPackageCode)) {
// // 找到匹配的包条码
// if (distributionBusinessPreOrderEntity.getInWarehouse() == 1) {
// return Resp.scanSuccess("扫描成功", "包件已入库");
// } else {
// t = distributionBusinessPreOrderEntity;
// }
// }
// if (t1 == null) {
// t1 = distributionBusinessPreOrderEntity;
// }
// }
// if (t == null) {
// try {
// DistributionBusinessPreOrderEntity finalT = t1;
// CompletableFuture<DistributionParcelListEntity> distributionParcelListEntityCompletableFuture = CompletableFuture.supplyAsync(() -> this.selectByOrderPackageCode(orderPackageCode, finalT.getAcceptWarehouseId()));
//
// DistributionParcelListEntity distributionParcelListEntity = distributionParcelListEntityCompletableFuture.get();
//
// // 如找到了 保存在当前的这个配送计划任务中
// if (distributionParcelListEntity != null) {
// // 保存包件
// t = BeanUtil.copy(distributionParcelListEntity, DistributionBusinessPreOrderEntity.class);
// t.setDriverName(finalT.getDriverName());
// t.setVehicleName(finalT.getVehicleName());
// t.setDistrCarNumber(finalT.getTrainNumber());
// t.setOperationStatus(1);
// t.setInWarehouse(0);
// this.save(t);
// list.add(t);
//
// }
// } catch (InterruptedException | ExecutionException e) {
// log.error("inOrderWarehourse:", e);
// throw new ServiceException("包件信息不存在!");
// }
//
//
// }
//
// // 保存订单
// DistributionStockArticleEntity stockArticleEntity = buildDistributionStockArticleEntity(t);
// if (stockArticleEntity == null) {
// return Resp.scanFail("操作失败", "包件数据不存在");
// }
// // 保存包件
// t.setWarehouseId(stockArticleEntity.getWarehouseId());
// t.setWarehouse(stockArticleEntity.getWarehouse());
// t.setStockArticleId(stockArticleEntity.getId());
// buildDistributionParcelListEntity(t);
//
// // 调用入库方法
// t.setInWarehouse(1);
// baseMapper.updateById(t);
//
// queryWrapper.eq(DistributionBusinessPreOrderEntity::getInWarehouse, 1);
// Long l = baseMapper.selectCount(queryWrapper);
return Resp . scanSuccess ( "扫描成功" , "请前往码板打托进行入库! ") ;
}
private void buildDistributionParcelListEntity ( DistributionBusinessPreOrderEntity distributionBusinessPreOrderEntity ) {
@ -238,33 +273,33 @@ public class IDistributionBusinessPreOrderServiceImpl extends BaseServiceImpl<Di
}
private DistributionStockArticleEntity buildDistributionStockArticleEntity ( DistributionBusinessPreOrderEntity distributionBusinessPreOrderEntity ) {
DistributionStockArticleEntity stockArticleEntity = null ;
try {
BasicdataWarehouseEntity myCurrentWarehouse = basicdataWarehouseClient . getMyCurrentWarehouse ( ) ;
stockArticleEntity = distributionStockArticleService . findStockArticleByOrderCodeAndWarehouseId ( distributionBusinessPreOrderEntity . getOrderCode ( ) ,
myCurrentWarehouse . getId ( ) ) ;
if ( stockArticleEntity = = null ) {
// 需要保存这个对象
CompletableFuture < DistributionStockArticleEntity > distributionStockArticleEntityCompletableFuture = CompletableFuture . supplyAsync ( ( ) - > distributionAsyncService . findDistributionStockArticleEntityByIdForAsync ( distributionBusinessPreOrderEntity . getFromTenantId ( ) , distributionBusinessPreOrderEntity . getStockArticleId ( ) ) ) ;
stockArticleEntity = distributionStockArticleEntityCompletableFuture . get ( ) ;
if ( stockArticleEntity = = null ) {
return null ;
}
// 获取当前登录人的仓库信息
stockArticleEntity . setId ( null ) ;
stockArticleEntity . setTenantId ( null ) ;
stockArticleEntity . setWarehouseId ( myCurrentWarehouse . getId ( ) ) ;
stockArticleEntity . setWarehouse ( myCurrentWarehouse . getName ( ) ) ;
stockArticleEntity . setHandQuantity ( 0 ) ;
distributionStockArticleService . save ( stockArticleEntity ) ;
}
} catch ( InterruptedException | ExecutionException e ) {
log . error ( "buildDistributionStockArticleEntity :" , e ) ;
throw new CustomerException ( "系统异常,请联系管理员" ) ;
}
return stockArticleEntity ;
}
// private DistributionStockArticleEntity buildDistributionStockArticleEntity(DistributionBusinessPreOrderEntity distributionBusinessPreOrderEntity) {
// DistributionStockArticleEntity stockArticleEntity = null;
// try {
// BasicdataWarehouseEntity myCurrentWarehouse = basicdataWarehouseClient.getMyCurrentWarehouse();
// stockArticleEntity = distributionStockArticleService.findStockArticleByOrderCodeAndWarehouseId(distributionBusinessPreOrderEntity.getOrderCode(),
// myCurrentWarehouse.getId());
// if (stockArticleEntity == null) {
// // 需要保存这个对象
// CompletableFuture<DistributionStockArticleEntity> distributionStockArticleEntityCompletableFuture = CompletableFuture.supplyAsync(() -> distributionAsyncService.findDistributionStockArticleEntityByIdForAsync(distributionBusinessPreOrderEntity.getFromTenantId(), distributionBusinessPreOrderEntity.getStockArticleId()));
// stockArticleEntity = distributionStockArticleEntityCompletableFuture.get();
// if (stockArticleEntity == null) {
// return null;
// }
// // 获取当前登录人的仓库信息
// stockArticleEntity.setId(null);
// stockArticleEntity.setTenantId(null);
// stockArticleEntity.setWarehouseId(myCurrentWarehouse.getId());
// stockArticleEntity.setWarehouse(myCurrentWarehouse.getName());
// stockArticleEntity.setHandQuantity(0);
// distributionStockArticleService.save(stockArticleEntity);
// }
// } catch (InterruptedException | ExecutionException e) {
// log.error("buildDistributionStockArticleEntity :", e);
// throw new CustomerException("系统异常,请联系管理员");
// }
// return stockArticleEntity;
// }
@ChangeAsync ( )
public DistributionParcelListEntity selectByOrderPackageCode ( String orderPackageCode , Long warehouseId ) {