Merge branch 'develop' of https://e.coding.net/ctcdevteam/hberp/hberp into develop
This commit is contained in:
commit
baef10ec19
|
|
@ -306,5 +306,13 @@ export function scrap(id,data) {
|
|||
})
|
||||
}
|
||||
|
||||
//表格初始化
|
||||
export function getRetrial(id) {
|
||||
return request({
|
||||
url: `/wpm/wproduct/${id}/wf_bhg/`,
|
||||
method: 'GET',
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -199,7 +199,7 @@
|
|||
<img :src="originImg">
|
||||
</div>
|
||||
<div class="halfWidth">
|
||||
<img id="canvasImg" :src="img" style="width:500px;height: 300px;display: none">
|
||||
<img id="canvasImg" src="./../../assets/glass.png" style="width:500px;height: 300px;display: none">
|
||||
<div style="position: relative;display: flex;flex-direction: column;
|
||||
border: 1px solid #DCDFE6;">
|
||||
<canvas id="canvas" width="500" height="300">
|
||||
|
|
@ -282,6 +282,8 @@
|
|||
that.formData.push(obj)
|
||||
});
|
||||
that.formData=[...that.formData];
|
||||
debugger;
|
||||
console.log(that.formData)
|
||||
//当前表的数据存储
|
||||
for(let i=0;i<this.results.length;i++){
|
||||
let key = this.results[i].field_key;
|
||||
|
|
@ -310,12 +312,12 @@
|
|||
});
|
||||
that.img = 'http://47.95.0.242:2222'+imag[0].draw_template;
|
||||
|
||||
let originImag= this.origins.filter(item => {
|
||||
/*let originImag= this.origins.filter(item => {
|
||||
return item.field_type === 'draw';
|
||||
});
|
||||
});*/
|
||||
that.originImg = new Image();
|
||||
that.originImg.crossOrigin = '';
|
||||
that.originImg = originImag[0].field_value;
|
||||
that.originImg = imag[0].origin_value;
|
||||
|
||||
listJudge.forEach(item => {
|
||||
let obj = new Object();
|
||||
|
|
|
|||
|
|
@ -130,6 +130,13 @@
|
|||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="参与者" prop="participant" v-if="wfstate.participant_type==7">
|
||||
<el-select style="width: 100%" v-model="participant" placeholder="请选择字段">
|
||||
<el-option v-for="item in customfieldList" :key="item.id" :label="item.field_name"
|
||||
:value="item.field_key">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="分配方式" prop="participant" v-if="wfstate.participant_type==2">
|
||||
<el-select style="width: 100%" v-model="wfstate.distribute_type" placeholder="请选择分配方式">
|
||||
<el-option label="主动接单" value="1"></el-option>
|
||||
|
|
|
|||
|
|
@ -241,11 +241,15 @@
|
|||
<el-table-column align="center" label="操作" width="220px">
|
||||
<template slot-scope="scope">
|
||||
<el-link
|
||||
type="danger"
|
||||
v-if="checkPermission(['warehouse_update'])"
|
||||
@click="handleScrap(scope)"
|
||||
>报废
|
||||
</el-link>
|
||||
|
||||
<el-link type="primary"
|
||||
@click="handleRetrial(scope)"
|
||||
>重审
|
||||
</el-link>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
|
@ -402,7 +406,6 @@
|
|||
@recordCancel="recordCancel"
|
||||
/>
|
||||
</el-dialog>
|
||||
|
||||
<!--半成品入库-->
|
||||
<el-dialog title="半成品入库" :close-on-click-modal="false" :visible.sync="dialogFormVisible">
|
||||
<el-form :model="form">
|
||||
|
|
@ -503,12 +506,112 @@
|
|||
<el-button type="primary" @click="putins">确 定</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
<!--不合格半成品重审-->
|
||||
<el-dialog title="不合格半成品重审" :close-on-click-modal="false" :visible.sync="limitedRetrial">
|
||||
<el-form label-width="80px" label-position="right">
|
||||
<el-row v-for="(item, $index) in fieldList.record_data" :key="$index">
|
||||
<el-form-item
|
||||
v-if="item.field_type === 'string'"
|
||||
:label="item.field_name"
|
||||
>
|
||||
<el-input placeholder="请输入" v-model="item.sort" />
|
||||
</el-form-item>
|
||||
<el-form-item
|
||||
v-else-if="item.field_type === 'int'"
|
||||
:label="item.field_name"
|
||||
>
|
||||
<el-input
|
||||
type="number"
|
||||
placeholder="请输入"
|
||||
v-model="item.sort"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item
|
||||
v-else-if="item.field_type === 'float'"
|
||||
:label="item.field_name"
|
||||
>
|
||||
<el-input
|
||||
type="number"
|
||||
placeholder="请输入"
|
||||
v-model="item.sort"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item
|
||||
v-else-if="item.field_type === 'date'"
|
||||
:label="item.field_name"
|
||||
>
|
||||
<el-date-picker
|
||||
v-model="item.create_time"
|
||||
type="date"
|
||||
placeholder="选择日期"
|
||||
value-format="yyyy-MM-dd"
|
||||
style="width: 100%"
|
||||
>
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item
|
||||
v-else-if="item.field_type === 'datetime'"
|
||||
:label="item.field_name"
|
||||
>
|
||||
<el-date-picker
|
||||
v-model="item.create_time"
|
||||
type="datetime"
|
||||
placeholder="选择日期"
|
||||
value-format="yyyy-MM-dd HH:mm:ss"
|
||||
style="width: 100%"
|
||||
>
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item
|
||||
v-else-if="item.field_type === 'select'"
|
||||
:label="item.field_name"
|
||||
>
|
||||
<el-select
|
||||
style="width: 100%"
|
||||
v-model="item.sort"
|
||||
placeholder="请选择"
|
||||
>
|
||||
<el-option
|
||||
v-for="item1 in item.field_choice"
|
||||
:key="item1"
|
||||
:label="item1"
|
||||
:value="item1"
|
||||
>
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item
|
||||
v-else-if="item.field_type === 'selects'"
|
||||
:label="item.field_name"
|
||||
>
|
||||
<el-select
|
||||
style="width: 100%"
|
||||
v-model="optio"
|
||||
multiple
|
||||
placeholder="请选择"
|
||||
>
|
||||
<el-option
|
||||
v-for="item1 in item.field_choice"
|
||||
:key="item1"
|
||||
:label="item1"
|
||||
:value="item1"
|
||||
>
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-row>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button @click="limitedRetrial = false">取 消</el-button>
|
||||
<el-button type="primary" @click="retrialSubmit">确 定</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import customForm from '@/components/customForm/index';
|
||||
import reviewForm from '@/components/customForm/review';
|
||||
import {getwproductList, wproductTest, wproductPutin, createputins,testInit,scrap} from "@/api/wpm";
|
||||
import {getwproductList, wproductTest, wproductPutin, createputins,testInit,scrap,getRetrial} from "@/api/wpm";
|
||||
import checkPermission from "@/utils/permission";
|
||||
import {getWarehouseList} from "@/api/inm";
|
||||
import {getMaterialList, getrecordformList, getrffieldList} from "@/api/mtm";
|
||||
|
|
@ -620,6 +723,7 @@
|
|||
outerVisible: false,
|
||||
innerVisible: false,
|
||||
limitedReview: false,
|
||||
limitedRetrial: false,
|
||||
dialogFormVisible: false,
|
||||
dialogFormVisibles: false,
|
||||
limitedCheckRecord: false,
|
||||
|
|
@ -717,7 +821,17 @@
|
|||
console.error(err);
|
||||
});
|
||||
},
|
||||
|
||||
//不合格产品重审展示
|
||||
handleRetrial(scope){
|
||||
getRetrial(scope.row.id).then(res=>{
|
||||
debugger;
|
||||
console.log(res)
|
||||
})
|
||||
},
|
||||
//不合格产品重审提交
|
||||
retrialSubmit(){
|
||||
|
||||
},
|
||||
//夹层半成品列表
|
||||
getList3() {
|
||||
this.listQuery3.act_state = 26;
|
||||
|
|
@ -733,8 +847,6 @@
|
|||
handleCreate() {
|
||||
this.dialogFormVisibles = true;
|
||||
this.getWarehouseLists();//仓库
|
||||
|
||||
|
||||
},
|
||||
//批量入库
|
||||
putins() {
|
||||
|
|
@ -745,7 +857,6 @@
|
|||
|
||||
});
|
||||
console.log(_this.mutipID);
|
||||
|
||||
createputins({
|
||||
warehouse: this.form.warehouse,
|
||||
wproducts: _this.mutipID,
|
||||
|
|
@ -861,26 +972,32 @@
|
|||
}
|
||||
});
|
||||
}else if(that.innerIndex==='2'){//复检
|
||||
debugger;
|
||||
getTestRecordItem(scope.row.id).then((res) => {
|
||||
if (res.data) {
|
||||
that.hasPicture = false;
|
||||
let fieldList = res.data.record_data;
|
||||
that.fieldList = [...fieldList];
|
||||
|
||||
that.origintest = res.data.origin_test;
|
||||
that.recordform = res.data.origin_test_.form;
|
||||
let originList = res.data.origin_test_.record_data;
|
||||
that.originList = [...originList];
|
||||
for (let i = 0; i < that.fieldList.length; i++) {
|
||||
let obj = that.fieldList[i];
|
||||
for (let i = 0; i < fieldList.length; i++) {
|
||||
let obj = fieldList[i];
|
||||
obj.is_testok = null;
|
||||
for (let j = 0; j < originList.length; j++) {
|
||||
if (that.fieldList[i].field_key === originList[j].field_key) {
|
||||
if (fieldList[i].field_key === originList[j].field_key) {
|
||||
obj.id = originList[j].id;
|
||||
obj.is_testok = originList[j].is_testok;
|
||||
obj.field_value = originList[j].field_value;
|
||||
obj.origin_value = originList[j].field_value;
|
||||
}
|
||||
}
|
||||
that.fieldList.push(obj)
|
||||
}
|
||||
debugger;
|
||||
console.log(that.fieldList)
|
||||
// that.fieldList = [...fieldList];
|
||||
let arr = fieldList.filter(item => {
|
||||
return item.field_type === 'draw'
|
||||
});
|
||||
|
|
@ -889,7 +1006,6 @@
|
|||
}
|
||||
this.limitedReview = true;
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
},
|
||||
|
|
@ -903,16 +1019,28 @@
|
|||
let that = this;
|
||||
testInit({ wproduct: this.wproduct,form: that.recordform}).then((response) => {
|
||||
if (response.data) {
|
||||
// debugger;
|
||||
debugger;
|
||||
that.hasPicture = false;
|
||||
that.recordId = response.data.id;
|
||||
that.formName = response.data.form_.name;
|
||||
let fieldList = response.data.record_data;
|
||||
that.fieldList = [...fieldList];
|
||||
that.origintest = response.data.origin_test;
|
||||
// that.recordform = response.data.origin_test_.form;
|
||||
let originList = response.data.origin_test_.record_data;
|
||||
that.originList = [...originList];
|
||||
for (let i = 0; i < fieldList.length; i++) {
|
||||
let obj = fieldList[i];
|
||||
obj.is_testok = null;
|
||||
for (let j = 0; j < originList.length; j++) {
|
||||
if (fieldList[i].field_key === originList[j].field_key) {
|
||||
obj.id = originList[j].id;
|
||||
obj.is_testok = originList[j].is_testok;
|
||||
obj.field_value = originList[j].field_value;
|
||||
obj.origin_value = originList[j].field_value;
|
||||
}
|
||||
}
|
||||
that.fieldList.push(obj)
|
||||
}
|
||||
/*that.fieldList = [...fieldList];
|
||||
that.originList = [...originList];*/
|
||||
let arr = fieldList.filter(item => {
|
||||
return item.field_type === 'draw'
|
||||
});
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@ class Workflow(CommonAModel):
|
|||
view_permission_check = models.BooleanField('查看权限校验', default=True, help_text='开启后,只允许工单的关联人(创建人、曾经的处理人)有权限查看工单')
|
||||
limit_expression = models.JSONField('限制表达式', default=dict, blank=True, help_text='限制周期({"period":24} 24小时), 限制次数({"count":1}在限制周期内只允许提交1次), 限制级别({"level":1} 针对(1单个用户 2全局)限制周期限制次数,默认特定用户);允许特定人员提交({"allow_persons":"zhangsan,lisi"}只允许张三提交工单,{"allow_depts":"1,2"}只允许部门id为1和2的用户提交工单,{"allow_roles":"1,2"}只允许角色id为1和2的用户提交工单)')
|
||||
display_form_str = models.JSONField('展现表单字段', default=list, blank=True, help_text='默认"[]",用于用户只有对应工单查看权限时显示哪些字段,field_key的list的json,如["days","sn"],内置特殊字段participant_info.participant_name:当前处理人信息(部门名称、角色名称),state.state_name:当前状态的状态名,workflow.workflow_name:工作流名称')
|
||||
title_template = models.CharField('标题模板', max_length=50, default='你有一个待办工单:{title}', null=True, blank=True, help_text='工单字段的值可以作为参数写到模板中,格式如:你有一个待办工单:{title}')
|
||||
title_template = models.CharField('标题模板', max_length=50, default='{title}', null=True, blank=True, help_text='工单字段的值可以作为参数写到模板中,格式如:你有一个待办工单:{title}')
|
||||
content_template = models.CharField('内容模板', max_length=1000, default='标题:{title}, 创建时间:{create_time}', null=True, blank=True, help_text='工单字段的值可以作为参数写到模板中,格式如:标题:{title}, 创建时间:{create_time}')
|
||||
|
||||
class State(CommonAModel):
|
||||
|
|
|
|||
|
|
@ -4,7 +4,9 @@ from apps.wpm.models import WProduct
|
|||
|
||||
|
||||
class GetParticipants:
|
||||
|
||||
"""
|
||||
获取处理人脚本
|
||||
"""
|
||||
all_funcs = [
|
||||
{'func':'get_create_by', 'name':'获取工单创建人'}
|
||||
]
|
||||
|
|
@ -20,8 +22,11 @@ class GetParticipants:
|
|||
return participant
|
||||
|
||||
class HandleScripts:
|
||||
"""
|
||||
任务处理脚本
|
||||
"""
|
||||
all_funcs = [
|
||||
{'func': 'handle_wproduct', 'name':'处理不合格品'}
|
||||
{'func': 'handle_something', 'name':'处理一些工作'}
|
||||
]
|
||||
|
||||
|
||||
|
|
@ -42,32 +47,11 @@ class HandleScripts:
|
|||
return ticket
|
||||
|
||||
@classmethod
|
||||
def handle_wproduct(cls, ticket:Ticket):
|
||||
"""处理不合格品"""
|
||||
# 任务处理
|
||||
def handle_something(cls, ticket:Ticket):
|
||||
"""处理一些工作"""
|
||||
# 任务处理代码区
|
||||
|
||||
ticket_data = ticket.ticket_data
|
||||
wt = ticket.wt_ticket
|
||||
wp = wt.wproduct
|
||||
if 'shenli2' in ticket_data and ticket_data['shenli2']:
|
||||
wt.decision = ticket_data['shenli2']
|
||||
if ticket_data['shenli2'] in ['返工', '返修']:
|
||||
pass
|
||||
elif ticket_data['shenli2'] in ['让步接收']:
|
||||
wp.act_state = WProduct.WPR_ACT_STATE_OK
|
||||
elif 'shenli1' in ticket_data and ticket_data['shenli1']:
|
||||
wp.decision = ticket_data['shenli1']
|
||||
if ticket_data['shenli1'] in ['返工', '返修']:
|
||||
pass
|
||||
elif ticket_data['shenli1'] in ['让步接收']:
|
||||
wp.act_state = WProduct.WPR_ACT_STATE_OK
|
||||
wt.save()
|
||||
wp.save()
|
||||
|
||||
# 调用自动流转
|
||||
ticket = cls.to_next(ticket=ticket, by_task=True, script_str= 'handle_wproduct')
|
||||
if ticket.act_state == Ticket.TICKET_ACT_STATE_FINISH:
|
||||
# 如果工单完成
|
||||
wp.ticket = None
|
||||
wp.save()
|
||||
ticket = cls.to_next(ticket=ticket, by_task=True, script_str= 'handle_something')
|
||||
|
||||
|
|
|
|||
|
|
@ -51,6 +51,7 @@ class TicketSimpleSerializer(serializers.ModelSerializer):
|
|||
|
||||
class TicketCreateSerializer(serializers.ModelSerializer):
|
||||
transition = serializers.PrimaryKeyRelatedField(queryset=Transition.objects.all(), write_only=True)
|
||||
title = serializers.CharField(allow_blank=True, required=False)
|
||||
class Meta:
|
||||
model=Ticket
|
||||
fields=['title','workflow', 'ticket_data', 'transition']
|
||||
|
|
|
|||
|
|
@ -273,7 +273,7 @@ class WfService(object):
|
|||
# 校验表单必填项目
|
||||
if transition.field_require_check or not created:
|
||||
for key, value in ticket.state.state_fields.items():
|
||||
if value == State.STATE_FIELD_REQUIRED:
|
||||
if int(value) == State.STATE_FIELD_REQUIRED:
|
||||
if key not in new_ticket_data or not new_ticket_data[key]:
|
||||
raise APIException('字段{}必填'.format(key))
|
||||
|
||||
|
|
|
|||
|
|
@ -64,7 +64,7 @@ class WorkflowViewSet(CreateUpdateModelAMixin, ModelViewSet):
|
|||
工作流下的自定义字段
|
||||
"""
|
||||
wf = self.get_object()
|
||||
serializer = self.serializer_class(instance=CustomField.objects.filter(workflow=wf), many=True)
|
||||
serializer = self.serializer_class(instance=CustomField.objects.filter(workflow=wf, is_deleted=False).order_by('sort'), many=True)
|
||||
return Response(serializer.data)
|
||||
|
||||
@action(methods=['get'], detail=True, perms_map={'get':'workflow_init'})
|
||||
|
|
@ -132,10 +132,10 @@ class TicketViewSet(OptimizationMixin, CreateUpdateCustomMixin, CreateModelMixin
|
|||
return TicketDetailSerializer
|
||||
return super().get_serializer_class()
|
||||
|
||||
def get_queryset(self):
|
||||
if self.action=='list' and (not self.request.query_params.get('category', None)):
|
||||
def filter_queryset(self, queryset):
|
||||
if not self.request.query_params.get('category', None):
|
||||
raise APIException('请指定查询分类')
|
||||
return super().get_queryset()
|
||||
return super().filter_queryset(queryset)
|
||||
|
||||
@transaction.atomic
|
||||
def create(self, request, *args, **kwargs):
|
||||
|
|
@ -154,11 +154,11 @@ class TicketViewSet(OptimizationMixin, CreateUpdateCustomMixin, CreateModelMixin
|
|||
# 校验必填项
|
||||
if transition.field_require_check:
|
||||
for key, value in start_state.state_fields.items():
|
||||
if value == State.STATE_FIELD_REQUIRED:
|
||||
if int(value) == State.STATE_FIELD_REQUIRED:
|
||||
if key not in ticket_data and not ticket_data[key]:
|
||||
raise APIException('字段{}必填'.format(key))
|
||||
save_ticket_data[key] = ticket_data[key]
|
||||
elif value == State.STATE_FIELD_OPTIONAL:
|
||||
elif int(value) == State.STATE_FIELD_OPTIONAL:
|
||||
save_ticket_data[key] = ticket_data[key]
|
||||
|
||||
ticket = serializer.save(state=start_state,
|
||||
|
|
@ -205,7 +205,7 @@ class TicketViewSet(OptimizationMixin, CreateUpdateCustomMixin, CreateModelMixin
|
|||
vdata = serializer.validated_data
|
||||
new_ticket_data = ticket.ticket_data
|
||||
new_ticket_data.update(**vdata['ticket_data'])
|
||||
|
||||
|
||||
ticket = WfService.handle_ticket(ticket=ticket, transition=vdata['transition'],
|
||||
new_ticket_data=new_ticket_data, handler=request.user, suggestion=vdata['suggestion'])
|
||||
return Response(TicketSerializer(instance=ticket).data)
|
||||
|
|
|
|||
|
|
@ -4,4 +4,8 @@ class WpmConfig(AppConfig):
|
|||
name = 'apps.wpm'
|
||||
verbose_name = '车间生产'
|
||||
|
||||
def ready(self):
|
||||
# 加载信号
|
||||
import apps.wpm.signals
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,18 @@
|
|||
# Generated by Django 3.2.9 on 2021-12-21 08:19
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('wpm', '0036_auto_20211221_0923'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='wproduct',
|
||||
name='scrap_reason',
|
||||
field=models.IntegerField(blank=True, choices=[(10, '气泡'), (20, '破点'), (30, '划伤'), (40, '其他')], null=True, verbose_name='报废原因'),
|
||||
),
|
||||
]
|
||||
|
|
@ -94,6 +94,7 @@ class WprouctTicket(CommonAModel):
|
|||
material = models.ForeignKey(Material, verbose_name='所在物料状态', on_delete=models.CASCADE)
|
||||
step = models.ForeignKey(Step, verbose_name='所在步骤', on_delete=models.CASCADE)
|
||||
subproduction_plan = models.ForeignKey(SubProductionPlan, verbose_name='所在子生产计划', on_delete=models.CASCADE)
|
||||
|
||||
ticket = models.ForeignKey('wf.ticket', verbose_name='关联工单', on_delete=models.CASCADE, related_name='wt_ticket')
|
||||
decision = models.CharField('最终决定', null=True, blank=True, max_length=100)
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,60 @@
|
|||
from django.db.models.signals import post_save
|
||||
from apps.qm.models import TestRecord
|
||||
from apps.wf.models import Ticket
|
||||
from django.dispatch import receiver
|
||||
|
||||
from apps.wpm.models import WProduct, WprouctTicket
|
||||
|
||||
|
||||
@receiver(post_save, sender=Ticket)
|
||||
def handleTicket(sender, instance, created, **kwargs):
|
||||
if instance.workflow.name == '不合格品审理单':
|
||||
if created:
|
||||
ticket_data = instance.ticket_data
|
||||
"""
|
||||
创建关联信息表
|
||||
"""
|
||||
obj = WprouctTicket()
|
||||
wproduct = WProduct.objects.get(id=ticket_data['wproduct'])
|
||||
obj.wproduct = wproduct
|
||||
obj.number = wproduct.number
|
||||
obj.material = wproduct.material
|
||||
obj.step = wproduct.step
|
||||
obj.subproduction_plan = wproduct.subproduction_plan
|
||||
obj.ticket = instance
|
||||
|
||||
test_record = TestRecord.objects.filter(wproduct=wproduct, is_deleted=False, is_testok=False).order_by('-id').first()
|
||||
obj.save()
|
||||
|
||||
# 工单绑定半成品
|
||||
wproduct.ticket = instance
|
||||
wproduct.save()
|
||||
|
||||
# 检验员
|
||||
if not ticket_data.get('tester', None):
|
||||
ticket_data['tester'] = test_record.create_by.id
|
||||
instance.ticket_data = ticket_data
|
||||
instance.save()
|
||||
|
||||
elif instance.act_state == Ticket.TICKET_ACT_STATE_FINISH:
|
||||
"""
|
||||
执行操作决定
|
||||
"""
|
||||
ticket_data = instance.ticket_data
|
||||
wt = instance.wt_ticket
|
||||
wp = wt.wproduct
|
||||
if 'decision_1' in ticket_data and ticket_data['decision_1']:
|
||||
wt.decision = ticket_data['decision_1']
|
||||
if ticket_data['decision_1'] in ['返工', '返修']:
|
||||
pass
|
||||
elif ticket_data['decision_1'] in ['让步接收']:
|
||||
wp.act_state = WProduct.WPR_ACT_STATE_OK
|
||||
elif 'decision_2' in ticket_data and ticket_data['decision_2']:
|
||||
wp.decision = ticket_data['decision_2']
|
||||
if ticket_data['decision_2'] in ['返工', '返修']:
|
||||
pass
|
||||
elif ticket_data['decision_2'] in ['让步接收']:
|
||||
wp.act_state = WProduct.WPR_ACT_STATE_OK
|
||||
wt.save()
|
||||
wp.save()
|
||||
|
||||
|
|
@ -371,20 +371,20 @@ class WProductViewSet(ListModelMixin, GenericViewSet):
|
|||
obj = self.get_object()
|
||||
if obj.act_state != WProduct.WPR_ACT_STATE_NOTOK:
|
||||
raise exceptions.APIException('非检验不合格产品不可发起不合格审理')
|
||||
workflow = Workflow.objects.filter(name='不合格品审理单', is_deletd=False).first()
|
||||
workflow = Workflow.objects.filter(name='不合格品审理单', is_deleted=False).first()
|
||||
if workflow:
|
||||
exist_data = {
|
||||
'sys_wproduct':obj.id,
|
||||
'sys_name':obj.material.name,
|
||||
'sys_specification':obj.material.specification,
|
||||
'sys_finder':request.user.id,
|
||||
'sys_process':obj.step.process.id,
|
||||
'wproduct':obj.id,
|
||||
'wproduct_name':obj.material.name,
|
||||
'wproduct_specification':obj.material.specification,
|
||||
'finder':request.user.id,
|
||||
'find_process':obj.step.process.id,
|
||||
}
|
||||
ret = {'workflow':workflow.id}
|
||||
ret['exist_data'] = exist_data
|
||||
return Response(ret)
|
||||
else:
|
||||
raise exceptions.APIException('未找到对应工作流程')
|
||||
raise exceptions.APIException('未找到对应审批流程')
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -50,7 +50,7 @@ class GenSignature(APIView):
|
|||
cv2.imwrite(path,image)
|
||||
return Response(request.data, status=status.HTTP_200_OK)
|
||||
|
||||
|
||||
import time
|
||||
class UpdateDevelop(APIView):
|
||||
"""
|
||||
更新开发服务器
|
||||
|
|
@ -66,7 +66,9 @@ class UpdateDevelop(APIView):
|
|||
# 奇怪的处理
|
||||
os.chdir('/home/hberp/hb_server/vuedist')
|
||||
os.popen('cp index.html indexbak')
|
||||
time.sleep(1000)
|
||||
os.popen('rm -rf index.html')
|
||||
time.sleep(1000)
|
||||
os.popen('mv -f indexbak index.html')
|
||||
# 打包前端
|
||||
# os.chdir('/home/hberp/hb_client')
|
||||
|
|
|
|||
Loading…
Reference in New Issue