|
|
|
@ -19,12 +19,10 @@ import com.glxp.api.admin.entity.basic.UdiEntity;
|
|
|
|
|
import com.glxp.api.admin.entity.basic.UnitMaintainEntity;
|
|
|
|
|
import com.glxp.api.admin.entity.inout.OrderEntity;
|
|
|
|
|
import com.glxp.api.admin.entity.inout.WarehouseEntity;
|
|
|
|
|
import com.glxp.api.admin.entity.inventory.InvCountCodes;
|
|
|
|
|
import com.glxp.api.admin.entity.inventory.InvCountOrder;
|
|
|
|
|
import com.glxp.api.admin.entity.inventory.InvCountOrderDetail;
|
|
|
|
|
import com.glxp.api.admin.entity.inventory.InvCountSettingEntity;
|
|
|
|
|
import com.glxp.api.admin.entity.inventory.*;
|
|
|
|
|
import com.glxp.api.admin.req.inventory.FilterInvCountCodesRequest;
|
|
|
|
|
import com.glxp.api.admin.req.inventory.FilterInvCountOrderRequest;
|
|
|
|
|
import com.glxp.api.admin.req.inventory.FilterInvProductDetailRequest;
|
|
|
|
|
import com.glxp.api.admin.res.inventory.InvCountOrderResponse;
|
|
|
|
|
import com.glxp.api.admin.service.auth.CustomerService;
|
|
|
|
|
import com.glxp.api.admin.service.inventory.InvCountOrderService;
|
|
|
|
@ -40,6 +38,7 @@ import javax.annotation.Resource;
|
|
|
|
|
import java.util.ArrayList;
|
|
|
|
|
import java.util.Collections;
|
|
|
|
|
import java.util.List;
|
|
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
|
|
@Slf4j
|
|
|
|
|
@Service
|
|
|
|
@ -200,48 +199,96 @@ public class InvCountOrderServiceImpl implements InvCountOrderService {
|
|
|
|
|
log.error("未配置盘点单据设置参数,无法转单");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
List<InvCountOrderDetail> detailList = invCountOrderDetailDao.selectByOrderId(invCountOrder.getOrderId());
|
|
|
|
|
List<InvCountOrderDetail> inDetailList = new ArrayList<>();
|
|
|
|
|
List<InvCountOrderDetail> outDetailList = new ArrayList<>();
|
|
|
|
|
for (InvCountOrderDetail invCountOrderDetail : detailList) {
|
|
|
|
|
if (invCountOrderDetail.getStatus() == 0) {
|
|
|
|
|
//亏损,做出库单
|
|
|
|
|
outDetailList.add(invCountOrderDetail);
|
|
|
|
|
} else if (invCountOrderDetail.getStatus() == 1) {
|
|
|
|
|
//盈利,做入库单
|
|
|
|
|
inDetailList.add(invCountOrderDetail);
|
|
|
|
|
|
|
|
|
|
//根据盘点单据号,查询此盘点单的条码信息
|
|
|
|
|
FilterInvCountCodesRequest codesRequest = new FilterInvCountCodesRequest();
|
|
|
|
|
codesRequest.setOrderIdFk(invCountOrder.getOrderId());
|
|
|
|
|
List<InvCountCodes> codesList = invCountCodesDao.filterList(codesRequest);
|
|
|
|
|
List<String> countProductIds = codesList.stream().map(InvCountCodes::getProductId).collect(Collectors.toList());
|
|
|
|
|
|
|
|
|
|
//出入库单据条码
|
|
|
|
|
List<WarehouseEntity> inOrderCodes = new ArrayList<>();
|
|
|
|
|
List<WarehouseEntity> outOrderCodes = new ArrayList<>();
|
|
|
|
|
|
|
|
|
|
//查询库存详情表此产品的条码信息
|
|
|
|
|
for (String productId : countProductIds) {
|
|
|
|
|
FilterInvProductDetailRequest invProductDetailRequest = new FilterInvProductDetailRequest();
|
|
|
|
|
invProductDetailRequest.setProductIdFk(productId);
|
|
|
|
|
invProductDetailRequest.setInvStorageCode(invCountOrder.getInvStorageCode());
|
|
|
|
|
invProductDetailRequest.setInvWarehouseCode(invCountOrder.getInvWarehouseCode());
|
|
|
|
|
invProductDetailRequest.setInvSpaceCode(invCountOrder.getInvSpaceCode());
|
|
|
|
|
List<InvProductDetailEntity> invProductDetailEntities = invProductDetailDao.filterInvProductDetail(invProductDetailRequest);
|
|
|
|
|
if (CollUtil.isEmpty(invProductDetailEntities)) {
|
|
|
|
|
log.info("产品:" + productId + " 非当前仓库产品,添加到盘点入库单条码中");
|
|
|
|
|
//将此条码添加到入库单据条码中
|
|
|
|
|
codesList.forEach(invCountCodes -> {
|
|
|
|
|
if (invCountCodes.getProductId().equals(productId)) {
|
|
|
|
|
WarehouseEntity warehouseEntity = buildWarehouse(invCountOrder, invCountCodes.getCode(), invCountCodes.getProductId());
|
|
|
|
|
inOrderCodes.add(warehouseEntity);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
} else {
|
|
|
|
|
//库存中存在此产品,筛选出盘点中不存在的条码,添加到盘点出库条码中
|
|
|
|
|
List<String> countCodes = codesList.stream().map(InvCountCodes::getCode).collect(Collectors.toList());
|
|
|
|
|
invProductDetailEntities.forEach(invProductDetailEntity -> {
|
|
|
|
|
if (!countCodes.contains(invProductDetailEntity.getOriginCode())) {
|
|
|
|
|
WarehouseEntity warehouseEntity = buildWarehouse(invCountOrder, invProductDetailEntity.getCode(), invProductDetailEntity.getProductIdFk());
|
|
|
|
|
outOrderCodes.add(warehouseEntity);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
InvCountSettingEntity invCountSettingEntity = list.get(0);
|
|
|
|
|
|
|
|
|
|
if (CollUtil.isNotEmpty(inDetailList)) {
|
|
|
|
|
log.info("盘点单据:" + invCountOrder.getOrderId() + " 转入库单开始");
|
|
|
|
|
//查询盘点入库单据类型
|
|
|
|
|
OrderEntity orderEntity = createOrder(invCountSettingEntity, invCountOrder, ConstantType.TYPE_PUT);
|
|
|
|
|
if (CollUtil.isNotEmpty(inOrderCodes)) {
|
|
|
|
|
log.info("盘点单据:{} 生成盘盈入库单据", invCountOrder.getOrderId());
|
|
|
|
|
OrderEntity order = createOrder(invCountSettingEntity, invCountOrder, ConstantType.TYPE_PUT);
|
|
|
|
|
log.info("盘盈入库单据号:{}", order.getId());
|
|
|
|
|
inOrderCodes.forEach(warehouseEntity -> {
|
|
|
|
|
warehouseEntity.setOrderId(order.getId());
|
|
|
|
|
warehouseEntity.setAction(order.getAction());
|
|
|
|
|
warehouseEntity.setFromCorp(order.getFromCorp());
|
|
|
|
|
warehouseEntity.setFromCorpId(order.getFromCorpId());
|
|
|
|
|
warehouseEntity.setCorpOrderId(order.getCorpOrderId());
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
//查找盘点码中标记为多的码
|
|
|
|
|
FilterInvCountCodesRequest codesRequest = new FilterInvCountCodesRequest();
|
|
|
|
|
codesRequest.setOrderIdFk(invCountOrder.getOrderId());
|
|
|
|
|
codesRequest.setStatus(1);
|
|
|
|
|
List<InvCountCodes> codesList = invCountCodesDao.filterList(codesRequest);
|
|
|
|
|
List<WarehouseEntity> warehouseEntities = new ArrayList<>(codesList.size());
|
|
|
|
|
codesList.forEach(invCountCodes -> {
|
|
|
|
|
orderDao.insertOrder(order);
|
|
|
|
|
codesTempDao.insertCodesTemp(inOrderCodes);
|
|
|
|
|
log.info("盘盈入库单据生成成功");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (CollUtil.isNotEmpty(outOrderCodes)) {
|
|
|
|
|
log.info("盘点单据:{} 生成盘亏入库单据", invCountOrder.getOrderId());
|
|
|
|
|
OrderEntity order = createOrder(invCountSettingEntity, invCountOrder, ConstantType.TYPE_OUT);
|
|
|
|
|
log.info("盘盈入库单据号:{}", order.getId());
|
|
|
|
|
inOrderCodes.forEach(warehouseEntity -> {
|
|
|
|
|
warehouseEntity.setOrderId(order.getId());
|
|
|
|
|
warehouseEntity.setAction(order.getAction());
|
|
|
|
|
warehouseEntity.setFromCorp(order.getFromCorp());
|
|
|
|
|
warehouseEntity.setFromCorpId(order.getFromCorpId());
|
|
|
|
|
warehouseEntity.setCorpOrderId(order.getCorpOrderId());
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
orderDao.insertOrder(order);
|
|
|
|
|
codesTempDao.insertCodesTemp(inOrderCodes);
|
|
|
|
|
log.info("盘亏入库单据生成成功");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//更新盘点单据生成的扫码单据号
|
|
|
|
|
invCountOrderDao.updateByOrderId(invCountOrder);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static WarehouseEntity buildWarehouse(InvCountOrder invCountOrder, String code, String productId) {
|
|
|
|
|
WarehouseEntity warehouseEntity = new WarehouseEntity();
|
|
|
|
|
warehouseEntity.setCode(invCountCodes.getCode());
|
|
|
|
|
warehouseEntity.setRelId(invCountCodes.getProductId());
|
|
|
|
|
warehouseEntity.setAction(invCountSettingEntity.getInAction());
|
|
|
|
|
warehouseEntity.setCode(code);
|
|
|
|
|
warehouseEntity.setRelId(productId);
|
|
|
|
|
warehouseEntity.setMainAction(ConstantType.TYPE_PUT);
|
|
|
|
|
warehouseEntity.setActor(invCountOrder.getCreateUser());
|
|
|
|
|
warehouseEntity.setOrderId(orderEntity.getId());
|
|
|
|
|
warehouseEntity.setInvStorageCode(invCountOrder.getInvStorageCode());
|
|
|
|
|
warehouseEntity.setInvWarehouseCode(invCountOrder.getInvWarehouseCode());
|
|
|
|
|
warehouseEntity.setLocStorageCode(invCountOrder.getInvStorageCode());
|
|
|
|
|
warehouseEntity.setFromCorp(orderEntity.getFromCorp());
|
|
|
|
|
warehouseEntity.setFromCorpId(orderEntity.getFromCorpId());
|
|
|
|
|
warehouseEntity.setCorpOrderId(orderEntity.getCorpOrderId());
|
|
|
|
|
|
|
|
|
|
UdiEntity udi = FilterUdiUtils.getUdi(invCountCodes.getCode());
|
|
|
|
|
UdiEntity udi = FilterUdiUtils.getUdi(code);
|
|
|
|
|
warehouseEntity.setBatchNo(udi.getBatchNo());
|
|
|
|
|
warehouseEntity.setProduceDate(udi.getProduceDate());
|
|
|
|
|
warehouseEntity.setExpireDate(udi.getExpireDate());
|
|
|
|
@ -249,22 +296,7 @@ public class InvCountOrderServiceImpl implements InvCountOrderService {
|
|
|
|
|
warehouseEntity.setNameCode(udi.getUdi());
|
|
|
|
|
warehouseEntity.setCount(1);
|
|
|
|
|
warehouseEntity.setReCount(1);
|
|
|
|
|
|
|
|
|
|
warehouseEntities.add(warehouseEntity);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
orderDao.insertOrder(orderEntity);
|
|
|
|
|
codesTempDao.insertCodesTemp(warehouseEntities);
|
|
|
|
|
|
|
|
|
|
log.info("盘点单据转入库单完成,单号为:" + orderEntity.getId());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (CollUtil.isNotEmpty(outDetailList)) {
|
|
|
|
|
log.info("盘点单据:" + invCountOrder.getOrderId() + " 转出库单开始");
|
|
|
|
|
//查询盘点入库单据类型
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return warehouseEntity;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|