Merge branch 'develop' of https://e.coding.net/ctcdevteam/hberp/hberp into develop

This commit is contained in:
shilixia 2022-03-01 15:08:28 +08:00
commit bf3dd8b083
11 changed files with 190 additions and 199 deletions

View File

@ -250,7 +250,7 @@ export const asyncRoutes = [
path: 'firstCheck',
name: 'firstCheck',
component: () => import('@/views/wpm/firstCheck'),
meta: { title: '首件确认', icon: 'finishedCheck', perms: ['wpm_firstCheck'] }
meta: { title: '首件确认', icon: 'finishedCheck', perms: ['wpm_firstCheck'] ,noCache: true}
}
]

View File

@ -121,6 +121,10 @@
bottomLeft,
bottomRight
},
created(){
window.open('http://49.232.14.174:2222/#/index');
this.$router.go(-1)
},
mounted() {
this.timeFn();
this.cancelLoading();

View File

@ -86,10 +86,10 @@
<el-form-item label="名称" prop="name">
<el-input v-model="perm.name" placeholder="名称" />
</el-form-item>
<el-form-item label="代号" prop="method">
<el-form-item label="代号">
<el-input v-model="perm.method" placeholder="代号" />
</el-form-item>
<el-form-item label="父级" prop="parent">
<el-form-item label="父级">
<treeselect
v-model="perm.parent"
:multiple="false"

View File

@ -1,38 +1,38 @@
<template>
<div class="app-container">
<el-tabs type="border-card" v-model="activeName" @tab-click="handleClick">
<el-tabs type="border-card" v-model="activeName" @tab-click="handleClick">
<el-tab-pane label="待检半成品" name="1">
<el-card style="margin-top: 2px">
<el-input
v-model="listQuery.search"
placeholder="半成品名称/编号/子计划编号/工序"
style="width: 300px"
class="filter-item"
@keyup.enter.native="handleFilter1"
/>
<el-button
class="filter-item"
type="primary"
icon="el-icon-search"
@click="handleFilter1"
>搜索
</el-button>
<el-button
class="filter-item"
type="primary"
icon="el-icon-refresh-left"
@click="resetFilter"
>重置
</el-button>
<el-input
v-model="listQuery.search"
placeholder="半成品名称/编号/子计划编号/工序"
style="width: 300px"
class="filter-item"
@keyup.enter.native="handleFilter1"
/>
<el-button
class="filter-item"
type="primary"
icon="el-icon-search"
@click="handleFilter1"
>搜索
</el-button>
<el-button
class="filter-item"
type="primary"
icon="el-icon-refresh-left"
@click="resetFilter1"
>重置
</el-button>
<el-table
v-loading="listLoading"
:data="wproductList.results"
border
fit
stripe
height="100"
highlight-current-row
v-el-height-adaptive-table="{bottomOffset: 50}"
height="100"
highlight-current-row
v-el-height-adaptive-table="{bottomOffset: 50}"
>
<el-table-column type="index" width="50"/>
<el-table-column label="半成品名称">
@ -51,15 +51,15 @@
{{ actstate_[scope.row.act_state] }}
</template>
</el-table-column>
<el-table-column label="子计划编号">
<el-table-column label="子计划编号">
<template slot-scope="scope">{{ scope.row.subproduction_plan_.number }}</template>
</el-table-column>
<el-table-column label="所在子工序" :filters="[{ text: '切割', value: '切割' },{ text: '磨边', value: '磨边' },
<el-table-column label="所在子工序" :filters="[{ text: '切割', value: '切割' },{ text: '磨边', value: '磨边' },
{ text: '清洗', value: '清洗' }, { text: '热弯成型', value: '热弯成型' },{ text: '化学钢化', value: '化学钢化' },
{ text: '镀膜', value: '镀膜' }, { text: '断膜', value: '断膜' },{ text: '汇流条制备', value: '汇流条制备' },
{ text: '夹层', value: '夹层' }, { text: '包边', value: '包边' }]"
:filter-method="filterTag"
filter-placement="bottom-end">
:filter-method="filterTag"
filter-placement="bottom-end">
<template slot-scope="scope">{{ scope.row.step_.name }}</template>
</el-table-column>
<el-table-column align="center" label="操作" width="220px">
@ -90,7 +90,6 @@
:limit.sync="listQuery.page_size"
@pagination="getList"
/>
<el-dialog title="半成品报废" :close-on-click-modal="false" :visible.sync="dialogFormVisiblebcp">
<el-form :model="formbcp">
<el-form-item label="甩片原因" :label-width="formLabelWidth">
@ -119,26 +118,26 @@
<el-tab-pane label="复检半成品" name="2">
<el-card style="margin-top: 2px">
<el-input
v-model="listQuery2.search"
placeholder="半成品名称/编号/子计划编号/工序"
style="width: 300px"
class="filter-item"
@keyup.enter.native="handleFilter2"
/>
<el-button
class="filter-item"
type="primary"
icon="el-icon-search"
@click="handleFilter2"
>搜索
</el-button>
<el-button
class="filter-item"
type="primary"
icon="el-icon-refresh-left"
@click="resetFilter2"
>重置
</el-button>
v-model="listQuery2.search"
placeholder="半成品名称/编号/子计划编号/工序"
style="width: 300px"
class="filter-item"
@keyup.enter.native="handleFilter2"
/>
<el-button
class="filter-item"
type="primary"
icon="el-icon-search"
@click="handleFilter2"
>搜索
</el-button>
<el-button
class="filter-item"
type="primary"
icon="el-icon-refresh-left"
@click="resetFilter2"
>重置
</el-button>
<el-table
:data="wproductList2.results"
@ -146,9 +145,9 @@
fit
stripe
height="100"
highlight-current-row
v-el-height-adaptive-table="{bottomOffset: 50}"
height="100"
highlight-current-row
v-el-height-adaptive-table="{bottomOffset: 50}"
>
<el-table-column type="index" width="50"/>
<el-table-column label="半成品名称">
@ -158,7 +157,7 @@
<el-table-column label="半成品编号">
<template slot-scope="scope">{{ scope.row.number }}</template>
</el-table-column>
<el-table-column label="规格型号">
<el-table-column label="规格型号">
<template slot-scope="scope">{{ scope.row.material_.specification }}</template>
</el-table-column>
<el-table-column label="检测状态">
@ -166,15 +165,15 @@
{{ actstate_[scope.row.act_state] }}
</template>
</el-table-column>
<el-table-column label="子计划编号">
<el-table-column label="子计划编号">
<template slot-scope="scope">{{ scope.row.subproduction_plan_.number }}</template>
</el-table-column>
<el-table-column label="所在子工序"
:filters="[{ text: '切割', value: '切割' },{ text: '磨边', value: '磨边' },
:filters="[{ text: '切割', value: '切割' },{ text: '磨边', value: '磨边' },
{ text: '清洗', value: '清洗' }, { text: '热弯成型', value: '热弯成型' },{ text: '化学钢化', value: '化学钢化' },
{ text: '镀膜', value: '镀膜' }, { text: '断膜', value: '断膜' },{ text: '汇流条制备', value: '汇流条制备' },
{ text: '夹层', value: '夹层' }, { text: '包边', value: '包边' }]"
:filter-method="filterTag">
:filter-method="filterTag">
<template slot-scope="scope">{{ scope.row.step_.name }}</template>
</el-table-column>
<el-table-column align="center" label="操作" width="220px">
@ -206,27 +205,27 @@
<el-button type="primary" icon="el-icon-plus" @click="handleCreate">
批量入库
</el-button>
<el-input
v-model="listQuery1.search"
placeholder="半成品名称/编号/子计划编号/工序"
style="width: 300px"
class="filter-item"
@keyup.enter.native="handleFilter3"
/>
<el-button
class="filter-item"
type="primary"
icon="el-icon-search"
@click="handleFilter3"
>搜索
</el-button>
<el-button
class="filter-item"
type="primary"
icon="el-icon-refresh-left"
@click="resetFilter3"
>重置
</el-button>
<el-input
v-model="listQuery1.search"
placeholder="半成品名称/编号/子计划编号/工序"
style="width: 300px"
class="filter-item"
@keyup.enter.native="handleFilter3"
/>
<el-button
class="filter-item"
type="primary"
icon="el-icon-search"
@click="handleFilter3"
>搜索
</el-button>
<el-button
class="filter-item"
type="primary"
icon="el-icon-refresh-left"
@click="resetFilter3"
>重置
</el-button>
<el-table
:data="wproductList1.results"
@ -234,9 +233,9 @@
border
fit
stripe
height="100"
highlight-current-row
v-el-height-adaptive-table="{bottomOffset: 50}"
height="100"
highlight-current-row
v-el-height-adaptive-table="{bottomOffset: 50}"
>
<el-table-column
@ -251,7 +250,7 @@
<el-table-column label="半成品编号">
<template slot-scope="scope">{{ scope.row.number }}</template>
</el-table-column>
<el-table-column label="规格型号">
<el-table-column label="规格型号">
<template slot-scope="scope">{{ scope.row.material_.specification }}</template>
</el-table-column>
<el-table-column label="检测状态">
@ -259,15 +258,15 @@
{{ actstate_[scope.row.act_state] }}
</template>
</el-table-column>
<el-table-column label="子计划编号">
<el-table-column label="子计划编号">
<template slot-scope="scope">{{ scope.row.subproduction_plan_.number }}</template>
</el-table-column>
<el-table-column label="所在子工序"
:filters="[{ text: '切割', value: '切割' },{ text: '磨边', value: '磨边' },
:filters="[{ text: '切割', value: '切割' },{ text: '磨边', value: '磨边' },
{ text: '清洗', value: '清洗' }, { text: '热弯成型', value: '热弯成型' },{ text: '化学钢化', value: '化学钢化' },
{ text: '镀膜', value: '镀膜' }, { text: '断膜', value: '断膜' },{ text: '汇流条制备', value: '汇流条制备' },
{ text: '夹层', value: '夹层' }, { text: '包边', value: '包边' }]"
:filter-method="filterTag">
:filter-method="filterTag">
<template slot-scope="scope">{{ scope.row.step_.name }}</template>
</el-table-column>
@ -297,27 +296,27 @@
</el-tab-pane>
<el-tab-pane label="不合格半成品" name="4">
<el-card style="margin-top: 2px">
<el-input
v-model="listQuery4.search"
placeholder="半成品名称/编号/子计划编号/工序"
style="width: 300px"
class="filter-item"
@keyup.enter.native="handleFilter4"
/>
<el-button
class="filter-item"
type="primary"
icon="el-icon-search"
@click="handleFilter4"
>搜索
</el-button>
<el-button
class="filter-item"
type="primary"
icon="el-icon-refresh-left"
@click="resetFilter4"
>重置
</el-button>
<el-input
v-model="listQuery4.search"
placeholder="半成品名称/编号/子计划编号/工序"
style="width: 300px"
class="filter-item"
@keyup.enter.native="handleFilter4"
/>
<el-button
class="filter-item"
type="primary"
icon="el-icon-search"
@click="handleFilter4"
>搜索
</el-button>
<el-button
class="filter-item"
type="primary"
icon="el-icon-refresh-left"
@click="resetFilter4"
>重置
</el-button>
<el-table
:data="wproductList4.results"
@ -325,8 +324,8 @@
fit
stripe
height="100"
highlight-current-row
v-el-height-adaptive-table="{bottomOffset: 50}"
highlight-current-row
v-el-height-adaptive-table="{bottomOffset: 50}"
>
<el-table-column type="index" width="50"/>
<el-table-column label="半成品名称">
@ -341,14 +340,14 @@
{{ actstate_[scope.row.act_state] }}
</template>
</el-table-column>
<el-table-column label="规格型号">
<el-table-column label="规格型号">
<template slot-scope="scope">{{ scope.row.material_.specification }}</template>
</el-table-column>
<el-table-column label="所在子工序" :filters="[{ text: '切割', value: '切割' },{ text: '磨边', value: '磨边' },
{ text: '清洗', value: '清洗' }, { text: '热弯成型', value: '热弯成型' },{ text: '化学钢化', value: '化学钢化' },
{ text: '镀膜', value: '镀膜' }, { text: '断膜', value: '断膜' },{ text: '汇流条制备', value: '汇流条制备' },
{ text: '夹层', value: '夹层' }, { text: '包边', value: '包边' }]"
:filter-method="filterTag">
:filter-method="filterTag">
<template slot-scope="scope">{{ scope.row.step_.name }}</template>
</el-table-column>
<el-table-column label="不合格标记">
@ -356,7 +355,7 @@
{{ ng_sign_[scope.row.ng_sign] }}
</template>
</el-table-column>
<el-table-column label="子计划编号">
<el-table-column label="子计划编号">
<template slot-scope="scope">{{ scope.row.subproduction_plan_.number }}</template>
</el-table-column>
<el-table-column align="center" label="操作" width="220px">
@ -395,21 +394,18 @@
border
fit
stripe
height="100"
highlight-current-row
v-el-height-adaptive-table="{bottomOffset: 50}"
height="100"
highlight-current-row
v-el-height-adaptive-table="{bottomOffset: 50}"
>
<el-table-column type="index" width="50"/>
<el-table-column label="半成品名称">
<template slot-scope="scope">{{ scope.row.material_.name }}</template>
</el-table-column>
<el-table-column label="半成品编号">
<template slot-scope="scope">{{ scope.row.number }}</template>
</el-table-column>
<el-table-column label="规格型号">
<el-table-column label="规格型号">
<template slot-scope="scope">{{ scope.row.material_.specification }}</template>
</el-table-column>
<el-table-column label="检测状态">
@ -417,26 +413,25 @@
{{ actstate_[scope.row.act_state] }}
</template>
</el-table-column>
<el-table-column label="子计划编号">
<el-table-column label="子计划编号">
<template slot-scope="scope">{{ scope.row.subproduction_plan_.number }}</template>
</el-table-column>
<el-table-column label="所在子工序" :filters="[{ text: '切割', value: '切割' },{ text: '磨边', value: '磨边' },
<el-table-column label="所在子工序" :filters="[{ text: '切割', value: '切割' },{ text: '磨边', value: '磨边' },
{ text: '清洗', value: '清洗' }, { text: '热弯成型', value: '热弯成型' },{ text: '化学钢化', value: '化学钢化' },
{ text: '镀膜', value: '镀膜' }, { text: '断膜', value: '断膜' },{ text: '汇流条制备', value: '汇流条制备' },
{ text: '夹层', value: '夹层' }, { text: '包边', value: '包边' }]"
:filter-method="filterTag">
{ text: '夹层', value: '夹层' }, { text: '包边', value: '包边' }]" :filter-method="filterTag">
<template slot-scope="scope">{{ scope.row.step_.name }}</template>
</el-table-column>
<el-table-column align="center" label="操作" width="220px">
<template slot-scope="scope">
<el-link
v-if="checkPermission(['warehouse_update'])"
@click="handleInspection(scope)"
v-if="scope.row.test===null"
@click="handleInspection(scope,'3')"
>检验
</el-link>
<el-link
v-if="scope.row.test!==null"
@click="checkRecord(scope,'1')"
@click="checkRecord(scope,'3')"
>检验记录
</el-link>
</template>
@ -624,7 +619,7 @@
</el-table-column>
</el-table>
<div slot="footer" class="dialog-footer">
<el-button @click="dialogFormVisible = false"> </el-button>
<el-button @click="limitedCheckRecord = false"> </el-button>
<el-button type="primary" @click="putin"> </el-button>
</div>
</el-dialog>
@ -779,8 +774,8 @@
import checkPermission from "@/utils/permission";
import customForm from '@/components/customForm/index';
import reviewForm from '@/components/customForm/review';
import { createTicket, getWorkflowInit} from "@/api/workflow";
import { getrecordformList, getrffieldList} from "@/api/mtm";
import {createTicket, getWorkflowInit} from "@/api/workflow";
import {getrecordformList, getrffieldList} from "@/api/mtm";
import {getwproductList, wproductPutin, createputins, testInit, scrap, getRetrial} from "@/api/wpm";
import {getTestRecord, getTestRecordItem, putTestRecordItem, delTestRecordItem, subTestRecordItem} from "@/api/qm";
// import {genTree} from "@/utils";
@ -829,7 +824,7 @@
page: 1,
page_size: 20,
},
activeName: "1",
activeName: "1",
create_by_: '',
update_time: '',
formLabelWidth: '',
@ -943,28 +938,19 @@
},
methods: {
checkPermission,
handleClick(tab) {
handleClick(tab) {
this.listLoading = true;
this.listQuery.type = tab.name;
if(tab.name==1)
{
this.getList();
}
else if(tab.name==2)
{
this.getList2();
}
else if(tab.name==3)
{
this.getList1();
}
else if(tab.name==4)
{
this.getList4();
}
else if(tab.name==5)
{
this.getList3();
if (tab.name == 1) {
this.getList();
} else if (tab.name == 2) {
this.getList2();
} else if (tab.name == 3) {
this.getList1();
} else if (tab.name == 4) {
this.getList4();
} else if (tab.name == 5) {
this.getList3();
}
},
@ -979,7 +965,7 @@
this.listLoading = false;
});
},
handleFilter1() {
handleFilter1() {
this.listQuery.page = 1;
this.getList();
},
@ -1019,7 +1005,7 @@
}
});
},
handleFilter2() {
handleFilter2() {
this.listQuery2.page = 1;
this.getList2();
},
@ -1042,7 +1028,7 @@
});
},
handleFilter3() {
handleFilter3() {
this.listQuery1.page = 1;
this.getList1();
},
@ -1065,7 +1051,7 @@
});
},
handleFilter4() {
handleFilter4() {
this.listQuery4.page = 1;
this.getList4();
},
@ -1152,7 +1138,7 @@
});
},
//筛选
filterTag(value, row) {
filterTag(value, row) {
return row.step_.name === value;
},
//夹层半成品列表
@ -1204,7 +1190,11 @@
// this.outerVisible = true;
that.wproduct = scope.row.id;//半成品ID
that.listQueryrecordform.material = scope.row.material;
that.listQueryrecordform.type = 20;
if (index === '3') {
that.listQueryrecordform.type = 40;
} else {
that.listQueryrecordform.type = 20;
}
that.listQueryrecordform.enabled = true;
that.recordform = null;
getrecordformList(that.listQueryrecordform).then((response) => {
@ -1251,8 +1241,8 @@
that.recordId = scope.row.id;
that.recordform = scope.row.form;
that.formName = scope.row.form_.name;
if(that.innerIndex==='1'){//非复检
getrffieldList({form: this.recordform,enabled:true, page: 1, page_size: 100}).then((response) => {
if (that.innerIndex !== '2') {//非复检
getrffieldList({form: this.recordform, enabled: true, page: 1, page_size: 100}).then((response) => {
if (response.data) {
that.hasPicture = false;
let fieldList = response.data.results;
@ -1378,7 +1368,7 @@
this.outerVisible = false;
that.fieldList = [];
if (that.recordform != "") {
if (index === '1') {//非复检
if (index !== '2') {//非复检
testInit({wproduct: that.wproduct, form: that.recordform}).then((response) => {
if (response.data) {
that.hasPicture = false;

View File

@ -18,7 +18,6 @@
scope.row.material_.name
}}</template>
</el-table-column>
<el-table-column label="成品编号">
<template slot-scope="scope">{{ scope.row.number }}</template>
</el-table-column>
@ -27,7 +26,6 @@
{{ actstate_[scope.row.act_state] }}
</template>
</el-table-column>
<el-table-column label="所在子工序">
<template slot-scope="scope">{{ scope.row.step_.name }}</template>
</el-table-column>
@ -59,14 +57,11 @@
/>
</el-card>
</el-tab-pane>
<el-tab-pane label="已合格成品">
<el-card style="margin-top: 2px">
<el-button type="primary" icon="el-icon-plus" @click="handleCreate"
>批量入库
</el-button>
<el-table
v-loading="listLoading"
:data="wproductList1.results"
@ -108,10 +103,6 @@
{{scope.row.to_order_.contract_.name }}
</template>
</el-table-column>
<el-table-column align="center" label="操作" width="220px">
<template slot-scope="scope">
<el-link
@ -504,7 +495,7 @@ export default {
//调该物料对应的检查表
this.wproduct = scope.row.id; //成品ID
this.listQueryrecordform.material = scope.row.material; //
this.listQueryrecordform.type = 2;
this.listQueryrecordform.type = 40;
this.recordform = null;
getrecordformList(this.listQueryrecordform).then((response) => {
if (response.data) {

View File

@ -77,8 +77,8 @@ class StepViewSet(OptimizationMixin, CreateUpdateModelAMixin, ModelViewSet):
"""
子工序-增删改查
"""
perms_map = {'get':'*', 'post':'step_create',
'put':'step_update', 'delete':'step_delete'}
perms_map = {'get':'*', 'post':'process_update',
'put':'process_update', 'delete':'process_update'}
queryset = Step.objects.all()
serializer_class = StepSerializer
search_fields = ['name', 'number']

View File

@ -411,7 +411,7 @@ class ResourceViewSet(GenericViewSet):
del(half_list[0])
return Response(res)
@action(methods=['post'], detail=False, perms_map={'post':'resource_cal_equip'}, serializer_class=ResourceCalListSerializer)
@action(methods=['post'], detail=False, perms_map={'post':'resource_cal'}, serializer_class=ResourceCalListSerializer)
def cal_equip(self, request, pk=None):
"""
设备状态查看

View File

@ -63,7 +63,7 @@ class OrderViewSet(CreateUpdateCustomMixin, ModelViewSet):
return OrderCreateUpdateSerializer
return super().get_serializer_class()
@action(methods=['get'], detail=False, perms_map={'get':'order_toplan'})
@action(methods=['get'], detail=False, perms_map={'get':'*'})
def toplan(self, request, pk=None):
queryset = Order.objects.filter(count__gt=F('planed_count')).order_by('-id')
page = self.paginate_queryset(queryset)

View File

@ -93,15 +93,16 @@ class PickSerializer(serializers.Serializer):
FIFOItemProduct.objects.bulk_create(mls)
# 更新车间物料
wm, _ = WMaterial.objects.get_or_create(material=i['material'], batch=i['batch'], \
subproduction_plan=sp,defaults={
'material':i['material'],
'batch':i['batch'],
'subproduction_plan':sp,
'count':0
})
wm.count = wm.count + i['count']
wm.save()
if i['material'].type != Material.MA_TYPE_HALFGOOD:
wm, _ = WMaterial.objects.get_or_create(material=i['material'], batch=i['batch'], \
subproduction_plan=sp,defaults={
'material':i['material'],
'batch':i['batch'],
'subproduction_plan':sp,
'count':0
})
wm.count = wm.count + i['count']
wm.save()
# 更新子计划物料情况
spp = SubProductionProgress.objects.get(material=i['material'], subproduction_plan=sp, type=SubprodctionMaterial.SUB_MA_TYPE_IN)
spp.count_pick = spp.count_pick + i['count']

View File

@ -54,6 +54,10 @@ class WpmService(object):
if wproduct.act_state == WProduct.WPR_ACT_STATE_TORETEST: # 复检
wproduct.act_state = WProduct.WPR_ACT_STATE_DOWAIT
elif wproduct.act_state == WProduct.WPR_ACT_STATE_TOTEST and \
wproduct.subproduction_plan.subproduction.need_combtest : # 配置中需要质检
wproduct.act_state = WProduct.WPR_ACT_STATE_TOCOMBTEST
elif wproduct.act_state == WProduct.WPR_ACT_STATE_TOTEST and \
test.is_midtesting is True:
wproduct.act_state = WProduct.WPR_ACT_STATE_DOWAIT
@ -62,9 +66,7 @@ class WpmService(object):
elif wproduct.act_state == WProduct.WPR_ACT_STATE_TOTEST and wproduct.material.type == Material.MA_TYPE_GOOD: # 成品检验
wproduct.act_state = WProduct.WPR_ACT_STATE_TOFINALTEST
elif wproduct.act_state == WProduct.WPR_ACT_STATE_TOTEST and \
wproduct.subproduction_plan.subproduction.need_combtest : # 配置中需要质检
wproduct.act_state = WProduct.WPR_ACT_STATE_TOCOMBTEST
else:
wproduct.act_state = WProduct.WPR_ACT_STATE_OK
if wproduct.number is None: # 产生半成品编号

View File

@ -141,7 +141,7 @@ class WMaterialViewSet(CreateUpdateModelAMixin, ListModelMixin, GenericViewSet):
ordering_fields = ['material__number']
ordering = ['material__number']
@action(methods=['post'], detail=False, perms_map={'post': 'pick'}, serializer_class=PickSerializer)
@action(methods=['post'], detail=False, perms_map={'post': 'wmaterial_pick'}, serializer_class=PickSerializer)
def pick(self, request, pk=None):
"""
领料
@ -281,6 +281,8 @@ class WProductViewSet(ListModelMixin, RetrieveModelMixin, GenericViewSet):
ip = {}
ip['fifoitem'] = fifoitem
ip['wproduct'] = i
if i.number is None:
raise exceptions.APIException('缺少编号')
ip['number'] = i.number
ip['material'] = i.material
ips.append(FIFOItemProduct(**ip))
@ -815,6 +817,7 @@ class OperationWproductViewSet(ListModelMixin, DestroyModelMixin, UpdateModelMix
raise exceptions.APIException('该操作已提交')
instance.delete()
wp = instance.wproduct
wp.act_state = WProduct.WPR_ACT_STATE_DOWAIT
wp.operation = None
wp.save()
return Response()