|
|
|
@ -30,7 +30,6 @@ import com.glxp.api.res.basic.UdiRelevanceResponse;
|
|
|
|
|
import com.glxp.api.res.inv.InvCountOrderResponse;
|
|
|
|
|
import com.glxp.api.service.auth.CustomerService;
|
|
|
|
|
import com.glxp.api.service.basic.IBasicBussinessTypeService;
|
|
|
|
|
import com.glxp.api.service.basic.UdiRelevanceService;
|
|
|
|
|
import com.glxp.api.service.inout.IoAddInoutService;
|
|
|
|
|
import com.glxp.api.service.inout.IoCheckInoutService;
|
|
|
|
|
import com.glxp.api.service.inout.IoOrderService;
|
|
|
|
@ -66,7 +65,7 @@ public class InvCountOrderService extends ServiceImpl<InvCountOrderMapper, InvCo
|
|
|
|
|
@Resource
|
|
|
|
|
private CustomerService customerService;
|
|
|
|
|
@Resource
|
|
|
|
|
private InvProductDetailDao invProductDetailDao;
|
|
|
|
|
private InvProductNewDao invProductNewDao;
|
|
|
|
|
@Resource
|
|
|
|
|
private InvCountSettingMapper invCountSettingDao;
|
|
|
|
|
@Resource
|
|
|
|
@ -254,227 +253,227 @@ public class InvCountOrderService extends ServiceImpl<InvCountOrderMapper, InvCo
|
|
|
|
|
return submitAudit(invCountOrder.getOrderId());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 盘点单据转扫码单
|
|
|
|
|
*/
|
|
|
|
|
private void countOrderTransfer(InvCountOrderEntity invCountOrder) {
|
|
|
|
|
List<InvCountSettingEntity> list = invCountSettingDao.selectList(null);
|
|
|
|
|
if (CollUtil.isEmpty(list)) {
|
|
|
|
|
log.error("未配置盘点单据设置参数,无法转单");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//出入库码明细列表
|
|
|
|
|
List<IoCodeTempEntity> inOrderCodes = new ArrayList<>();
|
|
|
|
|
List<IoCodeTempEntity> outOrderCodes = new ArrayList<>();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 生成盘盈和盘亏单据逻辑
|
|
|
|
|
* 盘盈单据:1、找出盘点单据码详情比库存码详情多的产品
|
|
|
|
|
* 2、判断条码是否包含批次号和序列号,如果不包含,根据 盘盈数量 / 实际数量 = 多出的条码数量 ,计算出盘盈单据此条码的扫码数量
|
|
|
|
|
* 3、生成条码,保存单据
|
|
|
|
|
*
|
|
|
|
|
* 盘亏单据:1、找出库存有,而盘点不存在的条码
|
|
|
|
|
* 2、判断此库存详情是否包含批次号,如果不包含,盘亏数量 / 实际数量 = 少的条码数量,计算出盘亏单据扫码数量
|
|
|
|
|
* 3、生成条码,保存单据
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
//构造库存详情查询参数
|
|
|
|
|
FilterInvProductDetailRequest invProductDetailRequest = new FilterInvProductDetailRequest();
|
|
|
|
|
invProductDetailRequest.setInvCode(invCountOrder.getInvStorageCode());
|
|
|
|
|
invProductDetailRequest.setInvSpaceCode(invCountOrder.getInvWarehouseCode());
|
|
|
|
|
//库存早于或等于盘点时间的库存数据,锁库存
|
|
|
|
|
invProductDetailRequest.setUpdateTime(invCountOrder.getCreateTime());
|
|
|
|
|
|
|
|
|
|
if (invCountOrder.getCountType() == 1) {
|
|
|
|
|
//按照货位盘点,查询库存详情添加货位条件
|
|
|
|
|
invProductDetailRequest.setInvSpaceCode(invCountOrder.getInvWarehouseCode());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
FilterInvCountOrderDetailRequest detailRequest = new FilterInvCountOrderDetailRequest();
|
|
|
|
|
detailRequest.setOrderIdFk(invCountOrder.getOrderId());
|
|
|
|
|
//查询亏损单据详情
|
|
|
|
|
detailRequest.setStatus(0);
|
|
|
|
|
List<InvCountOrderDetailEntity> lossDetailList = invCountOrderDetailDao.selectDetailList(detailRequest);
|
|
|
|
|
if (CollUtil.isNotEmpty(lossDetailList)) {
|
|
|
|
|
log.info("开始生成盘亏单据码明细");
|
|
|
|
|
log.info("查询盘亏产品码详情");
|
|
|
|
|
|
|
|
|
|
for (InvCountOrderDetailEntity invCountOrderDetail : lossDetailList) {
|
|
|
|
|
//查询库存详情
|
|
|
|
|
invProductDetailRequest.setRelId(invCountOrderDetail.getProductId());
|
|
|
|
|
invProductDetailRequest.setBatchNo(invCountOrderDetail.getBatchNo());
|
|
|
|
|
List<InvProductDetailEntity> invProductDetailEntities = invProductDetailDao.filterInvProductDetailList(invProductDetailRequest);
|
|
|
|
|
//查询盘点码明细
|
|
|
|
|
FilterInvCountCodesRequest codesRequest = new FilterInvCountCodesRequest();
|
|
|
|
|
codesRequest.setOrderIdFk(invCountOrder.getOrderId());
|
|
|
|
|
codesRequest.setProductId(invCountOrderDetail.getProductId());
|
|
|
|
|
codesRequest.setBatchNo(invCountOrderDetail.getBatchNo());
|
|
|
|
|
List<String> countCodesList = invCountCodesDao.selectCodes(codesRequest);
|
|
|
|
|
List<String> invProductCodes = invProductDetailEntities.stream().map(InvProductDetailEntity::getCode).collect(Collectors.toList());
|
|
|
|
|
List<String> lossCodes = CollUtil.subtractToList(invProductCodes, countCodesList);
|
|
|
|
|
if (CollUtil.isNotEmpty(countCodesList) && CollUtil.isEmpty(lossCodes)) {
|
|
|
|
|
//盘点的码不为空,但是盘点数量和库存数量不一样,比对差集结果为空,说明是同一个条码,数量不同,直接根据盘亏数量计算生成一个扫码单据的码明细
|
|
|
|
|
//生成码详情
|
|
|
|
|
IoCodeTempEntity warehouseEntity = buildWarehouse(invCountOrder, invProductDetailEntities.get(0).getCode(), invProductDetailEntities.get(0).getRelId());
|
|
|
|
|
//判断此条码,是否有批次号和序列号
|
|
|
|
|
UdiEntity udi = FilterUdiUtils.getUdi(invProductDetailEntities.get(0).getCode());
|
|
|
|
|
//修改码数量
|
|
|
|
|
int actCount = invCountCodesService.getActCount(udi.getUdi());
|
|
|
|
|
//使用此盘点单据详情的盘亏数量 / 实际数量,计算得出扫码数量
|
|
|
|
|
int codeNum = invCountOrderDetail.getLossNum() / actCount;
|
|
|
|
|
warehouseEntity.setCount(codeNum);
|
|
|
|
|
warehouseEntity.setReCount(codeNum);
|
|
|
|
|
|
|
|
|
|
//设置供应商信息
|
|
|
|
|
setSupInfo(warehouseEntity, "loss");
|
|
|
|
|
outOrderCodes.add(warehouseEntity);
|
|
|
|
|
} else {
|
|
|
|
|
for (InvProductDetailEntity invProductDetailEntity : invProductDetailEntities) {
|
|
|
|
|
if (!countCodesList.contains(invProductDetailEntity.getCode()) && !verifyCodeExist(outOrderCodes, invProductDetailEntity.getCode())) {
|
|
|
|
|
//生成码详情
|
|
|
|
|
IoCodeTempEntity warehouseEntity = buildWarehouse(invCountOrder, invProductDetailEntity.getCode(), invProductDetailEntity.getRelId());
|
|
|
|
|
//判断此条码,是否有批次号和序列号
|
|
|
|
|
UdiEntity udi = FilterUdiUtils.getUdi(invProductDetailEntity.getCode());
|
|
|
|
|
if ((StrUtil.isBlank(udi.getBatchNo()) && StrUtil.isBlank(udi.getSerialNo())) || (StrUtil.isBlank(udi.getSerialNo()) && StrUtil.isNotBlank(udi.getBatchNo()))) {
|
|
|
|
|
//修改码数量
|
|
|
|
|
int actCount = invCountCodesService.getActCount(udi.getUdi());
|
|
|
|
|
//使用此盘点单据详情的盘亏数量 / 实际数量,计算得出扫码数量
|
|
|
|
|
int codeNum = invCountOrderDetail.getLossNum() / actCount;
|
|
|
|
|
warehouseEntity.setCount(codeNum);
|
|
|
|
|
warehouseEntity.setReCount(codeNum);
|
|
|
|
|
} else {
|
|
|
|
|
//修改实际数量
|
|
|
|
|
int actCount = invCountCodesService.getActCount(udi.getUdi());
|
|
|
|
|
warehouseEntity.setCount(actCount);
|
|
|
|
|
warehouseEntity.setReCount(actCount);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//设置供应商信息
|
|
|
|
|
setSupInfo(warehouseEntity, "loss");
|
|
|
|
|
outOrderCodes.add(warehouseEntity);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
log.info("盘亏单据码明细生成完毕");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//生成盘盈单据的条码
|
|
|
|
|
//查询盘盈的单据详情
|
|
|
|
|
detailRequest.setStatus(1);
|
|
|
|
|
List<InvCountOrderDetailEntity> profitDetailList = invCountOrderDetailDao.selectDetailList(detailRequest);
|
|
|
|
|
if (CollUtil.isNotEmpty(profitDetailList)) {
|
|
|
|
|
log.info("开始生成盘盈单据码.明细");
|
|
|
|
|
//查询盘盈产品的库存详情
|
|
|
|
|
for (InvCountOrderDetailEntity invCountOrderDetail : profitDetailList) {
|
|
|
|
|
//查询库存详情
|
|
|
|
|
invProductDetailRequest.setRelId(invCountOrderDetail.getProductId());
|
|
|
|
|
invProductDetailRequest.setBatchNo(invCountOrderDetail.getBatchNo());
|
|
|
|
|
List<InvProductDetailEntity> invProductDetailEntities = invProductDetailDao.filterInvProductDetailList(invProductDetailRequest);
|
|
|
|
|
//查询盘点码明细
|
|
|
|
|
FilterInvCountCodesRequest codesRequest = new FilterInvCountCodesRequest();
|
|
|
|
|
codesRequest.setOrderIdFk(invCountOrder.getOrderId());
|
|
|
|
|
codesRequest.setProductId(invCountOrderDetail.getProductId());
|
|
|
|
|
codesRequest.setBatchNo(invCountOrderDetail.getBatchNo());
|
|
|
|
|
List<String> countCodesList = invCountCodesDao.selectCodes(codesRequest);
|
|
|
|
|
List<String> invProductCodeList = invProductDetailEntities.stream().map(InvProductDetailEntity::getCode).collect(Collectors.toList());
|
|
|
|
|
List<String> profitCodes = CollUtil.subtractToList(countCodesList, invProductCodeList); //计算盘盈的条码
|
|
|
|
|
log.info("查询盘盈产品的库存详情");
|
|
|
|
|
if (CollUtil.isNotEmpty(invProductCodeList) && CollUtil.isEmpty(profitCodes)) {
|
|
|
|
|
/**
|
|
|
|
|
* 盘点条码不为空,且库存条码也不为空,但是计算的条码差集为空
|
|
|
|
|
* 说明盘点的条码和库存的条码是相同的条码,直接根据盘盈数量计算出扫码数量,生成一个条码即可
|
|
|
|
|
*/
|
|
|
|
|
String code = null;
|
|
|
|
|
if (CollUtil.isNotEmpty(countCodesList)) {
|
|
|
|
|
code = countCodesList.get(0);
|
|
|
|
|
} else {
|
|
|
|
|
code = invProductCodeList.get(0);
|
|
|
|
|
}
|
|
|
|
|
IoCodeTempEntity warehouseEntity = buildWarehouse(invCountOrder, code, Long.parseLong(invCountOrderDetail.getProductId()));
|
|
|
|
|
//判断此条码,是否有批次号和序列号
|
|
|
|
|
UdiEntity udi = FilterUdiUtils.getUdi(code);
|
|
|
|
|
//修改码数量
|
|
|
|
|
int actCount = invCountCodesService.getActCount(udi.getUdi());
|
|
|
|
|
//使用此盘点单据详情的盘盈数量 / 实际数量,计算得出扫码数量
|
|
|
|
|
int codeNum = invCountOrderDetail.getProfitNum() / actCount;
|
|
|
|
|
warehouseEntity.setCount(codeNum);
|
|
|
|
|
warehouseEntity.setReCount(codeNum);
|
|
|
|
|
setSupInfo(warehouseEntity, "profit");
|
|
|
|
|
inOrderCodes.add(warehouseEntity);
|
|
|
|
|
log.info("添加库存条码");
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
|
|
for (String code : profitCodes) {
|
|
|
|
|
log.info("添加盘盈入库条码");
|
|
|
|
|
if (!verifyCodeExist(inOrderCodes, code)) {
|
|
|
|
|
//生成码详情
|
|
|
|
|
IoCodeTempEntity warehouseEntity = buildWarehouse(invCountOrder, code, Long.parseLong(invCountOrderDetail.getProductId()));
|
|
|
|
|
//判断此条码,是否有批次号和序列号
|
|
|
|
|
UdiEntity udi = FilterUdiUtils.getUdi(code);
|
|
|
|
|
if ((StrUtil.isBlank(udi.getBatchNo()) && StrUtil.isBlank(udi.getSerialNo())) || (StrUtil.isBlank(udi.getSerialNo()) && StrUtil.isNotBlank(udi.getBatchNo()))) {
|
|
|
|
|
//修改码数量
|
|
|
|
|
int actCount = invCountCodesService.getActCount(udi.getUdi());
|
|
|
|
|
//使用此盘点单据详情的盘盈数量 / 实际数量,计算得出扫码数量
|
|
|
|
|
int codeNum = invCountOrderDetail.getProfitNum() / actCount;
|
|
|
|
|
warehouseEntity.setCount(codeNum);
|
|
|
|
|
warehouseEntity.setReCount(codeNum);
|
|
|
|
|
} else {
|
|
|
|
|
//修改实际数量
|
|
|
|
|
int actCount = invCountCodesService.getActCount(udi.getUdi());
|
|
|
|
|
warehouseEntity.setCount(actCount);
|
|
|
|
|
warehouseEntity.setReCount(actCount);
|
|
|
|
|
}
|
|
|
|
|
setSupInfo(warehouseEntity, "profit");
|
|
|
|
|
inOrderCodes.add(warehouseEntity);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
log.info("盘盈单据码详情生成完毕");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
InvCountSettingEntity invCountSettingEntity = list.get(0);
|
|
|
|
|
|
|
|
|
|
if (CollUtil.isNotEmpty(inOrderCodes)) {
|
|
|
|
|
log.info("盘点单据:{} 生成盘盈入库单据", invCountOrder.getOrderId());
|
|
|
|
|
IoOrderEntity order = createOrder(invCountSettingEntity, invCountOrder, ConstantType.TYPE_PUT);
|
|
|
|
|
log.info("盘盈入库单据号:{}", order.getBillNo());
|
|
|
|
|
inOrderCodes.forEach(warehouseEntity -> {
|
|
|
|
|
warehouseEntity.setOrderId(order.getBillNo());
|
|
|
|
|
warehouseEntity.setAction(order.getAction());
|
|
|
|
|
warehouseEntity.setCorpOrderId(order.getCorpOrderId());
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
invCountOrder.setInOrderIds(order.getBillNo());
|
|
|
|
|
orderService.insertOrder(order);
|
|
|
|
|
codesTempDao.insertBatch(inOrderCodes);
|
|
|
|
|
log.info("盘盈入库单据生成成功");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (CollUtil.isNotEmpty(outOrderCodes)) {
|
|
|
|
|
log.info("盘点单据:{} 生成盘亏入库单据", invCountOrder.getOrderId());
|
|
|
|
|
IoOrderEntity order = createOrder(invCountSettingEntity, invCountOrder, ConstantType.TYPE_OUT);
|
|
|
|
|
log.info("盘亏入库单据号:{}", order.getBillNo());
|
|
|
|
|
outOrderCodes.forEach(warehouseEntity -> {
|
|
|
|
|
warehouseEntity.setOrderId(order.getBillNo());
|
|
|
|
|
warehouseEntity.setAction(order.getAction());
|
|
|
|
|
warehouseEntity.setCorpOrderId(order.getCorpOrderId());
|
|
|
|
|
String supId = codesDao.selectSupIdByCode(warehouseEntity.getCode());
|
|
|
|
|
warehouseEntity.setSupId(supId);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
invCountOrder.setOutOrderIds(order.getBillNo());
|
|
|
|
|
orderService.insertOrder(order);
|
|
|
|
|
codesTempDao.insertBatch(outOrderCodes);
|
|
|
|
|
log.info("盘亏入库单据生成成功");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//更新盘点单据生成的扫码单据号
|
|
|
|
|
invCountOrderDao.updateByOrderId(invCountOrder);
|
|
|
|
|
}
|
|
|
|
|
// /**
|
|
|
|
|
// * 盘点单据转扫码单(20241017===没用到注释了)
|
|
|
|
|
// */
|
|
|
|
|
// private void countOrderTransfer(InvCountOrderEntity invCountOrder) {
|
|
|
|
|
// List<InvCountSettingEntity> list = invCountSettingDao.selectList(null);
|
|
|
|
|
// if (CollUtil.isEmpty(list)) {
|
|
|
|
|
// log.error("未配置盘点单据设置参数,无法转单");
|
|
|
|
|
// return;
|
|
|
|
|
// }
|
|
|
|
|
//
|
|
|
|
|
// //出入库码明细列表
|
|
|
|
|
// List<IoCodeTempEntity> inOrderCodes = new ArrayList<>();
|
|
|
|
|
// List<IoCodeTempEntity> outOrderCodes = new ArrayList<>();
|
|
|
|
|
//
|
|
|
|
|
//
|
|
|
|
|
// /**
|
|
|
|
|
// * 生成盘盈和盘亏单据逻辑
|
|
|
|
|
// * 盘盈单据:1、找出盘点单据码详情比库存码详情多的产品
|
|
|
|
|
// * 2、判断条码是否包含批次号和序列号,如果不包含,根据 盘盈数量 / 实际数量 = 多出的条码数量 ,计算出盘盈单据此条码的扫码数量
|
|
|
|
|
// * 3、生成条码,保存单据
|
|
|
|
|
// *
|
|
|
|
|
// * 盘亏单据:1、找出库存有,而盘点不存在的条码
|
|
|
|
|
// * 2、判断此库存详情是否包含批次号,如果不包含,盘亏数量 / 实际数量 = 少的条码数量,计算出盘亏单据扫码数量
|
|
|
|
|
// * 3、生成条码,保存单据
|
|
|
|
|
// */
|
|
|
|
|
//
|
|
|
|
|
// //构造库存详情查询参数
|
|
|
|
|
// FilterInvProductDetailRequest invProductDetailRequest = new FilterInvProductDetailRequest();
|
|
|
|
|
// invProductDetailRequest.setInvCode(invCountOrder.getInvStorageCode());
|
|
|
|
|
// invProductDetailRequest.setInvSpaceCode(invCountOrder.getInvWarehouseCode());
|
|
|
|
|
// //库存早于或等于盘点时间的库存数据,锁库存
|
|
|
|
|
// invProductDetailRequest.setUpdateTime(invCountOrder.getCreateTime());
|
|
|
|
|
//
|
|
|
|
|
// if (invCountOrder.getCountType() == 1) {
|
|
|
|
|
// //按照货位盘点,查询库存详情添加货位条件
|
|
|
|
|
// invProductDetailRequest.setInvSpaceCode(invCountOrder.getInvWarehouseCode());
|
|
|
|
|
// }
|
|
|
|
|
//
|
|
|
|
|
// FilterInvCountOrderDetailRequest detailRequest = new FilterInvCountOrderDetailRequest();
|
|
|
|
|
// detailRequest.setOrderIdFk(invCountOrder.getOrderId());
|
|
|
|
|
// //查询亏损单据详情
|
|
|
|
|
// detailRequest.setStatus(0);
|
|
|
|
|
// List<InvCountOrderDetailEntity> lossDetailList = invCountOrderDetailDao.selectDetailList(detailRequest);
|
|
|
|
|
// if (CollUtil.isNotEmpty(lossDetailList)) {
|
|
|
|
|
// log.info("开始生成盘亏单据码明细");
|
|
|
|
|
// log.info("查询盘亏产品码详情");
|
|
|
|
|
//
|
|
|
|
|
// for (InvCountOrderDetailEntity invCountOrderDetail : lossDetailList) {
|
|
|
|
|
// //查询库存详情
|
|
|
|
|
// invProductDetailRequest.setRelId(invCountOrderDetail.getProductId());
|
|
|
|
|
// invProductDetailRequest.setBatchNo(invCountOrderDetail.getBatchNo());
|
|
|
|
|
// List<InvProductNewVo> invProductDetailEntities = invProductNewDao.filterInvProductDetailList(invProductDetailRequest);
|
|
|
|
|
// //查询盘点码明细
|
|
|
|
|
// FilterInvCountCodesRequest codesRequest = new FilterInvCountCodesRequest();
|
|
|
|
|
// codesRequest.setOrderIdFk(invCountOrder.getOrderId());
|
|
|
|
|
// codesRequest.setProductId(invCountOrderDetail.getProductId());
|
|
|
|
|
// codesRequest.setBatchNo(invCountOrderDetail.getBatchNo());
|
|
|
|
|
// List<String> countCodesList = invCountCodesDao.selectCodes(codesRequest);
|
|
|
|
|
// List<String> invProductCodes = invProductDetailEntities.stream().map(InvProductNewVo::getCode).collect(Collectors.toList());
|
|
|
|
|
// List<String> lossCodes = CollUtil.subtractToList(invProductCodes, countCodesList);
|
|
|
|
|
// if (CollUtil.isNotEmpty(countCodesList) && CollUtil.isEmpty(lossCodes)) {
|
|
|
|
|
// //盘点的码不为空,但是盘点数量和库存数量不一样,比对差集结果为空,说明是同一个条码,数量不同,直接根据盘亏数量计算生成一个扫码单据的码明细
|
|
|
|
|
// //生成码详情
|
|
|
|
|
// IoCodeTempEntity warehouseEntity = buildWarehouse(invCountOrder, invProductDetailEntities.get(0).getCode(), invProductDetailEntities.get(0).getRelId());
|
|
|
|
|
// //判断此条码,是否有批次号和序列号
|
|
|
|
|
// UdiEntity udi = FilterUdiUtils.getUdi(invProductDetailEntities.get(0).getCode());
|
|
|
|
|
// //修改码数量
|
|
|
|
|
// int actCount = invCountCodesService.getActCount(udi.getUdi());
|
|
|
|
|
// //使用此盘点单据详情的盘亏数量 / 实际数量,计算得出扫码数量
|
|
|
|
|
// int codeNum = invCountOrderDetail.getLossNum() / actCount;
|
|
|
|
|
// warehouseEntity.setCount(codeNum);
|
|
|
|
|
// warehouseEntity.setReCount(codeNum);
|
|
|
|
|
//
|
|
|
|
|
// //设置供应商信息
|
|
|
|
|
// setSupInfo(warehouseEntity, "loss");
|
|
|
|
|
// outOrderCodes.add(warehouseEntity);
|
|
|
|
|
// } else {
|
|
|
|
|
// for (InvProductNewVo invProductDetailEntity : invProductDetailEntities) {
|
|
|
|
|
// if (!countCodesList.contains(invProductDetailEntity.getCode()) && !verifyCodeExist(outOrderCodes, invProductDetailEntity.getCode())) {
|
|
|
|
|
// //生成码详情
|
|
|
|
|
// IoCodeTempEntity warehouseEntity = buildWarehouse(invCountOrder, invProductDetailEntity.getCode(), invProductDetailEntity.getRelId());
|
|
|
|
|
// //判断此条码,是否有批次号和序列号
|
|
|
|
|
// UdiEntity udi = FilterUdiUtils.getUdi(invProductDetailEntity.getCode());
|
|
|
|
|
// if ((StrUtil.isBlank(udi.getBatchNo()) && StrUtil.isBlank(udi.getSerialNo())) || (StrUtil.isBlank(udi.getSerialNo()) && StrUtil.isNotBlank(udi.getBatchNo()))) {
|
|
|
|
|
// //修改码数量
|
|
|
|
|
// int actCount = invCountCodesService.getActCount(udi.getUdi());
|
|
|
|
|
// //使用此盘点单据详情的盘亏数量 / 实际数量,计算得出扫码数量
|
|
|
|
|
// int codeNum = invCountOrderDetail.getLossNum() / actCount;
|
|
|
|
|
// warehouseEntity.setCount(codeNum);
|
|
|
|
|
// warehouseEntity.setReCount(codeNum);
|
|
|
|
|
// } else {
|
|
|
|
|
// //修改实际数量
|
|
|
|
|
// int actCount = invCountCodesService.getActCount(udi.getUdi());
|
|
|
|
|
// warehouseEntity.setCount(actCount);
|
|
|
|
|
// warehouseEntity.setReCount(actCount);
|
|
|
|
|
// }
|
|
|
|
|
//
|
|
|
|
|
// //设置供应商信息
|
|
|
|
|
// setSupInfo(warehouseEntity, "loss");
|
|
|
|
|
// outOrderCodes.add(warehouseEntity);
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
// log.info("盘亏单据码明细生成完毕");
|
|
|
|
|
// }
|
|
|
|
|
//
|
|
|
|
|
// //生成盘盈单据的条码
|
|
|
|
|
// //查询盘盈的单据详情
|
|
|
|
|
// detailRequest.setStatus(1);
|
|
|
|
|
// List<InvCountOrderDetailEntity> profitDetailList = invCountOrderDetailDao.selectDetailList(detailRequest);
|
|
|
|
|
// if (CollUtil.isNotEmpty(profitDetailList)) {
|
|
|
|
|
// log.info("开始生成盘盈单据码.明细");
|
|
|
|
|
// //查询盘盈产品的库存详情
|
|
|
|
|
// for (InvCountOrderDetailEntity invCountOrderDetail : profitDetailList) {
|
|
|
|
|
// //查询库存详情
|
|
|
|
|
// invProductDetailRequest.setRelId(invCountOrderDetail.getProductId());
|
|
|
|
|
// invProductDetailRequest.setBatchNo(invCountOrderDetail.getBatchNo());
|
|
|
|
|
// List<InvProductNewVo> invProductDetailEntities = invProductNewDao.filterInvProductDetailList(invProductDetailRequest);
|
|
|
|
|
// //查询盘点码明细
|
|
|
|
|
// FilterInvCountCodesRequest codesRequest = new FilterInvCountCodesRequest();
|
|
|
|
|
// codesRequest.setOrderIdFk(invCountOrder.getOrderId());
|
|
|
|
|
// codesRequest.setProductId(invCountOrderDetail.getProductId());
|
|
|
|
|
// codesRequest.setBatchNo(invCountOrderDetail.getBatchNo());
|
|
|
|
|
// List<String> countCodesList = invCountCodesDao.selectCodes(codesRequest);
|
|
|
|
|
// List<String> invProductCodeList = invProductDetailEntities.stream().map(InvProductNewVo::getCode).collect(Collectors.toList());
|
|
|
|
|
// List<String> profitCodes = CollUtil.subtractToList(countCodesList, invProductCodeList); //计算盘盈的条码
|
|
|
|
|
// log.info("查询盘盈产品的库存详情");
|
|
|
|
|
// if (CollUtil.isNotEmpty(invProductCodeList) && CollUtil.isEmpty(profitCodes)) {
|
|
|
|
|
// /**
|
|
|
|
|
// * 盘点条码不为空,且库存条码也不为空,但是计算的条码差集为空
|
|
|
|
|
// * 说明盘点的条码和库存的条码是相同的条码,直接根据盘盈数量计算出扫码数量,生成一个条码即可
|
|
|
|
|
// */
|
|
|
|
|
// String code = null;
|
|
|
|
|
// if (CollUtil.isNotEmpty(countCodesList)) {
|
|
|
|
|
// code = countCodesList.get(0);
|
|
|
|
|
// } else {
|
|
|
|
|
// code = invProductCodeList.get(0);
|
|
|
|
|
// }
|
|
|
|
|
// IoCodeTempEntity warehouseEntity = buildWarehouse(invCountOrder, code, Long.parseLong(invCountOrderDetail.getProductId()));
|
|
|
|
|
// //判断此条码,是否有批次号和序列号
|
|
|
|
|
// UdiEntity udi = FilterUdiUtils.getUdi(code);
|
|
|
|
|
// //修改码数量
|
|
|
|
|
// int actCount = invCountCodesService.getActCount(udi.getUdi());
|
|
|
|
|
// //使用此盘点单据详情的盘盈数量 / 实际数量,计算得出扫码数量
|
|
|
|
|
// int codeNum = invCountOrderDetail.getProfitNum() / actCount;
|
|
|
|
|
// warehouseEntity.setCount(codeNum);
|
|
|
|
|
// warehouseEntity.setReCount(codeNum);
|
|
|
|
|
// setSupInfo(warehouseEntity, "profit");
|
|
|
|
|
// inOrderCodes.add(warehouseEntity);
|
|
|
|
|
// log.info("添加库存条码");
|
|
|
|
|
// } else {
|
|
|
|
|
//
|
|
|
|
|
// for (String code : profitCodes) {
|
|
|
|
|
// log.info("添加盘盈入库条码");
|
|
|
|
|
// if (!verifyCodeExist(inOrderCodes, code)) {
|
|
|
|
|
// //生成码详情
|
|
|
|
|
// IoCodeTempEntity warehouseEntity = buildWarehouse(invCountOrder, code, Long.parseLong(invCountOrderDetail.getProductId()));
|
|
|
|
|
// //判断此条码,是否有批次号和序列号
|
|
|
|
|
// UdiEntity udi = FilterUdiUtils.getUdi(code);
|
|
|
|
|
// if ((StrUtil.isBlank(udi.getBatchNo()) && StrUtil.isBlank(udi.getSerialNo())) || (StrUtil.isBlank(udi.getSerialNo()) && StrUtil.isNotBlank(udi.getBatchNo()))) {
|
|
|
|
|
// //修改码数量
|
|
|
|
|
// int actCount = invCountCodesService.getActCount(udi.getUdi());
|
|
|
|
|
// //使用此盘点单据详情的盘盈数量 / 实际数量,计算得出扫码数量
|
|
|
|
|
// int codeNum = invCountOrderDetail.getProfitNum() / actCount;
|
|
|
|
|
// warehouseEntity.setCount(codeNum);
|
|
|
|
|
// warehouseEntity.setReCount(codeNum);
|
|
|
|
|
// } else {
|
|
|
|
|
// //修改实际数量
|
|
|
|
|
// int actCount = invCountCodesService.getActCount(udi.getUdi());
|
|
|
|
|
// warehouseEntity.setCount(actCount);
|
|
|
|
|
// warehouseEntity.setReCount(actCount);
|
|
|
|
|
// }
|
|
|
|
|
// setSupInfo(warehouseEntity, "profit");
|
|
|
|
|
// inOrderCodes.add(warehouseEntity);
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
// log.info("盘盈单据码详情生成完毕");
|
|
|
|
|
// }
|
|
|
|
|
//
|
|
|
|
|
// InvCountSettingEntity invCountSettingEntity = list.get(0);
|
|
|
|
|
//
|
|
|
|
|
// if (CollUtil.isNotEmpty(inOrderCodes)) {
|
|
|
|
|
// log.info("盘点单据:{} 生成盘盈入库单据", invCountOrder.getOrderId());
|
|
|
|
|
// IoOrderEntity order = createOrder(invCountSettingEntity, invCountOrder, ConstantType.TYPE_PUT);
|
|
|
|
|
// log.info("盘盈入库单据号:{}", order.getBillNo());
|
|
|
|
|
// inOrderCodes.forEach(warehouseEntity -> {
|
|
|
|
|
// warehouseEntity.setOrderId(order.getBillNo());
|
|
|
|
|
// warehouseEntity.setAction(order.getAction());
|
|
|
|
|
// warehouseEntity.setCorpOrderId(order.getCorpOrderId());
|
|
|
|
|
// });
|
|
|
|
|
//
|
|
|
|
|
// invCountOrder.setInOrderIds(order.getBillNo());
|
|
|
|
|
// orderService.insertOrder(order);
|
|
|
|
|
// codesTempDao.insertBatch(inOrderCodes);
|
|
|
|
|
// log.info("盘盈入库单据生成成功");
|
|
|
|
|
// }
|
|
|
|
|
//
|
|
|
|
|
// if (CollUtil.isNotEmpty(outOrderCodes)) {
|
|
|
|
|
// log.info("盘点单据:{} 生成盘亏入库单据", invCountOrder.getOrderId());
|
|
|
|
|
// IoOrderEntity order = createOrder(invCountSettingEntity, invCountOrder, ConstantType.TYPE_OUT);
|
|
|
|
|
// log.info("盘亏入库单据号:{}", order.getBillNo());
|
|
|
|
|
// outOrderCodes.forEach(warehouseEntity -> {
|
|
|
|
|
// warehouseEntity.setOrderId(order.getBillNo());
|
|
|
|
|
// warehouseEntity.setAction(order.getAction());
|
|
|
|
|
// warehouseEntity.setCorpOrderId(order.getCorpOrderId());
|
|
|
|
|
// String supId = codesDao.selectSupIdByCode(warehouseEntity.getCode());
|
|
|
|
|
// warehouseEntity.setSupId(supId);
|
|
|
|
|
// });
|
|
|
|
|
//
|
|
|
|
|
// invCountOrder.setOutOrderIds(order.getBillNo());
|
|
|
|
|
// orderService.insertOrder(order);
|
|
|
|
|
// codesTempDao.insertBatch(outOrderCodes);
|
|
|
|
|
// log.info("盘亏入库单据生成成功");
|
|
|
|
|
// }
|
|
|
|
|
//
|
|
|
|
|
// //更新盘点单据生成的扫码单据号
|
|
|
|
|
// invCountOrderDao.updateByOrderId(invCountOrder);
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
@ -579,39 +578,39 @@ public class InvCountOrderService extends ServiceImpl<InvCountOrderMapper, InvCo
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 对条码添加供应商信息
|
|
|
|
|
* 对条码添加供应商信息((20241017===没用到注释了))
|
|
|
|
|
*
|
|
|
|
|
* @param warehouseEntity 码明细
|
|
|
|
|
* @param countStatus 盈亏状态
|
|
|
|
|
*/
|
|
|
|
|
private void setSupInfo(IoCodeTempEntity warehouseEntity, String countStatus) {
|
|
|
|
|
/**
|
|
|
|
|
* 根据此码明细的盈亏状态,使用不同的逻辑生成供应商信息
|
|
|
|
|
* 盘盈:此条码不存在于库存详情中,需要从供应商产品信息表查询供应商信息
|
|
|
|
|
* 盘亏:此条码在库存中存在,但是盘点中没有此条码,直接查询库存详情表中的供应商ID
|
|
|
|
|
*
|
|
|
|
|
* 若查询出的供应商信息多余1条,则表明此产品被多个供应商绑定,在此处不进行绑定,单据生成之后会进入异常单据页面,在异常单据页面手动指定供应商
|
|
|
|
|
*/
|
|
|
|
|
if (countStatus.equals("loss")) {
|
|
|
|
|
log.info("生成盘亏单据条码供应商详情,条码信息:{}", warehouseEntity.getCode());
|
|
|
|
|
List<String> supIds = invProductDetailDao.selectSupIdByCode(warehouseEntity.getCode());
|
|
|
|
|
if (CollUtil.isNotEmpty(supIds)) {
|
|
|
|
|
if (supIds.size() == 1) {
|
|
|
|
|
//此产品只绑定了一个供应商,若绑定了多个供应商,则不填供应商ID字段,生成单据之后会进入异常单据页面,手动指定供应商
|
|
|
|
|
warehouseEntity.setSupId(supIds.get(0));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
log.info("生成盘盈单据条码供应商详情,条码信息:{}", warehouseEntity.getCode());
|
|
|
|
|
List<String> unitFkList = companyProductRelevanceDao.selectUnitFkByUdiRlIdFk(warehouseEntity.getRelId() + "");
|
|
|
|
|
if (CollUtil.isNotEmpty(unitFkList)) {
|
|
|
|
|
if (unitFkList.size() == 1) {
|
|
|
|
|
//此产品只绑定了一个供应商,若绑定了多个供应商,则不填供应商ID字段,生成单据之后会进入异常单据页面,手动指定供应商
|
|
|
|
|
warehouseEntity.setSupId(unitFkList.get(0));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// private void setSupInfo(IoCodeTempEntity warehouseEntity, String countStatus) {
|
|
|
|
|
// /**
|
|
|
|
|
// * 根据此码明细的盈亏状态,使用不同的逻辑生成供应商信息
|
|
|
|
|
// * 盘盈:此条码不存在于库存详情中,需要从供应商产品信息表查询供应商信息
|
|
|
|
|
// * 盘亏:此条码在库存中存在,但是盘点中没有此条码,直接查询库存详情表中的供应商ID
|
|
|
|
|
// *
|
|
|
|
|
// * 若查询出的供应商信息多余1条,则表明此产品被多个供应商绑定,在此处不进行绑定,单据生成之后会进入异常单据页面,在异常单据页面手动指定供应商
|
|
|
|
|
// */
|
|
|
|
|
// if (countStatus.equals("loss")) {
|
|
|
|
|
// log.info("生成盘亏单据条码供应商详情,条码信息:{}", warehouseEntity.getCode());
|
|
|
|
|
// List<String> supIds = invProductNewDao.selectSupIdByCode(warehouseEntity.getCode());
|
|
|
|
|
// if (CollUtil.isNotEmpty(supIds)) {
|
|
|
|
|
// if (supIds.size() == 1) {
|
|
|
|
|
// //此产品只绑定了一个供应商,若绑定了多个供应商,则不填供应商ID字段,生成单据之后会进入异常单据页面,手动指定供应商
|
|
|
|
|
// warehouseEntity.setSupId(supIds.get(0));
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
// } else {
|
|
|
|
|
// log.info("生成盘盈单据条码供应商详情,条码信息:{}", warehouseEntity.getCode());
|
|
|
|
|
// List<String> unitFkList = companyProductRelevanceDao.selectUnitFkByUdiRlIdFk(warehouseEntity.getRelId() + "");
|
|
|
|
|
// if (CollUtil.isNotEmpty(unitFkList)) {
|
|
|
|
|
// if (unitFkList.size() == 1) {
|
|
|
|
|
// //此产品只绑定了一个供应商,若绑定了多个供应商,则不填供应商ID字段,生成单据之后会进入异常单据页面,手动指定供应商
|
|
|
|
|
// warehouseEntity.setSupId(unitFkList.get(0));
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 校验码重复
|
|
|
|
|