Browse Source

feat: 出库新增

master
李永德 2 days ago
parent
commit
deb0edde9f
  1. 1
      lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/dao/mapper/StIvtIostorinvMapper.xml
  2. 13
      lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/st/dao/mapper/StIvtStructivtMapper.java
  3. 121
      lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/st/dao/mapper/StIvtStructivtMapper.xml
  4. 25
      lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/rest/CheckOutBillController.java
  5. 19
      lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/CheckOutBillService.java
  6. 31
      lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/dto/StockMaterialQueryParam.java
  7. 49
      lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/impl/CheckOutBillServiceImpl.java
  8. 35
      lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/vo/StockMaterialVo.java
  9. 13
      lms/nladmin-ui/src/views/wms/st/outbill/AddDialog.vue

1
lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/dao/mapper/StIvtIostorinvMapper.xml

@ -859,6 +859,7 @@
and b.is_overdue = '0'
GROUP BY a.iostorinv_id
) a ON a.iostorinv_id = ios.iostorinv_id
ORDER BY iostorinv_id DESC
</select>
</mapper>

13
lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/st/dao/mapper/StIvtStructivtMapper.java

@ -1,5 +1,6 @@
package org.nl.b_lms.storage_manage.st.dao.mapper;
import com.alibaba.fastjson.JSONArray;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.apache.ibatis.annotations.Param;
@ -8,6 +9,8 @@ import org.nl.common.domain.query.PageQuery;
import org.nl.wms.basedata.st.service.dto.ProductStoreDownDto;
import org.nl.wms.basedata.st.service.dto.ProductStoreParam;
import org.nl.wms.basedata.st.service.vo.ProductStoreVo;
import org.nl.wms.st.outbill.service.dto.StockMaterialQueryParam;
import org.nl.wms.st.outbill.service.vo.StockMaterialVo;
import org.nl.wms.stat.service.dto.PastStructPageParam;
import org.nl.wms.stat.service.vo.PastStructPageVo;
@ -25,4 +28,14 @@ public interface StIvtStructivtMapper extends BaseMapper<StIvtStructivt> {
IPage<PastStructPageVo> getPastStructPage(IPage<PastStructPageVo> pages, @Param("paramMap") PastStructPageParam paramMap);
List<PastStructPageVo> getPastStructDatas(@Param("paramMap") PastStructPageParam paramMap);
/**
* 查询库存创建出库单选择物料- 分页查询
* @param paramMap 参数
* @param pages 分页
* @return {@link StockMaterialVo}
*/
IPage<StockMaterialVo> queryAddDtl(StockMaterialQueryParam paramMap, IPage<StockMaterialVo> pages);
JSONArray getBoxAllMaterial(String boxNo);
}

121
lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/st/dao/mapper/StIvtStructivtMapper.xml

@ -666,4 +666,125 @@
</if>
ORDER BY sub.package_box_sn ASC
</select>
<select id="queryAddDtl" resultType="org.nl.wms.st.outbill.service.vo.StockMaterialVo">
SELECT
ivt.stockrecord_id,
ivt.struct_id,
ivt.struct_code,
ivt.struct_name,
ivt.region_id,
ivt.material_id,
ivt.quality_scode,
ivt.pcsn,
ivt.canuse_qty,
ivt.frozen_qty,
ivt.ivt_qty AS plan_qty,
ivt.warehousing_qty,
ivt.qty_unit_id,
ivt.instorage_time,
mater.material_name,
mater.material_code,
unit.unit_name AS qty_unit_name,
attr.storagevehicle_code AS box_no,
sub.sap_pcsn
FROM
ST_IVT_StructIvt ivt
LEFT JOIN md_me_materialbase mater ON mater.material_id = ivt.material_id
LEFT JOIN md_pb_measureunit unit ON unit.measure_unit_id = ivt.qty_unit_id
LEFT JOIN ST_IVT_StructAttr attr ON attr.struct_id = ivt.struct_id
LEFT JOIN PDM_BI_SubPackageRelation sub ON ivt.pcsn = sub.container_name AND sub.status = '2' AND attr.storagevehicle_code = sub.package_box_sn
WHERE
attr.is_delete = '0'
AND attr.is_used = '1'
<if test="paramMap.material_code != null and paramMap.material_code != ''">
AND (
mater.material_code LIKE '%${paramMap.material_code}%' or
mater.material_name LIKE '%${paramMap.material_code}%'
)
</if>
<if test="paramMap.stor_id != null and paramMap.stor_id != ''">
AND attr.stor_id = #{paramMap.stor_id}
</if>
<if test="paramMap.sap_pcsn != null and paramMap.sap_pcsn != ''">
AND sub.sap_pcsn LIKE '%${paramMap.sap_pcsn}%'
</if>
<if test="paramMap.sap_pcsn_in != null and !paramMap.sap_pcsn_in.isEmpty()">
AND sub.sap_pcsn IN
<foreach collection="paramMap.sap_pcsn_in" item="code" separator="," open="(" close=")">
#{code}
</foreach>
</if>
<if test="paramMap.package_box_sn != null and paramMap.package_box_sn != ''">
AND sub.package_box_sn LIKE '%${paramMap.package_box_sn}%'
</if>
<if test="paramMap.box_no_in != null and !paramMap.box_no_in.isEmpty()">
AND sub.package_box_sn IN
<foreach collection="paramMap.box_no_in" item="code" separator="," open="(" close=")">
#{code}
</foreach>
</if>
<if test="paramMap.pcsn != null and paramMap.pcsn != ''">
AND ivt.pcsn LIKE '%${paramMap.pcsn}%'
</if>
<if test="paramMap.pcsn_in != null and !paramMap.pcsn_in.isEmpty()">
AND ivt.pcsn IN
<foreach collection="paramMap.pcsn_in" item="code" separator="," open="(" close=")">
#{code}
</foreach>
</if>
<if test="paramMap.begin_time != null and paramMap.begin_time != ''">
AND ivt.instorage_time <![CDATA[ >= ]]> #{paramMap.begin_time}
</if>
<if test="paramMap.end_time != null and paramMap.end_time != ''">
AND ivt.instorage_time <![CDATA[ <= ]]> #{paramMap.end_time}
</if>
<if test="paramMap.canuse_qty != null and paramMap.canuse_qty != ''">
AND ivt.canuse_qty <![CDATA[ > ]]> #{paramMap.canuse_qty}
</if>
<if test="paramMap.width_standard != null and paramMap.width_standard != ''">
AND sub.width_standard = #{paramMap.width_standard}
</if>
<if test="paramMap.thickness_request != null and paramMap.thickness_request != ''">
AND sub.thickness_request = #{paramMap.thickness_request}
</if>
<if test="paramMap.customer_name != null and paramMap.customer_name != ''">
AND sub.customer_name = #{paramMap.customer_name}
</if>
<if test="paramMap.struct_code != null and paramMap.struct_code != ''">
AND attr.struct_code LIKE '%${paramMap.struct_code}%'
</if>
ORDER BY ivt.struct_code ASC
</select>
<select id="getBoxAllMaterial" resultType="com.alibaba.fastjson.JSONObject">
SELECT
ivt.stockrecord_id,
ivt.struct_id,
ivt.struct_code,
ivt.struct_name,
ivt.region_id,
ivt.material_id,
ivt.quality_scode,
ivt.pcsn,
ivt.canuse_qty,
ivt.frozen_qty,
ivt.ivt_qty AS plan_qty,
ivt.warehousing_qty,
ivt.qty_unit_id,
ivt.instorage_time,
mater.material_name,
mater.material_code,
unit.unit_name AS qty_unit_name,
attr.storagevehicle_code AS box_no,
sub.sap_pcsn
FROM
ST_IVT_StructIvt ivt
LEFT JOIN md_me_materialbase mater ON mater.material_id = ivt.material_id
LEFT JOIN md_pb_measureunit unit ON unit.measure_unit_id = ivt.qty_unit_id
LEFT JOIN ST_IVT_StructAttr attr ON attr.struct_id = ivt.struct_id
LEFT JOIN PDM_BI_SubPackageRelation sub ON ivt.pcsn = sub.container_name AND sub.status = '2' AND attr.storagevehicle_code = sub.package_box_sn
WHERE
attr.is_delete = '0'
AND attr.is_used = '1'
AND attr.storagevehicle_code = #{boxNo}
</select>
</mapper>

25
lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/rest/CheckOutBillController.java

@ -1,6 +1,8 @@
package org.nl.wms.st.outbill.rest;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.nl.b_lms.storage_manage.ios.service.iostorInv.IStIvtIostorinvOutService;
import org.nl.common.TableDataInfo;
import org.nl.common.domain.query.PageQuery;
import org.nl.modules.logging.annotation.Log;
@ -9,13 +11,12 @@ import org.nl.wms.st.outbill.service.CheckOutBillService;
import org.nl.wms.st.outbill.service.dto.OutBillDtlQueryParam;
import org.nl.wms.st.outbill.service.dto.OutBillQueryPageParam;
import org.nl.wms.st.outbill.service.dto.OutBillTaskParam;
import org.springframework.data.domain.Pageable;
import org.nl.wms.st.outbill.service.dto.StockMaterialQueryParam;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.Map;
/**
* 出库单管理
@ -30,6 +31,8 @@ public class CheckOutBillController {
private CheckOutBillService checkOutBillService;
@Resource
private ISysDictService dictService;
@Resource
private IStIvtIostorinvOutService iStIvtIostorinvOutService;
@GetMapping
@Log("查询出库单")
//@PreAuthorize("@el.check('checkoutbill:list')")
@ -41,6 +44,24 @@ public class CheckOutBillController {
public ResponseEntity<Object> getOutBillDtl(OutBillDtlQueryParam param) {
return new ResponseEntity<>(checkOutBillService.getOutBillDtl(param), HttpStatus.OK);
}
@GetMapping("/addDtl")
@Log("查询库存(创建出库单选择物料)")
//@PreAuthorize("@el.check('checkoutbill:list')")
public ResponseEntity<Object> queryAddDtl(StockMaterialQueryParam paramMap, PageQuery page) {
return new ResponseEntity<>(TableDataInfo.build(checkOutBillService.queryAddDtl(paramMap, page)), HttpStatus.OK);
}
@PostMapping("/queryBox")
@Log("新增物料库存条件过滤")
public ResponseEntity<Object> queryBox(@RequestBody JSONObject whereJson) {
return new ResponseEntity<>(checkOutBillService.queryBox(whereJson), HttpStatus.OK);
}
@PostMapping()
@Log("新增出库单")
public ResponseEntity<Object> insertDtl(@RequestBody JSONObject whereJson) {
iStIvtIostorinvOutService.insertMst(whereJson);
return new ResponseEntity<>(HttpStatus.CREATED);
}
@PostMapping("/getOutBillTask2")
@Log("详情查询出库单分配任务2")
public ResponseEntity<Object> getOutBillTask2(@RequestBody OutBillTaskParam param) {

19
lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/CheckOutBillService.java

@ -1,13 +1,17 @@
package org.nl.wms.st.outbill.service;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.StIvtIostorinv;
import org.nl.common.domain.query.PageQuery;
import org.nl.wms.st.outbill.service.dto.OutBillDtlQueryParam;
import org.nl.wms.st.outbill.service.dto.OutBillQueryPageParam;
import org.nl.wms.st.outbill.service.dto.OutBillTaskParam;
import org.nl.wms.st.outbill.service.dto.StockMaterialQueryParam;
import org.nl.wms.st.outbill.service.vo.OutBillDtlVo;
import org.nl.wms.st.outbill.service.vo.OutBillTaskVo;
import org.nl.wms.st.outbill.service.vo.StockMaterialVo;
import java.util.List;
@ -31,4 +35,19 @@ public interface CheckOutBillService {
List<OutBillTaskVo> getOutBillTask2(OutBillTaskParam param);
IPage<StIvtIostorinv> queryOutBillPage(OutBillQueryPageParam paramMap, PageQuery page);
/**
* 查询库存创建出库单选择物料- 分页查询
* @param paramMap
* @param page
* @return
*/
IPage<StockMaterialVo> queryAddDtl(StockMaterialQueryParam paramMap, PageQuery page);
/**
*
* @param whereJson
* @return
*/
JSONArray queryBox(JSONObject whereJson);
}

31
lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/dto/StockMaterialQueryParam.java

@ -0,0 +1,31 @@
package org.nl.wms.st.outbill.service.dto;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
* 出库单物料选择查询参数
* @Author: lyd
* @Date: 2025/6/19
*/
@Data
public class StockMaterialQueryParam implements Serializable {
private String stor_id;
private String material_code;
private String pcsn;
private List<String> pcsn_in;
private List<String> sap_pcsn_in;
private String sap_pcsn;
private String package_box_sn;
private List<String> box_no_in;
private String width_standard;
private String thickness_request;
private String customer_name;
private String struct_code;
private String begin_time;
private String end_time;
private String create_mode;
private String canuse_qty;
}

49
lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/impl/CheckOutBillServiceImpl.java

@ -1,6 +1,8 @@
package org.nl.wms.st.outbill.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;
@ -8,19 +10,26 @@ import org.nl.b_lms.storage_manage.ios.service.iostorInv.IStIvtIostorinvdisServi
import org.nl.b_lms.storage_manage.ios.service.iostorInv.IStIvtIostorinvdtlService;
import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.StIvtIostorinv;
import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.mapper.StIvtIostorinvMapper;
import org.nl.b_lms.storage_manage.st.dao.mapper.StIvtStructivtMapper;
import org.nl.b_lms.storage_manage.st.service.StIvtBsrealstorattrService;
import org.nl.common.domain.query.PageQuery;
import org.nl.common.utils.SecurityUtils;
import org.nl.common.utils.StringDealUtils;
import org.nl.modules.wql.WQL;
import org.nl.wms.basedata.st.service.StructivtService;
import org.nl.wms.st.outbill.service.CheckOutBillService;
import org.nl.wms.st.outbill.service.dto.OutBillDtlQueryParam;
import org.nl.wms.st.outbill.service.dto.OutBillQueryPageParam;
import org.nl.wms.st.outbill.service.dto.OutBillTaskParam;
import org.nl.wms.st.outbill.service.dto.StockMaterialQueryParam;
import org.nl.wms.st.outbill.service.vo.OutBillDtlVo;
import org.nl.wms.st.outbill.service.vo.OutBillTaskVo;
import org.nl.wms.st.outbill.service.vo.StockMaterialVo;
import org.nl.wms.stat.service.vo.PastStructPageVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.HashSet;
import java.util.List;
/**
@ -38,6 +47,8 @@ public class CheckOutBillServiceImpl implements CheckOutBillService {
private StIvtBsrealstorattrService bsrealstorattrService;
@Autowired
private StIvtIostorinvMapper stIvtIostorinvMapper;
@Autowired
private StIvtStructivtMapper stIvtStructivtMapper;
@Override
public List<OutBillDtlVo> getOutBillDtl(OutBillDtlQueryParam param) {
return iostorinvdtlService.getOutBillDtl(param);
@ -76,4 +87,42 @@ public class CheckOutBillServiceImpl implements CheckOutBillService {
IPage<StIvtIostorinv> pages = new Page<>(page.getPage() + 1, page.getSize());
return stIvtIostorinvMapper.outBillPage(pages, paramMap);
}
@Override
public IPage<StockMaterialVo> queryAddDtl(StockMaterialQueryParam paramMap, PageQuery page) {
paramMap.setCanuse_qty("0");
paramMap.setPcsn_in(StringDealUtils.splitString(paramMap.getPcsn()));
paramMap.setBox_no_in(StringDealUtils.splitString(paramMap.getPackage_box_sn()));
paramMap.setSap_pcsn_in(StringDealUtils.splitString(paramMap.getSap_pcsn()));
if (CollectionUtil.isNotEmpty(paramMap.getPcsn_in())) {
paramMap.setPcsn("");
}
if (CollectionUtil.isNotEmpty(paramMap.getBox_no_in())) {
paramMap.setPackage_box_sn("");
}
if (CollectionUtil.isNotEmpty(paramMap.getSap_pcsn_in())) {
paramMap.setSap_pcsn("");
}
IPage<StockMaterialVo> pages = new Page<>(page.getPage() + 1, page.getSize());
return stIvtStructivtMapper.queryAddDtl(paramMap, pages);
}
@Override
public JSONArray queryBox(JSONObject whereJson) {
JSONArray data = whereJson.getJSONArray("data");
// 先过滤相同的箱号
HashSet<String> boxSet = new HashSet<>();
for (int i = 0; i < data.size(); i++) {
JSONObject json = data.getJSONObject(i);
boxSet.add(json.getString("box_no"));
}
JSONArray array = new JSONArray();
// 遍历
for (String box_no : boxSet) {
JSONArray boxArr = stIvtStructivtMapper.getBoxAllMaterial(box_no);
array.addAll(boxArr);
}
return array;
}
}

35
lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/vo/StockMaterialVo.java

@ -0,0 +1,35 @@
package org.nl.wms.st.outbill.service.vo;
import lombok.Data;
import java.io.Serializable;
/**
* 出库单物料选择库存物料VO
*
* @Author: lyd
* @Date: 2025/6/19
*/
@Data
public class StockMaterialVo implements Serializable {
private String stockrecord_id;
private String struct_id;
private String struct_code;
private String struct_name;
private String region_id;
private String material_id;
private String quality_scode;
private String pcsn;
private String canuse_qty;
private String frozen_qty;
private String ivt_qty;
private String plan_qty;
private String warehousing_qty;
private String qty_unit_id;
private String instorage_time;
private String material_name;
private String material_code;
private String qty_unit_name;
private String box_no;
private String sap_pcsn;
}

13
lms/nladmin-ui/src/views/wms/st/outbill/AddDialog.vue

@ -57,8 +57,8 @@
>
<el-option
v-for="item in dict.ST_INV_OUT_TYPE"
:disabled="item.value === '1099'"
:key="item.value"
:disabled="item.value === '1099'"
:label="item.label"
:value="item.value"
/>
@ -99,7 +99,7 @@
<el-form-item label="业务日期" prop="biz_date">
<el-date-picker v-model="form.biz_date" type="date" placeholder="选择日期" style="width: 210px" value-format="yyyy-MM-dd" :disabled="crud.status.view > 0" />
</el-form-item>
<el-form-item label="移入仓库" prop="out_stor_id" v-if="form.bill_type === '1004'" required="true">
<el-form-item v-if="form.bill_type === '1004'" label="移入仓库" prop="out_stor_id" required="true">
<label slot="label">移入仓库:</label>
<el-select
v-model="form.out_stor_id"
@ -236,7 +236,7 @@
</template>
</el-table-column>-->
<!-- <el-table-column prop="source_bill_type" label="源单类型" align="center" width="130px" :formatter="invtypeFormat" show-overflow-tooltip />-->
<!-- <el-table-column prop="source_bill_type" label="源单类型" align="center" width="130px" :formatter="invtypeFormat" show-overflow-tooltip />-->
<el-table-column prop="source_bill_code" label="源单号" align="center" width="130px" show-overflow-tooltip />
<el-table-column show-overflow-tooltip prop="remark" label="明细备注" align="center">
<template scope="scope">
@ -349,7 +349,7 @@ export default {
this.crud.notify('移入仓库不能为空!', CRUD.NOTIFICATION_TYPE.INFO)
return false
}
/*if (this.form.out_stor_id === this.form.stor_id) {
/* if (this.form.out_stor_id === this.form.stor_id) {
this.crud.notify('移出仓库和移入仓库不能一致!', CRUD.NOTIFICATION_TYPE.INFO)
return false
}*/
@ -441,7 +441,7 @@ export default {
const data = {
'data': rows
}
if(this.form.bill_type === '1011') {
if (this.form.bill_type === '1011') {
rows.forEach((item) => {
if (this.form.tableData.length !== 0) {
this.flagnow = false
@ -463,9 +463,10 @@ export default {
})
this.form.detail_count = this.form.tableData.length
} else {
//
checkoutbill.queryBox(data).then(res => {
res.forEach((item) => {
debugger
// debugger
if (this.form.tableData.length !== 0) {
this.flagnow = false
for (let i = 0; i < this.form.tableData.length; i++) {

Loading…
Cancel
Save