From 6afd62dc93ec28ed8e51a44e895baa9b5bc7e3e1 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Mon, 27 Dec 2021 10:59:40 +0800 Subject: [PATCH] wf ticket detail bug --- hb_server/apps/pm/models.py | 1 + hb_server/apps/pm/services.py | 10 ++++++++++ hb_server/apps/pm/signals.py | 2 ++ hb_server/apps/wf/models.py | 4 ++-- hb_server/apps/wf/serializers.py | 31 ++++++++++++++++--------------- 5 files changed, 31 insertions(+), 17 deletions(-) create mode 100644 hb_server/apps/pm/services.py diff --git a/hb_server/apps/pm/models.py b/hb_server/apps/pm/models.py index 7588491..539d523 100644 --- a/hb_server/apps/pm/models.py +++ b/hb_server/apps/pm/models.py @@ -29,6 +29,7 @@ class ProductionPlan(CommonAModel): count_ok = models.PositiveIntegerField('合格数', default=0) start_date = models.DateField('计划开工日期') end_date = models.DateField('计划完工日期') + process_json = models.JSONField('按工序的统计数', default=list, null=True, blank=True) is_planed = models.BooleanField('是否已排产', default=False) class Meta: verbose_name = '生产计划' diff --git a/hb_server/apps/pm/services.py b/hb_server/apps/pm/services.py new file mode 100644 index 0000000..c308f1f --- /dev/null +++ b/hb_server/apps/pm/services.py @@ -0,0 +1,10 @@ +from apps.pm.models import ProductionPlan, SubProductionPlan +class PmService: + + @classmethod + def update_plan_process_json(cls, plan:ProductionPlan): + """ + 更新计划统计字段 + """ + ret = {} + subplans = SubProductionPlan.objects.filter() \ No newline at end of file diff --git a/hb_server/apps/pm/signals.py b/hb_server/apps/pm/signals.py index c4871ee..bed7671 100644 --- a/hb_server/apps/pm/signals.py +++ b/hb_server/apps/pm/signals.py @@ -26,6 +26,8 @@ def update_subplan_main(sender, instance, created, **kwargs): plan.count_real = subplan.main_count_real plan.count_ok = subplan.main_count_ok plan.save() + + diff --git a/hb_server/apps/wf/models.py b/hb_server/apps/wf/models.py index 36a1cb3..c5e0ce6 100644 --- a/hb_server/apps/wf/models.py +++ b/hb_server/apps/wf/models.py @@ -159,7 +159,7 @@ class CustomField(CommonAModel): ) workflow = models.ForeignKey(Workflow, on_delete=models.CASCADE, verbose_name='所属工作流') field_type = models.CharField('类型', max_length=50, choices=field_type_choices, - help_text='string, int, float, date, datetime, radio, checkbox, select, selects, cascader, cascaders, cascader, cascaders,textarea, file') + help_text='string, int, float, date, datetime, radio, checkbox, select, selects, cascader, cascaders, select_dg, select_dgs,textarea, file') field_key = models.CharField('字段标识', max_length=50, help_text='字段类型请尽量特殊,避免与系统中关键字冲突') field_name = models.CharField('字段名称', max_length=50) sort = models.IntegerField('排序', default=0, help_text='工单基础字段在表单中排序为:流水号0,标题20,状态id40,状态名41,创建人80,创建时间100,更新时间120.前端展示工单信息的表单可以根据这个id顺序排列') @@ -173,7 +173,7 @@ class CustomField(CommonAModel): field_choice = models.JSONField('选项值', default=list, blank=True, help_text='选项值,格式为list, 例["id":1, "name":"张三"]') - label = models.CharField('标签', max_length=1000, default='', help_text='处理特殊逻辑使用') + label = models.CharField('标签', max_length=1000, default='', help_text='处理特殊逻辑使用,比如sys_user用于获取用户作为选项') # hook = models.CharField('hook', max_length=1000, default='', help_text='获取下拉选项用于动态选项值') is_hidden = models.BooleanField('是否隐藏', default=False, help_text='可用于携带不需要用户查看的字段信息') diff --git a/hb_server/apps/wf/serializers.py b/hb_server/apps/wf/serializers.py index 6daa326..f7769dd 100644 --- a/hb_server/apps/wf/serializers.py +++ b/hb_server/apps/wf/serializers.py @@ -129,21 +129,22 @@ class TicketDetailSerializer(serializers.ModelSerializer): i['field_state'] = state_fields.get(key, 1) i['field_value'] = ticket_data.get(key, None) i['field_display'] = i['field_value'] # 该字段是用于查看详情直接展示 - if 'sys_user' in i['label']: - if isinstance(i['field_value'], list): - i['field_display'] = ','.join(list(User.objects.filter(id__in=i['field_value']).values_list('name', flat=True))) - else: - i['field_display'] = User.objects.get(id=i['field_value']).name - elif i['field_type'] in ['radio', 'select']: - for m in i['field_choice']: - if m['id'] == i['field_value']: - i['field_display'] = m['name'] - elif i['field_type'] in ['checkbox', 'selects']: - d_list = [] - for m in i['field_choice']: - if m['id'] in i['field_value']: - d_list.append(m['name']) - i['field_display'] = ','.join(d_list) + if i['field_value']: + if 'sys_user' in i['label']: + if isinstance(i['field_value'], list): + i['field_display'] = ','.join(list(User.objects.filter(id__in=i['field_value']).values_list('name', flat=True))) + else: + i['field_display'] = User.objects.get(id=i['field_value']).name + elif i['field_type'] in ['radio', 'select']: + for m in i['field_choice']: + if m['id'] == i['field_value']: + i['field_display'] = m['name'] + elif i['field_type'] in ['checkbox', 'selects']: + d_list = [] + for m in i['field_choice']: + if m['id'] in i['field_value']: + d_list.append(m['name']) + i['field_display'] = ','.join(d_list) return all_fields_l def filter_display(self, item, field_value):