add: 新增二期载具库存查询

This commit is contained in:
2024-09-11 14:51:07 +08:00
parent 1ec386a450
commit 66417d8095
7 changed files with 300 additions and 4 deletions

View File

@@ -130,4 +130,10 @@ public class StructattrController {
structattrService.tunConfirm(json);
return new ResponseEntity<>(HttpStatus.OK);
}
@GetMapping("/twoVehicleIvt")
@Log("查询二期空托盘库存")
public ResponseEntity<Object> twoVehicleIvt(@RequestParam Map whereJson, Pageable page) {
return new ResponseEntity<>(structattrService.twoVehicleIvt(whereJson, page), HttpStatus.OK);
}
}

View File

@@ -139,4 +139,13 @@ public interface StructattrService {
* @return 、
*/
JSONObject unLockPointTwo(JSONObject whereJson);
/**
* 查询二期空托盘库存数据分页
*
* @param whereJson 条件
* @param page 分页参数
* @return Map<String, Object>
*/
Map<String, Object> twoVehicleIvt(Map whereJson, Pageable page);
}

View File

@@ -2,6 +2,7 @@ package org.nl.wms.basedata.st.service.impl;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
@@ -854,4 +855,23 @@ public class StructattrServiceImpl implements StructattrService {
return null;
}
@Override
public Map<String, Object> twoVehicleIvt(Map whereJson, Pageable page) {
String storagevehicle_code = MapUtil.getStr(whereJson, "storagevehicle_code");
String struct_code = MapUtil.getStr(whereJson, "struct_code");
HashMap<String, String> map = new HashMap<>();
if (ObjectUtil.isNotEmpty(storagevehicle_code)) {
map.put("storagevehicle_code", "%"+storagevehicle_code+"%");
}
if (ObjectUtil.isNotEmpty(struct_code)) {
map.put("struct_code", "%"+struct_code+"%");
}
map.put("storagevehicle_type", MapUtil.getStr(whereJson,"storagevehicle_type"));
map.put("flag", "3");
JSONObject jo = WQL.getWO("QST_STRUCT_ATTR").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "struct_code asc");
return jo;
}
}

View File

@@ -19,6 +19,8 @@
输入.sect_id TYPEAS s_string
输入.lock_type TYPEAS s_string
输入.storagevehicle_type TYPEAS s_string
输入.storagevehicle_code TYPEAS s_string
输入.struct_code TYPEAS s_string
输入.is_used TYPEAS s_string
输入.is_delete TYPEAS s_string
输入.have_vehicle TYPEAS s_string
@@ -104,5 +106,35 @@
ENDQUERY
ENDIF
IF 输入.flag = "3"
PAGEQUERY
SELECT
*
FROM
st_ivt_structattr
WHERE
is_delete = '0'
AND is_used = '1'
AND lock_type = '1'
AND IFNULL(storagevehicle_code, '') <> ''
AND is_emptyvehicle = '1'
AND sect_code = 'BZC01'
OPTION 输入.storagevehicle_code <> ""
storagevehicle_code LIKE 输入.storagevehicle_code
ENDOPTION
OPTION 输入.struct_code <> ""
struct_code LIKE 输入.struct_code
ENDOPTION
OPTION 输入.storagevehicle_type <> ""
storagevehicle_type = 输入.storagevehicle_type
ENDOPTION
ENDSELECT
ENDPAGEQUERY
ENDIF

View File

@@ -0,0 +1,97 @@
package org.nl.wms.sch.manage;
import com.alibaba.fastjson.JSONObject;
import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.nl.modules.wql.core.bean.WQLObject;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
@Slf4j
@Component
@RequiredArgsConstructor
public class AutoCleanIos {
private final RedissonClient redissonClient;
@SneakyThrows
public void run() {
RLock lock = redissonClient.getLock(this.getClass().getName());
boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS);
try {
if (tryLock){
/*
* 自动清除仓储相关单据
*/
// 出入库单据清除
cleanIosInAndOut();
// 移库单据清除
cleanIosMove();
}
}finally {
if (tryLock) {
lock.unlock();
}
}
}
/**
* 清除出入库单据
* 超过365天的删除
*/
private void cleanIosInAndOut() {
// 出入库单主表
WQLObject mst = WQLObject.getWQLObject("st_ivt_iostorinv");
// 出入库单明细表
WQLObject dtl = WQLObject.getWQLObject("st_ivt_iostorinvdtl");
// 出入库单分配明细表
WQLObject dis = WQLObject.getWQLObject("st_ivt_iostorinvdis");
// 需删除的主表集合
List<JSONObject> mstArr = mst.query("(TO_DAYS(NOW()) - TO_DAYS(input_time))>365")
.getResultJSONArray(0).toJavaList(JSONObject.class);
String iostorinv_id_in = mstArr.stream()
.map(row -> row.getString("iostorinv_id"))
.collect(Collectors.joining("','"));
// 删除主表
mst.delete("iostorinv_id IN ('"+iostorinv_id_in+"')");
// 删除明细表
dtl.delete("iostorinv_id IN ('"+iostorinv_id_in+"')");
// 删除分配明细表
dis.delete("iostorinv_id IN ('"+iostorinv_id_in+"')");
log.info("仓储【出入库单据】相关表清除成功!删除单据为:"+iostorinv_id_in);
}
/**
* 清除移库单单据
* 超过365天的删除
*/
private void cleanIosMove() {
// 移库单主表
WQLObject mst = WQLObject.getWQLObject("st_ivt_moveinv");
// 移库单明细表
WQLObject dtl = WQLObject.getWQLObject("st_ivt_moveinvdtl");
// 需删除的主表集合
List<JSONObject> mstArr = mst.query("(TO_DAYS(NOW()) - TO_DAYS(input_time))>365")
.getResultJSONArray(0).toJavaList(JSONObject.class);
String moveinv_id_in = mstArr.stream()
.map(row -> row.getString("moveinv_id"))
.collect(Collectors.joining("','"));
// 删除主表
mst.delete("moveinv_id IN ('"+moveinv_id_in+"')");
// 删除明细表
dtl.delete("moveinv_id IN ('"+moveinv_id_in+"')");
log.info("仓储【移库单据】相关表清除成功!删除单据为:"+moveinv_id_in);
}
}

View File

@@ -5,19 +5,20 @@
<span slot="label"><i class="el-icon-date" /> 木箱库存</span>
<BoxIvt />
</el-tab-pane>
<!--<el-tab-pane>
<el-tab-pane>
<span slot="label"><i class="el-icon-date" /> 载具库存</span>
<BoxIvt />
</el-tab-pane>-->
<VehicleIvt />
</el-tab-pane>
</el-tabs>
</div>
</template>
<script>
import BoxIvt from '@/views/wms/stat/twoivtquery/boxivt'
import VehicleIvt from '@/views/wms/stat/twoivtquery/vehicleivt'
export default {
name: 'Twoivtquery',
components: { BoxIvt }
components: { BoxIvt, VehicleIvt }
}
</script>

View File

@@ -0,0 +1,131 @@
<template>
<div class="app-container">
<!--工具栏-->
<div class="head-container">
<div v-if="crud.props.searchToggle">
<!-- 搜索 -->
<el-form
:inline="true"
class="demo-form-inline"
label-position="right"
label-width="90px"
label-suffix=":"
>
<el-form-item label="托盘编码">
<el-input
v-model="query.storagevehicle_code"
clearable
placeholder="输入托盘编码"
style="width: 185px;"
class="filter-item"
@keyup.enter.native="crud.toQuery"
/>
</el-form-item>
<el-form-item label="仓位编码">
<el-input
v-model="query.struct_code"
clearable
placeholder="输入仓位编码"
style="width: 185px;"
class="filter-item"
@keyup.enter.native="crud.toQuery"
/>
</el-form-item>
<el-form-item label="托盘类型">
<el-select
v-model="query.storagevehicle_type"
clearable
size="mini"
placeholder="全部"
class="filter-item"
@change="crud.toQuery"
>
<el-option
v-for="item in typeList"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
<rrOperation :crud="crud"/>
</el-form>
</div>
<!--如果想在工具栏加入更多按钮可以使用插槽方式 slot = 'left' or 'right'-->
<crudOperation :permission="permission" />
<!--表格渲染-->
<el-table ref="table" v-loading="crud.loading" :data="crud.data" size="mini" style="width: 100%;" @selection-change="crud.selectionChangeHandler">
<el-table-column prop="struct_code" label="仓位编码" :min-width="flexWidth('struct_code',crud.data,'仓位编码')" />
<el-table-column prop="struct_name" label="仓位名称" :min-width="flexWidth('struct_name',crud.data,'仓位名称')" />
<el-table-column prop="storagevehicle_code" label="托盘编码" :min-width="flexWidth('storagevehicle_code',crud.data,'托盘编码')" />
<el-table-column prop="storagevehicle_type" label="托盘类型" :min-width="flexWidth('storagevehicle_type',crud.data,'托盘类型')" :formatter="formattTwo" />
</el-table>
<!--分页组件-->
<pagination />
</div>
</div>
</template>
<script>
import crudStructattr from '@/views/wms/basedata/st/struct/structattr'
import CRUD, { crud, form, header, presenter } from '@crud/crud'
import rrOperation from '@crud/RR.operation'
import crudOperation from '@crud/CRUD.operation'
import udOperation from '@crud/UD.operation'
import pagination from '@crud/Pagination'
export default {
name: 'TwoVehicleIvt',
components: { pagination, crudOperation, rrOperation, udOperation },
dicts: ['product_area'],
mixins: [presenter(), header(), form(), crud()],
cruds() {
return CRUD({
title: '二期托盘库存',
url: 'api/structattr/twoVehicleIvt',
idField: 'struct_id',
sort: 'struct_code,desc',
crudMethod: { ...crudStructattr },
optShow: {
add: false,
edit: false,
del: false,
download: false,
reset: true
}
})
},
data() {
return {
permission: {},
rules: {
},
typeList: [
{ 'label': '小托盘', 'value': '1' },
{ 'label': '大托盘', 'value': '2' }
]
}
},
methods: {
// 钩子在获取表格数据之前执行false 则代表不获取数据
[CRUD.HOOK.beforeRefresh]() {
return true
},
hand(value) {
this.crud.toQuery()
},
formattTwo(row) {
if (row.storagevehicle_type === '1') {
return '小托盘'
}
if (row.storagevehicle_type === '2') {
return '大托盘'
}
}
}
}
</script>
<style scoped>
</style>