|
|
|
@ -22,10 +22,7 @@ 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.*;
|
|
|
|
|
import com.glxp.api.admin.req.inventory.FilterInvCountCodesRequest;
|
|
|
|
|
import com.glxp.api.admin.req.inventory.FilterInvCountOrderRequest;
|
|
|
|
|
import com.glxp.api.admin.req.inventory.FilterInvCountOrderSaveRequest;
|
|
|
|
|
import com.glxp.api.admin.req.inventory.FilterInvProductDetailRequest;
|
|
|
|
|
import com.glxp.api.admin.req.inventory.*;
|
|
|
|
|
import com.glxp.api.admin.res.inventory.InvCountOrderResponse;
|
|
|
|
|
import com.glxp.api.admin.service.auth.CustomerService;
|
|
|
|
|
import com.glxp.api.admin.service.inventory.InvCountCodesService;
|
|
|
|
@ -110,12 +107,14 @@ public class InvCountOrderServiceImpl implements InvCountOrderService {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//封装相关数据
|
|
|
|
|
invCountOrder.setStatus(0); //未提交
|
|
|
|
|
//未提交
|
|
|
|
|
invCountOrder.setStatus(0);
|
|
|
|
|
|
|
|
|
|
if (StrUtil.isBlank(invCountOrder.getOrderId())) {
|
|
|
|
|
//生成单据号
|
|
|
|
|
String orderId = gennerOrderUtils.createStOrderNo(new OrderNoTypeBean(Constant.COUNT_ORDER, "yyyyMMdd"));
|
|
|
|
|
invCountOrder.setOrderId(orderId); //盘点单号
|
|
|
|
|
//盘点单号
|
|
|
|
|
invCountOrder.setOrderId(orderId);
|
|
|
|
|
AuthAdmin user = customerService.getUserBean();
|
|
|
|
|
invCountOrder.setCreateUser(user.getUserName());
|
|
|
|
|
invCountOrder.setCreateTime(DateUtil.date().toString(DatePattern.NORM_DATETIME_PATTERN));
|
|
|
|
@ -158,12 +157,15 @@ public class InvCountOrderServiceImpl implements InvCountOrderService {
|
|
|
|
|
int diff = invCountOrderDetail.getInvNum() - invCountOrderDetail.getCountNum();
|
|
|
|
|
if (diff > 0) {
|
|
|
|
|
invCountOrderDetail.setLossNum(Math.abs(diff));
|
|
|
|
|
invCountOrderDetail.setStatus(0); //盘亏
|
|
|
|
|
//盘亏
|
|
|
|
|
invCountOrderDetail.setStatus(0);
|
|
|
|
|
} else if (diff < 0) {
|
|
|
|
|
invCountOrderDetail.setProfitNum(Math.abs(diff));
|
|
|
|
|
invCountOrderDetail.setStatus(1); //盘盈
|
|
|
|
|
//盘盈
|
|
|
|
|
invCountOrderDetail.setStatus(1);
|
|
|
|
|
} else {
|
|
|
|
|
invCountOrderDetail.setStatus(2); //平
|
|
|
|
|
//平衡
|
|
|
|
|
invCountOrderDetail.setStatus(2);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//查询此产品的条码列表,判断此产品在库存中是多还是少
|
|
|
|
@ -244,56 +246,68 @@ public class InvCountOrderServiceImpl implements InvCountOrderService {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//根据盘点单据号,查询此盘点单的条码信息
|
|
|
|
|
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) {
|
|
|
|
|
FilterInvCountOrderDetailRequest detailRequest = new FilterInvCountOrderDetailRequest();
|
|
|
|
|
detailRequest.setOrderIdFk(invCountOrder.getOrderId());
|
|
|
|
|
//查询亏损单据详情
|
|
|
|
|
detailRequest.setStatus(0);
|
|
|
|
|
List<InvCountOrderDetail> detailList = invCountOrderDetailDao.selectDetailList(detailRequest);
|
|
|
|
|
if (CollUtil.isNotEmpty(detailList)) {
|
|
|
|
|
log.info("开始生成盘亏单据码明细");
|
|
|
|
|
log.info("查询盘亏产品码详情");
|
|
|
|
|
FilterInvProductDetailRequest invProductDetailRequest = new FilterInvProductDetailRequest();
|
|
|
|
|
invProductDetailRequest.setProductIdFk(productId);
|
|
|
|
|
invProductDetailRequest.setInvStorageCode(invCountOrder.getInvStorageCode());
|
|
|
|
|
invProductDetailRequest.setInvWarehouseCode(invCountOrder.getInvWarehouseCode());
|
|
|
|
|
|
|
|
|
|
if (invCountOrder.getCountType() == 1) {
|
|
|
|
|
//按照货位盘点,查询库存详情添加货位条件
|
|
|
|
|
invProductDetailRequest.setInvSpaceCode(invCountOrder.getInvSpaceCode());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for (InvCountOrderDetail invCountOrderDetail : detailList) {
|
|
|
|
|
//查询库存详情
|
|
|
|
|
invProductDetailRequest.setProductIdFk(invCountOrderDetail.getProductId());
|
|
|
|
|
invProductDetailRequest.setBatchNo(invCountOrderDetail.getBatchNo());
|
|
|
|
|
//库存早于或等于盘点时间的库存数据,锁库存
|
|
|
|
|
invProductDetailRequest.setUpdateTime(invCountOrder.getCreateTime());
|
|
|
|
|
List<InvProductDetailEntity> invProductDetailEntities = invProductDetailDao.filterInvProductDetail(invProductDetailRequest);
|
|
|
|
|
if (CollUtil.isEmpty(invProductDetailEntities)) {
|
|
|
|
|
log.info("产品:" + productId + " 非当前仓库产品,添加到盘点入库单条码中");
|
|
|
|
|
//将此条码添加到入库单据条码中
|
|
|
|
|
codesList.forEach(invCountCodes -> {
|
|
|
|
|
if (invCountCodes.getProductId().equals(productId) && !verifyCodeExist(outOrderCodes, invCountCodes.getCode())) {
|
|
|
|
|
WarehouseEntity warehouseEntity = buildWarehouse(invCountOrder, invCountCodes.getCode(), invCountCodes.getProductId());
|
|
|
|
|
int count = invCountCodesService.getActCount(warehouseEntity.getNameCode());
|
|
|
|
|
warehouseEntity.setCount(count);
|
|
|
|
|
warehouseEntity.setReCount(count);
|
|
|
|
|
inOrderCodes.add(warehouseEntity);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
} else {
|
|
|
|
|
//库存中存在此产品,筛选出盘点中不存在的条码,添加到盘点出库条码中
|
|
|
|
|
List<String> countCodes = codesList.stream().map(InvCountCodes::getCode).collect(Collectors.toList());
|
|
|
|
|
invProductDetailEntities.forEach(invProductDetailEntity -> {
|
|
|
|
|
if (!countCodes.contains(invProductDetailEntity.getOriginCode()) && !verifyCodeExist(outOrderCodes, invProductDetailEntity.getCode())) {
|
|
|
|
|
//查询盘点码明细
|
|
|
|
|
FilterInvCountCodesRequest codesRequest = new FilterInvCountCodesRequest();
|
|
|
|
|
codesRequest.setOrderIdFk(invCountOrder.getOrderId());
|
|
|
|
|
codesRequest.setProductId(invCountOrderDetail.getProductId());
|
|
|
|
|
codesRequest.setBatchNo(invCountOrderDetail.getBatchNo());
|
|
|
|
|
List<String> countCodesList = invCountCodesDao.selectCodes(codesRequest);
|
|
|
|
|
for (InvProductDetailEntity invProductDetailEntity : invProductDetailEntities) {
|
|
|
|
|
if (!countCodesList.contains(invProductDetailEntity.getOriginCode()) && !verifyCodeExist(outOrderCodes, invProductDetailEntity.getCode())) {
|
|
|
|
|
WarehouseEntity warehouseEntity = buildWarehouse(invCountOrder, invProductDetailEntity.getCode(), invProductDetailEntity.getProductIdFk());
|
|
|
|
|
int count = invCountCodesService.getActCount(warehouseEntity.getNameCode());
|
|
|
|
|
warehouseEntity.setCount(count);
|
|
|
|
|
warehouseEntity.setReCount(count);
|
|
|
|
|
outOrderCodes.add(warehouseEntity);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
log.info("盘亏单据码明细生成完毕");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//查询盘盈的条码明细
|
|
|
|
|
FilterInvCountCodesRequest codesRequest = new FilterInvCountCodesRequest();
|
|
|
|
|
codesRequest.setOrderIdFk(invCountOrder.getOrderId());
|
|
|
|
|
//码状态标记为多码的数据
|
|
|
|
|
codesRequest.setStatus(1);
|
|
|
|
|
List<InvCountCodes> invCountCodesList = invCountCodesDao.filterList(codesRequest);
|
|
|
|
|
if (CollUtil.isNotEmpty(invCountCodesList)) {
|
|
|
|
|
log.info("开始生成盘盈单据码明细");
|
|
|
|
|
for (InvCountCodes invCountCodes : invCountCodesList) {
|
|
|
|
|
if (!verifyCodeExist(inOrderCodes, invCountCodes.getCode())) {
|
|
|
|
|
WarehouseEntity warehouseEntity = buildWarehouse(invCountOrder, invCountCodes.getCode(), invCountCodes.getProductId());
|
|
|
|
|
inOrderCodes.add(warehouseEntity);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
log.info("盘盈单据码明细生成完毕");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
InvCountSettingEntity invCountSettingEntity = list.get(0);
|
|
|
|
|
|
|
|
|
|
if (CollUtil.isNotEmpty(inOrderCodes)) {
|
|
|
|
@ -369,6 +383,8 @@ public class InvCountOrderServiceImpl implements InvCountOrderService {
|
|
|
|
|
warehouseEntity.setExpireDate(udi.getExpireDate());
|
|
|
|
|
warehouseEntity.setSerialNo(udi.getSerialNo());
|
|
|
|
|
warehouseEntity.setNameCode(udi.getUdi());
|
|
|
|
|
warehouseEntity.setCount(1);
|
|
|
|
|
warehouseEntity.setReCount(1);
|
|
|
|
|
return warehouseEntity;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|