1.修复单据编辑删除删除单据,扣减库存等问题

master
x_z 3 years ago
parent 8f6b3ef5e1
commit 4d39ca149e

@ -140,7 +140,7 @@ public class OrderController {
if (CollUtil.isNotEmpty(deleteRequest.getIds())) {
orderService.deleteOrders(deleteRequest.getIds());
} else {
orderService.deleteOrders(Arrays.asList(deleteRequest.getId()));
orderService.deleteOrders(Collections.singletonList(deleteRequest.getId()));
}
return ResultVOUtils.success("删除成功");

@ -45,13 +45,5 @@ public interface CodesDao {
boolean updateSupId(@Param("supId") String supId, @Param("nameCode") String nameCode, @Param("orderId") String orderId);
/**
*
*
* @param orderId
* @return
*/
List<String> selectOrderIdsByOrderId(@Param("orderId") String orderId);
boolean deleteByOrderIdAndCode(@Param("orderId") String orderId, @Param("code") String code);
}

@ -53,7 +53,7 @@ public interface OrderDetailDao {
*/
ErpOrderEntity selectByNameCodeAndOrderId(@Param("nameCode") String nameCode, @Param("orderId") String orderId);
boolean deleteByOrderIdAndNameCode(@Param("orderId") String orderId, @Param("nameCode") String nameCode);
boolean deleteOrder(@Param("filterErpOrderRequest") FilterErpOrderRequest filterErpOrderRequest);
/**
*

@ -27,5 +27,5 @@ public interface StockOrderDetailDao {
StockOrderDetailEntity findOne(@Param("id") String id);
boolean deleteByOrderIdAndProductId(@Param("orderId") String orderId, @Param("productId") String productId);
boolean deleteStockOrderDetail(@Param("stockOrderDetailFilterRequest") StockOrderDetailFilterRequest stockOrderDetailFilterRequest);
}

@ -20,4 +20,8 @@ public class FilterErpOrderRequest extends ListPageRequest {
private String fbillflag;
List<String> orderIds;
private String nameCode; //最小包装前7位
private String goodsid; //货品ID
private String batchNo; //批号
}

@ -1,14 +1,18 @@
package com.glxp.sale.admin.service.inout.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import com.github.pagehelper.PageHelper;
import com.glxp.sale.admin.constant.ConstantType;
import com.glxp.sale.admin.dao.inout.*;
import com.glxp.sale.admin.dao.inventory.InvProductDao;
import com.glxp.sale.admin.dao.inventory.InvProductDetailDao;
import com.glxp.sale.admin.entity.inout.FilterErpOrderRequest;
import com.glxp.sale.admin.entity.inout.WarehouseEntity;
import com.glxp.sale.admin.entity.inventory.InvProductDetailEntity;
import com.glxp.sale.admin.entity.inventory.InvProductEntity;
import com.glxp.sale.admin.req.inout.CodesReplaceRequest;
import com.glxp.sale.admin.req.inout.StockOrderDetailFilterRequest;
import com.glxp.sale.admin.req.inout.WarehouseQueryRequest;
import com.glxp.sale.admin.req.inventory.FilterInvProductDetailRequest;
import com.glxp.sale.admin.req.inventory.FilterInvProductRequest;
@ -158,42 +162,62 @@ public class CodesServiceImpl implements CodesService {
//删除码表,添加新的条码,并更新库存
for (WarehouseEntity warehouseEntity : codeList) {
//构造新的码
WarehouseEntity codeEntity = new WarehouseEntity();
//删除码详情
codesDao.deleteByOrderIdAndCode(warehouseEntity.getOrderId(), warehouseEntity.getCode());
//查询库存详情
FilterInvProductDetailRequest filterInvProductDetailRequest = new FilterInvProductDetailRequest();
filterInvProductDetailRequest.setOriginCode(codesReplaceRequest.getCode());
filterInvProductDetailRequest.setOrderIdFk(codeEntity.getOrderId());
filterInvProductDetailRequest.setProductIdFk(warehouseEntity.getRelId());
filterInvProductDetailRequest.setOrderIdFk(warehouseEntity.getOrderId());
if (StrUtil.isNotBlank(warehouseEntity.getBatchNo())) {
filterInvProductDetailRequest.setBatchNo(warehouseEntity.getBatchNo());
} else {
filterInvProductDetailRequest.setBatchNo("empty");
}
List<InvProductDetailEntity> invProductDetailEntities = invProductDetailDao.filterInvProductDetail(filterInvProductDetailRequest);
InvProductDetailEntity invProductDetailEntity = invProductDetailEntities.get(0); //库存
//删除库存详情
invProductDetailDao.deleteByOrderIdAndCode(warehouseEntity.getOrderId(), codesReplaceRequest.getCode());
//查询原库存详情和新的库存详情
FilterInvProductRequest filterInvProductRequest = new FilterInvProductRequest();
filterInvProductRequest.setRelIdFk(invProductDetailEntity.getProductIdFk());
InvProductEntity invProductEntity = invProductDao.filterInvProduct(filterInvProductRequest).get(0);
if (invProductDetailEntity.getMainAction().equals(ConstantType.TYPE_OUT)) {
//出库
int count = invProductEntity.getOutCount() + invProductDetailEntity.getCount();
invProductEntity.setOutCount(count);
} else if (invProductDetailEntity.getMainAction().equals(ConstantType.TYPE_PUT)) {
//入库
int count = invProductEntity.getInCount() - invProductDetailEntity.getCount();
invProductEntity.setInCount(count);
if (CollUtil.isNotEmpty(invProductDetailEntities)) {
//库存详情不为空,单据已验收,更新库存
InvProductDetailEntity invProductDetailEntity = invProductDetailEntities.get(0); //库存
//删除库存详情
invProductDetailDao.deleteByOrderIdAndCode(warehouseEntity.getOrderId(), codesReplaceRequest.getCode());
//查询原库存详情和新的库存详情
FilterInvProductRequest filterInvProductRequest = new FilterInvProductRequest();
filterInvProductRequest.setRelIdFk(invProductDetailEntity.getProductIdFk());
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_OUT)) {
//出库
int count = invProductEntity.getOutCount() + invProductDetailEntity.getCount();
invProductEntity.setOutCount(count);
} else if (invProductDetailEntity.getMainAction().equals(ConstantType.TYPE_PUT)) {
//入库
int count = invProductEntity.getInCount() - invProductDetailEntity.getCount();
invProductEntity.setInCount(count);
}
//更新库存
invProductDao.updateInvProduct(invProductEntity);
}
//更新库存
invProductDao.updateInvProduct(invProductEntity);
//删除单据详情
orderDetailDao.deleteByOrderIdAndNameCode(warehouseEntity.getOrderId(), codesReplaceRequest.getUdiEntity().getNameCode());
stockOrderDetailDao.deleteByOrderIdAndProductId(warehouseEntity.getOrderId(), warehouseEntity.getRelId());
FilterErpOrderRequest deleteOrderDetailParam = new FilterErpOrderRequest();
deleteOrderDetailParam.setOrderIdFk(warehouseEntity.getOrderId());
deleteOrderDetailParam.setGoodsid(warehouseEntity.getRelId());
deleteOrderDetailParam.setBatchNo(warehouseEntity.getBatchNo());
orderDetailDao.deleteOrder(deleteOrderDetailParam); //删除扫码单据详情
StockOrderDetailFilterRequest deleteStockOrderDetailParam = new StockOrderDetailFilterRequest();
deleteStockOrderDetailParam.setProductId(warehouseEntity.getRelId());
deleteStockOrderDetailParam.setBatchNo(warehouseEntity.getBatchNo());
deleteStockOrderDetailParam.setOrderIdFk(warehouseEntity.getOrderId());
stockOrderDetailDao.deleteStockOrderDetail(deleteStockOrderDetailParam); //删除业务单据详情
int orderDetailCount = orderDetailDao.countByOrderId(warehouseEntity.getOrderId());
if (orderDetailCount == 0) {

@ -322,16 +322,48 @@ public class OrderServiceImpl implements OrderService {
return Collections.emptyList();
}
//查询码表中所有的单据号
List<String> orderIds = codesDao.selectOrderIdsByOrderId(orderEntity.getId());
if (orderIds.size() > 1) {
orderIds.removeIf(s -> s.equals(orderEntity.getId()));
} else {
return Collections.singletonList(orderEntity);
List<OrderEntity> orders = new ArrayList<>();
orders.add(orderEntity);
getAllOrder(orderEntity, orders);
return orders;
}
/**
*
*
* @param orderEntity
* @param orders
*/
private void getAllOrder(OrderEntity orderEntity, List<OrderEntity> orders) {
//补单单号
if (StrUtil.isNotBlank(orderEntity.getSupplementNo())) {
//补单单号不为空,查询补单数据
OrderEntity order = orderDao.selectByBillNo(orderEntity.getSupplementNo());
if (!orders.contains(order)) {
orders.add(order);
getAllOrder(order, orders);
}
}
//缺量补单上级单号
if (StrUtil.isNotBlank(orderEntity.getOriginUllageSupNo())) {
//补单单号不为空,查询补单数据
OrderEntity order = orderDao.selectByBillNo(orderEntity.getOriginUllageSupNo());
if (!orders.contains(order)) {
orders.add(order);
getAllOrder(order, orders);
}
}
List<OrderEntity> orderEntities = orderDao.selectByIds(orderIds);
orderEntities.add(0, orderEntity);
return orderEntities;
//缺量补单
if (StrUtil.isNotBlank(orderEntity.getUllageSupNo())) {
//补单单号不为空,查询补单数据
OrderEntity order = orderDao.selectByBillNo(orderEntity.getUllageSupNo());
if (!orders.contains(order)) {
orders.add(order);
getAllOrder(order, orders);
}
}
}
@Transactional(rollbackFor = Exception.class)
@ -351,25 +383,29 @@ public class OrderServiceImpl implements OrderService {
Map<String, List<InvProductDetailEntity>> invProductDetailMap = invProductDetailEntities.stream().collect(Collectors.groupingBy(InvProductDetailEntity::getProductIdFk));
List<InvProductEntity> invProductList = new ArrayList<>(invProductDetailMap.keySet().size());
for (String productIdFk : invProductDetailMap.keySet()) {
for (InvProductDetailEntity invProductDetailEntity : invProductDetailEntities) {
FilterInvProductRequest filterInvProductRequest = new FilterInvProductRequest();
filterInvProductRequest.setRelIdFk(productIdFk);
filterInvProductRequest.setRelIdFk(invProductDetailEntity.getProductIdFk());
if (StrUtil.isBlank(invProductDetailEntity.getBatchNo())) {
filterInvProductRequest.setBatchNo("empty");
} else {
filterInvProductRequest.setBatchNo(invProductDetailEntity.getBatchNo());
}
List<InvProductEntity> invProductEntities = invProductDao.filterInvProduct(filterInvProductRequest);
InvProductEntity invProductEntity = invProductEntities.get(0);
List<InvProductDetailEntity> temp = invProductDetailMap.get(productIdFk);
String mainAction = temp.get(0).getMainAction();
int sum = temp.stream().mapToInt(InvProductDetailEntity::getCount).sum();
if (mainAction.equals(ConstantType.TYPE_PUT)) {
InvProductEntity productEntity = invProductEntities.get(0);
if (ConstantType.TYPE_PUT.equals(invProductDetailEntity.getMainAction())) {
//入库,在原有库存基础上减库存
int count = invProductEntity.getInCount() - sum;
invProductEntity.setInCount(count);
} else if (mainAction.equals(ConstantType.TYPE_OUT)) {
int count = productEntity.getInCount() - invProductDetailEntity.getCount();
productEntity.setInCount(count);
} else if (ConstantType.TYPE_OUT.equals(invProductDetailEntity.getMainAction())) {
//出库,在原有库存上增加库存
int count = invProductEntity.getOutCount() + sum;
invProductEntity.setOutCount(count);
int count = productEntity.getOutCount() + invProductDetailEntity.getCount();
productEntity.setOutCount(count);
}
invProductList.add(invProductEntity);
invProductList.add(productEntity);
}
//删除单据相关数据,更新库存

@ -175,11 +175,6 @@
</trim>
WHERE id=#{id}
</update>
<select id="selectOrderIdsByOrderId" resultType="java.lang.String">
select orderId
from io_codes
where code = (select code from io_codes where orderId = #{orderId} limit 1)
</select>
<delete id="deleteByOrderIdAndCode">
delete

@ -251,16 +251,27 @@
and orderIdFk = #{orderId}
</select>
<delete id="deleteByOrderIdAndNameCode">
delete from io_order_detail
where orderIdFk = #{orderId}
and nameCode = #{nameCode}
</delete>
<select id="countByOrderId" resultType="int">
select count(*)
from io_order_detail
where orderIdFk = #{orderId}
</select>
<delete id="deleteOrder">
delete
from io_order_detail
<where>
<if test="filterErpOrderRequest.orderIdFk != null">
AND orderIdFk = #{filterErpOrderRequest.orderIdFk}
</if>
<if test="filterErpOrderRequest.goodsid != null">
AND goodsid = #{filterErpOrderRequest.goodsid}
</if>
<if test="filterErpOrderRequest.batchNo != null">
AND batchNo = #{filterErpOrderRequest.batchNo}
</if>
</where>
</delete>
</mapper>

@ -160,11 +160,18 @@
limit 1
</select>
<delete id="deleteByOrderIdAndProductId">
<delete id="deleteStockOrderDetail">
delete
from stock_order_detail
where productId = #{productId}
and orderIdFk = (select id from stock_order where stock_order.orderIdFk = #{orderId})
<where>
orderIdFk = (select id from stock_order where stock_order.orderIdFk = #{param1.orderIdFk})
<if test="param1.productId != null">
and productId = #{param1.productId}
</if>
<if test="param1.batchNo != null">
and batchNo = #{param1.batchNo}
</if>
</where>
</delete>
</mapper>

@ -19,10 +19,12 @@
<if test="ggxh != '' and ggxh != null">
AND inv_product.ggxh like concat('%',#{ggxh},'%')
</if>
<if test="batchNo != '' and batchNo != null">
AND inv_product.batchNo like concat('%',#{batchNo},'%')
<if test="batchNo != '' and batchNo != null and batchNo!='empty'">
AND inv_product.batchNo like concat('%',#{batchNo},'%')
</if>
<if test="batchNo == 'empty'">
AND batchNo is NULL
</if>
<if test="productionDate != '' and productionDate != null">
AND inv_product.productionDate = #{productionDate}
</if>

Loading…
Cancel
Save