|
|
|
@ -1,13 +1,36 @@
|
|
|
|
|
package com.glxp.api.admin.service.inout.impl;
|
|
|
|
|
|
|
|
|
|
import cn.hutool.core.collection.CollUtil;
|
|
|
|
|
import cn.hutool.core.util.StrUtil;
|
|
|
|
|
import com.github.pagehelper.PageHelper;
|
|
|
|
|
import com.glxp.api.admin.constant.ConstantStatus;
|
|
|
|
|
import com.glxp.api.admin.constant.ConstantType;
|
|
|
|
|
import com.glxp.api.admin.dao.business.StockOrderDao;
|
|
|
|
|
import com.glxp.api.admin.dao.business.StockOrderDetailDao;
|
|
|
|
|
import com.glxp.api.admin.dao.inout.CodesDao;
|
|
|
|
|
import com.glxp.api.admin.dao.inout.OrderDao;
|
|
|
|
|
import com.glxp.api.admin.dao.inout.OrderDetailDao;
|
|
|
|
|
import com.glxp.api.admin.dao.inventory.InvProductDao;
|
|
|
|
|
import com.glxp.api.admin.dao.inventory.InvProductDetailDao;
|
|
|
|
|
import com.glxp.api.admin.entity.business.StockOrderDetailEntity;
|
|
|
|
|
import com.glxp.api.admin.entity.inout.ErpOrderEntity;
|
|
|
|
|
import com.glxp.api.admin.entity.inout.FilterErpOrderRequest;
|
|
|
|
|
import com.glxp.api.admin.entity.inout.OrderEntity;
|
|
|
|
|
import com.glxp.api.admin.entity.inout.WarehouseEntity;
|
|
|
|
|
import com.glxp.api.admin.entity.inventory.InvProductDetailEntity;
|
|
|
|
|
import com.glxp.api.admin.entity.inventory.InvProductEntity;
|
|
|
|
|
import com.glxp.api.admin.req.business.StockOrderDetailFilterRequest;
|
|
|
|
|
import com.glxp.api.admin.req.inout.CodesReplaceRequest;
|
|
|
|
|
import com.glxp.api.admin.req.inout.WarehouseQueryRequest;
|
|
|
|
|
import com.glxp.api.admin.req.inventory.FilterInvProductDetailRequest;
|
|
|
|
|
import com.glxp.api.admin.req.inventory.FilterInvProductRequest;
|
|
|
|
|
import com.glxp.api.admin.service.inout.CodesService;
|
|
|
|
|
import com.glxp.api.admin.service.inout.OrderService;
|
|
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
|
|
import java.util.ArrayList;
|
|
|
|
|
import java.util.Collections;
|
|
|
|
|
import java.util.List;
|
|
|
|
|
|
|
|
|
@ -16,6 +39,20 @@ public class CodesServiceImpl implements CodesService {
|
|
|
|
|
|
|
|
|
|
@Resource
|
|
|
|
|
CodesDao codesDao;
|
|
|
|
|
@Resource
|
|
|
|
|
private InvProductDao invProductDao;
|
|
|
|
|
@Resource
|
|
|
|
|
private InvProductDetailDao invProductDetailDao;
|
|
|
|
|
@Resource
|
|
|
|
|
private OrderDetailDao orderDetailDao;
|
|
|
|
|
@Resource
|
|
|
|
|
private StockOrderDetailDao stockOrderDetailDao;
|
|
|
|
|
@Resource
|
|
|
|
|
private OrderDao orderDao;
|
|
|
|
|
@Resource
|
|
|
|
|
private StockOrderDao stockOrderDao;
|
|
|
|
|
@Resource
|
|
|
|
|
private OrderService orderService;
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public List<WarehouseEntity> listWarehouse(WarehouseQueryRequest warehouseQueryRequest) {
|
|
|
|
@ -130,4 +167,139 @@ public class CodesServiceImpl implements CodesService {
|
|
|
|
|
return codesDao.updateSupId(sup, nameCode, orderId);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
|
|
@Override
|
|
|
|
|
public void replaceCodes(CodesReplaceRequest codesReplaceRequest) {
|
|
|
|
|
OrderEntity orderEntity = orderDao.selectByBillNo(codesReplaceRequest.getOrderId());
|
|
|
|
|
//查询所有单据
|
|
|
|
|
List<OrderEntity> orderList = new ArrayList<>();
|
|
|
|
|
orderList.add(orderEntity);
|
|
|
|
|
orderService.getAllOrder(orderEntity, orderList);
|
|
|
|
|
|
|
|
|
|
for (OrderEntity order : orderList) {
|
|
|
|
|
//查询条码
|
|
|
|
|
WarehouseQueryRequest warehouseQueryRequest = new WarehouseQueryRequest();
|
|
|
|
|
warehouseQueryRequest.setOrderId(order.getId());
|
|
|
|
|
warehouseQueryRequest.setCode(codesReplaceRequest.getCode());
|
|
|
|
|
List<WarehouseEntity> warehouseEntities = codesDao.findByOrderId(warehouseQueryRequest);
|
|
|
|
|
if (CollUtil.isNotEmpty(warehouseEntities)) {
|
|
|
|
|
WarehouseEntity warehouseEntity = warehouseEntities.get(0);
|
|
|
|
|
if (warehouseEntity.getCount() > 1) {
|
|
|
|
|
//删除一个条码
|
|
|
|
|
warehouseEntity.setCount(warehouseEntity.getCount() - 1);
|
|
|
|
|
codesDao.updateCode(warehouseEntity); //更新码详情
|
|
|
|
|
} else {
|
|
|
|
|
//如果数量扣减之后为0,直接删除此条码
|
|
|
|
|
codesDao.deleteById(warehouseEntity.getId());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//库存详情扣减1
|
|
|
|
|
if (order.getStatus().equals(ConstantStatus.ORDER_STATUS_SUCCESS)) {
|
|
|
|
|
FilterInvProductDetailRequest filterInvProductDetailRequest = new FilterInvProductDetailRequest();
|
|
|
|
|
filterInvProductDetailRequest.setOriginCode(codesReplaceRequest.getCode());
|
|
|
|
|
filterInvProductDetailRequest.setProductIdFk(warehouseEntity.getRelId());
|
|
|
|
|
filterInvProductDetailRequest.setOrderIdFk(order.getId());
|
|
|
|
|
if (StrUtil.isNotBlank(warehouseEntity.getBatchNo())) {
|
|
|
|
|
filterInvProductDetailRequest.setBatchNo(warehouseEntity.getBatchNo());
|
|
|
|
|
} else {
|
|
|
|
|
filterInvProductDetailRequest.setBatchNo("empty");
|
|
|
|
|
}
|
|
|
|
|
List<InvProductDetailEntity> invProductDetailEntities = invProductDetailDao.filterInvProductDetail(filterInvProductDetailRequest);
|
|
|
|
|
if (CollUtil.isNotEmpty(invProductDetailEntities)) {
|
|
|
|
|
//库存详情不为空,单据已验收,扣减库存
|
|
|
|
|
InvProductDetailEntity invProductDetailEntity = invProductDetailEntities.get(0);
|
|
|
|
|
if (invProductDetailEntity.getCount() > 1) {
|
|
|
|
|
invProductDetailEntity.setCount(invProductDetailEntity.getCount() - 1); //更新库存
|
|
|
|
|
invProductDetailDao.updateInvProductDetail(invProductDetailEntity);
|
|
|
|
|
} else {
|
|
|
|
|
//库存详情扣减之后等于0,删除库存详情
|
|
|
|
|
invProductDetailDao.deleteByOrderIdAndCode(order.getId(), warehouseEntity.getCode());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//查询原库存详情和新的库存详情
|
|
|
|
|
FilterInvProductRequest filterInvProductRequest = new FilterInvProductRequest();
|
|
|
|
|
filterInvProductRequest.setRelIdFk(invProductDetailEntity.getProductIdFk());
|
|
|
|
|
filterInvProductRequest.setSupId(invProductDetailEntity.getSupId());
|
|
|
|
|
filterInvProductRequest.setInvStorageCode(invProductDetailEntity.getInvStorageCode());
|
|
|
|
|
if (StrUtil.isBlank(invProductDetailEntity.getBatchNo())) {
|
|
|
|
|
filterInvProductRequest.setBatchNo("empty");
|
|
|
|
|
} else {
|
|
|
|
|
filterInvProductRequest.setBatchNo(invProductDetailEntity.getBatchNo());
|
|
|
|
|
}
|
|
|
|
|
InvProductEntity invProductEntity = invProductDao.filterInvProduct(filterInvProductRequest).get(0);
|
|
|
|
|
if (invProductDetailEntity.getMainAction().equals(ConstantType.TYPE_PUT)) {
|
|
|
|
|
//入库
|
|
|
|
|
invProductEntity.setInCount(invProductEntity.getInCount() - 1);
|
|
|
|
|
} else if (invProductDetailEntity.getMainAction().equals(ConstantType.TYPE_OUT)) {
|
|
|
|
|
//出库
|
|
|
|
|
invProductEntity.setOutCount(invProductEntity.getOutCount() - 1);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//查询库存码详情,如果库存码详情为空,则删除此库存
|
|
|
|
|
FilterInvProductDetailRequest detailParams = new FilterInvProductDetailRequest();
|
|
|
|
|
detailParams.setBatchNo(invProductEntity.getBatchNo());
|
|
|
|
|
detailParams.setInvCodes(Collections.singletonList(invProductEntity.getInvStorageCode()));
|
|
|
|
|
detailParams.setProductIdFk(invProductEntity.getRelIdFk());
|
|
|
|
|
int count = invProductDetailDao.statCount(detailParams);
|
|
|
|
|
if (count == 0) {
|
|
|
|
|
//如果库存码详情为空,则删除此库存
|
|
|
|
|
invProductDao.deleteById(String.valueOf(invProductEntity.getId()));
|
|
|
|
|
} else {
|
|
|
|
|
//更新库存
|
|
|
|
|
invProductDao.updateInvProduct(invProductEntity);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//查询扫码单据详情
|
|
|
|
|
FilterErpOrderRequest orderDetailRequest = new FilterErpOrderRequest();
|
|
|
|
|
orderDetailRequest.setOrderIdFk(order.getId());
|
|
|
|
|
orderDetailRequest.setGoodsid(warehouseEntity.getRelId());
|
|
|
|
|
orderDetailRequest.setBatchNo(warehouseEntity.getBatchNo());
|
|
|
|
|
List<ErpOrderEntity> erpOrderEntities = orderDetailDao.filterErpOrder(orderDetailRequest);
|
|
|
|
|
if (CollUtil.isNotEmpty(erpOrderEntities)) {
|
|
|
|
|
ErpOrderEntity erpOrderEntity = erpOrderEntities.get(0);
|
|
|
|
|
if (erpOrderEntity.getReCount() > 1) {
|
|
|
|
|
erpOrderEntity.setReCount(erpOrderEntity.getReCount() - 1); //应收数量 - 1
|
|
|
|
|
erpOrderEntity.setCount(erpOrderEntity.getCount() - 1); //实际数量 - 1
|
|
|
|
|
//更新扫码单据详情
|
|
|
|
|
orderDetailDao.updateErpOrder(erpOrderEntity);
|
|
|
|
|
} else {
|
|
|
|
|
orderDetailDao.deleteByPrimiyId(String.valueOf(erpOrderEntity.getId()));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//查询业务单据详情
|
|
|
|
|
StockOrderDetailFilterRequest stockOrderDetailFilterRequest = new StockOrderDetailFilterRequest();
|
|
|
|
|
stockOrderDetailFilterRequest.setProductId(warehouseEntity.getRelId());
|
|
|
|
|
stockOrderDetailFilterRequest.setBatchNo(warehouseEntity.getBatchNo());
|
|
|
|
|
//查询业务单据数据ID
|
|
|
|
|
Integer stockOrderId = stockOrderDao.selectIdByOrderIdFk(order.getId());
|
|
|
|
|
stockOrderDetailFilterRequest.setOrderIdFk(String.valueOf(stockOrderId));
|
|
|
|
|
List<StockOrderDetailEntity> stockOrderDetailEntities = stockOrderDetailDao.filterStockOrderDetail3(stockOrderDetailFilterRequest);
|
|
|
|
|
if (CollUtil.isNotEmpty(stockOrderDetailEntities)) {
|
|
|
|
|
StockOrderDetailEntity stockOrderDetailEntity = stockOrderDetailEntities.get(0);
|
|
|
|
|
if (stockOrderDetailEntity.getReCount() > 1) {
|
|
|
|
|
stockOrderDetailEntity.setReCount(stockOrderDetailEntity.getReCount()- 1); //实际数量 - 1
|
|
|
|
|
stockOrderDetailEntity.setSweepCount(stockOrderDetailEntity.getSweepCount() -1); //扫码数量 -1
|
|
|
|
|
//更新业务单据详情
|
|
|
|
|
stockOrderDetailDao.updateById(stockOrderDetailEntity);
|
|
|
|
|
} else {
|
|
|
|
|
//删除业务单据详情
|
|
|
|
|
stockOrderDetailDao.deleteById(stockOrderDetailEntity.getId());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//若扫码单据详情已全部被删除,关联删除扫码单据和业务单据
|
|
|
|
|
int orderDetailCount = orderDetailDao.countByOrderId(order.getId());
|
|
|
|
|
if (orderDetailCount == 0) {
|
|
|
|
|
//当单据详情数量为0时,删除扫码单据和业务单据
|
|
|
|
|
orderDao.deleteById(order.getId());
|
|
|
|
|
stockOrderDao.deleteByOrderIdFk(order.getId());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|