From ec7b0cd987593488b1b343a988382953f167c1e6 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Wed, 17 Dec 2025 14:10:59 +0800 Subject: [PATCH 01/11] =?UTF-8?q?fix:=20handovermerge=E6=97=B6new=5Fstate?= =?UTF-8?q?=E6=9C=AA=E5=AE=9A=E4=B9=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/wpm/serializers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/wpm/serializers.py b/apps/wpm/serializers.py index 941e26cb..dcc7670d 100644 --- a/apps/wpm/serializers.py +++ b/apps/wpm/serializers.py @@ -1197,8 +1197,8 @@ class HandoverSerializer(CustomModelSerializer): attrs['type'] = Handover.H_NORMAL mtype = attrs["mtype"] + new_state = None if mtype == Handover.H_MERGE: - new_state = None new_wm:WMaterial = attrs.get("new_wm", None) if new_wm: attrs['new_batch'] = new_wm.batch From 07b2df1fd0266ced3f94c3480f77d861cf19429c Mon Sep 17 00:00:00 2001 From: caoqianming Date: Wed, 17 Dec 2025 14:25:40 +0800 Subject: [PATCH 02/11] =?UTF-8?q?feat:=20=E5=90=88=E6=89=B9=E6=97=B6?= =?UTF-8?q?=E6=A0=A1=E9=AA=8C=E6=89=B9=E6=AC=A1=E6=98=AF=E5=90=A6=E5=B7=B2?= =?UTF-8?q?=E5=AD=98=E5=9C=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/wpm/models.py | 5 ++++- apps/wpm/services.py | 6 +++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/apps/wpm/models.py b/apps/wpm/models.py index 723e2832..e45d71c2 100644 --- a/apps/wpm/models.py +++ b/apps/wpm/models.py @@ -706,12 +706,15 @@ class BatchSt(BaseModel): unique_together = [("batch", "version")] @classmethod - def g_create(cls, batch:str, mio=None, mioitem=None, handover=None, mlog=None, material_start=None, check_mat_start=False, exclude_batchst_ids=[]): + def g_create(cls, batch:str, mio=None, mioitem=None, handover=None, mlog=None, material_start=None, check_mat_start=False, exclude_batchst_ids=[], check_batch_exist=False): """ 创建新的批次 """ if mioitem: mio = mioitem.mio + if check_batch_exist: + if cls.objects.filter(batch=batch).exclude(id__in=exclude_batchst_ids).exists(): + raise ParseError(f"{batch}-该批次号已存在不可使用") node, created = cls.safe_get_or_create(batch=batch, version=1, defaults={ "mio":mio, "mioitem":mioitem, "handover":handover, "mlog":mlog, "material_start":material_start}) if not created and check_mat_start: diff --git a/apps/wpm/services.py b/apps/wpm/services.py index 2de29c1f..4f9cc43a 100644 --- a/apps/wpm/services.py +++ b/apps/wpm/services.py @@ -727,12 +727,15 @@ def handover_submit(handover:Handover, user: User, now: Union[datetime.datetime, batches = [] mids = [] exclude_batchst_ids = [] + check_batch_exist = False if mtype == Handover.H_MERGE: if new_batch: batches = [new_batch] else: raise ParseError("合并批次时请提供新批次号") - target_b, _ = BatchSt.g_create(batch=new_batch, handover=handover, material_start=material) + if handover.new_wm is None: + check_batch_exist = True + target_b, _ = BatchSt.g_create(batch=new_batch, handover=handover, material_start=material, check_batch_exist=check_batch_exist) exclude_batchst_ids.append(target_b.id) elif mtype == Handover.H_DIV: if handover.wm is None: @@ -761,6 +764,7 @@ def handover_submit(handover:Handover, user: User, now: Union[datetime.datetime, batches_to_limit.append(batch) target, _ = BatchSt.g_create(batch=batch, handover=handover, material_start=material) exclude_batchst_ids.append(target.id) + # 这里暂时忽略check_batch_exist,因为拆批一般不会重复 BatchLog.g_create(source=source_b, target=target, handover=handover, relation_type="split") else: batch = wm_from.batch From 041474411e4efd06e72fa92723a2e7e0d055ea4e Mon Sep 17 00:00:00 2001 From: caoqianming Date: Wed, 17 Dec 2025 15:24:38 +0800 Subject: [PATCH 03/11] =?UTF-8?q?fix:=20handoverserializer=20=E5=85=B3?= =?UTF-8?q?=E4=BA=8Enew=5Fwm=E7=9A=84=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/wpm/serializers.py | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/apps/wpm/serializers.py b/apps/wpm/serializers.py index dcc7670d..7045f0e9 100644 --- a/apps/wpm/serializers.py +++ b/apps/wpm/serializers.py @@ -1197,13 +1197,12 @@ class HandoverSerializer(CustomModelSerializer): attrs['type'] = Handover.H_NORMAL mtype = attrs["mtype"] - new_state = None + + new_wm:WMaterial = attrs.get("new_wm", None) + if mtype == Handover.H_MERGE: - new_wm:WMaterial = attrs.get("new_wm", None) if new_wm: attrs['new_batch'] = new_wm.batch - new_state = new_wm.state - new_defect = new_wm.defect if attrs["type"] == Handover.H_CHANGE: attrs["material_changed"] = new_wm.material attrs["state_changed"] = new_wm.state @@ -1252,6 +1251,14 @@ class HandoverSerializer(CustomModelSerializer): # raise ParseError('正常交接收料工段与送料工段不能相同') t_count = 0 tracking = attrs["material"].tracking + + next_mat = None + next_state = None + next_defect = None + if new_wm: + next_mat = new_wm.material + next_state = new_wm.state + next_defect = new_wm.defect for ind, item in enumerate(attrs['handoverb']): if item["count"] > 0: pass @@ -1259,16 +1266,16 @@ class HandoverSerializer(CustomModelSerializer): raise ParseError(f'第{ind+1}行-交接数量必须大于0') wm = item["wm"] if mtype == Handover.H_MERGE: - if new_state is None: - new_mat = wm.material - new_state = wm.state - new_defect = wm.defect + if next_mat is None: + next_mat = wm.material + next_state = wm.state + next_defect = wm.defect else: - if new_mat != wm.material: + if next_mat != wm.material: raise ParseError(f'第{ind+1}行-合并的物料不一致') - if new_state != wm.state: + if next_state != wm.state: raise ParseError(f'第{ind+1}行-合并的物料状态不一致') - if new_defect != wm.defect: + if next_defect != wm.defect: raise ParseError(f'第{ind+1}行-合并的物料缺陷不一致') if tracking == Material.MA_TRACKING_SINGLE: handoverbw = item.get("handoverbw", []) From 07134f32bb382ec3d13b2d6480376e6caebda3de Mon Sep 17 00:00:00 2001 From: caoqianming Date: Wed, 17 Dec 2025 15:34:08 +0800 Subject: [PATCH 04/11] =?UTF-8?q?fix:=20handoverserializer=20=E5=85=B3?= =?UTF-8?q?=E4=BA=8Enew=5Fwm=E7=9A=84=E5=A4=84=E7=90=862?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/wpm/serializers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/wpm/serializers.py b/apps/wpm/serializers.py index 7045f0e9..b2b75406 100644 --- a/apps/wpm/serializers.py +++ b/apps/wpm/serializers.py @@ -1255,7 +1255,7 @@ class HandoverSerializer(CustomModelSerializer): next_mat = None next_state = None next_defect = None - if new_wm: + if new_wm and attrs["type"] != Handover.H_CHANGE: next_mat = new_wm.material next_state = new_wm.state next_defect = new_wm.defect From 7fc995c7c9e8a3a954d6b3ee8be153f8d96f4c60 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Wed, 17 Dec 2025 15:47:25 +0800 Subject: [PATCH 05/11] =?UTF-8?q?fix:=20handoverserializer=20=E5=85=B3?= =?UTF-8?q?=E4=BA=8Enew=5Fwm=E7=9A=84=E5=A4=84=E7=90=863?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/wpm/serializers.py | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/apps/wpm/serializers.py b/apps/wpm/serializers.py index b2b75406..968ae690 100644 --- a/apps/wpm/serializers.py +++ b/apps/wpm/serializers.py @@ -1199,20 +1199,17 @@ class HandoverSerializer(CustomModelSerializer): mtype = attrs["mtype"] new_wm:WMaterial = attrs.get("new_wm", None) + if new_wm: + attrs['new_batch'] = new_wm.batch + if attrs["type"] == Handover.H_CHANGE: + attrs["material_changed"] = new_wm.material + attrs["state_changed"] = new_wm.state if mtype == Handover.H_MERGE: - if new_wm: - attrs['new_batch'] = new_wm.batch - if attrs["type"] == Handover.H_CHANGE: - attrs["material_changed"] = new_wm.material - attrs["state_changed"] = new_wm.state if not attrs.get("new_batch", None): raise ParseError("必须指定合并后的批次") if 'undefined' in attrs['new_batch'] or 'null' in attrs['new_batch'] or '#' in attrs['new_batch']: raise ParseError("新批次号含有不允许信息!") - else: - attrs['new_batch'] = None - attrs['new_wm'] = None if attrs["type"] == Handover.H_CHANGE: if "material_changed" in attrs and attrs["material_changed"]: From 5dfb903c4ab678f9b94d233a4f148927f4b54d7c Mon Sep 17 00:00:00 2001 From: caoqianming Date: Wed, 17 Dec 2025 15:59:14 +0800 Subject: [PATCH 06/11] =?UTF-8?q?fix:=20handoverserializer=20=E5=85=B3?= =?UTF-8?q?=E4=BA=8Enew=5Fwm=E7=9A=84=E5=A4=84=E7=90=864?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/wpm/services.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/wpm/services.py b/apps/wpm/services.py index 4f9cc43a..b9dea08d 100644 --- a/apps/wpm/services.py +++ b/apps/wpm/services.py @@ -871,7 +871,7 @@ def handover_submit(handover:Handover, user: User, now: Union[datetime.datetime, elif handover.type == Handover.H_CHANGE: if mtype == Handover.H_MERGE and handover.new_wm: wm_to = handover.new_wm - if wm_to.material != handover.material_changed or wm_to.state != handover.state_changed or wm_to.defect != wm_from.defect: + if wm_to.material != handover.material_changed or wm_to.state != handover.state_changed: raise ParseError("改版合并到的车间库存状态或物料异常") elif handover.recive_mgroup: wm_to, _ = WMaterial.objects.get_or_create( From c44070761225cf7ccb1c8abd51106e71bbb78a8f Mon Sep 17 00:00:00 2001 From: caoqianming Date: Wed, 17 Dec 2025 16:06:10 +0800 Subject: [PATCH 07/11] =?UTF-8?q?feat:=20=E5=8F=96=E6=B6=88handover=5Fsubm?= =?UTF-8?q?it=E6=97=A0=E7=94=A8=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/wpm/views.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/apps/wpm/views.py b/apps/wpm/views.py index 09ab7b41..8b5f52e1 100644 --- a/apps/wpm/views.py +++ b/apps/wpm/views.py @@ -625,9 +625,6 @@ class HandoverViewSet(CustomModelViewSet): 交接记录撤回 """ ins: Handover = self.get_object() - if ins.new_batch: # 如果是合批 - if Handoverb.objects.filter(batch=ins.new_batch, handover__submit_time__isnull=True).exists(): - raise ParseError("该合批存在未提交的交接记录,不可撤回") if ins.submit_time: handover_revert(ins, handler=request.user) return Response() From 45f9f27cbe98c82a95d1ab7fc8772cb3fae55c37 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Thu, 18 Dec 2025 10:13:51 +0800 Subject: [PATCH 08/11] =?UTF-8?q?feat:=20=E5=85=89=E5=AD=90=E5=85=AD?= =?UTF-8?q?=E8=BD=A6=E9=97=B4=E6=89=B9=E6=AC=A1=E7=94=9F=E4=BA=A7=E5=90=88?= =?UTF-8?q?=E6=A0=BC=E7=8E=87=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/wpm/scripts/batch_gzerp.py | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/apps/wpm/scripts/batch_gzerp.py b/apps/wpm/scripts/batch_gzerp.py index 8e7a61b5..a6587e77 100644 --- a/apps/wpm/scripts/batch_gzerp.py +++ b/apps/wpm/scripts/batch_gzerp.py @@ -500,12 +500,14 @@ def main(batch: str, mgroup_obj=None): data["销售发货_小日期"] = max(data["销售发货_日期"]).strftime("%Y-%m-%d") data["销售发货_大日期"] = min(data["销售发货_日期"]).strftime("%Y-%m-%d") data["销售发货_日期"] = ";".join([item.strftime("%Y-%m-%d") for item in data["销售发货_日期"]]) - if data.get("六车间领料_count", 0) > 0: - data["六车间_批次生产合格率"] = round(data["销售发货_count"] * 100/ data["六车间领料_count"], 1) - if data.get("棒料成型_count_real", 0) > 0: - data["七车间_批次应出合格率"] = round(data["销售发货_count"] * 100/ data["棒料成型_count_real"], 1) - if data.get("管料成型_count_real", 0) > 0: - data["十车间_批次应出合格率"] = round(data["销售发货_count"] * 100/ data["管料成型_count_real"], 1) + + if data.get("六车间领料_count", 0) > 0 or data.get("六车间交接领料_count", 0) > 0: + data["六车间总领料_count"] = data.get("六车间领料_count", 0) + data.get("六车间交接领料_count", 0) + data["六车间_批次生产合格率"] = round((data.get("销售发货_count", 0) + data["六车间库存_count"]) * 100/ data["六车间总领料_count"], 1) + if data.get("棒料成型_count_real", 0) > 0: + data["七车间_批次应出合格率"] = round(data.get("销售发货_count", 0) * 100/ data["棒料成型_count_real"], 1) + if data.get("管料成型_count_real", 0) > 0: + data["十车间_批次应出合格率"] = round(data.get("销售发货_count", 0) * 100/ data["管料成型_count_real"], 1) res = get_f_l_date(data) From 81d2cbce8c61b5474d6ef21909026142b67c6d88 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Thu, 18 Dec 2025 14:52:58 +0800 Subject: [PATCH 09/11] =?UTF-8?q?feat:=20=E5=85=89=E5=AD=90=E5=85=AD?= =?UTF-8?q?=E8=BD=A6=E9=97=B4=E6=89=B9=E6=AC=A1=E7=94=9F=E4=BA=A7=E5=90=88?= =?UTF-8?q?=E6=A0=BC=E7=8E=87=E4=BF=AE=E6=94=B92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/wpm/scripts/batch_gzerp.py | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/apps/wpm/scripts/batch_gzerp.py b/apps/wpm/scripts/batch_gzerp.py index a6587e77..1d87c585 100644 --- a/apps/wpm/scripts/batch_gzerp.py +++ b/apps/wpm/scripts/batch_gzerp.py @@ -501,13 +501,14 @@ def main(batch: str, mgroup_obj=None): data["销售发货_大日期"] = min(data["销售发货_日期"]).strftime("%Y-%m-%d") data["销售发货_日期"] = ";".join([item.strftime("%Y-%m-%d") for item in data["销售发货_日期"]]) - if data.get("六车间领料_count", 0) > 0 or data.get("六车间交接领料_count", 0) > 0: - data["六车间总领料_count"] = data.get("六车间领料_count", 0) + data.get("六车间交接领料_count", 0) - data["六车间_批次生产合格率"] = round((data.get("销售发货_count", 0) + data["六车间库存_count"]) * 100/ data["六车间总领料_count"], 1) - if data.get("棒料成型_count_real", 0) > 0: - data["七车间_批次应出合格率"] = round(data.get("销售发货_count", 0) * 100/ data["棒料成型_count_real"], 1) - if data.get("管料成型_count_real", 0) > 0: - data["十车间_批次应出合格率"] = round(data.get("销售发货_count", 0) * 100/ data["管料成型_count_real"], 1) + # if data.get("六车间领料_count", 0) > 0 or data.get("六车间交接领料_count", 0) > 0: + # data["六车间总领料_count"] = data.get("六车间领料_count", 0) + data.get("六车间交接领料_count", 0) + # data["六车间_批次生产合格率"] = round((data.get("销售发货_count", 0) + data["六车间库存_count"]) * 100/ data["六车间总领料_count"], 1) + # if data.get("棒料成型_count_real", 0) > 0: + # data["七车间_批次应出合格率"] = round(data.get("销售发货_count", 0) * 100/ data["棒料成型_count_real"], 1) + # if data.get("管料成型_count_real", 0) > 0: + # data["十车间_批次应出合格率"] = round(data.get("销售发货_count", 0) * 100/ data["管料成型_count_real"], 1) + data["六车间总领料_count"] = data.get("六车间领料_count", 0) + data.get("六车间交接领料_count", 0) res = get_f_l_date(data) From ba521b11078d14348aaa8c6ecdc45c4badfb8d1d Mon Sep 17 00:00:00 2001 From: caoqianming Date: Fri, 19 Dec 2025 08:53:33 +0800 Subject: [PATCH 10/11] =?UTF-8?q?feat:=20=E4=BF=AE=E6=94=B9mioitemw=20test?= =?UTF-8?q?=E7=9A=84=E5=AF=BC=E5=85=A5=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/inm/services_daoru.py | 8 +++++++- apps/inm/views.py | 5 +++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/apps/inm/services_daoru.py b/apps/inm/services_daoru.py index a5eb1fc9..69720f6e 100644 --- a/apps/inm/services_daoru.py +++ b/apps/inm/services_daoru.py @@ -122,7 +122,13 @@ def daoru_mioitem_test(path:str, mioitem:MIOItem): FtestItem.objects.bulk_create(ftestitems) else: break - + + mioitem.test_date = test_date + mioitem.test_user = test_user + mioitem.count = MIOItemw.objects.filter(mioitem=mioitem).count() + mioitem.count_tested = MIOItemw.objects.filter(mioitem=mioitem, ftest__isnull=False).count() + mioitem.count_notok = MIOItemw.objects.filter(mioitem=mioitem, ftest__is_ok=False).count() + mioitem.save() def daoru_mioitems(path:str, mio:MIO): from apps.utils.snowflake import idWorker diff --git a/apps/inm/views.py b/apps/inm/views.py index b4f7667f..e1a3c988 100644 --- a/apps/inm/views.py +++ b/apps/inm/views.py @@ -28,6 +28,7 @@ from apps.mtm.models import Material from drf_yasg.utils import swagger_auto_schema from drf_yasg import openapi from django.db import connection +from datetime import datetime # Create your views here. @@ -508,6 +509,10 @@ class MIOItemwViewSet(CustomModelViewSet): mioitem.count = count mioitem.count_tested = MIOItemw.objects.filter(mioitem=mioitem, ftest__isnull=False).count() mioitem.count_notok = MIOItemw.objects.filter(mioitem=mioitem, ftest__is_ok=False).count() + if mioitem.test_date is None: + mioitem.test_date = datetime.now() + if mioitem.test_user is None: + mioitem.test_user = self.request.user mioitem.save() def perform_create(self, serializer): From b5fc176cf20e3c02a6f3dcf066664e288e7810b3 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Fri, 19 Dec 2025 09:13:49 +0800 Subject: [PATCH 11/11] =?UTF-8?q?feat:=20=E7=8E=BB=E7=BA=A4=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0mioitemw=E6=A3=80=E9=AA=8C=E5=AF=BC=E5=85=A5=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- media/default/template/mioitemw_t.xlsx | Bin 0 -> 21337 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 media/default/template/mioitemw_t.xlsx diff --git a/media/default/template/mioitemw_t.xlsx b/media/default/template/mioitemw_t.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..ad58070f5fffb782d443dca609dc480452a672f3 GIT binary patch literal 21337 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 BlA{0s literal 0 HcmV?d00001