//package com.prolog.upcloud.base.wh.operate.service.impl;
//
//import java.math.BigDecimal;
//import java.text.SimpleDateFormat;
//import java.util.ArrayList;
//import java.util.Collections;
//import java.util.Date;
//import java.util.HashMap;
//import java.util.List;
//import java.util.Map;
//import java.util.Optional;
//import java.util.Set;
//import java.util.stream.Collectors;
//
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.beans.factory.annotation.Value;
//import org.springframework.stereotype.Service;
//import org.springframework.transaction.annotation.Transactional;
//
//import com.codingapi.tx.annotation.TxTransaction;
//import com.github.pagehelper.PageHelper;
//import com.netflix.hystrix.strategy.concurrency.HystrixRequestContext;
//import com.prolog.cs.basic.chain.model.cargo.BaseCargoOwnerMst;
//import com.prolog.cs.basic.item.model.BaseMtlItemMst;
//import com.prolog.cs.basic.item.model.BaseMtlManufacturer;
//import com.prolog.cs.basic.item.model.vo.ItemMstQueryVO;
//import com.prolog.cs.basic.item.model.vo.ItemMstVO2;
//import com.prolog.cs.basic.warehouse.model.BaseWmsWarehouseMst;
//import com.prolog.cs.basic.warehouse.model.vo.WarehouseLocatorBasicInfo;
//import com.prolog.cs.data.exchange.client.ExchangeSender;
//import com.prolog.cs.data.exchange.client.core.EtlMessage;
//import com.prolog.cs.data.exchange.client.core.EtlTypeConstants;
//import com.prolog.framework.authority.core.dto.UserDTO;
//import com.prolog.framework.authority.user.UserTemplate;
//import com.prolog.framework.beans.BeanUtils;
//import com.prolog.framework.bz.core.util.ObjectUtils;
//import com.prolog.framework.common.message.RestMessage;
//import com.prolog.framework.core.exception.BizException;
//import com.prolog.framework.core.exception.ParameterException;
//import com.prolog.framework.core.pojo.Page;
//import com.prolog.framework.core.restriction.Criteria;
//import com.prolog.framework.core.restriction.Order;
//import com.prolog.framework.core.restriction.Restriction;
//import com.prolog.framework.core.restriction.Restrictions;
//import com.prolog.framework.dao.util.PageUtils;
//import com.prolog.framework.lock.DistributedLock;
//import com.prolog.framework.utils.JsonUtils;
//import com.prolog.framework.utils.MapUtils;
//import com.prolog.framework.utils.SnowFlakeUtils;
//import com.prolog.upcloud.base.inventory.vo.BatchNumberListVO;
//import com.prolog.upcloud.base.inventory.vo.InvStockAdjust;
//import com.prolog.upcloud.base.inventory.vo.InvStockAdjustDetail;
//import com.prolog.upcloud.base.inventory.vo.InvStockCancel;
//import com.prolog.upcloud.base.inventory.vo.InvStockCheck;
//import com.prolog.upcloud.base.inventory.vo.WmsInvStockQtyQueryVO;
//import com.prolog.upcloud.base.inventory.vo.WmsInvStockQtyVO;
//import com.prolog.upcloud.base.wh.operate.dao.OmsInventoryAuditMapper;
//import com.prolog.upcloud.base.wh.operate.dao.OmsInventoryOrderMapper;
//import com.prolog.upcloud.base.wh.operate.dao.OmsInventoryResultMapper;
//import com.prolog.upcloud.base.wh.operate.dao.WmsAdjustDMapper;
//import com.prolog.upcloud.base.wh.operate.dao.WmsAdjustHMapper;
//import com.prolog.upcloud.base.wh.operate.dao.WmsInvCheckDMapper;
//import com.prolog.upcloud.base.wh.operate.dao.WmsInvCheckHMapper;
//import com.prolog.upcloud.base.wh.operate.model.OmsInventoryAudit;
//import com.prolog.upcloud.base.wh.operate.model.OmsInventoryOrder;
//import com.prolog.upcloud.base.wh.operate.model.OmsInventoryResult;
//import com.prolog.upcloud.base.wh.operate.model.WmsAdjustD;
//import com.prolog.upcloud.base.wh.operate.model.WmsAdjustH;
//import com.prolog.upcloud.base.wh.operate.model.WmsInvCheckD;
//import com.prolog.upcloud.base.wh.operate.model.WmsInvCheckH;
//import com.prolog.upcloud.base.wh.operate.resource.ChainResource;
//import com.prolog.upcloud.base.wh.operate.resource.ItemResource;
//import com.prolog.upcloud.base.wh.operate.resource.StockResource;
//import com.prolog.upcloud.base.wh.operate.resource.WarehouseClient;
//import com.prolog.upcloud.base.wh.operate.service.AdjustService;
//import com.prolog.upcloud.base.wh.operate.utils.StringUtils;
//import com.prolog.upcloud.base.wh.operate.vo.WmsAdjustAddVO;
//import com.prolog.upcloud.base.wh.operate.vo.WmsAdjustUpdateVO;
//
//import cn.hutool.core.bean.BeanUtil;
//
///**
// * @author zzz
// * @desc 损溢
// * @date 2021/4/7
// */
//@Service
//public class AdjustServiceImplback implements AdjustService {
//
//	@Autowired
//	private WmsAdjustHMapper adjustHMapper;
//
//	@Autowired
//	private WmsAdjustDMapper adjustDMapper;
//
//	@Autowired
//	private WmsInvCheckHMapper invCheckHMapper;
//
//	@Autowired
//	private WmsInvCheckDMapper invCheckDMapper;
//
//	@Autowired
//	private ItemResource itemResource;
//
//	@Autowired
//	private StockResource stockResource;
//
//	@Autowired
//	private UserTemplate userTemplate;
//
//	@Autowired
//	private WarehouseClient warehouseResource;
//
//	@Autowired
//	private ChainResource chainResource;
//
//	@Autowired
//	private ExchangeSender exchangeSender;
//
//	@Autowired
//	private OmsInventoryOrderMapper omsInventoryOrderMapper;
//
//	@Autowired
//	private OmsInventoryAuditMapper omsInventoryAuditMapper;
//
//	@Autowired
//	private OmsInventoryResultMapper omsInventoryResultMapper;
//
//	@Autowired
//	protected DistributedLock distributedLock;
//	
//	@Value("${prolog.wms.:false}")
//	private boolean enableAutoGenLocatorByInventory;
//
//	private static Logger logger = LoggerFactory.getLogger(AdjustServiceImplback.class);
//
//	/**
//	 * 损溢新增
//	 * 
//	 * @param wmsAdjustAddVO
//	 */
//	@Override
//	@Transactional
//	@TxTransaction(isStart = true)
//	public synchronized void saveAdjust(WmsAdjustAddVO wmsAdjustAddVO) {
//		String cargoOwnerId = wmsAdjustAddVO.getCargoOwnerId();
//		if (StringUtils.isEmpty(cargoOwnerId))
//			throw new ParameterException("货主id不能为空！");
//		if (StringUtils.isEmpty(wmsAdjustAddVO.getWarehouseId()))
//			throw new ParameterException("仓库id不能为空！");
//		if (StringUtils.isEmpty(wmsAdjustAddVO.getDcId())) {
//			try {
//				RestMessage<BaseWmsWarehouseMst> byId = warehouseResource.getById(wmsAdjustAddVO.getWarehouseId());
//				BaseWmsWarehouseMst data = byId.getData();
//				if (!ObjectUtils.isNull(data)) {
//					String dcId = data.getDcId();
//					wmsAdjustAddVO.setDcId(dcId);
//				}
//			} catch (Exception e) {
//				e.printStackTrace();
//			}
//		}
//		UserDTO userDTO = userTemplate.getUserDTO();
//
//		String batchId = wmsAdjustAddVO.getBatchId();
//		String whLocatorId = wmsAdjustAddVO.getWhLocatorId();
//		String warehouseId = wmsAdjustAddVO.getWarehouseId();
//		WmsInvStockQtyQueryVO stockQuery = new WmsInvStockQtyQueryVO();
//		stockQuery.setBatchId(batchId);
//		stockQuery.setWarehouseId(warehouseId);
//		stockQuery.setCargoOwnerId(cargoOwnerId);
//		stockQuery.setEnterpriseId(userDTO.getEnterpriseId());
//		stockQuery.setLocatorId(whLocatorId);
//		stockQuery.setStatus("1");
//		stockQuery.setSubStatus("1");
//		// 调用远程库存服务看是否有库存信息,有就算出差异数,无就是新增库存信息
//		RestMessage<List<WmsInvStockQtyVO>> availableQuantity2 = stockResource
//				.getAvailableQuantity(BeanUtil.beanToMap(stockQuery));
//
//		Integer type = wmsAdjustAddVO.getType();
//		if (type == null) {
//			type = 1;
//		}
//		if (type == 0) {
//			// 调整批号
//			String manufacturerLotNumPre = wmsAdjustAddVO.getManufacturerLotNumPre();
//			String manufacturerLotNum = wmsAdjustAddVO.getManufacturerLotNum();
//			String batchIdNew = wmsAdjustAddVO.getBatchIdNew();
////			String batchId = wmsAdjustAddVO.getBatchId();
//			if (StringUtils.isEmpty(batchIdNew) || StringUtils.isEmpty(batchId)) {
//				throw new ParameterException("新老批次id不可为空!");
//			}
//			if (batchIdNew.equals(batchId)) {
//				// 批次id相同没有调整
//				return;
//			}
//			if (StringUtils.isEmpty(manufacturerLotNumPre) || StringUtils.isEmpty(manufacturerLotNum)) {
//				throw new ParameterException("新老批号不可为空!");
//			}
//			if (manufacturerLotNum.equals(manufacturerLotNumPre)) {
//				// 批号相同没有调整
//				return;
//			}
//
//			if (availableQuantity2 != null && availableQuantity2.isSuccess()
//					&& !ObjectUtils.isEmpty(availableQuantity2.getData())) {
//				List<WmsInvStockQtyVO> data = availableQuantity2.getData();
//				WmsInvStockQtyVO wmsInvStockQtyVO = data.get(0);
//				if (wmsInvStockQtyVO != null
//						&& wmsInvStockQtyVO.getAvailableQuantity().compareTo(BigDecimal.ZERO) == 0) {
//					// 可用库存为0,抛错
//					throw new BizException("保存无计划损溢失败,此批次商品没有可用的库存数量提供操作!");
//				}
//			}
//
//			// 生成两次调整损溢单
//			excuteAddAdjust(type, wmsAdjustAddVO, userDTO);
//
//			// 远程调用修改批号(影响出入库批号,是否回传erp?)
////			InvStockBatchNumberUpdate lotUp = new InvStockBatchNumberUpdate();
////			lotUp.setBatchId(batchId);
////			lotUp.setManufacturerLotNum(manufacturerLotNum);
////			ValidList<InvStockBatchNumberUpdate> listUp = new ValidList<>();
////			listUp.add(lotUp);
////			stockResource.updateBatchNumber(listUp);
//		}
//		if (type == 1) {
//			// 调整数量
//			BigDecimal pieceAccount = wmsAdjustAddVO.getPieceAccount();
//			BigDecimal pieceAccountFact = wmsAdjustAddVO.getPieceAccountFact();
//			if (pieceAccount == null || pieceAccountFact == null) {
//				throw new ParameterException("盘前盘后数量不可为空");
//			}
//			Integer isAdd = wmsAdjustAddVO.getIsAdd();
//			// 根据批次查找库存数量
//			if (isAdd != null && isAdd == 1) {
//
//				if (availableQuantity2 != null && availableQuantity2.isSuccess()
//						&& !ObjectUtils.isEmpty(availableQuantity2.getData())) {
//					// 说明有库存数据,抛出错误
//					throw new BizException("保存无计划损溢(无账存商品)失败,此批次商品已有库存信息,请根据货位或商品查询,然后进行无计划损溢修改操作!");
//				}
//
//			}
//
//			BigDecimal pieceQuantity = pieceAccountFact.subtract(pieceAccount);
//			wmsAdjustAddVO.setPieceQuantity(pieceQuantity);
//			if (pieceQuantity.compareTo(BigDecimal.ZERO) == 0) {
//				// 数量没有调整
//				return;
//			}
//			if (availableQuantity2 != null && availableQuantity2.isSuccess()
//					&& !ObjectUtils.isEmpty(availableQuantity2.getData())) {
//				List<WmsInvStockQtyVO> data = availableQuantity2.getData();
//				WmsInvStockQtyVO wmsInvStockQtyVO = data.get(0);
//				if (wmsInvStockQtyVO != null
//						&& wmsInvStockQtyVO.getAvailableQuantity().compareTo(BigDecimal.ZERO) == 0) {
//					// 可用库存为0,抛错
//					throw new BizException("保存无计划损溢失败,此批次商品没有可用的库存数量提供操作!");
//				}
//			}
//
//			// 生成损益单
//			excuteAddAdjust(type, wmsAdjustAddVO, userDTO);
//		}
//
//	}
//
//	private void excuteAddAdjust(Integer type, WmsAdjustAddVO wmsAdjustAddVO, UserDTO userDTO) {
//
//		Date date = new Date();
//		String userId = userDTO.getId();
//		String userName = userDTO.getNickname();
//		String enterpriseId = userDTO.getEnterpriseId();
//		WmsAdjustH wmsAdjustH = new WmsAdjustH();
//		String adjustHeaderId = String.valueOf(SnowFlakeUtils.getId());// 主表id
//		wmsAdjustH.setAdjustHeaderId(adjustHeaderId);
//		wmsAdjustH.setAutoBillNum(adjustHeaderId);
//		wmsAdjustH.setAccessLevel("9");
//		wmsAdjustH.setWarehouseId(wmsAdjustAddVO.getWarehouseId());
//		wmsAdjustH.setDcId(wmsAdjustAddVO.getDcId());
//		wmsAdjustH.setCargoOwnerId(wmsAdjustAddVO.getCargoOwnerId());
//		wmsAdjustH.setAdjustDate(date);
//		wmsAdjustH.setEnterpriseId(enterpriseId);
//		wmsAdjustH.setStatus("NEW");
//		wmsAdjustH.setCreator(userId);
//		wmsAdjustH.setCreatorName(userName);
//		wmsAdjustH.setGmtCreate(date);
//		wmsAdjustH.setModifier(userId);
//		wmsAdjustH.setModifierName(userName);
//		wmsAdjustH.setGmtModified(date);
//		wmsAdjustH.setAdjustType(wmsAdjustAddVO.getAdjustType());
//		adjustHMapper.save(wmsAdjustH);
//
//		WmsAdjustD model = new WmsAdjustD();
//		BeanUtils.copyProperties(wmsAdjustAddVO, model);
//		String stockStatus = wmsAdjustAddVO.getStockStatus();
//		if (StringUtils.isEmpty(stockStatus)) {
//			model.setStockStatus("1");
//		}
//		model.setLineNum(1L);
//		model.setCreator(userId);
//		model.setCreatorName(userName);
//		model.setGmtCreate(date);
//		model.setModifier(userId);
//		model.setModifierName(userName);
//		model.setGmtModified(date);
//		model.setCargoOwnerId(wmsAdjustAddVO.getCargoOwnerId());
//		model.setAdjustHeaderId(adjustHeaderId);
//		model.setBatchId(stockStatus);
//		// 加入时间
////		model.setPieceQuantity(wmsAdjustAddVO.getQuantity().multiply(wmsAdjustAddVO.getQuantity()));
//		model.setStatus("0");
//		model.setBatchId(wmsAdjustAddVO.getBatchId());
//		model.setBatchNum(wmsAdjustAddVO.getBatchNum());
//		model.setPieceQuantity(wmsAdjustAddVO.getPieceAccountFact().subtract(wmsAdjustAddVO.getPieceAccount())); // 差异数
//
//		BigDecimal zero = BigDecimal.ZERO;
//		List<InvStockAdjust> invStockList = new ArrayList<>();
//		if (0 == type) {
//			// 批次调整,损老批号
//			BigDecimal pieceAccount = model.getPieceAccount(); // 账存数
//			model.setPieceAccountFact(zero); // 盘点数
//			model.setPieceQuantity(zero.subtract(pieceAccount)); // 差异数
//
//			// 溢新批号
//			WmsAdjustD model2 = new WmsAdjustD();
//			BeanUtils.copyProperties(model, model2);
//			model2.setAdjustLineId(null);
//			model2.setLineNum(2L);
//			model2.setBatchId(wmsAdjustAddVO.getBatchIdNew());
//			model2.setBatchNum(wmsAdjustAddVO.getBatchNumNew());
//			model2.setPieceAccountFact(pieceAccount);
//			model2.setPieceAccount(zero);
//			model2.setPieceQuantity(pieceAccount.subtract(zero)); // 差异数
//			model2.setQuantity(model2.getPieceQuantity());
//			model2.setEnterpriseId(enterpriseId);
//			model2.setLineNum(2L);
//			adjustDMapper.save(model2);
//			excutePreStock(invStockList, wmsAdjustH, model2);
//		}
//		model.setQuantity(model.getPieceQuantity());
//		model.setEnterpriseId(enterpriseId);
//		adjustDMapper.save(model);
//
//		// 库存预占
//		excutePreStock(invStockList, wmsAdjustH, model);
//		stockResource.adjustStock(invStockList);
//
//	}
//
//	/**
//	 * 损溢预占库存
//	 * 
//	 * @param invStockList
//	 * @param wmsAdjustH
//	 * @param model
//	 */
//	private void excutePreStock(List<InvStockAdjust> invStockList, WmsAdjustH wmsAdjustH, WmsAdjustD model) {
//		InvStockAdjust adjust = new InvStockAdjust();
//		adjust.setBillId(wmsAdjustH.getAdjustHeaderId());
//		adjust.setLineBillId(model.getAdjustLineId());
//		adjust.setWarehouseId(wmsAdjustH.getWarehouseId());
//
//		InvStockAdjustDetail adjustD = new InvStockAdjustDetail();
//		adjustD.setBatchId(model.getBatchId());
//		adjustD.setComments(model.getComments());
//		String containerCode = model.getContainerCode();
//		if (StringUtils.isEmpty(containerCode)) {
//			containerCode = "N/A";
//		}
//		adjustD.setContainerCode(containerCode);
//		String goodsCaseCode = model.getGoodsCaseCode();
//		if (StringUtils.isEmpty(goodsCaseCode)) {
//			goodsCaseCode = "N/A";
//		}
//		adjustD.setGoodsCaseCode(goodsCaseCode);
//		adjustD.setLocatorId(model.getWhLocatorId());
//		adjustD.setQuantity(model.getPieceQuantity());
//		adjustD.setStatus(model.getStockStatus());
//		List<InvStockAdjustDetail> adjustDList = new ArrayList<>();
//		adjustDList.add(adjustD);
//		adjust.setDetails(adjustDList);
//		invStockList.add(adjust);
//	}
//
//	/**
//	 * 盘点单转损溢单
//	 * 
//	 * @param checkLineIds
//	 */
//	@Override
//	@Transactional
//	@TxTransaction(isStart = true)
//	public synchronized void saveBatchAdjust(String checkLineIds) {
//		if (StringUtils.isEmpty(checkLineIds))
//			throw new ParameterException("明细id不能为空！");
//		WmsAdjustH wmsAdjustH = new WmsAdjustH();
//		WmsInvCheckD invCheckD = invCheckDMapper.findById(checkLineIds.split(",")[0], WmsInvCheckD.class);
//		if (invCheckD == null) {
//			throw new ParameterException("未找到对应盘点明细！");
//		}
//		String checkHeaderId = invCheckD.getCheckHeaderId();
//		WmsInvCheckH wmsInvCheckH = invCheckHMapper.findById(checkHeaderId, WmsInvCheckH.class);
//		if (wmsInvCheckH == null)
//			throw new ParameterException("未找到对应盘点头单！");
//		Date date = new Date();
//		UserDTO userDTO = userTemplate.getUserDTO();
//		String userId = userDTO.getId();
//		String userName = userDTO.getNickname();
//		String enterpriseId = userDTO.getEnterpriseId();
//		String adjustHId = String.valueOf(SnowFlakeUtils.getId());
//		wmsAdjustH.setAdjustHeaderId(adjustHId);
//		wmsAdjustH.setAutoBillNum(adjustHId);
//		wmsAdjustH.setDcId(wmsInvCheckH.getDcId());
//		wmsAdjustH.setWarehouseId(wmsInvCheckH.getWarehouseId());
//		wmsAdjustH.setCargoOwnerId(wmsInvCheckH.getCargoOwnerId());
//		wmsAdjustH.setStatus("NEW");
//		wmsAdjustH.setAccessLevel("9");
//		wmsAdjustH.setSrcBillHId(wmsInvCheckH.getCheckHeaderId());
//		wmsAdjustH.setCreator(userId);
//		wmsAdjustH.setCreatorName(userName);
//		wmsAdjustH.setGmtCreate(date);
//		wmsAdjustH.setAdjustDate(date);
//		wmsAdjustH.setModifier(userId);
//		wmsAdjustH.setModifierName(userName);
//		wmsAdjustH.setGmtModified(date);
//		wmsAdjustH.setEnterpriseId(enterpriseId);
//		wmsAdjustH.setAdjustType("0");
//		adjustHMapper.save(wmsAdjustH);
//
//		List<WmsAdjustD> adjustDList = new ArrayList<>();
//		long row = 0;
//		for (String checkLineId : checkLineIds.split(",")) {
//			row++;
//			WmsInvCheckD wmsInvCheckD = invCheckDMapper.findById(checkLineId, WmsInvCheckD.class);
//			if (wmsInvCheckD != null) {
//
//				// 校验库存可使用量
//				String batchId = wmsInvCheckD.getBatchId();
//				String whLocatorId = wmsInvCheckD.getWhLocatorId();
//				String warehouseId = wmsInvCheckH.getWarehouseId();
//				String cargoOwnerId = wmsInvCheckH.getCargoOwnerId();
//				WmsInvStockQtyQueryVO stockQuery = new WmsInvStockQtyQueryVO();
//				stockQuery.setBatchId(batchId);
//				stockQuery.setWarehouseId(warehouseId);
//				stockQuery.setCargoOwnerId(cargoOwnerId);
//				stockQuery.setEnterpriseId(userDTO.getEnterpriseId());
//				stockQuery.setLocatorId(whLocatorId);
//				stockQuery.setStatus("1");
//				stockQuery.setSubStatus("1");
//				// 此处可使用分布式锁
//				distributedLock.lock(batchId + whLocatorId, row, row);
//				// 获取库存可用数量
//				RestMessage<List<WmsInvStockQtyVO>> availableQuantity2 = stockResource
//						.getAvailableQuantity(BeanUtil.beanToMap(stockQuery));
//				if (availableQuantity2 != null && availableQuantity2.isSuccess()
//						&& !ObjectUtils.isEmpty(availableQuantity2.getData())) {
//					List<WmsInvStockQtyVO> data = availableQuantity2.getData();
//					WmsInvStockQtyVO wmsInvStockQtyVO = data.get(0);
//					if (wmsInvStockQtyVO != null
//							&& wmsInvStockQtyVO.getAvailableQuantity().compareTo(BigDecimal.ZERO) == 0) {
//						// 可用库存为0,抛错
//						throw new BizException(String.format("第[%s]行,保存盘点转损溢失败,此批次商品没有可用的库存数量提供操作!可作废重试!", row));
//					}
//				}
//
//				WmsAdjustD wmsAdjustD = new WmsAdjustD();
//				wmsAdjustD.setAdjustHeaderId(adjustHId);
//				wmsAdjustD.setWhLocatorId(wmsInvCheckD.getWhLocatorId());
//				wmsAdjustD.setContainerCode(wmsInvCheckD.getContainerCode());
//				wmsAdjustD.setGoodsCaseCode(wmsInvCheckD.getGoodsCaseCode());
//				wmsAdjustD.setItemId(wmsInvCheckD.getItemId());
//				wmsAdjustD.setBatchId(wmsInvCheckD.getBatchId());
//				wmsAdjustD.setBatchNum(wmsInvCheckD.getBatchNum());
//				wmsAdjustD.setCargoOwnerId(wmsInvCheckD.getCargoOwnerId());
//				wmsAdjustD.setStockStatus(wmsInvCheckD.getStockStatus());
//				wmsAdjustD.setLineNum(row);
//				RestMessage<BaseMtlItemMst> rest = itemResource.getItemById(wmsInvCheckD.getItemId());
//				if (!rest.isSuccess())
//					throw new RuntimeException("查询商品服务失败！" + rest.getMessage());
//				BaseMtlItemMst itemMst = rest.getData();
//				if (itemMst == null) {
//					throw new RuntimeException("未找到商品信息！");
//				}
//				wmsAdjustD.setUom(wmsInvCheckD.getUom());
////				wmsAdjustD.setUom(itemMst.getPieceUom());
//				wmsAdjustD.setConversionRate(wmsInvCheckD.getConversionRate());
////				wmsAdjustD.setConversionRate(itemMst.getPieceConversionRate());
////				wmsAdjustD.setPieceQuantity(itemMst.getPieceConversionRate().multiply(wmsInvCheckD.getQuantityDiff()));
////				wmsAdjustD.setPieceQuantity(wmsInvCheckD.getPieceQuantityFact().subtract(wmsInvCheckD.getPieceQuantityAccount()));
//				wmsAdjustD.setPieceQuantity(wmsInvCheckD.getQuantityDiff());
//				wmsAdjustD.setQuantity(wmsInvCheckD.getQuantityDiff());
//				wmsAdjustD.setStatus("0");
//				wmsAdjustD.setSrcBillDId(wmsInvCheckD.getCheckLineId());
//				wmsAdjustD.setSrcBillHId(wmsInvCheckH.getCheckHeaderId());
//				wmsAdjustD.setCreator(userId);
//				wmsAdjustD.setCreatorName(userName);
//				wmsAdjustD.setGmtCreate(date);
//				wmsAdjustD.setModifier(userId);
//				wmsAdjustD.setModifierName(userName);
//				wmsAdjustD.setGmtModified(date);
//				wmsAdjustD.setAdjustDate(date);
//				wmsAdjustD.setPieceAccount(wmsInvCheckD.getPieceQuantityAccount());
//				wmsAdjustD.setPieceAccountFact(wmsInvCheckD.getPieceQuantityFact());
//				wmsAdjustD.setPieceQuantity(
//						wmsInvCheckD.getPieceQuantityFact().subtract(wmsInvCheckD.getPieceQuantityAccount()));
//				wmsAdjustD.setQuantity(wmsAdjustD.getPieceQuantity());
//				wmsAdjustD.setEnterpriseId(enterpriseId);
//				adjustDMapper.save(wmsAdjustD);
//				adjustDList.add(wmsAdjustD);
//			}
//		}
//		// 盘点转损溢需预占库存
//		if (ObjectUtils.isNotEmpty(adjustDList)) {
//			List<InvStockAdjust> invStockList = new ArrayList<>();
//			for (WmsAdjustD wmsAdjustD : adjustDList) {
//				excutePreStock(invStockList, wmsAdjustH, wmsAdjustD);
//			}
//			stockResource.adjustStock(invStockList);
//		}
//	}
//
//	/**
//	 * 损溢修改(没有损溢调整一说,无计划的话)
//	 * 
//	 * @param vo
//	 */
//	@Override
//	@Transactional
//	public void updateAdjust(WmsAdjustUpdateVO vo) {
//		String adjustLineId = vo.getAdjustLineId();
//		if (StringUtils.isEmpty(adjustLineId))
//			throw new ParameterException("id不能为空！");
//		if (vo.getQuantity() == null)
//			throw new ParameterException("数量不能为空！");
//		Map<String, Object> map = new HashMap<>();
//		map.put("quantity", vo.getQuantity());
//		if (StringUtils.isBlank(vo.getBatchId()))
//			map.put("batchId", vo.getBatchId());
//		if (StringUtils.isBlank(vo.getBatchNum()))
//			map.put("batchNum", vo.getBatchNum());
//		if (StringUtils.isBlank(vo.getWhLocatorId()))
//			map.put("whLocatorId", vo.getWhLocatorId());
//		if (StringUtils.isBlank(vo.getStockStatus()))
//			map.put("stockStatus", vo.getStockStatus());
//		UserDTO userDTO = userTemplate.getUserDTO();
//		String userId = userDTO.getId();
//		String userName = userDTO.getNickname();
//		map.put("modifierName", userName);
//		map.put("modifier", userId);
//		map.put("gmtModified", new Date());
//		adjustDMapper.updateMapById(adjustLineId, map, WmsAdjustD.class);
//
//		// 若要修改,则需要重新调整预占
//
//		// 修改批号
//
//	}
//
//	/**
//	 * 损溢审核
//	 * 
//	 * @param map
//	 */
//	@Override
//	@Transactional
//	@TxTransaction(isStart = true)
//	public void examineAdjust(Map<String, Object> map) {
//		String adjustLineIds = (String) map.get("adjustLineIds");
//		String status = (String) map.get("status");
//		if (StringUtils.isEmpty(adjustLineIds))
//			throw new ParameterException("id不能为空！");
//		if (StringUtils.isBlank(status))
//			throw new ParameterException("审核状态不能为空！");
//		String checkStatus = null;
//		if (status.equals("1")) {
//			checkStatus = "60"; // 审核不通过直接作废掉
//		}
//		Date date = new Date();
//		UserDTO userDTO = userTemplate.getUserDTO();
//		String userId = userDTO.getId();
//		String userName = userDTO.getNickname();
//
//		List<String> lineBillIds = new ArrayList<>();
//		String billId = null;
//		int i = 0;
//		List<WmsAdjustD> adjustDList = new ArrayList<>();
//		for (String adjustLineId : adjustLineIds.split(",")) {
//			Map<String, Object> map2 = MapUtils.put("gmtModified", date).put("modifier", userId)
//					.put("modifierName", userName).put("adjustDate", date).getMap();
//			if (i == 0) {
//				WmsAdjustD adjustD = adjustDMapper.findById(adjustLineId, WmsAdjustD.class);
//				if (adjustD != null) {
//					billId = adjustD.getAdjustHeaderId();
//					if (status.equals("0")) {
//						if (adjustD.getStatus().equals("0")) {
//							checkStatus = "5";
//							map2.put("opUser1", userName);
//							map2.put("opDate1", date);
//							map2.put("status", checkStatus);
//						} else if (adjustD.getStatus().equals("5")) {
//							checkStatus = "30";
//							map2.put("opUser1", userName);
//							map2.put("opDate1", date);
//							map2.put("status", checkStatus);
//						}
//					}
//					adjustDList.add(adjustD);
//				}
//			}
//			lineBillIds.add(adjustLineId);
//			adjustDMapper.updateMapById(adjustLineId, map2, WmsAdjustD.class);
//
//			adjustHMapper.updateMapById(billId, MapUtils.put("status", "COMFIRM").put("auditDate", date)
//					.put("auditedName", userName).put("auditedBy", userId).getMap(), WmsAdjustH.class);
//		}
//
//		// 库存修改
//		// 若每次审核不通过,需释放预占
//		if (status.equals("1")) {
//			// 释放预占
//			InvStockCancel cancel = new InvStockCancel();
//			cancel.setLineBillIds(adjustLineIds.split(","));
//			stockResource.adjustCancel(cancel);
//		}
//		// 第二次wms审通过后会回传erp审核
//		if (ObjectUtils.isNotEmpty(adjustDList) && adjustDList.get(0).getStatus().trim().equals("5")) {
//			doCallBackToErp(adjustDList);
//		}
//	}
//
//	@Override
//	public Page<WmsAdjustH> getAdjustHPage(String warehouseId, String srcBillHId, String status, Integer pageSize,
//			Integer pageNum) {
//		UserDTO userDTO = userTemplate.getUserDTO();
//		String enterpriseId = userDTO.getEnterpriseId();
//		Criteria crt = Criteria.forClass(BaseMtlManufacturer.class);
//		Restriction r1 = StringUtils.isEmpty(warehouseId) ? null : Restrictions.eq("warehouseId", warehouseId);
//		Restriction r2 = StringUtils.isEmpty(srcBillHId) ? null
//				: Restrictions.like("srcBillHId", "%" + srcBillHId + "%");
//		Restriction r3 = StringUtils.isEmpty(status) ? null : Restrictions.eq("status", status);
//		crt.setRestriction(Restrictions.and(r1, r2, r3, Restrictions.eq("enterpriseId", enterpriseId)));
//		crt.setOrder(Order.newInstance().desc("gmtCreate"));
//		PageHelper.startPage(pageNum, pageSize);
//		List<WmsAdjustH> list = adjustHMapper.findByCriteria(crt);
//		return PageUtils.getPage(list);
//	}
//
//	/**
//	 * pad损溢新增(无计划)
//	 */
//	@Override
//	public void saveAdjustByPad(WmsAdjustAddVO wmsAdjustAddVO) {
//		wmsAdjustAddVO.setAdjustType("1");
//		this.saveAdjust(wmsAdjustAddVO);
//	}
//
//	/**
//	 * 损溢驳回处理
//	 */
//	@Override
//	@Transactional
//	@TxTransaction(isStart = true)
//	public void rejectAdjust(Map<String, Object> map) {
//		String adjustLineIds = (String) map.get("adjustLineIds");
//		if (StringUtils.isEmpty(adjustLineIds))
//			throw new ParameterException("id集合不能为空！");
//		UserDTO userDTO = userTemplate.getUserDTO();
//		String userId = userDTO.getId();
//		String userName = userDTO.getNickname();
//		Date date = new Date();
//		for (String adjustLineId : adjustLineIds.split(",")) {
//			WmsAdjustD adjustD = adjustDMapper.findById(adjustLineId, WmsAdjustD.class);
//			if (adjustD != null) {
//				String billId = adjustD.getAdjustHeaderId();
//				// 作废掉
//				adjustDMapper
//						.updateMapById(adjustLineId,
//								MapUtils.put("status", "60").put("gmtModified", date).put("modifier", userId)
//										.put("modifierName", userName).put("adjustDate", date).getMap(),
//								WmsAdjustD.class);
//				adjustHMapper.updateMapById(billId,
//						MapUtils.put("auditDate", date).put("auditedName", userName).put("auditedBy", userId).getMap(),
//						WmsAdjustH.class);
//			}
//		}
//
//		// 释放预占
//		InvStockCancel cancel = new InvStockCancel();
//		cancel.setLineBillIds(adjustLineIds.split(","));
//		stockResource.adjustCancel(cancel);
//
//		// 回传erp结果
//		Criteria crt = Criteria.forClass(OmsInventoryAudit.class);
//		crt.setRestriction(Restrictions.in("lineid", adjustLineIds.split(",")));
//		List<OmsInventoryAudit> findByCriteria = omsInventoryAuditMapper.findByCriteria(crt);
//		excuteCallbackResult(findByCriteria, userDTO, date, "0");
//	}
//
//	/**
//	 * 回传erp审核
//	 * 
//	 * @param adjustDList
//	 */
//	private void doCallBackToErp(List<WmsAdjustD> adjustDList) {
//		Date now = new Date();
//		String billid = String.valueOf(SnowFlakeUtils.getId());
////		SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
//		SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS"); // 精确到毫秒
//		String dateStr = sdf.format(now);
//		String billno = "GL" + dateStr;
//
//		// 远程获取商品数据
//		Set<String> itemidSet = adjustDList.stream().filter(p -> StringUtils.isNotEmpty(p.getItemId()))
//				.map(WmsAdjustD::getItemId).collect(Collectors.toSet());
//		ItemMstQueryVO itemQuery = new ItemMstQueryVO();
//		itemQuery.setItemIds(itemidSet);
//		RestMessage<List<ItemMstVO2>> listByRelated = itemResource.listByRelated(itemQuery);
//		if (!listByRelated.isSuccess() || listByRelated.getData() == null) {
//			throw new BizException("查询商品关联信息失败!请重试或联系管理员!");
//		}
//		List<ItemMstVO2> itemList = listByRelated.getData();
//		Map<String, List<ItemMstVO2>> itemMap = Optional.of(itemList).orElse(Collections.emptyList()).stream()
//				.collect(Collectors.groupingBy(ItemMstVO2::getItemId));
//		// 远程获取仓库数据
//		Set<String> locatorId = adjustDList.stream().filter(p -> StringUtils.isNotEmpty(p.getWhLocatorId()))
//				.map(WmsAdjustD::getWhLocatorId).collect(Collectors.toSet());
//		RestMessage<List<WarehouseLocatorBasicInfo>> locationBasicInfos = warehouseResource
//				.getLocationBasicInfos(locatorId.toArray(new String[locatorId.size()]));
//		if (!locationBasicInfos.isSuccess() || locationBasicInfos.getData() == null) {
//			throw new BizException("查询货位关联信息失败!请重试或联系管理员!");
//		}
//		List<WarehouseLocatorBasicInfo> locatorData = locationBasicInfos.getData();
//		Map<String, List<WarehouseLocatorBasicInfo>> locatorMap = Optional.of(locatorData)
//				.orElse(Collections.emptyList()).stream()
//				.collect(Collectors.groupingBy(WarehouseLocatorBasicInfo::getWarehouseLocatorId));
//		// 远程获取货主数据
//		Set<String> cargoOwnerId = adjustDList.stream().filter(p -> StringUtils.isNotEmpty(p.getCargoOwnerId()))
//				.map(WmsAdjustD::getCargoOwnerId).collect(Collectors.toSet());
//		RestMessage<Map<String, BaseCargoOwnerMst>> cargoOwner = chainResource.getCargoOwerByIds(cargoOwnerId);
//		if (!cargoOwner.isSuccess() || cargoOwner.getData() == null) {
//			throw new BizException("查询货主关联信息失败!请重试或联系管理员!");
//		}
//		Map<String, BaseCargoOwnerMst> cargoOwnerMap = cargoOwner.getData();
//		// 远程获取批次信息数据
//		Set<String> batchId = adjustDList.stream().filter(p -> StringUtils.isNotEmpty(p.getBatchId()))
//				.map(WmsAdjustD::getBatchId).collect(Collectors.toSet());
//		RestMessage<List<BatchNumberListVO>> batchNumberBasicInfo = stockResource
//				.getBatchNumberBasicInfo(batchId.toArray(new String[batchId.size()]));
//		if (!batchNumberBasicInfo.isSuccess() || batchNumberBasicInfo.getData() == null) {
//			throw new BizException("查询批次关联信息失败!请重试或联系管理员!");
//		}
//		List<BatchNumberListVO> batchNumberData = batchNumberBasicInfo.getData();
//		Map<String, List<BatchNumberListVO>> batchNumberMap = Optional.of(batchNumberData)
//				.orElse(Collections.emptyList()).stream().collect(Collectors.groupingBy(BatchNumberListVO::getBatchId));
//
//		BigDecimal zero = BigDecimal.ZERO;
//		int row = 0;
//		UserDTO userDTO = userTemplate.getUserDTO();
//		List<OmsInventoryOrder> inoList = new ArrayList<>();
//		for (WmsAdjustD wmsAdjustD : adjustDList) {
//			row++;
//			OmsInventoryOrder ino = new OmsInventoryOrder();
//			ino.setBillid(billid);
//			ino.setBilldate(now);
//			ino.setBillno(billno);
//			BigDecimal pieceQuantity = wmsAdjustD.getPieceQuantity();
//			if (pieceQuantity == null) {
//				pieceQuantity = zero;
//			}
//			if (pieceQuantity.compareTo(zero) == -1) {
//				// < 0 为损
//				ino.setType("1"); // 报损单
//			} else {
//				ino.setType("2");
//			}
//			ino.setAmount(wmsAdjustD.getPieceQuantity().abs());
//			// 设置批次相关数据
//			String batchId2 = wmsAdjustD.getBatchId();
//			if (StringUtils.isNotEmpty(batchNumberMap)) {
//				List<BatchNumberListVO> list = batchNumberMap.get(batchId2);
//				if (StringUtils.isNotEmpty(list) && null != list.get(0)) {
//					BatchNumberListVO batchNumberListVO = list.get(0);
//					ino.setAttrStr2(batchNumberListVO.getBatchProductionDateShow()); // 显示生产日期
//					ino.setAttrStr3(batchNumberListVO.getBatchExpiredDateShow()); // 显示有效期至
//					ino.setBatchNum(batchNumberListVO.getManufacturerLotNum()); // 批号
//					ino.setProductionDate(batchNumberListVO.getBatchProductionDate());
//					ino.setExpiredDate(batchNumberListVO.getBatchExpiredDate());
//				}
//			}
//			// 设置仓库相关数据
//			String whLocatorId = wmsAdjustD.getWhLocatorId();
//			if (StringUtils.isNotEmpty(locatorMap)) {
//				List<WarehouseLocatorBasicInfo> list = locatorMap.get(whLocatorId);
//				if (StringUtils.isNotEmpty(list) && null != list.get(0)) {
//					WarehouseLocatorBasicInfo warehouseLocatorBasicInfo = list.get(0);
//					ino.setBranchid(warehouseLocatorBasicInfo.getWarehouseId()); // 仓库id
////					ino.setAttrStr5(warehouseLocatorBasicInfo.getWarehouseId());
////					ino.setBranchid(warehouseLocatorBasicInfo.getWarehouseCode()); // 仓库id
//					ino.setBranchname(warehouseLocatorBasicInfo.getWarehouseName()); // 仓库名称
//					ino.setBranchcode(warehouseLocatorBasicInfo.getWarehouseCode());
//					// 还需要建筑物
//					String bldgName = warehouseLocatorBasicInfo.getBldgName();
//					ino.setBuilding(bldgName);
//				}
//			}
//			// 设置货主相关
//			String cargoOwnerId2 = wmsAdjustD.getCargoOwnerId();
//			if (StringUtils.isNotEmpty(cargoOwnerMap)) {
//				BaseCargoOwnerMst baseCargoOwnerMst = cargoOwnerMap.get(cargoOwnerId2);
//				if (baseCargoOwnerMst != null) {
//					ino.setConsignorid(cargoOwnerId2);
//					ino.setConsignorcode(baseCargoOwnerMst.getCargoOwnerCode());
//					ino.setConsignorname(baseCargoOwnerMst.getCargoOwnerName());
//				}
//			}
//			// 设置商品相关
//			String itemId = wmsAdjustD.getItemId();
//			if (StringUtils.isNotEmpty(itemMap)) {
//				List<ItemMstVO2> list = itemMap.get(itemId);
//				if (StringUtils.isNotEmpty(list) && null != list.get(0)) {
//					ItemMstVO2 itemMstVO2 = list.get(0);
//					ino.setItemid(itemId);
//					ino.setItemcode(itemMstVO2.getItemCode());
//					ino.setItemname(itemMstVO2.getItemName());
//					ino.setApprovalNumber(itemMstVO2.getItemHealthApprovalNbr());
//					ino.setPrice(itemMstVO2.getPiecePurchasePriceTi());
//					ino.setSpec(itemMstVO2.getSpecification());
//					ino.setPlace(itemMstVO2.getCountryOriginId());
//					ino.setManufacturer(itemMstVO2.getManufacturerId());
//				}
//			}
//			ino.setLineid(wmsAdjustD.getAdjustLineId());
//			BigDecimal price = ino.getPrice();
//			if (price != null) {
//				ino.setTotalPrice(price.multiply(wmsAdjustD.getPieceQuantity().abs()));
//			}
//			ino.setPackUnit(wmsAdjustD.getUom());
//			ino.setPackAmount(wmsAdjustD.getConversionRate());
//			ino.setStockstatus(wmsAdjustD.getStockStatus());
//			ino.setStatus("10"); // 初始状态创建中
//			ino.setDatasource("1"); // 来源wms
//			ino.setRemark(wmsAdjustD.getComments());
//			ino.setBasenum(wmsAdjustD.getPieceAccount());
//			ino.setExecnum(wmsAdjustD.getPieceAccountFact());
//			Long lineNum = wmsAdjustD.getLineNum();
//			ino.setSeqno(String.valueOf(lineNum));
//			ino.setEnterpriseid(userDTO.getEnterpriseId());
//			ino.setEnterprisename(userDTO.getEnterpriseName());
//			ino.setSalemanid(userDTO.getId());
//			ino.setCaozyid(userDTO.getId());
//			ino.setCreatedate(now);
//			ino.setCreateby(userDTO.getUsername());
//			ino.setLastmodifydate(now);
//			ino.setLastmodifyby(userDTO.getUsername());
//			ino.setIsDestroy("N"); // 默认不销毁
//			inoList.add(ino);
//
//			this.adjustDMapper.updateMapById(wmsAdjustD.getAdjustLineId(), MapUtils.put("billno", billno).getMap(),
//					WmsAdjustD.class);
//		}
//		long saveBatch = omsInventoryOrderMapper.saveBatch(inoList);
//		if (saveBatch > 0) {
//			EtlMessage em = new EtlMessage();
//			em.setId(billid);
//			em.setEtlType(EtlTypeConstants.op_pl_w2o);
//			try {
//				logger.info("盘点损溢申请数据->data-exchange{}", JsonUtils.toString(em));
//				exchangeSender.send(em);
//			} catch (Exception e) {
//				logger.error("回传data-exchange错误!原因{}", e);
//			}
//		}
//	}
//
//	/**
//	 * 监听erp下发的审核损溢结果,执行损溢确认/损溢驳回操作
//	 */
//	@Override
//	@Transactional
//	@TxTransaction(isStart = true)
//	public void procesAdjustAudit(String ids) {
//		// 解决HystrixRequestContext问题
//		if (!HystrixRequestContext.isCurrentThreadInitialized()) {
//			HystrixRequestContext.initializeContext();
//		}
//		String[] split = ids.trim().split(",");
//		if (split.length > 0) {
//			Criteria crt = Criteria.forClass(OmsInventoryAudit.class);
//			crt.setRestriction(Restrictions.in("billid", split));
//			List<OmsInventoryAudit> audit = omsInventoryAuditMapper.findByCriteria(crt);
//			if (ObjectUtils.isNotEmpty(audit)) {
//				Map<String, List<OmsInventoryAudit>> collect = audit.stream()
//						.filter(p -> StringUtils.isNotEmpty(p.getAuditStatus()))
//						.collect(Collectors.groupingBy(OmsInventoryAudit::getAuditStatus));
//				List<String> passAuditIds = new ArrayList<>();
//				List<String> noPassAuditIds = new ArrayList<>();
////				监听的消息为多线程无法拿到用户信息数据,只能在传过来的数据中取
//				UserDTO userDTO = null;
//				try {
//					userDTO = userTemplate.getUserDTO();
//				} catch (Exception e) {
//					logger.info("从mq中做任务,获取用户失败!");
//				}
//				if (userDTO == null) {
//					userDTO = new UserDTO();
//					OmsInventoryAudit omsInventoryAudit = audit.get(0);
//					String lastmodifyby = omsInventoryAudit.getLastmodifyby();
//					if (StringUtils.isBlank(lastmodifyby)) {
//						lastmodifyby = omsInventoryAudit.getCreateby();
//					}
//					userDTO.setUsername(lastmodifyby);
////					userDTO.setId(omsInventoryAudit.getLastmodifyby());
//					userDTO.setEnterpriseId(omsInventoryAudit.getEnterpriseid());
//					userDTO.setEnterpriseName(omsInventoryAudit.getEnterprisename());
//				}
////				AssertUtils.notNull(userDTO, "用户信息为空!");
//				logger.info("开始进行损溢确认处理-----------------");
//				for (List<OmsInventoryAudit> auditList : collect.values()) {
//					String auditStatus = "";
//					OmsInventoryAudit omsInventoryAudit = null;
//					if (!ObjectUtils.isNull(auditList) && auditList.get(0) != null) {
//						omsInventoryAudit = auditList.get(0);
//						auditStatus = omsInventoryAudit.getAuditStatus();
//					} else {
//						continue;
//					}
//					if (StringUtils.isNotEmpty(auditStatus) && ("Y".equals(auditStatus) || "1".equals(auditStatus))) {
//						// 审核通过,损溢调整通过,修改erp审核状态 30,库存占用后,且回传erp成功后改为50
//						logger.info("执行损溢通过处理-------------------");
//						List<String> collect2 = auditList.stream().filter(p -> !StringUtils.isEmpty(p.getLineid()))
//								.map(OmsInventoryAudit::getLineid).collect(Collectors.toList());
//						if (ObjectUtils.isNull(collect2)) {
//							String billno = omsInventoryAudit.getBillno();
//							String seqno = omsInventoryAudit.getSeqno();
//							Restriction eq = null;
//							if (!StringUtils.isEmpty(seqno)) {
//								eq = Restrictions.eq("lineNum", seqno);
//							}
//							Criteria crt2 = Criteria.forClass(WmsAdjustD.class);
//							crt2.setRestriction(Restrictions.and(Restrictions.eq("billno", billno), eq));
//							List<WmsAdjustD> findByCriteria2 = this.adjustDMapper.findByCriteria(crt2);
//							if (!ObjectUtils.isNull(findByCriteria2)) {
//								Set<String> collect4 = findByCriteria2.stream()
//										.filter(p -> !StringUtils.isEmpty(p.getAdjustLineId()))
//										.map(WmsAdjustD::getAdjustLineId).collect(Collectors.toSet());
//								if (!ObjectUtils.isNull(collect4)) {
//									collect2 = new ArrayList<String>(collect4);
//								}
//							}
//						}
//						passAuditIds.addAll(collect2);
//						excuteAuditPass(passAuditIds, auditList, userDTO);
//					}
//					if (StringUtils.isNotEmpty(auditStatus) && ("N".equals(auditStatus) || "0".equals(auditStatus))) {
//						// 审核不通过,需要将对应的损溢调整表置为驳回状态 40,驳回处理完毕后改为50
//						logger.info("执行损溢不通过处理-------------------");
//						List<String> collect3 = auditList.stream().filter(p -> !StringUtils.isEmpty(p.getLineid()))
//								.map(OmsInventoryAudit::getLineid).collect(Collectors.toList());
//						if (ObjectUtils.isNull(collect3)) {
//							String billno = omsInventoryAudit.getBillno();
//							String seqno = omsInventoryAudit.getSeqno();
//							Restriction eq2 = null;
//							if (!StringUtils.isEmpty(seqno)) {
//								eq2 = Restrictions.eq("lineNum", seqno);
//							}
//							Criteria crt3 = Criteria.forClass(WmsAdjustD.class);
//							crt3.setRestriction(Restrictions.and(Restrictions.eq("billno", billno), eq2));
//							List<WmsAdjustD> findByCriteria3 = this.adjustDMapper.findByCriteria(crt3);
//							if (!ObjectUtils.isNull(findByCriteria3)) {
//								Set<String> collect5 = findByCriteria3.stream()
//										.filter(p -> !StringUtils.isEmpty(p.getAdjustLineId()))
//										.map(WmsAdjustD::getAdjustLineId).collect(Collectors.toSet());
//								if (!ObjectUtils.isNull(collect5)) {
//									collect3 = new ArrayList<String>(collect5);
//								}
//							}
//						}
//						noPassAuditIds.addAll(collect3);
//						excuteAuditNoPass(noPassAuditIds, auditList, userDTO);
//					}
//				}
//			}
//		}
//		if (HystrixRequestContext.isCurrentThreadInitialized()) {
//			HystrixRequestContext.getContextForCurrentThread().shutdown();
//		}
//	}
//
//	/**
//	 * erp损溢通过处理
//	 * 
//	 * @param passAuditIds
//	 */
//	private void excuteAuditPass(List<String> passAuditIds, List<OmsInventoryAudit> AuditModelList, UserDTO userDTO) {
//		if (!ObjectUtils.isNull(passAuditIds)) {
//			logger.info("损溢通过的行id" + passAuditIds);
//			if (confirmAdjust(passAuditIds)) {
//				Date now = new Date();
//				// 库存损溢成功,回传erp结果
//				excuteCallbackResult(AuditModelList, userDTO, now, "10");
//				// 更新状态
//				excuteUpdateAdjustStatus(passAuditIds, userDTO, now, "50");
//			}
//		}
//	}
//
//	/**
//	 * 更新损溢调整状态
//	 * 
//	 * @param passAuditIds
//	 * @param userDTO
//	 * @param now
//	 * @param status
//	 */
//	private void excuteUpdateAdjustStatus(List<String> passAuditIds, UserDTO userDTO, Date now, String status) {
//		String userId = userDTO.getId();
//		String username = userDTO.getUsername();
//		Criteria criteria = Criteria.forClass(WmsAdjustD.class);
//		criteria.setRestriction(Restrictions.in("adjustLineId", passAuditIds.toArray(new String[passAuditIds.size()])));
//		// 更新状态
//		Map<String, Object> map = MapUtils.put("status", status).put("gmtModified", now).put("modifierName", username)
//				.getMap();
//		if (!StringUtils.isEmpty(userId)) {
//			map.put("modifier", userId);
//		}
//		adjustDMapper.updateMapByCriteria(map, criteria);
//
//	}
//
//	/**
//	 * 执行回传erp 损溢调整成功后数据保存 损溢结果回传
//	 * 
//	 * @param auditModelList
//	 * @param userDTO
//	 * @param now
//	 */
//	public void excuteCallbackResult(List<OmsInventoryAudit> auditModelList, UserDTO userDTO, Date now, String status) {
//		logger.info("回传erp损溢结果数据------------------------------");
//		List<OmsInventoryResult> resultList = new ArrayList<>();
//		for (OmsInventoryAudit omsInventoryAudit : auditModelList) {
//			OmsInventoryResult result = new OmsInventoryResult();
//			BeanUtils.copyProperties(omsInventoryAudit, result);
//			result.setStatus(status);
//			result.setCreatedate(now);
//			result.setCreateby(userDTO.getUsername());
//			result.setLastmodifydate(now);
//			result.setLastmodifyby(userDTO.getUsername());
//			String reason = result.getReason();
//			if (StringUtils.isEmpty(reason)) {
//				result.setReason("N/A");
//			}
//			resultList.add(result);
//		}
//		omsInventoryResultMapper.saveBatch(resultList);
//		Set<String> collect = auditModelList.stream().map(OmsInventoryAudit::getBillid).collect(Collectors.toSet());
//		String billid = String.join(",", collect);
//		// 回传损溢结果
//		EtlMessage em = new EtlMessage();
//		em.setId(billid);
//		em.setEtlType(EtlTypeConstants.op_pl_audit_w2o);
//		try {
//			logger.info("盘点损溢回传结果数据->data-exchange{}", JsonUtils.toString(em));
//			exchangeSender.send(em);
//		} catch (Exception e) {
//			logger.error("回传data-exchange错误!原因{}", e);
//		}
//
//	}
//
//	/**
//	 * erp损溢不通过处理
//	 * 
//	 * @param noPassAuditIds
//	 */
//	private void excuteAuditNoPass(List<String> noPassAuditIds, List<OmsInventoryAudit> AuditModelList,
//			UserDTO userDTO) {
//		String username = userDTO.getUsername();
//		String userId = userDTO.getId();
//		Date now = new Date();
//		Criteria criteria = Criteria.forClass(WmsAdjustD.class);
//		criteria.setRestriction(
//				Restrictions.in("adjustLineId", noPassAuditIds.toArray(new String[noPassAuditIds.size()])));
//		Map<String, Object> map = MapUtils.put("status", "40").put("gmtModified", now).put("modifierName", username)
//				.getMap();
//		if (!StringUtils.isEmpty(userId)) {
//			map.put("modifier", userId);
//		}
//		// 更新状态
//		adjustDMapper.updateMapByCriteria(map, criteria);
//
//	}
//
//	/**
//	 * 损溢确认 扣减库存
//	 */
//	private boolean confirmAdjust(List<String> adjustLineIds) {
//		logger.info("损溢确认执行远程调用库存服务---------------------------------");
//		if (!ObjectUtils.isNull(adjustLineIds)) {
//			logger.info("开始调用库存服务,确认损溢->数据{}", adjustLineIds);
//			InvStockCheck c = new InvStockCheck();
//			c.setLineBillIds(adjustLineIds.toArray(new String[adjustLineIds.size()]));
//			@SuppressWarnings("rawtypes")
//			RestMessage result = null;
//			try {
//				result = stockResource.adjustStockCheck(c);
//			} catch (Exception e) {
//				logger.error("调用库存服务失败!原因:{}", e);
//				return false;
//			}
//			if (result != null && result.isSuccess()) {
//				logger.info("调用库存服务成功!");
//				return true;
//			}
//			if (result != null && !result.isSuccess()) {
//				Object data = result.getData();
//				if (data != null) {
//					logger.info("调用库存服务成功,操作失败,原因{}", data.toString());
//				} else {
//					logger.info("调用库存服务成功,操作失败,原因{}", result.getMessage());
//				}
//
//				return false;
//			}
//		}
//		return false;
//	}
//}
