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

master
x_z 3 years ago
parent 8f6b3ef5e1
commit 4d39ca149e

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

@ -45,13 +45,5 @@ public interface CodesDao {
boolean updateSupId(@Param("supId") String supId, @Param("nameCode") String nameCode, @Param("orderId") String orderId); 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); 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); 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); 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; private String fbillflag;
List<String> orderIds; 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; 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.github.pagehelper.PageHelper;
import com.glxp.sale.admin.constant.ConstantType; import com.glxp.sale.admin.constant.ConstantType;
import com.glxp.sale.admin.dao.inout.*; import com.glxp.sale.admin.dao.inout.*;
import com.glxp.sale.admin.dao.inventory.InvProductDao; import com.glxp.sale.admin.dao.inventory.InvProductDao;
import com.glxp.sale.admin.dao.inventory.InvProductDetailDao; 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.inout.WarehouseEntity;
import com.glxp.sale.admin.entity.inventory.InvProductDetailEntity; import com.glxp.sale.admin.entity.inventory.InvProductDetailEntity;
import com.glxp.sale.admin.entity.inventory.InvProductEntity; import com.glxp.sale.admin.entity.inventory.InvProductEntity;
import com.glxp.sale.admin.req.inout.CodesReplaceRequest; 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.inout.WarehouseQueryRequest;
import com.glxp.sale.admin.req.inventory.FilterInvProductDetailRequest; import com.glxp.sale.admin.req.inventory.FilterInvProductDetailRequest;
import com.glxp.sale.admin.req.inventory.FilterInvProductRequest; import com.glxp.sale.admin.req.inventory.FilterInvProductRequest;
@ -158,42 +162,62 @@ public class CodesServiceImpl implements CodesService {
//删除码表,添加新的条码,并更新库存 //删除码表,添加新的条码,并更新库存
for (WarehouseEntity warehouseEntity : codeList) { for (WarehouseEntity warehouseEntity : codeList) {
//构造新的码
WarehouseEntity codeEntity = new WarehouseEntity();
//删除码详情 //删除码详情
codesDao.deleteByOrderIdAndCode(warehouseEntity.getOrderId(), warehouseEntity.getCode()); codesDao.deleteByOrderIdAndCode(warehouseEntity.getOrderId(), warehouseEntity.getCode());
//查询库存详情 //查询库存详情
FilterInvProductDetailRequest filterInvProductDetailRequest = new FilterInvProductDetailRequest(); FilterInvProductDetailRequest filterInvProductDetailRequest = new FilterInvProductDetailRequest();
filterInvProductDetailRequest.setOriginCode(codesReplaceRequest.getCode()); 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); List<InvProductDetailEntity> invProductDetailEntities = invProductDetailDao.filterInvProductDetail(filterInvProductDetailRequest);
if (CollUtil.isNotEmpty(invProductDetailEntities)) {
InvProductDetailEntity invProductDetailEntity = invProductDetailEntities.get(0); //库存 //库存详情不为空,单据已验收,更新库存
InvProductDetailEntity invProductDetailEntity = invProductDetailEntities.get(0); //库存
//删除库存详情
invProductDetailDao.deleteByOrderIdAndCode(warehouseEntity.getOrderId(), codesReplaceRequest.getCode()); //删除库存详情
//查询原库存详情和新的库存详情 invProductDetailDao.deleteByOrderIdAndCode(warehouseEntity.getOrderId(), codesReplaceRequest.getCode());
FilterInvProductRequest filterInvProductRequest = new FilterInvProductRequest(); //查询原库存详情和新的库存详情
filterInvProductRequest.setRelIdFk(invProductDetailEntity.getProductIdFk()); FilterInvProductRequest filterInvProductRequest = new FilterInvProductRequest();
InvProductEntity invProductEntity = invProductDao.filterInvProduct(filterInvProductRequest).get(0); filterInvProductRequest.setRelIdFk(invProductDetailEntity.getProductIdFk());
if (StrUtil.isBlank(invProductDetailEntity.getBatchNo())) {
if (invProductDetailEntity.getMainAction().equals(ConstantType.TYPE_OUT)) { filterInvProductRequest.setBatchNo("empty");
//出库 } else {
int count = invProductEntity.getOutCount() + invProductDetailEntity.getCount(); filterInvProductRequest.setBatchNo(invProductDetailEntity.getBatchNo());
invProductEntity.setOutCount(count); }
} else if (invProductDetailEntity.getMainAction().equals(ConstantType.TYPE_PUT)) { InvProductEntity invProductEntity = invProductDao.filterInvProduct(filterInvProductRequest).get(0);
//入库
int count = invProductEntity.getInCount() - invProductDetailEntity.getCount(); if (invProductDetailEntity.getMainAction().equals(ConstantType.TYPE_OUT)) {
invProductEntity.setInCount(count); //出库
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()); FilterErpOrderRequest deleteOrderDetailParam = new FilterErpOrderRequest();
stockOrderDetailDao.deleteByOrderIdAndProductId(warehouseEntity.getOrderId(), warehouseEntity.getRelId()); 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()); int orderDetailCount = orderDetailDao.countByOrderId(warehouseEntity.getOrderId());
if (orderDetailCount == 0) { if (orderDetailCount == 0) {

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

@ -175,11 +175,6 @@
</trim> </trim>
WHERE id=#{id} WHERE id=#{id}
</update> </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 id="deleteByOrderIdAndCode">
delete delete

@ -251,16 +251,27 @@
and orderIdFk = #{orderId} and orderIdFk = #{orderId}
</select> </select>
<delete id="deleteByOrderIdAndNameCode">
delete from io_order_detail
where orderIdFk = #{orderId}
and nameCode = #{nameCode}
</delete>
<select id="countByOrderId" resultType="int"> <select id="countByOrderId" resultType="int">
select count(*) select count(*)
from io_order_detail from io_order_detail
where orderIdFk = #{orderId} where orderIdFk = #{orderId}
</select> </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> </mapper>

@ -160,11 +160,18 @@
limit 1 limit 1
</select> </select>
<delete id="deleteByOrderIdAndProductId"> <delete id="deleteStockOrderDetail">
delete delete
from stock_order_detail from stock_order_detail
where productId = #{productId} <where>
and orderIdFk = (select id from stock_order where stock_order.orderIdFk = #{orderId}) 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> </delete>
</mapper> </mapper>

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

Loading…
Cancel
Save