|  |  |  | @ -1,10 +1,12 @@ | 
			
		
	
		
			
				
					|  |  |  |  | package com.glxp.api.service.inout; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | import cn.hutool.core.collection.CollUtil; | 
			
		
	
		
			
				
					|  |  |  |  | import cn.hutool.core.util.IdUtil; | 
			
		
	
		
			
				
					|  |  |  |  | import cn.hutool.core.util.StrUtil; | 
			
		
	
		
			
				
					|  |  |  |  | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | 
			
		
	
		
			
				
					|  |  |  |  | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; | 
			
		
	
		
			
				
					|  |  |  |  | import com.github.pagehelper.PageHelper; | 
			
		
	
		
			
				
					|  |  |  |  | import com.glxp.api.constant.Constant; | 
			
		
	
		
			
				
					|  |  |  |  | import com.glxp.api.dao.inout.IoSplitCodeMapper; | 
			
		
	
		
			
				
					|  |  |  |  | import com.glxp.api.entity.basic.SysWorkplacePutRel; | 
			
		
	
		
			
				
					|  |  |  |  | import com.glxp.api.entity.basic.UdiRelevanceEntity; | 
			
		
	
	
		
			
				
					|  |  |  | @ -14,12 +16,15 @@ import com.glxp.api.entity.inout.IoSplitFifoCodeEntity; | 
			
		
	
		
			
				
					|  |  |  |  | import com.glxp.api.entity.inout.IoSplitFifoInv; | 
			
		
	
		
			
				
					|  |  |  |  | import com.glxp.api.exception.JsonException; | 
			
		
	
		
			
				
					|  |  |  |  | import com.glxp.api.req.basic.FilterUdiRelRequest; | 
			
		
	
		
			
				
					|  |  |  |  | import com.glxp.api.req.collect.AddInvDesDetaiRequest; | 
			
		
	
		
			
				
					|  |  |  |  | import com.glxp.api.req.inout.IoSplitCodeRequest; | 
			
		
	
		
			
				
					|  |  |  |  | import com.glxp.api.res.basic.UdiRelevanceResponse; | 
			
		
	
		
			
				
					|  |  |  |  | import com.glxp.api.service.basic.UdiRelevanceService; | 
			
		
	
		
			
				
					|  |  |  |  | import com.glxp.api.service.collect.*; | 
			
		
	
		
			
				
					|  |  |  |  | import com.glxp.api.service.thrsys.SysWorkplacePutRelService; | 
			
		
	
		
			
				
					|  |  |  |  | import com.glxp.api.util.GennerOrderUtils; | 
			
		
	
		
			
				
					|  |  |  |  | import com.glxp.api.util.IntUtil; | 
			
		
	
		
			
				
					|  |  |  |  | import com.glxp.api.util.OrderNoTypeBean; | 
			
		
	
		
			
				
					|  |  |  |  | import org.springframework.beans.BeanUtils; | 
			
		
	
		
			
				
					|  |  |  |  | import org.springframework.stereotype.Service; | 
			
		
	
		
			
				
					|  |  |  |  | import org.springframework.transaction.annotation.Transactional; | 
			
		
	
	
		
			
				
					|  |  |  | @ -39,6 +44,12 @@ public class IoSplitCodeService extends ServiceImpl<IoSplitCodeMapper, IoSplitCo | 
			
		
	
		
			
				
					|  |  |  |  |     IoCollectOrderBizService collectOrderBizService; | 
			
		
	
		
			
				
					|  |  |  |  |     @Resource | 
			
		
	
		
			
				
					|  |  |  |  |     IoCollectOrderCodeAutoService collectOrderCodeAutoService; | 
			
		
	
		
			
				
					|  |  |  |  |     @Resource | 
			
		
	
		
			
				
					|  |  |  |  |     IoSplitDesOrderService splitDesOrderService; | 
			
		
	
		
			
				
					|  |  |  |  |     @Resource | 
			
		
	
		
			
				
					|  |  |  |  |     IoSplitDesOrderDetailService splitDesOrderDetailService; | 
			
		
	
		
			
				
					|  |  |  |  |     @Resource | 
			
		
	
		
			
				
					|  |  |  |  |     GennerOrderUtils gennerOrderUtils; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     public List<IoSplitCodeEntity> filterList(IoSplitCodeRequest splitCodeRequest) { | 
			
		
	
		
			
				
					|  |  |  |  |         if (splitCodeRequest == null) { | 
			
		
	
	
		
			
				
					|  |  |  | @ -235,7 +246,7 @@ public class IoSplitCodeService extends ServiceImpl<IoSplitCodeMapper, IoSplitCo | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |             } | 
			
		
	
		
			
				
					|  |  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |  |         List<Integer> removeIds = new ArrayList<>(); | 
			
		
	
		
			
				
					|  |  |  |  |         List<Long> removeIds = new ArrayList<>(); | 
			
		
	
		
			
				
					|  |  |  |  |         for (IoCollectOrderBiz collectOrderBiz : collectOrderBizs) { | 
			
		
	
		
			
				
					|  |  |  |  | //            UdiRelevanceEntity udiRelevanceEntity = udiRelevanceService.selectById(collectOrderBiz.getRelId());
 | 
			
		
	
		
			
				
					|  |  |  |  |             FilterUdiRelRequest filterUdiRelRequest = new FilterUdiRelRequest(); | 
			
		
	
	
		
			
				
					|  |  |  | @ -275,6 +286,7 @@ public class IoSplitCodeService extends ServiceImpl<IoSplitCodeMapper, IoSplitCo | 
			
		
	
		
			
				
					|  |  |  |  |                                     .fifoSplit(1) | 
			
		
	
		
			
				
					|  |  |  |  |                                     .createTime(new Date()).updateTime(new Date()) | 
			
		
	
		
			
				
					|  |  |  |  |                                     .remainCount(-unTagCount).build(); | 
			
		
	
		
			
				
					|  |  |  |  |                             this.decorateUnpackExpireTime(ioSplitCodeEntity); | 
			
		
	
		
			
				
					|  |  |  |  |                             splitCodeService.save(ioSplitCodeEntity); | 
			
		
	
		
			
				
					|  |  |  |  |                         } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
	
		
			
				
					|  |  |  | @ -418,7 +430,7 @@ public class IoSplitCodeService extends ServiceImpl<IoSplitCodeMapper, IoSplitCo | 
			
		
	
		
			
				
					|  |  |  |  |                 ); | 
			
		
	
		
			
				
					|  |  |  |  |         Integer count = 0; | 
			
		
	
		
			
				
					|  |  |  |  |         List<IoSplitCodeEntity> addSplitCodeEntities = new ArrayList<>(); | 
			
		
	
		
			
				
					|  |  |  |  |         List<Integer> removeIds = new ArrayList<>(); | 
			
		
	
		
			
				
					|  |  |  |  |         List<Long> removeIds = new ArrayList<>(); | 
			
		
	
		
			
				
					|  |  |  |  |         for (IoSplitFifoCodeEntity splitFifoCodeEntity : splitFifoCodeEntities) { | 
			
		
	
		
			
				
					|  |  |  |  |             IoSplitCodeEntity splitCodeEntity = new IoSplitCodeEntity(); | 
			
		
	
		
			
				
					|  |  |  |  |             BeanUtils.copyProperties(splitFifoCodeEntity, splitCodeEntity); | 
			
		
	
	
		
			
				
					|  |  |  | @ -429,6 +441,7 @@ public class IoSplitCodeService extends ServiceImpl<IoSplitCodeMapper, IoSplitCo | 
			
		
	
		
			
				
					|  |  |  |  |             splitCodeEntity.setStatus(1); | 
			
		
	
		
			
				
					|  |  |  |  |             splitCodeEntity.setFifoSplit(splitFifoCodeEntity.getFifoSplit()); | 
			
		
	
		
			
				
					|  |  |  |  |             splitCodeEntity.setId(null); | 
			
		
	
		
			
				
					|  |  |  |  |             this.decorateUnpackExpireTime(splitCodeEntity); | 
			
		
	
		
			
				
					|  |  |  |  |             addSplitCodeEntities.add(splitCodeEntity); | 
			
		
	
		
			
				
					|  |  |  |  |             removeIds.add(splitFifoCodeEntity.getId()); | 
			
		
	
		
			
				
					|  |  |  |  |             IoSplitFifoInv splitFifoInv = splitFifoInvService.findByFifoCode(splitFifoCodeEntity); | 
			
		
	
	
		
			
				
					|  |  |  | @ -488,4 +501,77 @@ public class IoSplitCodeService extends ServiceImpl<IoSplitCodeMapper, IoSplitCo | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     //包装拆包失效时间
 | 
			
		
	
		
			
				
					|  |  |  |  |     void decorateUnpackExpireTime(IoSplitCodeEntity ioSplitCodeEntity){ | 
			
		
	
		
			
				
					|  |  |  |  |         Long relId = ioSplitCodeEntity.getRelId(); | 
			
		
	
		
			
				
					|  |  |  |  |         UdiRelevanceEntity relevanceEntity = udiRelevanceService.getById(relId); | 
			
		
	
		
			
				
					|  |  |  |  |         int n = IntUtil.value(relevanceEntity.getUnpackUseTime()); | 
			
		
	
		
			
				
					|  |  |  |  |         // 获取当前时间
 | 
			
		
	
		
			
				
					|  |  |  |  |         Calendar calendar = Calendar.getInstance(); | 
			
		
	
		
			
				
					|  |  |  |  |         Date unpackTime = calendar.getTime(); | 
			
		
	
		
			
				
					|  |  |  |  |         // 加上n小时
 | 
			
		
	
		
			
				
					|  |  |  |  |         calendar.add(Calendar.HOUR_OF_DAY, n); | 
			
		
	
		
			
				
					|  |  |  |  |         // 转换为Date对象
 | 
			
		
	
		
			
				
					|  |  |  |  |         Date unpackExpireTime = calendar.getTime(); | 
			
		
	
		
			
				
					|  |  |  |  |         ioSplitCodeEntity.setUnpackTime(unpackTime); | 
			
		
	
		
			
				
					|  |  |  |  |         ioSplitCodeEntity.setUnpackExpireTime(unpackExpireTime); | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     /** | 
			
		
	
		
			
				
					|  |  |  |  |      * 扫描拆包过期进行处理损耗出库 | 
			
		
	
		
			
				
					|  |  |  |  |      */ | 
			
		
	
		
			
				
					|  |  |  |  |     public void asyncUnpackExpireTask() { | 
			
		
	
		
			
				
					|  |  |  |  |         LambdaQueryWrapper<IoSplitCodeEntity> lqw = new LambdaQueryWrapper<>(); | 
			
		
	
		
			
				
					|  |  |  |  |         Date now = new Date(); | 
			
		
	
		
			
				
					|  |  |  |  |         lqw.lt(IoSplitCodeEntity::getUnpackExpireTime,now); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         List<IoSplitCodeEntity> ioSplitCodeEntities = splitCodeMapper.selectList(lqw); | 
			
		
	
		
			
				
					|  |  |  |  |         if (CollUtil.isNotEmpty(ioSplitCodeEntities)){ | 
			
		
	
		
			
				
					|  |  |  |  |          //进行损耗出库
 | 
			
		
	
		
			
				
					|  |  |  |  |             IoSplitDesOrder collectOrder; | 
			
		
	
		
			
				
					|  |  |  |  |             List<IoSplitDesOrderDetail> splitDesOrderDetails = new ArrayList<>(); | 
			
		
	
		
			
				
					|  |  |  |  |             List<Long> removeByIds = new ArrayList<>(); | 
			
		
	
		
			
				
					|  |  |  |  |             collectOrder = IoSplitDesOrder.builder() | 
			
		
	
		
			
				
					|  |  |  |  |                     .id(IdUtil.getSnowflakeNextId()) | 
			
		
	
		
			
				
					|  |  |  |  |                     .billNo(gennerOrderUtils.createWdOrderNo(new OrderNoTypeBean(Constant.SPLIT_DES_ORDER, "yyyyMMdd"))) | 
			
		
	
		
			
				
					|  |  |  |  |                     .busType(null) | 
			
		
	
		
			
				
					|  |  |  |  |                     .workPlaceCode(null) | 
			
		
	
		
			
				
					|  |  |  |  |                     .createTime(new Date()) | 
			
		
	
		
			
				
					|  |  |  |  |                     .billTime(new Date()) | 
			
		
	
		
			
				
					|  |  |  |  |                     .remark(null) | 
			
		
	
		
			
				
					|  |  |  |  |                     .status(2) | 
			
		
	
		
			
				
					|  |  |  |  |                     .createUser("1") | 
			
		
	
		
			
				
					|  |  |  |  |                     .updateTime(new Date()) | 
			
		
	
		
			
				
					|  |  |  |  |                     .updateUser("1") | 
			
		
	
		
			
				
					|  |  |  |  |                     .build(); | 
			
		
	
		
			
				
					|  |  |  |  |             splitDesOrderService.save(collectOrder); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |             ioSplitCodeEntities.forEach( splitCodeEntity -> { | 
			
		
	
		
			
				
					|  |  |  |  |                 //损耗详细表
 | 
			
		
	
		
			
				
					|  |  |  |  |                 IoSplitDesOrderDetail splitDesOrderDetail = IoSplitDesOrderDetail.builder() | 
			
		
	
		
			
				
					|  |  |  |  |                         .id(IdUtil.getSnowflakeNextId()) | 
			
		
	
		
			
				
					|  |  |  |  |                         .workPlaceCode(collectOrder.getWorkPlaceCode()) | 
			
		
	
		
			
				
					|  |  |  |  |                         .orderIdFk(collectOrder.getBillNo()) | 
			
		
	
		
			
				
					|  |  |  |  |                         .relId(splitCodeEntity.getRelId()) | 
			
		
	
		
			
				
					|  |  |  |  |                         .batchNo(splitCodeEntity.getBatchNo()) | 
			
		
	
		
			
				
					|  |  |  |  |                         .produceDate(splitCodeEntity.getProduceDate()) | 
			
		
	
		
			
				
					|  |  |  |  |                         .expireDate(splitCodeEntity.getExpireDate()) | 
			
		
	
		
			
				
					|  |  |  |  |                         .supId(splitCodeEntity.getSupId()) | 
			
		
	
		
			
				
					|  |  |  |  |                         .count(splitCodeEntity.getRemainCount()) | 
			
		
	
		
			
				
					|  |  |  |  |                         .reCount(splitCodeEntity.getRemainCount()) | 
			
		
	
		
			
				
					|  |  |  |  |                         .createTime(new Date()) | 
			
		
	
		
			
				
					|  |  |  |  |                         .updateTime(new Date()) | 
			
		
	
		
			
				
					|  |  |  |  |                         .remark("").build(); | 
			
		
	
		
			
				
					|  |  |  |  |                 splitDesOrderDetails.add(splitDesOrderDetail); | 
			
		
	
		
			
				
					|  |  |  |  |                 removeByIds.add(splitCodeEntity.getId()); | 
			
		
	
		
			
				
					|  |  |  |  |             }); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |             if (removeByIds.size() > 0) { | 
			
		
	
		
			
				
					|  |  |  |  |                 this.removeByIds(removeByIds); | 
			
		
	
		
			
				
					|  |  |  |  |             } | 
			
		
	
		
			
				
					|  |  |  |  |             if (splitDesOrderDetails.size() > 0) { | 
			
		
	
		
			
				
					|  |  |  |  |                 splitDesOrderDetailService.saveBatch(splitDesOrderDetails); | 
			
		
	
		
			
				
					|  |  |  |  |             } | 
			
		
	
		
			
				
					|  |  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
	
		
			
				
					|  |  |  | 
 |