@ -45,6 +45,7 @@ import com.logpm.distribution.wrapper.DistributionStockArticleWrapper;
import com.logpm.warehouse.feign.IWarehouseUpdownTypeClient ;
import lombok.AllArgsConstructor ;
import lombok.extern.slf4j.Slf4j ;
import org.apache.commons.io.IOUtils ;
import org.apache.commons.lang.StringUtils ;
import org.apache.poi.ss.formula.functions.T ;
import org.springblade.common.constant.DictBizConstant ;
@ -61,6 +62,7 @@ import org.springblade.common.constant.reservation.*;
import org.springblade.common.constant.signing.SignforDriverSigningStatusConstant ;
import org.springblade.common.exception.CustomerException ;
import org.springblade.common.serviceConstant.ServiceConstant ;
import org.springblade.common.utils.FileUtil ;
import org.springblade.common.utils.GaoDeApiUtil ;
import org.springblade.core.mp.base.BaseServiceImpl ;
import org.springblade.core.secure.BladeUser ;
@ -75,12 +77,20 @@ import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service ;
import org.springframework.transaction.annotation.Transactional ;
import javax.imageio.ImageIO ;
import javax.servlet.ServletOutputStream ;
import javax.servlet.http.HttpServletResponse ;
import java.awt.* ;
import java.awt.image.BufferedImage ;
import java.io.* ;
import java.math.BigDecimal ;
import java.text.SimpleDateFormat ;
import java.util.* ;
import java.util.List ;
import java.util.concurrent.atomic.AtomicInteger ;
import java.util.function.Function ;
import java.util.stream.Collectors ;
import java.util.zip.ZipOutputStream ;
/ * *
* 签收管理 服务实现类
@ -376,6 +386,8 @@ public class DistributionSignforServiceImpl extends BaseServiceImpl<Distribution
// Integer j = distributionSignforMapper.updateSignforNum(distributionLoadscanEntity.getDeliveryId(), distributionLoadscanEntity.getReservationId(), distributionLoadscanEntity.getPackageNub());
//更新装车包件数和签收包件数
Integer j = distributionSignforMapper . updateSignforByReservationId ( distributionLoadscanEntity . getDeliveryId ( ) , distributionLoadscanEntity . getReservationId ( ) , distributionLoadscanEntity . getPackageNub ( ) ) ;
//更新签收人
Integer m = distributionSignforMapper . updateSignUser ( distributionLoadscanEntity . getDeliveryId ( ) , distributionLoadscanEntity . getReservationId ( ) , AuthUtil . getUser ( ) ) ;
//扣减订单的在库数量
Integer k = distributionStockArticleMapper . deductionHandQuantity ( loadscanEntity . getOrderId ( ) , loadscanEntity . getLoadedNub ( ) ) ;
warehouseUpdownTypeClient . downPackageOrDelTray ( collect . get ( 0 ) . getOrderPackageCode ( ) , myCurrentWarehouse . getId ( ) ) ;
@ -1012,7 +1024,11 @@ public class DistributionSignforServiceImpl extends BaseServiceImpl<Distribution
distributionLoadscaninvnEntity . setSigningUserId ( user . getUserId ( ) ) ;
distributionLoadscaninvnEntity . setSigningTime ( simpleDateFormat . format ( new Date ( ) ) ) ;
distributionLoadscaninvnService . save ( distributionLoadscaninvnEntity ) ;
//更新装车数量
Integer j = distributionSignforMapper . updateSignforNum ( distributionLoadscaninvnEntity . getDeliveryId ( ) , distributionLoadscaninvnEntity . getReservationId ( ) , distributionLoadscaninvnEntity . getPackageNub ( ) ) ;
//更新签收人
Integer i = distributionSignforMapper . updateSignUser ( distributionLoadscaninvnEntity . getDeliveryId ( ) , distributionLoadscaninvnEntity . getReservationId ( ) , AuthUtil . getUser ( ) ) ;
//扣减库存
DistributionStockListEntity stockListEntity = distributionStockListService . getById ( inventory . get ( 0 ) . getStockListId ( ) ) ;
stockListEntity . setQuantityOccupied ( stockListEntity . getQuantityOccupied ( ) - distributionLoadscaninvnEntity . getPackageNub ( ) ) ;
@ -1489,6 +1505,8 @@ public class DistributionSignforServiceImpl extends BaseServiceImpl<Distribution
distributionLoadscaninvnService . updateById ( loadscaninvnEntity ) ;
Integer i = distributionDeliveryListMapper . updateloadingTimeById ( distributionDeliveryListEntity . getId ( ) ) ;
Integer j = distributionSignforMapper . updatesignforByinvn ( loadscaninvnEntity . getDeliveryId ( ) , loadscaninvnEntity . getReservationId ( ) , loadscaninvnEntity . getPackageNub ( ) ) ;
//更新签收人
Integer m = distributionSignforMapper . updateSignUser ( loadscaninvnEntity . getDeliveryId ( ) , loadscaninvnEntity . getReservationId ( ) , AuthUtil . getUser ( ) ) ;
distributionAsyncService . checkSignStatus ( null , loadscaninvnEntity . getReservationId ( ) , loadscaninvnEntity . getDeliveryId ( ) ) ;
}
} else {
@ -1542,6 +1560,9 @@ public class DistributionSignforServiceImpl extends BaseServiceImpl<Distribution
Integer i = distributionDeliveryListMapper . updateloadingTimeById ( distributionDeliveryListEntity . getId ( ) ) ;
//更新签收表的签收数量和装车数量
Integer j = distributionSignforMapper . updateLoadAndsignforByinvn ( newLoadscaninvnEntity . getDeliveryId ( ) , newLoadscaninvnEntity . getReservationId ( ) , newLoadscaninvnEntity . getPackageNub ( ) ) ;
//更新签收人
Integer m = distributionSignforMapper . updateSignUser ( newLoadscaninvnEntity . getDeliveryId ( ) , newLoadscaninvnEntity . getReservationId ( ) , AuthUtil . getUser ( ) ) ;
//维护预约库存品数据
//扣减库存
DistributionStockListEntity stockListEntity = distributionStockListService . getById ( detailEntity . getStockListId ( ) ) ;
@ -1730,7 +1751,8 @@ public class DistributionSignforServiceImpl extends BaseServiceImpl<Distribution
}
distributionLoadscanService . updateById ( distributionLoadscanEntity ) ;
distributionAsyncService . checkSignStatus ( distributionLoadscanEntity . getPackageId ( ) , distributionLoadscanEntity . getReservationId ( ) , distributionLoadscanEntity . getDeliveryId ( ) ) ;
//更新签收人
Integer m = distributionSignforMapper . updateSignUser ( distributionLoadscanEntity . getDeliveryId ( ) , distributionLoadscanEntity . getReservationId ( ) , AuthUtil . getUser ( ) ) ;
//维护签收数量
DistributionSignforEntity signforEntity = distributionSignforMapper . selectOne ( Wrappers . < DistributionSignforEntity > query ( ) . lambda ( ) . eq ( DistributionSignforEntity : : getDeliveryId , distributionLoadscanEntity . getDeliveryId ( ) ) . eq ( DistributionSignforEntity : : getReservationId , distributionLoadscanEntity . getReservationId ( ) ) ) ;
BigDecimal loadedNumber = new BigDecimal ( signforEntity . getLoadedNumber ( ) ) ;
@ -1789,6 +1811,9 @@ public class DistributionSignforServiceImpl extends BaseServiceImpl<Distribution
//更新签收表的签收数量和装车数量
Integer j = distributionSignforMapper . updateSignforByReservationId ( loadscanEntity . getDeliveryId ( ) , loadscanEntity . getReservationId ( ) , loadscanEntity . getPackageNub ( ) ) ;
//更新签收人
Integer m = distributionSignforMapper . updateSignUser ( loadscanEntity . getDeliveryId ( ) , loadscanEntity . getReservationId ( ) , AuthUtil . getUser ( ) ) ;
//维护出库数量和签收数量
DistributionParcelNumberEntity parcelNumberServiceById = distributionParcelNumberService . getById ( parcelNumberEntity . getId ( ) ) ;
BigDecimal signinQuantity = new BigDecimal ( parcelNumberServiceById . getSigninQuantity ( ) ) ;
@ -1864,6 +1889,9 @@ public class DistributionSignforServiceImpl extends BaseServiceImpl<Distribution
Integer j = distributionSignforMapper . updateSignforByReservationId ( loadscanEntity . getDeliveryId ( ) , loadscanEntity . getReservationId ( ) , loadscanEntity . getPackageNub ( ) ) ;
//扣减订单的在库数量
Integer k = distributionStockArticleMapper . deductionHandQuantity ( loadscanEntity . getOrderId ( ) , loadscanEntity . getLoadedNub ( ) ) ;
//更新签收人
Integer m = distributionSignforMapper . updateSignUser ( loadscanEntity . getDeliveryId ( ) , loadscanEntity . getReservationId ( ) , AuthUtil . getUser ( ) ) ;
distributionAsyncService . checkStockArticleSignStatus ( parcelListEntity ) ;
log . info ( "一件签收包件下架解托>>>>>>>>>>>>>>>parcelListEntity.getOrderPackageCode():{}" , parcelListEntity . getOrderPackageCode ( ) ) ;
warehouseUpdownTypeClient . downPackageOrDelTray ( parcelListEntity . getOrderPackageCode ( ) , myCurrentWarehouse . getId ( ) ) ;
@ -1888,6 +1916,8 @@ public class DistributionSignforServiceImpl extends BaseServiceImpl<Distribution
Integer i = distributionDeliveryListMapper . updateloadingTimeById ( distributionDeliveryListEntity . getId ( ) ) ;
//更新签收数量
Integer j = distributionSignforMapper . updateSignforNum ( loadscanEntities . getDeliveryId ( ) , loadscanEntities . getReservationId ( ) , loadscanEntities . getPackageNub ( ) ) ;
//更新签收人
Integer m = distributionSignforMapper . updateSignUser ( loadscanEntities . getDeliveryId ( ) , loadscanEntities . getReservationId ( ) , AuthUtil . getUser ( ) ) ;
distributionAsyncService . checkSignStatus ( loadscanEntities . getPackageId ( ) , loadscanEntities . getReservationId ( ) , loadscanEntities . getDeliveryId ( ) ) ;
log . info ( "一件签收包件解托>>>>>>>>>>>>>>>parcelListEntity.getOrderPackageCode():{}" , parcelListEntity . getOrderPackageCode ( ) ) ;
warehouseUpdownTypeClient . downPackageOrDelTray ( parcelListEntity . getOrderPackageCode ( ) , myCurrentWarehouse . getId ( ) ) ;
@ -2853,6 +2883,8 @@ public class DistributionSignforServiceImpl extends BaseServiceImpl<Distribution
Integer i = distributionDeliveryListMapper . updateloadingTimeById ( distrilbutionloadingscanDTO . getDeliveryId ( ) ) ;
//更新装车包件数和签收包件数
Integer j = distributionSignforMapper . updateSignforByReservationId ( loadscanEntity . getDeliveryId ( ) , loadscanEntity . getReservationId ( ) , loadscanEntity . getPackageNub ( ) ) ;
//更新签收人
Integer k = distributionSignforMapper . updateSignUser ( loadscanEntity . getDeliveryId ( ) , loadscanEntity . getReservationId ( ) , AuthUtil . getUser ( ) ) ;
//这里需要维护
BigDecimal deliveryQuantity = new BigDecimal ( parcelNumberEntity . getDeliveryQuantity ( ) ) ;
BigDecimal outboundQuantity = new BigDecimal ( parcelNumberEntity . getOutboundQuantity ( ) ) ;
@ -2956,4 +2988,71 @@ public class DistributionSignforServiceImpl extends BaseServiceImpl<Distribution
page . setTotal ( addvaluePackageVOS . size ( ) ) ;
return page . setRecords ( addvaluePackageVOS ) ;
}
@Override
public void handlePicture ( String ids , HttpServletResponse res ) {
if ( Func . isEmpty ( ids ) ) {
log . error ( "#########ids字段缺失:{}" , ids ) ;
}
File file = null ;
List < Long > signIds = Func . toLongList ( "," , ids ) ;
List < DistributionSignforEntity > distributionSignforEntities = this . listByIds ( signIds ) ;
if ( Func . isNotEmpty ( distributionSignforEntities ) ) {
for ( DistributionSignforEntity distributionSignforEntity : distributionSignforEntities ) {
DistributionReservationEntity distributionReservationEntity = distributionReservationMapper . selectById ( distributionSignforEntity . getReservationId ( ) ) ;
List < DistributionSignPrintVO > printEntities = baseMapper . selectSignImgsUrl ( distributionSignforEntity . getReservationId ( ) ) ;
if ( Func . isNotEmpty ( printEntities ) ) {
//进行分组
Map < String , List < DistributionSignPrintVO > > signingPictureGroup = printEntities . stream ( ) . collect ( Collectors . groupingBy ( DistributionSignPrintVO : : getType ) ) ;
//进行图片
signingPictureGroup . forEach ( ( k , v ) - > {
//这个方法会根据
List < String > urls = v . stream ( ) . map ( DistributionSignPrintVO : : getUrlRoute ) . collect ( Collectors . toList ( ) ) ;
FileUtil . handleSignPictureZip ( urls , k , distributionReservationEntity . getReservationCode ( ) , distributionReservationEntity . getConsignee ( ) ) ;
} ) ;
}
file = FileUtil . checkZipFile ( distributionReservationEntity . getReservationCode ( ) ) ;
}
}
//获取Zip文件
if ( Func . isNotEmpty ( file ) ) {
byte [ ] buffer = new byte [ 1024 * 1024 * 1024 ] ;
FileInputStream fis = null ;
BufferedInputStream bis = null ;
try {
ServletOutputStream os = res . getOutputStream ( ) ;
fis = new FileInputStream ( file ) ;
bis = new BufferedInputStream ( fis ) ;
int i = bis . read ( buffer ) ;
while ( i > = 0 ) {
os . write ( buffer , 0 , i ) ;
i = bis . read ( buffer ) ;
}
} catch ( IOException e ) {
log . info ( "Download failed!" ) ;
throw new RuntimeException ( e ) ;
} finally {
if ( bis ! = null ) {
try {
bis . close ( ) ;
} catch ( IOException e ) {
e . printStackTrace ( ) ;
}
}
if ( fis ! = null ) {
try {
fis . close ( ) ;
} catch ( IOException e ) {
e . printStackTrace ( ) ;
}
}
}
}
}
}