feat(wms): 采购订单物料列表增加已入库数量统计

- 新增接口和方法查询带已入库数量的采购订单物料列表
- 在 WmsPurchaseOrderDetailVo 中添加已入库数量和剩余可入库数量字段
- 实现查询逻辑,通过左连接和子查询计算已入库数量
- 出库单添加客户字段
master
zangch@mesnac.com 3 days ago
parent d497f61c48
commit 0fa1319217

@ -114,4 +114,13 @@ public class WmsPurchaseOrderDetailController extends BaseController {
List<WmsPurchaseOrderDetailVo> list = wmsPurchaseOrderDetailService.queryList(bo); List<WmsPurchaseOrderDetailVo> list = wmsPurchaseOrderDetailService.queryList(bo);
return R.ok(list); return R.ok(list);
} }
/**
* -
*/
@GetMapping("/listWithInstockedQty")
public R<List<WmsPurchaseOrderDetailVo>> listWithInstockedQty(WmsPurchaseOrderDetailBo bo) {
List<WmsPurchaseOrderDetailVo> list = wmsPurchaseOrderDetailService.queryListWithInstockedQty(bo);
return R.ok(list);
}
} }

@ -82,6 +82,11 @@ public class WmsOutstockOrder {
@TableField(fill = FieldFill.INSERT) @TableField(fill = FieldFill.INSERT)
private String createBy; private String createBy;
/**
* idorder_type1
*/
private Long customerId;
/** /**
* *
*/ */

@ -1,17 +1,16 @@
package org.dromara.wms.domain.bo; package org.dromara.wms.domain.bo;
import org.dromara.wms.domain.BaseMaterialInfo;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import io.github.linpeilie.annotations.AutoMapper; import io.github.linpeilie.annotations.AutoMapper;
import jakarta.validation.constraints.NotBlank;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*; import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.wms.domain.BaseMaterialInfo;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.Date; import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
/** /**
* base_material_info * base_material_info
@ -32,7 +31,7 @@ public class BaseMaterialInfoBo extends BaseEntity {
/** /**
* ERP * ERP
*/ */
@NotBlank(message = "ERP信息不能为空", groups = { AddGroup.class, EditGroup.class }) // @NotBlank(message = "ERP信息不能为空", groups = { AddGroup.class, EditGroup.class })
private String erpId; private String erpId;
/** /**

@ -1,16 +1,13 @@
package org.dromara.wms.domain.bo; package org.dromara.wms.domain.bo;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import io.github.linpeilie.annotations.AutoMapper; import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*; import org.dromara.common.mybatis.core.domain.BaseEntity;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.dromara.wms.domain.WmsOutstockOrder; import org.dromara.wms.domain.WmsOutstockOrder;
import java.util.Date;
/** /**
* wms_outstock_order * wms_outstock_order
* *
@ -89,5 +86,9 @@ public class WmsOutstockOrderBo extends BaseEntity {
private String auditComments; private String auditComments;
private String tenantId; private String tenantId;
/**
* idorder_type1
*/
private Long customerId;
} }

@ -1,14 +1,9 @@
package org.dromara.wms.domain.vo; package org.dromara.wms.domain.vo;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.ExcelProperty;
import org.dromara.common.excel.annotation.ExcelDictFormat; import com.baomidou.mybatisplus.annotation.FieldFill;
import org.dromara.common.excel.convert.ExcelDictConvert; import com.baomidou.mybatisplus.annotation.TableField;
import io.github.linpeilie.annotations.AutoMapper; import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data; import lombok.Data;
import org.dromara.wms.domain.WmsOutstockOrder; import org.dromara.wms.domain.WmsOutstockOrder;
@ -105,6 +100,11 @@ public class WmsOutstockOrderVo implements Serializable {
@TableField(fill = FieldFill.INSERT) @TableField(fill = FieldFill.INSERT)
private String createBy; private String createBy;
/**
* idorder_type1
*/
private Long customerId;
/** /**
* *
*/ */

@ -97,5 +97,15 @@ public class WmsPurchaseOrderDetailVo implements Serializable {
private Long materialId; private Long materialId;
/**
*
*/
private BigDecimal instockedQty;
/**
*
*/
private BigDecimal remainingQty;
} }

@ -1,9 +1,12 @@
package org.dromara.wms.mapper; package org.dromara.wms.mapper;
import org.apache.ibatis.annotations.Param;
import org.dromara.wms.domain.WmsPurchaseOrderDetail; import org.dromara.wms.domain.WmsPurchaseOrderDetail;
import org.dromara.wms.domain.vo.WmsPurchaseOrderDetailVo; import org.dromara.wms.domain.vo.WmsPurchaseOrderDetailVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import java.util.List;
/** /**
* -Mapper * -Mapper
* *
@ -12,4 +15,12 @@ import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
*/ */
public interface WmsPurchaseOrderDetailMapper extends BaseMapperPlus<WmsPurchaseOrderDetail, WmsPurchaseOrderDetailVo> { public interface WmsPurchaseOrderDetailMapper extends BaseMapperPlus<WmsPurchaseOrderDetail, WmsPurchaseOrderDetailVo> {
/**
*
*
* @param poNo
* @return
*/
List<WmsPurchaseOrderDetailVo> selectListWithInstockedQty(@Param("poNo") String poNo);
} }

@ -1,34 +1,31 @@
package org.dromara.wms.service.impl; package org.dromara.wms.service.impl;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.yulichang.toolkit.JoinWrappers; import com.github.yulichang.toolkit.JoinWrappers;
import com.github.yulichang.wrapper.MPJLambdaWrapper; import com.github.yulichang.wrapper.MPJLambdaWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.wms.domain.WmsInstockDetail; import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.wms.domain.WmsPurchaseOrderDetail;
import org.dromara.wms.domain.bo.BaseMaterialInfoBo; import org.dromara.wms.domain.bo.BaseMaterialInfoBo;
import org.dromara.wms.domain.bo.WmsInstockDetailBo; import org.dromara.wms.domain.bo.WmsPurchaseOrderDetailBo;
import org.dromara.wms.domain.vo.BaseMaterialInfoVo; import org.dromara.wms.domain.vo.BaseMaterialInfoVo;
import org.dromara.wms.domain.vo.WmsPurchaseOrderDetailVo;
import org.dromara.wms.mapper.WmsPurchaseOrderDetailMapper;
import org.dromara.wms.service.IBaseMaterialInfoService; import org.dromara.wms.service.IBaseMaterialInfoService;
import org.dromara.wms.service.IWmsInstockDetailService;
import org.dromara.wms.service.IWmsPurchaseOrderDetailService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.dromara.wms.domain.bo.WmsPurchaseOrderDetailBo;
import org.dromara.wms.domain.vo.WmsPurchaseOrderDetailVo;
import org.dromara.wms.domain.WmsPurchaseOrderDetail;
import org.dromara.wms.mapper.WmsPurchaseOrderDetailMapper;
import org.dromara.wms.service.IWmsPurchaseOrderDetailService;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Collection;
/** /**
* -Service * -Service
@ -44,6 +41,8 @@ public class WmsPurchaseOrderDetailServiceImpl implements IWmsPurchaseOrderDetai
@Autowired @Autowired
private IBaseMaterialInfoService baseMaterialInfoService; private IBaseMaterialInfoService baseMaterialInfoService;
private final IWmsInstockDetailService wmsInstockDetailService;
/** /**
* - * -
* *
@ -165,4 +164,19 @@ public class WmsPurchaseOrderDetailServiceImpl implements IWmsPurchaseOrderDetai
} }
return baseMapper.deleteByIds(ids) > 0; return baseMapper.deleteByIds(ids) > 0;
} }
/**
* -
*
* @param bo
* @return -
*/
@Override
public List<WmsPurchaseOrderDetailVo> queryListWithInstockedQty(WmsPurchaseOrderDetailBo bo) {
if (StringUtils.isBlank(bo.getPoNo())) {
return new ArrayList<>();
}
return baseMapper.selectListWithInstockedQty(bo.getPoNo());
}
} }

@ -4,4 +4,43 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.dromara.wms.mapper.WmsPurchaseOrderDetailMapper"> <mapper namespace="org.dromara.wms.mapper.WmsPurchaseOrderDetailMapper">
<!-- 查询采购订单物料列表(带已入库数量统计) -->
<select id="selectListWithInstockedQty" resultType="org.dromara.wms.domain.vo.WmsPurchaseOrderDetailVo">
SELECT
pod.po_d_id,
pod.material_code,
pod.material_name,
pod.po_no,
pod.tax_price,
pod.purchase_qty,
pod.material_spe,
pod.unit_name,
pod.delivery_qty,
pod.tenant_id,
pod.create_time,
COALESCE(instocked.instocked_qty, 0) as instocked_qty,
(pod.purchase_qty - COALESCE(instocked.instocked_qty, 0)) as remaining_qty
FROM wms_purchase_order_detail pod
LEFT JOIN (
SELECT
pod_inner.po_d_id,
SUM(wid.instock_qty) as instocked_qty
FROM wms_instock_detail wid
INNER JOIN wms_instock_order wio ON wid.instock_id = wio.instock_id
INNER JOIN wms_purchase_order_detail pod_inner ON (
(
wid.po_d_id = pod_inner.po_d_id
OR (
wid.material_code = pod_inner.material_code
AND wio.order_no = pod_inner.po_no
)
)
)
WHERE wio.instock_type = '1'
GROUP BY pod_inner.po_d_id
) instocked ON pod.po_d_id = instocked.po_d_id
WHERE pod.po_no = #{poNo}
ORDER BY pod.create_time DESC
</select>
</mapper> </mapper>

Loading…
Cancel
Save