|  |  |  | @ -1218,8 +1218,9 @@ public class IoCodeTempController extends BaseController { | 
			
		
	
		
			
				
					|  |  |  |  |     //    @Transactional(rollbackFor = Exception.class)
 | 
			
		
	
		
			
				
					|  |  |  |  |     public BaseResponse addDrugOrder(AddOrderRequest addOrderRequest, UdiEntity udiEntity, String code, Integer groupNumber) { | 
			
		
	
		
			
				
					|  |  |  |  |         AddCodeResult addCodeResult = new AddCodeResult(); | 
			
		
	
		
			
				
					|  |  |  |  |         BasicBussinessTypeEntity bussinessTypeEntity = basicBussinessTypeService.findByAction(addOrderRequest.getAction()); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         InvWarehouseEntity invWarehouseEntity = invWarehouseService.findByInvSubByCode(addOrderRequest.getInvCode()); | 
			
		
	
		
			
				
					|  |  |  |  |         UdiRelevanceResponse udiRelevanceResponse = udiRelevanceService.selectByNameCode(udiEntity.getUdi()); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         //批次号校验
 | 
			
		
	
		
			
				
					|  |  |  |  |         //判断此产品是否开启允许无批次号
 | 
			
		
	
	
		
			
				
					|  |  |  | @ -1238,88 +1239,29 @@ public class IoCodeTempController extends BaseController { | 
			
		
	
		
			
				
					|  |  |  |  |         String orderId = addOrderRequest.getBillNo(); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         //过期提醒:
 | 
			
		
	
		
			
				
					|  |  |  |  |         if (IntUtil.value(bussinessTypeEntity.getCheckExpire()) == 1 && !addOrderRequest.isIgnoreExpire()) { | 
			
		
	
		
			
				
					|  |  |  |  |             if (StrUtil.isNotEmpty(udiEntity.getExpireDate())) { | 
			
		
	
		
			
				
					|  |  |  |  |                 String expireDate = "20" + udiEntity.getExpireDate(); | 
			
		
	
		
			
				
					|  |  |  |  |                 long expireTime = MsDateUtil.parseDateExpire(expireDate); | 
			
		
	
		
			
				
					|  |  |  |  |                 if (expireTime - System.currentTimeMillis() < 0) { | 
			
		
	
		
			
				
					|  |  |  |  |                     return ResultVOUtils.error(504, "当前产品已过期,是否确定继续添加?"); | 
			
		
	
		
			
				
					|  |  |  |  |                 } | 
			
		
	
		
			
				
					|  |  |  |  |             } | 
			
		
	
		
			
				
					|  |  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |  |         if (IntUtil.value(bussinessTypeEntity.getCheckExpire()) == 2) { | 
			
		
	
		
			
				
					|  |  |  |  |             if (StrUtil.isNotEmpty(udiEntity.getExpireDate())) { | 
			
		
	
		
			
				
					|  |  |  |  |                 String expireDate = "20" + udiEntity.getExpireDate(); | 
			
		
	
		
			
				
					|  |  |  |  |                 long expireTime = MsDateUtil.parseDateExpire(expireDate); | 
			
		
	
		
			
				
					|  |  |  |  |                 if (expireTime - System.currentTimeMillis() < 0) { | 
			
		
	
		
			
				
					|  |  |  |  |                     return ResultVOUtils.error(604, "当前产品已过期,无法添加!"); | 
			
		
	
		
			
				
					|  |  |  |  |                 } | 
			
		
	
		
			
				
					|  |  |  |  |             } | 
			
		
	
		
			
				
					|  |  |  |  |         BasicBussinessTypeEntity bussinessTypeEntity = basicBussinessTypeService.findByAction(addOrderRequest.getAction()); | 
			
		
	
		
			
				
					|  |  |  |  |         int checkExpire = IntUtil.value(bussinessTypeEntity.getCheckExpire()); | 
			
		
	
		
			
				
					|  |  |  |  |         BaseResponse response = checkExpireDate(checkExpire,udiEntity,addOrderRequest); | 
			
		
	
		
			
				
					|  |  |  |  |         if (response.getCode() != 20000){ | 
			
		
	
		
			
				
					|  |  |  |  |             return response; | 
			
		
	
		
			
				
					|  |  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |  |         UdiRelevanceResponse udiRelevanceResponse = udiRelevanceService.selectByNameCode(udiEntity.getUdi()); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         //判断层级标识是否正确
 | 
			
		
	
		
			
				
					|  |  |  |  |         if (bussinessTypeEntity.isUse()) { | 
			
		
	
		
			
				
					|  |  |  |  |             if (udiRelevanceResponse.getUseMaxLevel() != null && IntUtil.value(udiRelevanceResponse.getUseMaxLevel()) < IntUtil.value(udiRelevanceResponse.getPackLevel())) { | 
			
		
	
		
			
				
					|  |  |  |  |                 return ResultVOUtils.error(500, "当前产品不支持采集该包装层级追溯码!"); | 
			
		
	
		
			
				
					|  |  |  |  |             } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |             if (udiRelevanceResponse.getUseMaxLevel() == null && IntUtil.value(udiRelevanceResponse.getPackLevel()) > 1) { | 
			
		
	
		
			
				
					|  |  |  |  |             if (!isPackLevelValid(udiRelevanceResponse.getUseMaxLevel(),IntUtil.value(udiRelevanceResponse.getPackLevel()), udiRelevanceResponse.getUseLevel())) { | 
			
		
	
		
			
				
					|  |  |  |  |                 return ResultVOUtils.error(500, "当前产品不支持采集该包装层级追溯码!"); | 
			
		
	
		
			
				
					|  |  |  |  |             } | 
			
		
	
		
			
				
					|  |  |  |  |             if (IntUtil.value(udiRelevanceResponse.getPackLevel()) < IntUtil.value(udiRelevanceResponse.getUseLevel())) { | 
			
		
	
		
			
				
					|  |  |  |  |                 return ResultVOUtils.error(500, "当前产品不支持采集该包装层级追溯码!"); | 
			
		
	
		
			
				
					|  |  |  |  |             } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         } else { | 
			
		
	
		
			
				
					|  |  |  |  |             if (udiRelevanceResponse.getDistributeMaxLevel() != null && IntUtil.value(udiRelevanceResponse.getDistributeMaxLevel()) < IntUtil.value(udiRelevanceResponse.getPackLevel())) { | 
			
		
	
		
			
				
					|  |  |  |  |                 return ResultVOUtils.error(500, "当前产品不支持采集该包装层级追溯码!"); | 
			
		
	
		
			
				
					|  |  |  |  |             } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |             if (udiRelevanceResponse.getDistributeMaxLevel() == null && IntUtil.value(udiRelevanceResponse.getPackLevel()) > 1) { | 
			
		
	
		
			
				
					|  |  |  |  |                 return ResultVOUtils.error(500, "当前产品不支持采集该包装层级追溯码!"); | 
			
		
	
		
			
				
					|  |  |  |  |             } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |             if (IntUtil.value(udiRelevanceResponse.getPackLevel()) < IntUtil.value(udiRelevanceResponse.getDistributeLevel())) { | 
			
		
	
		
			
				
					|  |  |  |  |         }else { | 
			
		
	
		
			
				
					|  |  |  |  |             if (!isPackLevelValid(udiRelevanceResponse.getDistributeMaxLevel(),IntUtil.value(udiRelevanceResponse.getPackLevel()), udiRelevanceResponse.getDistributeLevel())) { | 
			
		
	
		
			
				
					|  |  |  |  |                 return ResultVOUtils.error(500, "当前产品不支持采集该包装层级追溯码!"); | 
			
		
	
		
			
				
					|  |  |  |  |             } | 
			
		
	
		
			
				
					|  |  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         //近效期提醒
 | 
			
		
	
		
			
				
					|  |  |  |  |         long recent = 0; | 
			
		
	
		
			
				
					|  |  |  |  |         if (udiRelevanceResponse.getRecentDateTime() != null) | 
			
		
	
		
			
				
					|  |  |  |  |             recent = udiRelevanceResponse.getRecentDateTime().longValue(); | 
			
		
	
		
			
				
					|  |  |  |  |         if (IntUtil.value(bussinessTypeEntity.getCheckVailDate()) == 1 && recent > 0 && !addOrderRequest.isIgnoreRecentExpire() && udiRelevanceResponse.getIsDateBy() == 2) { | 
			
		
	
		
			
				
					|  |  |  |  |             if (StrUtil.isNotEmpty(udiEntity.getExpireDate())) { | 
			
		
	
		
			
				
					|  |  |  |  |                 String expireDate = "20" + udiEntity.getExpireDate(); | 
			
		
	
		
			
				
					|  |  |  |  |                 long expireTime = MsDateUtil.parseDateExpire(expireDate); | 
			
		
	
		
			
				
					|  |  |  |  |                 long recentTieme = Math.abs(recent * 24 * 60 * 60 * 1000); | 
			
		
	
		
			
				
					|  |  |  |  |                 long resultTime = expireTime - System.currentTimeMillis(); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |                 if (resultTime > 0) { | 
			
		
	
		
			
				
					|  |  |  |  |                     long time = resultTime / (60 * 60 * 1000); | 
			
		
	
		
			
				
					|  |  |  |  |                     if (resultTime < recentTieme) { | 
			
		
	
		
			
				
					|  |  |  |  |                         return ResultVOUtils.error(505, "当前产品临近过期,距过期还剩" + time + "时,是否确定继续添加?"); | 
			
		
	
		
			
				
					|  |  |  |  |                     } | 
			
		
	
		
			
				
					|  |  |  |  |                 } | 
			
		
	
		
			
				
					|  |  |  |  |             } | 
			
		
	
		
			
				
					|  |  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         if (IntUtil.value(bussinessTypeEntity.getCheckVailDate()) == 1 && recent > 0 && !addOrderRequest.isIgnoreRecentExpire() && udiRelevanceResponse.getIsDateBy() == 1) { | 
			
		
	
		
			
				
					|  |  |  |  |             if (StrUtil.isNotEmpty(udiEntity.getExpireDate())) { | 
			
		
	
		
			
				
					|  |  |  |  |                 String expireDate = "20" + udiEntity.getExpireDate(); | 
			
		
	
		
			
				
					|  |  |  |  |                 long expireTime = MsDateUtil.parseDateExpire(expireDate); | 
			
		
	
		
			
				
					|  |  |  |  |                 long recentTieme = Math.abs(recent * 24 * 60 * 60 * 1000); | 
			
		
	
		
			
				
					|  |  |  |  |                 long resultTime = expireTime - System.currentTimeMillis(); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |                 if (resultTime > 0) { | 
			
		
	
		
			
				
					|  |  |  |  |                     long time = resultTime / (24 * 60 * 60 * 1000); | 
			
		
	
		
			
				
					|  |  |  |  |                     if (resultTime < recentTieme) { | 
			
		
	
		
			
				
					|  |  |  |  |                         return ResultVOUtils.error(505, "当前产品临近过期,距过期还剩" + time + "天,是否确定继续添加?"); | 
			
		
	
		
			
				
					|  |  |  |  |                     } | 
			
		
	
		
			
				
					|  |  |  |  |                 } | 
			
		
	
		
			
				
					|  |  |  |  |             } | 
			
		
	
		
			
				
					|  |  |  |  |         BaseResponse checkResponse = checkIsExpired(udiRelevanceResponse,udiEntity,addOrderRequest,bussinessTypeEntity); | 
			
		
	
		
			
				
					|  |  |  |  |         if (checkResponse.getCode() == 505){ | 
			
		
	
		
			
				
					|  |  |  |  |             return checkResponse; | 
			
		
	
		
			
				
					|  |  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         //------工位上货相关-----校验工位存量是否存在----
 | 
			
		
	
	
		
			
				
					|  |  |  | @ -1624,6 +1566,7 @@ public class IoCodeTempController extends BaseController { | 
			
		
	
		
			
				
					|  |  |  |  |                 orderEntity.setSplitBusType(addOrderRequest.getSplitBusType()); | 
			
		
	
		
			
				
					|  |  |  |  |                 orderEntity.setWorkPlaceQueueCode(queueCode); | 
			
		
	
		
			
				
					|  |  |  |  |                 orderEntity.setProductType(2); | 
			
		
	
		
			
				
					|  |  |  |  |                 orderEntity.setFifoSplitTag(addOrderRequest.getFifoSplitTag()); | 
			
		
	
		
			
				
					|  |  |  |  |                 orderService.insertOrder(orderEntity); | 
			
		
	
		
			
				
					|  |  |  |  |             } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
	
		
			
				
					|  |  |  | @ -1797,6 +1740,58 @@ public class IoCodeTempController extends BaseController { | 
			
		
	
		
			
				
					|  |  |  |  |         return ResultVOUtils.success(addCodeResult); | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     private BaseResponse checkIsExpired(UdiRelevanceResponse udiRelevanceResponse, UdiEntity udiEntity, AddOrderRequest addOrderRequest,BasicBussinessTypeEntity bussinessTypeEntity) { | 
			
		
	
		
			
				
					|  |  |  |  |         long recent = udiRelevanceResponse.getRecentDateTime() != null ? udiRelevanceResponse.getRecentDateTime().longValue() : 0; | 
			
		
	
		
			
				
					|  |  |  |  |         if (IntUtil.value(bussinessTypeEntity.getCheckVailDate()) == 1 && recent > 0 && !addOrderRequest.isIgnoreRecentExpire()){ | 
			
		
	
		
			
				
					|  |  |  |  |             if (StrUtil.isNotEmpty(udiEntity.getExpireDate())) { | 
			
		
	
		
			
				
					|  |  |  |  |                 String expireDate = "20" + udiEntity.getExpireDate(); | 
			
		
	
		
			
				
					|  |  |  |  |                 long expireTime = MsDateUtil.parseDateExpire(expireDate); | 
			
		
	
		
			
				
					|  |  |  |  |                 long recentTime = Math.abs(recent * 24 * 60 * 60 * 1000); | 
			
		
	
		
			
				
					|  |  |  |  |                 long resultTime = expireTime - System.currentTimeMillis(); | 
			
		
	
		
			
				
					|  |  |  |  |                 if (resultTime > 0 && resultTime < recentTime) { | 
			
		
	
		
			
				
					|  |  |  |  |                     long time = udiRelevanceResponse.getIsDateBy() == 2 | 
			
		
	
		
			
				
					|  |  |  |  |                             ? resultTime / (60 * 60 * 1000) // 单位:小时
 | 
			
		
	
		
			
				
					|  |  |  |  |                             : resultTime / (24 * 60 * 60 * 1000); // 单位:天
 | 
			
		
	
		
			
				
					|  |  |  |  |                     String unit = udiRelevanceResponse.getIsDateBy() == 2 ? "时" : "天"; | 
			
		
	
		
			
				
					|  |  |  |  |                     return ResultVOUtils.error(505, "当前产品临近过期,距过期还剩" + time + unit + ",是否确定继续添加?"); | 
			
		
	
		
			
				
					|  |  |  |  |                 } | 
			
		
	
		
			
				
					|  |  |  |  |             } | 
			
		
	
		
			
				
					|  |  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |  |         return ResultVOUtils.success(); | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     private BaseResponse checkExpireDate(int checkExpire,UdiEntity udiEntity, AddOrderRequest addOrderRequest) { | 
			
		
	
		
			
				
					|  |  |  |  |         if (StrUtil.isNotEmpty(udiEntity.getExpireDate())) { | 
			
		
	
		
			
				
					|  |  |  |  |             String expireDate = "20" + udiEntity.getExpireDate(); | 
			
		
	
		
			
				
					|  |  |  |  |             long expireTime = MsDateUtil.parseDateExpire(expireDate); | 
			
		
	
		
			
				
					|  |  |  |  |             long currentTimeMillis = System.currentTimeMillis(); | 
			
		
	
		
			
				
					|  |  |  |  |             if (expireTime < currentTimeMillis) { | 
			
		
	
		
			
				
					|  |  |  |  |                 if (checkExpire == 1 && !addOrderRequest.isIgnoreExpire()) { | 
			
		
	
		
			
				
					|  |  |  |  |                     return ResultVOUtils.error(504, "当前产品已过期,是否确定继续添加?"); | 
			
		
	
		
			
				
					|  |  |  |  |                 } else if (checkExpire == 2) { | 
			
		
	
		
			
				
					|  |  |  |  |                     return ResultVOUtils.error(604, "当前产品已过期,无法添加!"); | 
			
		
	
		
			
				
					|  |  |  |  |                 } | 
			
		
	
		
			
				
					|  |  |  |  |             } | 
			
		
	
		
			
				
					|  |  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |  |         return ResultVOUtils.success(); | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     private boolean isPackLevelValid(Integer maxLevel, Integer packLevel, Integer compareLevel) { | 
			
		
	
		
			
				
					|  |  |  |  |         //maxLevel  当业务使用单据类型的时候 为使用允许采集最大层级 不适用的时候 为流通允许采集的最大层级
 | 
			
		
	
		
			
				
					|  |  |  |  |         //compareLevel 当业务类型使用单据类型的时候 为使用层级 不使用的为流通
 | 
			
		
	
		
			
				
					|  |  |  |  |         //packLevel 包装层级
 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         if (maxLevel != null && packLevel > maxLevel) { | 
			
		
	
		
			
				
					|  |  |  |  |             return false; | 
			
		
	
		
			
				
					|  |  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |  |         if (maxLevel == null && packLevel > 1 ) { | 
			
		
	
		
			
				
					|  |  |  |  |             return false; | 
			
		
	
		
			
				
					|  |  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         return packLevel >= compareLevel; | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     public Integer getMaxGroupNumber() { | 
			
		
	
		
			
				
					|  |  |  |  |         Integer groupNumber = codeTempService.selectMaxGroupNumber(); | 
			
		
	
	
		
			
				
					|  |  |  | 
 |