代码修改

This commit is contained in:
2022-06-28 18:30:56 +08:00
parent 4b908ac5da
commit 4f2bcc8cec
10 changed files with 333 additions and 94 deletions

View File

@@ -104,6 +104,8 @@
LEFT JOIN md_me_materialbase mb ON mb.material_id = dtl.material_id
WHERE
dtl.material_type = '01'
AND
dtl.is_need_manage = '1'
OPTION 输入.formula_id <> ""
dtl.formula_id = 输入.formula_id
ENDOPTION
@@ -123,6 +125,8 @@
LEFT JOIN md_pb_classstandard mb ON mb.class_id = dtl.material_id
WHERE
dtl.material_type = '02'
AND
dtl.is_need_manage = '1'
OPTION 输入.formula_id <> ""
dtl.formula_id = 输入.formula_id
ENDOPTION

View File

@@ -13,6 +13,7 @@ import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.HashMap;
import java.util.Map;
@RestController
@@ -76,6 +77,14 @@ public class SparePartOutController {
return new ResponseEntity<>(sparePartOutService.getDisDtl(whereJson), HttpStatus.OK);
}
@PostMapping("/getStructIvt")
@Log("完成单据")
@ApiOperation("完成单据")
//@PreAuthorize("@el.check('materialtype:list')")
public ResponseEntity<Object> getStructIvt(@RequestBody JSONObject whereJson) {
return new ResponseEntity<>(sparePartOutService.getStructIvt(whereJson), HttpStatus.OK);
}
@PostMapping("/getIvt")
@Log("查询备件库存")
@ApiOperation("查询备件库存")

View File

@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.springframework.data.domain.Pageable;
import java.util.HashMap;
import java.util.Map;
public interface SparePartOutService {
@@ -34,6 +35,8 @@ public interface SparePartOutService {
JSONArray getDisDtl(JSONObject whereJson);
JSONArray getStructIvt(JSONObject whereJson);
JSONArray getIvt(JSONObject whereJson);
void divStruct(JSONObject whereJson);

View File

@@ -206,6 +206,19 @@ public class SparePartOutServiceImpl implements SparePartOutService {
return dtl_rows;
}
@Override
public JSONArray getStructIvt(JSONObject whereJson) {
String search = (String) whereJson.get("search");
HashMap<String, String> map = new HashMap<>();
map.put("flag", "12");
map.put("material_id", whereJson.getString("material_id"));
if (StrUtil.isNotEmpty(search)){
map.put("search", search);
}
JSONArray dtl_rows = WQL.getWO("QEM_BI_SPAREPARTOUT").addParamMap(map).process().getResultJSONArray(0);
return dtl_rows;
}
@Transactional(rollbackFor = Exception.class)
@Override
public void createCode(JSONObject form) {

View File

@@ -30,6 +30,7 @@
输入.iostorinvdtl_id TYPEAS s_string
输入.storagevehicle_code TYPEAS s_string
输入.iostorinv_id TYPEAS s_string
输入.material_id TYPEAS s_string
[临时表]
@@ -464,6 +465,29 @@
ENDQUERY
ENDIF
IF 输入.flag = "12"
QUERY
SELECT
sa.sect_name,
sa.struct_name,
ivt.sparepart_only_id,
mb.material_code,
mb.material_name,
ivt.pcsn,
ivt.ivt_qty,
ivt.qty_unit_name,
ivt.instorage_time
FROM
em_bi_devicesparepartivt ivt
LEFT JOIN st_ivt_structattr sa ON sa.struct_id = ivt.struct_id
LEFT JOIN md_me_materialbase mb ON mb.material_id = ivt.material_id
WHERE
ivt.material_id = 输入.material_id
ENDSELECT
ENDQUERY
ENDIF

View File

@@ -980,8 +980,10 @@ public class InAndOutRetrunServiceImpl implements InAndOutReturnService {
String batch_seq = jo.getString("pcsn");
List<Entity> all = Db.use((DataSource) SpringContextHolder.getBean("dataSource1")).findAll(Entity.create("BATCH_SEQ").set("DR", "0").set("ITEM_ID", item_id).set("BATCH_SEQ", batch_seq));
if (ObjectUtil.isNotEmpty(all)) {
log.info(item_id+","+batch_seq+"批次主键为:"+all.get(0).getStr("BATCH_ID"));
return all.get(0).getStr("BATCH_ID");
} else {
log.info(item_id+","+batch_seq+"未查询到批次主键!");
return null;
}
}

View File

@@ -96,6 +96,14 @@ export function getDisDtl(data) {
})
}
export function getStructIvt(data) {
return request({
url: '/api/sb/outbill/getStructIvt',
method: 'post',
data
})
}
export function createCode(data) {
return request({
url: '/api/sb/outbill/createCode',
@@ -144,46 +152,6 @@ export function bucketDtl(data) {
})
}
export function updateTask(data) {
return request({
url: '/api/sb/outbill/updateTask',
method: 'post',
data
})
}
export function delTask(data) {
return request({
url: '/api/sb/outbill/delTask',
method: 'post',
data
})
}
export function reIssueTask(data) {
return request({
url: '/api/sb/outbill/reIssueTask',
method: 'post',
data
})
}
export function confirmTask(data) {
return request({
url: '/api/sb/outbill/confirmTask',
method: 'post',
data
})
}
export function cancelTask(data) {
return request({
url: '/api/sb/outbill/cancelTask',
method: 'post',
data
})
}
export function confirm(data) {
return request({
url: '/api/sb/outbill/confirm',
@@ -209,5 +177,5 @@ export function getIvt(data) {
}
export default { add, edit, del, getType, getBillDtl, disConfirm, insertDtl, getIODtl, commit, checkVehicle,
deleteDisDtl, getDisDtl, createCode, divPoint, cancelCreate, getIvt,
divStruct, bucketDtl, updateTask, delTask, reIssueTask, confirmTask, cancelTask, confirm, backConfirm }
deleteDisDtl, getDisDtl, createCode, divPoint, cancelCreate, getIvt, getStructIvt,
divStruct, bucketDtl, confirm, backConfirm }

View File

@@ -197,7 +197,7 @@ export default {
crudProductRoute.getProductRouteDtl(this.form).then(res => {
this.form.tableData = res
})
this.form.product_series = this.dict.label.product_series[this.form.product_series]
// this.form.product_series = this.dict.label.product_series[this.form.product_series]
},
handleClose(done) {
this.$confirm('确认关闭?')

View File

@@ -56,10 +56,8 @@
<el-table-column show-overflow-tooltip prop="material_spec" label="规格" align="center"/>
<el-table-column show-overflow-tooltip prop="material_model" label="型号" align="center"/>
<el-table-column show-overflow-tooltip prop="plan_qty" :formatter="crud.formatNum3" label="数量" align="center"/>
<el-table-column show-overflow-tooltip prop="assign_qty" :formatter="crud.formatNum3" label="已出数量"
align="center"/>
<el-table-column show-overflow-tooltip prop="unassign_qty" :formatter="crud.formatNum3" label="未出数量"
align="center"/>
<el-table-column show-overflow-tooltip prop="assign_qty" :formatter="crud.formatNum3" label="已出数量" align="center"/>
<el-table-column show-overflow-tooltip prop="unassign_qty" :formatter="crud.formatNum3" label="未出数量" align="center"/>
<el-table-column show-overflow-tooltip prop="qty_unit_name" label="单位" align="center"/>
</el-table>
</el-card>
@@ -86,7 +84,7 @@
type="warning"
icon="el-icon-check"
size="mini"
@click="createCode()"
@click="openStructIvt()"
>
手动分配
</el-button>
@@ -100,16 +98,6 @@
>
删除分配
</el-button>
<el-button
slot="left"
class="filter-item"
type="primary"
icon="el-icon-plus"
size="mini"
@click="divStruct()"
>
确认
</el-button>
</span>
</div>
<el-card class="box-card" shadow="never" :body-style="{padding:'0'}">
@@ -134,19 +122,19 @@
</el-table>
</el-card>
<StructDiv ref="child" :dialog-show.sync="structShow" :sect-prop="sectProp" @tableChanged="tableChanged"/>
<StructIvt :dialog-show.sync="structShow" :open-array="ivtParam" :rowmst="openRow" @StructIvtClosed="queryTableDtl"/>
</el-dialog>
</template>
<script>
import CRUD, { crud } from '@crud/crud'
import crudSectattr from '@/api/wms/basedata/st/sectattr'
import StructDiv from '@/views/wms/sb/inbill/StructDialog'
import sparePart from '@/api/wms/sb/sparepart'
import StructIvt from '@/views/wms/sb/outbill/StructIvt'
import sparePart from '@/api/wms/sb/sparepartout'
export default {
name: 'DivDialog',
components: { StructDiv },
components: { StructIvt },
mixins: [crud()],
dicts: ['io_bill_status'],
props: {
@@ -173,11 +161,13 @@ export default {
dialogVisible: false,
stor_id: '',
sect_id: '',
ivtParam: [],
sectProp: null,
structShow: false,
bucketObj: null,
sects: [],
sect_val: null,
openRow: {},
form: {
dtl_row: null,
tableMater: []
@@ -198,25 +188,18 @@ export default {
crudSectattr.getSect({ 'is_attachment': '1', 'sect_type_attr': '00' }).then(res => {
this.sects = res.content
})
/*let area_type = ''
if (this.billType === '000101' || this.billType === '000102' || this.billType === '000201' || this.billType === '000202' || this.billType === '000305') {
area_type = '\'21\''
},
openStructIvt() {
if (!this.form.dtl_row) {
this.crud.notify('请选择一条出库明细', CRUD.NOTIFICATION_TYPE.INFO)
return
}
if (this.billType === '000301' || this.billType === '000303' || this.billType === '000304') {
area_type = '\'37\''
}
if (this.billType === '000302') {
area_type = '\'26\',\'32\',\'33\',\'34\''
}
if (this.billType === '000601') {
area_type = '\'29\''
}
if (this.billType === '000401') {
area_type = '\'21\',\'26\',\'29\',\'31\',\'35\',\'32\',\'33\',\'34\''
}
crudPoint.getPoint({ 'area_type': area_type }).then(res => {
this.pointlist = res
})*/
debugger
sparePart.getStructIvt(this.form.dtl_row).then(res => {
this.ivtParam = res
this.structShow = true
this.openRow = this.form.dtl_row
})
},
toDelete(data) {
data.pop = true
@@ -231,6 +214,7 @@ export default {
this.$refs['form2'].resetFields()
},
clcikRow(row, column, event) {
debugger
this.form.dtl_row = row
sparePart.getIODtl({ 'bill_code': this.form.dtl_row.bill_code }).then(res => {
this.openParam = res
@@ -291,6 +275,11 @@ export default {
})
})
},
queryTableDtl() {
sparePart.getIODtl({ 'bill_code': this.form.dtl_row.bill_code }).then(res => {
this.openParam = res
})
},
disConfirm() {
debugger
let rows = this.$refs.dis_table.selection
@@ -343,20 +332,6 @@ export default {
this.bucketObj = row
this.form.bucketunique = row.bucketunique
this.form.storage_qty = row.storage_qty
},
divStruct() {
debugger
let rows = this.$refs.dis_table.selection
if (rows.length == 0) {
this.crud.notify('请至少勾选一条记录!', CRUD.NOTIFICATION_TYPE.INFO)
return
}
if (!this.sect_id || !this.stor_id) {
this.crud.notify('请先选择备件库区!', CRUD.NOTIFICATION_TYPE.INFO)
return
}
this.structShow = true
this.$refs.child.getMsg(false)
}
}
}

View File

@@ -0,0 +1,241 @@
<template>
<el-dialog
append-to-body
:visible.sync="dialogVisible"
destroy-on-close
:show-close="false"
fullscreen
@close="close"
@open="open"
>
<span slot="title" class="dialog-footer">
<div class="crud-opts2">
<span class="el-dialog__title2">出库手工分配</span>
<span class="crud-opts-right2">
<!--左侧插槽-->
<slot name="left" />
<el-button slot="left" type="info" @click="dialogVisible = false">关闭</el-button>
<el-button slot="left" type="primary" @click="submit">保存</el-button>
</span>
</div>
</span>
<div class="crud-opts2">
<span class="role-span">可分配库存</span>
<div class="crud-opts-form">
<el-form ref="form2" :inline="true" :model="queryrow" size="mini">
<el-form-item label="备品备件" prop="material_name">
<el-input
v-model="queryrow.material_name"
disabled
/>
</el-form-item>
<el-form-item label="待分配" prop="unassign_qty">
<el-input-number
v-model="queryrow.unassign_qty"
:controls="false"
:precision="3"
:min="0"
disabled
/>
</el-form-item>
<el-form-item label="已分配" prop="assign_qty">
<el-input-number
v-model="queryrow.assign_qty"
:controls="false"
:precision="3"
:min="0"
disabled
/>
</el-form-item>
<el-form-item label="库区" prop="sect_id">
<el-cascader
placeholder="请选择"
:options="sects"
:props="{ checkStrictly: true }"
clearable
@change="sectQueryChange"
/>
</el-form-item>
<el-form-item label="关键字" prop="remark">
<el-input
v-model="queryrow.remark"
clearable
style="width: 220px"
size="mini"
placeholder="货位编码、名称或载具号"
prefix-icon="el-icon-search"
class="filter-item"
/>
</el-form-item>
<el-button class="filter-item" size="mini" type="success" icon="el-icon-search" @click="queryStruct">搜索</el-button>
</el-form>
</div>
</div>
<!--表格渲染-->
<el-table
ref="table"
:data="tableDtl"
style="width: 100%;"
max-height="400"
border
:highlight-current-row="true"
:header-cell-style="{background:'#f5f7fa',color:'#606266'}"
>
<el-table-column type="selection" width="55" />
<el-table-column show-overflow-tooltip prop="sect_name" label="库区" align="center" />
<el-table-column show-overflow-tooltip prop="struct_name" label="仓位" align="center" />
<el-table-column show-overflow-tooltip prop="sparepart_only_id" label="唯一标识" align="center" />
<el-table-column show-overflow-tooltip prop="material_name" label="物料编码" align="center" />
<el-table-column show-overflow-tooltip prop="material_code" label="物料名称" align="center" />
<el-table-column show-overflow-tooltip prop="pcsn" label="批次号" align="center" />
<el-table-column show-overflow-tooltip prop="ivt_qty" label="库存数量" align="center" />
<el-table-column show-overflow-tooltip prop="qty_unit_name" label="单位" align="center" />
<el-table-column show-overflow-tooltip prop="instorage_time" label="入库时间" align="center" />
</el-table>
</el-dialog>
</template>
<script>
import CRUD, { header } from '@crud/crud'
import crudSectattr from '@/api/wms/basedata/st/sectattr'
import checkoutbill from '@/api/wms/st/core/outbill/checkoutbill'
export default {
name: 'StructIvt',
components: { },
mixins: [header()],
props: {
dialogShow: {
type: Boolean,
default: false
},
rowmst: {
type: Object
},
openArray: {
type: Array,
default: () => { return [] }
}
},
data() {
return {
dialogVisible: false,
dialogVisible2: false,
queryrow: {},
sects: [],
tableDtl: []
}
},
watch: {
dialogShow: {
handler(newValue, oldValue) {
this.dialogVisible = newValue
}
},
openArray: {
handler(newValue, oldValue) {
this.tableDtl = newValue
}
},
rowmst: {
handler(newValue, oldValue) {
this.queryrow = newValue
}
}
},
methods: {
open() {
crudSectattr.getSect({ is_materialstore: '1' }).then(res => {
this.sects = res.content
})
},
queryStruct() {
this.queryrow.unassign_qty = parseFloat(this.queryrow.unassign_qty) + parseFloat(this.queryrow.assign_qty)
this.queryrow.assign_qty = 0
checkoutbill.getStructIvt(this.queryrow).then(res => {
this.tableDtl = res
})
},
sectQueryChange(val) {
if (val.length === 1) {
this.queryrow.stor_id = val[0]
this.queryrow.sect_id = ''
}
if (val.length === 0) {
this.queryrow.sect_id = ''
this.queryrow.stor_id = ''
}
if (val.length === 2) {
this.queryrow.stor_id = val[0]
this.queryrow.sect_id = val[1]
}
},
handleEdit(index, row) {
// 判断是否可以关闭编辑状态
if (!row.edit) {
if (row.plan_qty > this.queryrow.unassign_qty) {
this.crud.notify('出库重量不能超过未分配数', CRUD.NOTIFICATION_TYPE.INFO)
return false
}
if (row.plan_qty > row.canuse_qty) {
this.crud.notify('出库重量不能超过库存可出重量', CRUD.NOTIFICATION_TYPE.INFO)
return false
}
if (row.plan_qty === 0) {
this.crud.notify('出库重量为0不能保存', CRUD.NOTIFICATION_TYPE.INFO)
return false
}
}
row.edit = !row.edit
if (row.edit) {
this.queryrow.unassign_qty = parseFloat(this.queryrow.unassign_qty) - row.plan_qty
this.queryrow.assign_qty = parseFloat(this.queryrow.assign_qty) + row.plan_qty
} else {
this.queryrow.unassign_qty = parseFloat(this.queryrow.unassign_qty) + row.plan_qty
this.queryrow.assign_qty = parseFloat(this.queryrow.assign_qty) - row.plan_qty
}
this.tableDtl.splice(index, 1, row) // 通过splice 替换数据 触发视图更新
},
close() {
this.$emit('update:dialogShow', false)
this.$emit('StructIvtClosed')
},
submit() {
if (parseFloat(this.queryrow.assign_qty) === 0) {
this.crud.notify('请分配后再提交', CRUD.NOTIFICATION_TYPE.INFO)
return false
}
if (parseFloat(this.queryrow.unassign_qty) === 0) {
const rows = []
this.tableDtl.forEach((item) => {
if (item.edit) {
rows.push(item)
}
})
checkoutbill.manualDiv({ 'row': this.queryrow, 'rows': rows }).then(res => {
this.$emit('update:dialogShow', false)
this.$emit('StructIvtClosed')
})
} else {
this.$confirm('未分配重量不为0,是否继续提交?')
.then(_ => {
const rows = []
this.tableDtl.forEach((item) => {
if (item.edit) {
rows.push(item)
}
})
checkoutbill.manualDiv({ 'row': this.queryrow, 'rows': rows }).then(res => {
this.$emit('update:dialogShow', false)
this.$emit('StructIvtClosed')
})
})
.catch(_ => {
})
}
}
}
}
</script>