From dbaa61b01a5b6bd037159f174e1aa88df493c635 Mon Sep 17 00:00:00 2001 From: liuxiaoxu <1793812695@qq.com> Date: Fri, 8 Nov 2024 15:21:29 +0800 Subject: [PATCH] =?UTF-8?q?[feat]=20=E5=94=AE=E5=90=8E=E7=AE=A1=E7=90=86?= =?UTF-8?q?=20=E4=BF=AE=E6=94=B9=E5=94=AE=E5=90=8E=E7=AC=AC=E4=B8=80?= =?UTF-8?q?=E6=AC=A1=E7=BB=B4=E6=8A=A4=E8=AE=BE=E5=A4=87=E5=87=BA=E5=BA=93?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=87=BA=E8=B4=A7=E8=AE=BE=E5=A4=87=E5=89=8D?= =?UTF-8?q?=E7=AB=AF=E9=A1=B5=E9=9D=A2=EF=BC=9A=E6=96=B0=E5=A2=9E=20submit?= =?UTF-8?q?Handler=E6=96=B9=E6=B3=95=E5=AE=9E=E7=8E=B0=EF=BC=9A=E9=9C=80?= =?UTF-8?q?=E8=A6=81=E7=BB=B4=E6=8A=A4=E7=9A=84=E7=89=A9=E6=96=99=E4=BF=A1?= =?UTF-8?q?=E6=81=AF=E5=92=8C=E4=B8=8D=E9=9C=80=E8=A6=81=E7=BB=B4=E6=8A=A4?= =?UTF-8?q?=E7=9A=84=E7=89=A9=E6=96=99=E4=BF=A1=E6=81=AF=E8=BF=9B=E8=A1=8C?= =?UTF-8?q?=E6=95=B4=E5=90=88=EF=BC=8C=E5=A6=82=E6=9E=9C=E4=B8=A4=E8=80=85?= =?UTF-8?q?=E9=83=BD=E4=B8=BA=E7=A9=BA=20=E6=8F=90=E7=A4=BA=20=E2=80=9D?= =?UTF-8?q?=E6=B2=A1=E6=9C=89=E6=95=B0=E6=8D=AE=E5=8F=AF=E4=BB=A5=E6=8F=90?= =?UTF-8?q?=E4=BA=A4=E2=80=9C=EF=BC=9B=E5=A6=82=E6=9E=9C=E4=B8=A4=E8=80=85?= =?UTF-8?q?=E8=87=B3=E5=B0=91=E6=9C=89=E4=B8=80=E4=B8=AA=E4=B8=8D=E4=B8=BA?= =?UTF-8?q?=E7=A9=BA=20=EF=BC=8C=E5=88=A4=E6=96=AD=E6=98=AF=E5=90=A6?= =?UTF-8?q?=E5=8B=BE=E9=80=89=E4=BA=86=E6=95=B0=E6=8D=AE=E2=80=9D=E8=AF=B7?= =?UTF-8?q?=E8=87=B3=E5=B0=91=E9=80=89=E6=8B=A9=E4=B8=80=E6=9D=A1=E5=87=BA?= =?UTF-8?q?=E8=B4=A7=E8=AE=BE=E5=A4=87=E5=90=8E=E5=86=8D=E4=BF=9D=E5=AD=98?= =?UTF-8?q?=E2=80=9C=EF=BC=9B=20=E4=BF=AE=E6=94=B9=20=E5=94=AE=E5=90=8E?= =?UTF-8?q?=E7=AC=AC=E4=B8=80=E6=AC=A1=E7=BB=B4=E6=8A=A4=E8=AE=BE=E5=A4=87?= =?UTF-8?q?=E5=89=8D=E7=AB=AF=E9=A1=B5=E9=9D=A2=EF=BC=9A=E6=88=90=E5=93=81?= =?UTF-8?q?=E7=89=A9=E6=96=99=E4=BF=A1=E6=81=AF=E6=96=B0=E5=A2=9E=E5=87=BA?= =?UTF-8?q?=E8=B4=A7=E8=AE=BE=E5=A4=87=E5=AD=90=E8=A1=A8=E4=BF=A1=E6=81=AF?= =?UTF-8?q?=EF=BC=9B=E5=8F=AF=E4=BB=A5=E7=BB=B4=E6=8A=A4=E8=AE=BE=E5=A4=87?= =?UTF-8?q?SN=E5=8F=B7=EF=BC=8C=E6=B2=A1=E6=9C=89=E5=80=BC=E9=BB=98?= =?UTF-8?q?=E8=AE=A4=E9=97=AE=E2=80=9Dempty=E2=80=9C=EF=BC=9B=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E8=8E=B7=E5=8F=96=E6=89=80=E6=9C=89=E5=AD=90=E8=A1=A8?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E7=9A=84=E5=89=8D=E7=AB=AF=E6=96=B9=E6=B3=95?= =?UTF-8?q?getAllSubTablesData()=EF=BC=8C=E5=AE=9E=E7=8E=B0=EF=BC=8C?= =?UTF-8?q?=E4=BB=A5=E4=B8=BB=E8=A1=A8=E7=89=A9=E6=96=99=E4=BF=A1=E6=81=AF?= =?UTF-8?q?=E7=9A=84=E5=87=86=E5=A4=87=E5=87=BA=E5=BA=93=E6=95=B0=EF=BC=9B?= =?UTF-8?q?=E5=A6=82=E6=9E=9C=E4=B8=BB=E8=A1=A8=E7=9A=84=E7=94=B3=E8=AF=B7?= =?UTF-8?q?=E5=87=BA=E5=BA=93=E6=95=B0=E5=A4=A7=E4=BA=8E=E5=AD=90=E8=A1=A8?= =?UTF-8?q?=E7=9A=84=E5=87=BA=E8=B4=A7=E8=AE=BE=E5=A4=87=E6=95=B0=EF=BC=8C?= =?UTF-8?q?=E5=B0=B1=E8=BF=9B=E8=A1=8C=E8=A6=81=E5=88=A0=E9=99=A4=E6=8F=90?= =?UTF-8?q?=E7=A4=BA=EF=BC=9B=E5=A6=82=E6=9E=9C=E5=B0=8F=E4=BA=8E=EF=BC=8C?= =?UTF-8?q?=E5=B0=B1=E8=BF=9B=E8=A1=8C=E9=9C=80=E8=A6=81=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E6=8F=90=E7=A4=BA=EF=BC=9B=E5=87=BA=E8=B4=A7=E8=AE=BE=E5=A4=87?= =?UTF-8?q?=E5=AD=90=E8=A1=A8=E6=96=B0=E5=A2=9E=E5=88=A0=E9=99=A4=E5=89=8D?= =?UTF-8?q?=E7=AB=AF=E6=8E=A5=E5=8F=A3=EF=BC=8C=E5=88=A0=E9=99=A4=E5=89=8D?= =?UTF-8?q?=E6=9C=89=E4=B8=80=E4=B8=AA=E6=8F=90=E7=A4=BA=EF=BC=9B=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E6=89=93=E5=BC=80=E6=B7=BB=E5=8A=A0=E5=87=BA=E8=B4=A7?= =?UTF-8?q?=E8=AE=BE=E5=A4=87=E7=9A=84addShippingDevicesOne=E6=96=B9?= =?UTF-8?q?=E6=B3=95=EF=BC=8C=E5=8E=BB=E9=99=A4=E5=89=8D=E7=AB=AF=E9=83=A8?= =?UTF-8?q?=E5=88=86=E7=9A=84url=E7=BC=96=E7=A0=81=E6=93=8D=E4=BD=9C?= =?UTF-8?q?=EF=BC=8C=E8=A7=A3=E5=86=B3=E5=A4=9A=E5=8D=95=E5=8F=B7=E5=87=BA?= =?UTF-8?q?=E7=8E=B0=E4=B9=B1=E7=A0=81=E9=97=AE=E9=A2=98=20=E5=94=AE?= =?UTF-8?q?=E5=90=8E=E5=87=BA=E8=B4=A7=E8=AE=BE=E5=A4=87Controller?= =?UTF-8?q?=E5=B1=82=EF=BC=9A=E4=BF=AE=E6=94=B9=20=E5=94=AE=E5=90=8E?= =?UTF-8?q?=E7=AC=AC=E4=B8=80=E6=AC=A1=E7=BB=B4=E6=8A=A4=E8=AE=BE=E5=A4=87?= =?UTF-8?q?=20=E6=88=90=E5=93=81=E6=B7=BB=E5=8A=A0=E5=87=BA=E8=B4=A7?= =?UTF-8?q?=E8=AE=BE=E5=A4=87=E4=BF=A1=E6=81=AF=E6=96=B9=E6=B3=95=EF=BC=8C?= =?UTF-8?q?=E5=92=8C=E5=89=8D=E7=AB=AF=E5=AF=B9=E6=8E=A5=EF=BC=8Curl?= =?UTF-8?q?=E8=A7=A3=E7=A0=81=E7=94=B1=E5=90=8E=E7=AB=AF=E6=93=8D=E4=BD=9C?= =?UTF-8?q?=EF=BC=8C=E5=B9=B6=E4=B8=94=E5=A6=82=E6=9E=9C=E4=BB=8E=E5=89=8D?= =?UTF-8?q?=E7=AB=AF=E4=BC=A0=E5=85=A5=E7=9A=84=E5=8F=82=E6=95=B0=E6=AF=8F?= =?UTF-8?q?=E4=B8=AA=E9=83=BD=E5=8A=A0=E4=B8=8A=E6=A0=A1=E9=AA=8C=E6=B2=A1?= =?UTF-8?q?=E6=9C=89=E5=80=BC=E8=AE=BE=E7=BD=AE=E4=B8=BAnull=EF=BC=8C?= =?UTF-8?q?=E8=80=8C=E4=B8=8D=E6=98=AF=E5=A1=AB=E5=85=85=E2=80=9Dnull?= =?UTF-8?q?=E2=80=9C=EF=BC=9B=E6=96=B0=E5=A2=9E=E5=B1=95=E7=A4=BA=E7=AC=AC?= =?UTF-8?q?=E4=B8=80=E6=AC=A1=E7=BB=B4=E6=8A=A4=E8=AE=BE=E5=A4=87=E5=87=BA?= =?UTF-8?q?=E5=BA=93=EF=BC=8C=E5=B7=B2=E7=BB=8F=E6=B7=BB=E5=8A=A0=E4=BA=86?= =?UTF-8?q?=E7=9A=84=E5=87=BA=E8=B4=A7=E8=AE=BE=E5=A4=87=E5=89=8D=E7=AB=AF?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=EF=BC=9B=E6=96=B0=E5=A2=9E=E7=AC=AC=E4=B8=80?= =?UTF-8?q?=E6=AC=A1=E7=BB=B4=E6=8A=A4=E8=AE=BE=E5=A4=87=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E7=89=A9=E6=96=99=E4=BF=A1=E6=81=AF=E5=87=BA=E8=B4=A7=E8=AE=BE?= =?UTF-8?q?=E5=A4=87=E4=BF=A1=E6=81=AF=E5=89=8D=E7=AB=AF=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=20impl=E5=B1=82=EF=BC=9A=E9=87=8D=E5=86=99=20=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E4=BF=9D=E5=AD=98=E5=94=AE=E5=90=8E=E7=AC=AC=E4=B8=80?= =?UTF-8?q?=E6=AC=A1=E7=BB=B4=E6=8A=A4=E8=AE=BE=E5=A4=87=E5=87=BA=E5=BA=93?= =?UTF-8?q?=E5=90=8E=E7=AB=AF=E6=96=B9=E6=B3=95=EF=BC=8C=E5=AE=9E=E7=8E=B0?= =?UTF-8?q?=EF=BC=9A=E5=A4=84=E7=90=86=E5=89=8D=E7=AB=AF=E9=9C=80=E8=A6=81?= =?UTF-8?q?=E7=BB=B4=E6=8A=A4=E8=AE=BE=E5=A4=87=E5=87=BA=E8=B4=A7=E7=9A=84?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=EF=BC=8C=E5=8A=A0=E4=B8=8A=E6=A0=A1=E9=AA=8C?= =?UTF-8?q?=EF=BC=8C=E5=A6=82=E6=9E=9C=E6=B2=A1=E6=9C=89=E5=A1=AB=E5=86=99?= =?UTF-8?q?=E8=AE=BE=E5=A4=87sn=EF=BC=8C=E8=A6=81=E6=8F=90=E7=A4=BA?= =?UTF-8?q?=E5=93=AA=E5=87=A0=E4=B8=AA=E5=87=BA=E8=B4=A7=E8=AE=BE=E5=A4=87?= =?UTF-8?q?=E6=B2=A1=E6=9C=89=E5=A1=AB=E5=86=99=E8=AE=BE=E5=A4=87sn?= =?UTF-8?q?=E3=80=82=E5=90=8C=E6=97=B6=E6=9B=B4=E6=96=B0=E5=94=AE=E5=90=8E?= =?UTF-8?q?=E5=87=BA=E5=BA=93=E5=8D=95=EF=BC=8C=E9=94=80=E5=94=AE=E5=87=BA?= =?UTF-8?q?=E8=B4=A7=E5=8D=95=EF=BC=8C=E4=BB=93=E5=BA=93=E5=87=BA=E5=BA=93?= =?UTF-8?q?=E5=8D=95=E7=9A=84=E6=95=B0=E6=8D=AE=EF=BC=8C=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E5=87=BA=E5=BA=93=E7=8A=B6=E6=80=81=20=E9=87=8D=E5=86=99=20?= =?UTF-8?q?=E5=94=AE=E5=90=8E=E7=AC=AC=E4=B8=80=E6=AC=A1=E7=BB=B4=E6=8A=A4?= =?UTF-8?q?=E8=AE=BE=E5=A4=87=EF=BC=8C=E6=B7=BB=E5=8A=A0=E5=87=BA=E8=B4=A7?= =?UTF-8?q?=E8=AE=BE=E5=A4=87=E4=BF=A1=E6=81=AF=EF=BC=8C=E5=B1=95=E7=A4=BA?= =?UTF-8?q?=E9=94=80=E5=94=AE=E8=AE=A2=E5=8D=95=E7=9A=84=E5=87=BA=E8=B4=A7?= =?UTF-8?q?=E8=AE=BE=E5=A4=87=E4=BF=A1=E6=81=AF=E5=90=8E=E7=AB=AF=E6=96=B9?= =?UTF-8?q?=E6=B3=95=EF=BC=8C=E5=AE=9E=E7=8E=B0=EF=BC=9A=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E5=87=BA=E8=B4=A7=E8=AE=BE=E5=A4=87=E5=89=8D=E7=AB=AF=E5=88=97?= =?UTF-8?q?=E8=A1=A8=E6=95=B0=E6=8D=AE=EF=BC=8C=E7=94=B1=E5=87=BA=E5=BA=93?= =?UTF-8?q?=E5=8D=95=E5=8F=B7=E5=92=8C=E9=94=80=E5=94=AE=E5=8D=95=E5=8F=B7?= =?UTF-8?q?=E8=BF=9B=E8=A1=8C=E5=85=B3=E8=81=94=EF=BC=9B=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=20=E5=94=AE=E5=90=8E=E7=AC=AC=E4=B8=80=E6=AC=A1=E7=BB=B4?= =?UTF-8?q?=E6=8A=A4=E8=AE=BE=E5=A4=87=EF=BC=8C=E6=B7=BB=E5=8A=A0=E5=87=BA?= =?UTF-8?q?=E8=B4=A7=E8=AE=BE=E5=A4=87=E4=BF=A1=E6=81=AF=EF=BC=8C=E5=B1=95?= =?UTF-8?q?=E7=A4=BA=E5=85=B6=E4=BB=96=E9=94=80=E5=94=AE=E8=AE=A2=E5=8D=95?= =?UTF-8?q?=E7=9A=84=E5=87=BA=E8=B4=A7=E8=AE=BE=E5=A4=87=E4=BF=A1=E6=81=AF?= =?UTF-8?q?=20=E5=AE=9E=E7=8E=B0=EF=BC=9A=E6=B7=BB=E5=8A=A0=E5=87=BA?= =?UTF-8?q?=E8=B4=A7=E8=AE=BE=E5=A4=87=E5=89=8D=E7=AB=AF=E5=88=97=E8=A1=A8?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=EF=BC=8C=E7=94=B1=E5=87=BA=E5=BA=93=E5=8D=95?= =?UTF-8?q?=E5=8F=B7=E5=92=8C=E9=94=80=E5=94=AE=E5=8D=95=E5=8F=B7=E8=BF=9B?= =?UTF-8?q?=E8=A1=8C=E5=85=B3=E8=81=94=EF=BC=9B=20=E6=96=B0=E5=A2=9E=20?= =?UTF-8?q?=E5=B1=95=E7=A4=BA=E7=AC=AC=E4=B8=80=E6=AC=A1=E7=BB=B4=E6=8A=A4?= =?UTF-8?q?=E8=AE=BE=E5=A4=87=E5=87=BA=E5=BA=93=EF=BC=8C=E5=B7=B2=E7=BB=8F?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=BA=86=E7=9A=84=E5=87=BA=E8=B4=A7=E8=AE=BE?= =?UTF-8?q?=E5=A4=87=E5=90=8E=E7=AB=AF=E6=96=B9=E6=B3=95=20=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=20=E9=80=BB=E8=BE=91=E5=88=A0=E9=99=A4=E5=87=BA?= =?UTF-8?q?=E8=B4=A7=E8=AE=BE=E5=A4=87=EF=BC=88=E4=B9=9F=E5=B0=B1=E6=98=AF?= =?UTF-8?q?=E5=8F=96=E6=B6=88=E5=85=B3=E8=81=94=EF=BC=89=E6=96=B9=E6=B3=95?= =?UTF-8?q?=20mapper=E5=B1=82=20=E6=96=B0=E5=A2=9E=20=E6=A0=B9=E6=8D=AE?= =?UTF-8?q?=E5=87=BA=E5=BA=93=E5=8D=95=E5=8F=B7=E6=9F=A5=E8=AF=A2=E7=AC=AC?= =?UTF-8?q?=E4=B8=80=E6=AC=A1=E7=BB=B4=E6=8A=A4=E8=AE=BE=E5=A4=87=E5=B7=B2?= =?UTF-8?q?=E7=BB=8F=E6=B7=BB=E5=8A=A0=E7=9A=84=E5=87=BA=E8=B4=A7=E8=AE=BE?= =?UTF-8?q?=E5=A4=87=E4=BF=A1=E6=81=AF=E5=88=97=E8=A1=A8=E6=96=B9=E6=B3=95?= =?UTF-8?q?=20=E6=96=B0=E5=A2=9E=20=E6=A0=B9=E6=8D=AE=E9=94=80=E5=94=AE?= =?UTF-8?q?=E5=8D=95=E5=8F=B7=E5=92=8C=E7=89=A9=E6=96=99=E5=8F=B7=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E5=87=BA=E8=B4=A7=E8=AE=BE=E5=A4=87=E4=BF=A1=E6=81=AF?= =?UTF-8?q?=E5=88=97=E8=A1=A8=E6=96=B9=E6=B3=95=20=E6=96=B0=E5=A2=9E=20?= =?UTF-8?q?=E6=A0=B9=E6=8D=AE=E7=89=A9=E6=96=99=E5=8F=B7=E5=92=8C=E5=87=BA?= =?UTF-8?q?=E5=BA=93=E5=8D=95=E5=8F=B7=E6=9F=A5=E8=AF=A2=E5=B7=B2=E7=BB=8F?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=BA=86=E7=9A=84=E5=87=BA=E8=B4=A7=E8=AE=BE?= =?UTF-8?q?=E5=A4=87=E4=BF=A1=E6=81=AF=E5=88=97=E8=A1=A8=E6=96=B9=E6=B3=95?= =?UTF-8?q?=20=E6=96=B0=E5=A2=9E=20=E6=A0=B9=E6=8D=AE=E7=89=A9=E6=96=99?= =?UTF-8?q?=E5=8F=B7=E6=9F=A5=E8=AF=A2=E5=87=BA=E8=B4=A7=E8=AE=BE=E5=A4=87?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=E5=88=97=E8=A1=A8=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AftersalesOutOrderController.java | 98 +++++--- .../AfterSalesShippingDeviceMapper.java | 20 ++ .../service/IAftersalesOutOrderService.java | 9 + .../impl/AftersalesOutOrderServiceImpl.java | 175 ++++++++++++--- .../AfterSalesShippingDeviceMapper.xml | 24 ++ .../addShippingDevicesOne.html | 71 +++--- .../maintenanceEquipmentOne.html | 210 +++++++++++------- 7 files changed, 441 insertions(+), 166 deletions(-) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/aftersales/controller/AftersalesOutOrderController.java b/ruoyi-admin/src/main/java/com/ruoyi/aftersales/controller/AftersalesOutOrderController.java index 3c5ac6d0..3bb4f992 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/aftersales/controller/AftersalesOutOrderController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/aftersales/controller/AftersalesOutOrderController.java @@ -1,10 +1,13 @@ package com.ruoyi.aftersales.controller; +import java.net.URLDecoder; +import java.nio.charset.StandardCharsets; import java.util.List; import com.ruoyi.aftersales.domain.AftersalesOutOrderDetail; import com.ruoyi.aftersales.domain.vo.SelectShippingDeviceVO; import com.ruoyi.aftersales.service.IAftersalesOutOrderDetailService; +import lombok.SneakyThrows; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; @@ -221,25 +224,44 @@ public class AftersalesOutOrderController extends BaseController // // // - /** - * 售后第一次维护设备 成品添加出货设备信息 - */ - @GetMapping("/addShippingDevicesOne") - public String addShippingDevicesOne(@RequestParam("outOrderDetailId") Long outOrderDetailId, - @RequestParam("salesOrderCode") String salesOrderCode, - @RequestParam("makeNo") String makeNo, - @RequestParam("relatedOrderCode") String relatedOrderCode, - @RequestParam("outOrderCode") String outOrderCode, - ModelMap mmap) - { - AftersalesOutOrderDetail aftersalesOutOrderDetail = aftersalesOutOrderDetailService.selectAftersalesOutOrderDetailById(outOrderDetailId); - mmap.put("salesOrderCode",salesOrderCode); - mmap.put("makeNo",makeNo); - mmap.put("relatedOrderCode",relatedOrderCode); - mmap.put("outOrderCode",outOrderCode); - mmap.put("aftersalesOutOrderDetail", aftersalesOutOrderDetail); - return prefix + "/addShippingDevicesOne"; +@SneakyThrows +@GetMapping("/addShippingDevicesOne") +public String addShippingDevicesOne(@RequestParam("outOrderDetailId") Long outOrderDetailId, + @RequestParam(value = "salesOrderCode", required = false, defaultValue = "") String salesOrderCode, + @RequestParam(value = "makeNo", required = false, defaultValue = "") String makeNo, + @RequestParam(value = "relatedOrderCode", required = false, defaultValue = "") String relatedOrderCode, + @RequestParam(value = "outOrderCode", required = false, defaultValue = "") String outOrderCode, + ModelMap mmap) { + + AftersalesOutOrderDetail aftersalesOutOrderDetail = aftersalesOutOrderDetailService.selectAftersalesOutOrderDetailById(outOrderDetailId); + + + // 手动解码参数 + salesOrderCode = URLDecoder.decode(salesOrderCode, StandardCharsets.UTF_8.name()); + makeNo = URLDecoder.decode(makeNo, StandardCharsets.UTF_8.name()); + relatedOrderCode = URLDecoder.decode(relatedOrderCode, StandardCharsets.UTF_8.name()); + outOrderCode = URLDecoder.decode(outOrderCode, StandardCharsets.UTF_8.name()); + + // 非空检查并添加到 ModelMap + if (!"null".equalsIgnoreCase(salesOrderCode) && !salesOrderCode.isEmpty()) { + mmap.put("salesOrderCode", salesOrderCode); + } + if (!"null".equalsIgnoreCase(makeNo) && !makeNo.isEmpty()) { + mmap.put("makeNo", makeNo); + } + if (!"null".equalsIgnoreCase(relatedOrderCode) && !relatedOrderCode.isEmpty()) { + mmap.put("relatedOrderCode", relatedOrderCode); } + if (!"null".equalsIgnoreCase(outOrderCode) && !outOrderCode.isEmpty()) { + mmap.put("outOrderCode", outOrderCode); + } + + // 无论是否为空,都添加 aftersalesOutOrderDetail + mmap.put("aftersalesOutOrderDetail", aftersalesOutOrderDetail); + + return prefix + "/addShippingDevicesOne"; +} + @@ -285,6 +307,26 @@ public class AftersalesOutOrderController extends BaseController return toAjax(aftersalesOutOrderService.addShippingDevicesOne(aftersalesOutOrder)); } + + + + + /** + * 展示第一次维护设备出库,已经添加了的出货设备 + */ + @ResponseBody + @PostMapping("/showAddShippingDevicesOne") + public TableDataInfo showAddShippingDevicesOne(AftersalesOutOrder aftersalesOutOrder) + { + startPage(); + List list = aftersalesOutOrderService.showAddShippingDevicesOne(aftersalesOutOrder); + return getDataTable(list); + } + + + + + // // // @@ -303,16 +345,16 @@ public class AftersalesOutOrderController extends BaseController // // // -// /** -// * 第一次维护设备删除物料信息出货设备信息 -// */ -// @Log(title = "售后维护设备出库", businessType = BusinessType.DELETE) -// @PostMapping("/deleteRow") -// @ResponseBody -// public AjaxResult deleteRow(String shippingDeviceId) -// { -// return toAjax(aftersalesOutOrderService.deleteAftersalesShippingDeviceById(shippingDeviceId)); -// } + /** + * 第一次维护设备删除物料信息出货设备信息 + */ + @Log(title = "售后维护设备出库", businessType = BusinessType.DELETE) + @PostMapping("/deleteRow") + @ResponseBody + public AjaxResult deleteRow(String shippingDeviceId) + { + return toAjax(aftersalesOutOrderService.deleteAftersalesShippingDeviceById(shippingDeviceId)); + } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/aftersales/mapper/AfterSalesShippingDeviceMapper.java b/ruoyi-admin/src/main/java/com/ruoyi/aftersales/mapper/AfterSalesShippingDeviceMapper.java index 65da4aa2..aeb0e7bd 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/aftersales/mapper/AfterSalesShippingDeviceMapper.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/aftersales/mapper/AfterSalesShippingDeviceMapper.java @@ -141,4 +141,24 @@ public interface AfterSalesShippingDeviceMapper * 根据设备id批量查询出货设备信息列表 * */ List selectBatchShippingDeviceById(List otherShippingDeviceIds); + + /* + * 根据出库单号查询第一次维护设备已经添加的出货设备信息列表 + * */ + List selectShippingDeviceByOutOrderCode(String outOrderCode); + + /* + * 根据销售单号和物料号查询出货设备信息列表 + * */ + List selectShippingDeviceByOrderCodeAndMaterialNo(AfterSalesShippingDevice afterSalesShippingDevice); + + /* + * 根据物料号和出库单号查询已经添加了的出货设备信息列表 + * */ + List selectHasAddShippingDevice(AfterSalesShippingDevice tempShippingDevice); + + /* + * 根据物料号查询出货设备信息列表 + * */ + List selectShippingDevicesByMaterialNo(String materialNo); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/aftersales/service/IAftersalesOutOrderService.java b/ruoyi-admin/src/main/java/com/ruoyi/aftersales/service/IAftersalesOutOrderService.java index f353f8e8..e5f18c68 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/aftersales/service/IAftersalesOutOrderService.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/aftersales/service/IAftersalesOutOrderService.java @@ -112,4 +112,13 @@ public interface IAftersalesOutOrderService * */ int addShippingDevicesOne(AftersalesOutOrder aftersalesOutOrder); + /** + * 展示第一次维护设备出库,已经添加了的出货设备 + * */ + List showAddShippingDevicesOne(AftersalesOutOrder aftersalesOutOrder); + + /** + * 逻辑删除出货设备(也就是取消关联) + * */ + int deleteAftersalesShippingDeviceById(String shippingDeviceId); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/aftersales/service/impl/AftersalesOutOrderServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/aftersales/service/impl/AftersalesOutOrderServiceImpl.java index 7120e650..3e42771e 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/aftersales/service/impl/AftersalesOutOrderServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/aftersales/service/impl/AftersalesOutOrderServiceImpl.java @@ -1,9 +1,6 @@ package com.ruoyi.aftersales.service.impl; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; +import java.util.*; import java.util.stream.Collectors; import com.ruoyi.aftersales.domain.AfterSalesShippingDevice; @@ -15,12 +12,18 @@ import com.ruoyi.common.exception.BusinessException; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.ShiroUtils; import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.system.domain.SysSalesShippingInform; +import com.ruoyi.system.mapper.SysSalesShippingInformMapper; +import com.ruoyi.warehouse.domain.WarehouseOutOrder; +import com.ruoyi.warehouse.mapper.WarehouseOutOrderMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.ruoyi.aftersales.mapper.AftersalesOutOrderMapper; import com.ruoyi.aftersales.domain.AftersalesOutOrder; import com.ruoyi.aftersales.service.IAftersalesOutOrderService; import com.ruoyi.common.core.text.Convert; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; /** * 售后维护设备出库Service业务层处理 @@ -40,6 +43,12 @@ public class AftersalesOutOrderServiceImpl implements IAftersalesOutOrderService @Autowired private AfterSalesShippingDeviceMapper afterSalesShippingDeviceMapper; + @Autowired + private WarehouseOutOrderMapper warehouseOutOrderMapper; + + @Autowired + private SysSalesShippingInformMapper shippingInformMapper; + /** * 查询售后维护设备出库 * @@ -148,24 +157,87 @@ public class AftersalesOutOrderServiceImpl implements IAftersalesOutOrderService * @param aftersalesOutOrder * @return */ + @Transactional(rollbackFor = Exception.class) @Override public int updateMaintenanceEquipmentOne(AftersalesOutOrder aftersalesOutOrder) { String outOrderCode = aftersalesOutOrder.getOutOrderCode(); - int updateResult = 0; - List selectShippingDeviceVOList = aftersalesOutOrder.getSelectShippingDeviceVOList(); - for (SelectShippingDeviceVO selectShippingDeviceVO : selectShippingDeviceVOList) { - AfterSalesShippingDevice afterSalesShippingDevice = new AfterSalesShippingDevice(); - afterSalesShippingDevice.setShippingDeviceId(selectShippingDeviceVO.getShippingDeviceId()); - afterSalesShippingDevice.setAddShippingDeviceFlag("0"); - afterSalesShippingDevice.setOutOrderCode(outOrderCode); - updateResult = afterSalesShippingDeviceMapper.updateAfterSalesShippingDevice(afterSalesShippingDevice); - if (updateResult <= 0){ - throw new BusinessException("更新出货设备信息失败"); + + // 定义一个StringBuilder来收集所有缺少SN号的设备ID + StringBuilder missingSnIds = new StringBuilder(); + //物料信息主表的数据 + List needShippingDeviceMaterialsOne = this.getNeedShippingDeviceMaterialsOne(aftersalesOutOrder); + if (!CollectionUtils.isEmpty(needShippingDeviceMaterialsOne)){ + List selectShippingDeviceVOList = aftersalesOutOrder.getSelectShippingDeviceVOList(); + if (CollectionUtils.isEmpty(selectShippingDeviceVOList)){ + throw new BusinessException("请展开物料详情并添加要出货的设备"); + } + +// boolean anyNullSnCode = selectShippingDeviceVOList.stream().anyMatch(item -> item.getSnCode() == null); +// if (anyNullSnCode){ +// throw new BusinessException("请展开物料详情并填写每个设备的SN号"); +// } + + // 遍历 selectShippingDeviceVOList 列表 + selectShippingDeviceVOList.forEach(item -> { + // 检查 SnCode 是否为空 + if (item.getSnCode() == null) { + // 如果是第一次添加,不加前缀“、”,否则加上 + if (missingSnIds.length() > 0) { + missingSnIds.append("、"); + } + missingSnIds.append(item.getShippingDeviceId()); + } + }); + + // 检查是否有任何设备缺少SN号 + if (missingSnIds.length() > 0) { + throw new BusinessException(missingSnIds.toString() + " SN未维护,请维护"); } + + /* 缺少校验规则,后续补充 + * 2.1、已选出货设备,是否可用(状态:可用,即未被其他出库单添加或报损),若不可用,则弹窗提示“CHSB20240808004、CHSB20240808005.不可用,请重新添加 + * */ + + for (SelectShippingDeviceVO selectShippingDeviceVO : selectShippingDeviceVOList) { + String shippingDeviceId = selectShippingDeviceVO.getShippingDeviceId(); + AfterSalesShippingDevice tempShippingDevice = new AfterSalesShippingDevice(); + tempShippingDevice.setShippingDeviceId(shippingDeviceId); + tempShippingDevice.setSnCode(selectShippingDeviceVO.getSnCode()); + + int updateShippingDeviceResult = afterSalesShippingDeviceMapper.updateAfterSalesShippingDevice(tempShippingDevice); + if (updateShippingDeviceResult <= 0){ + throw new BusinessException("更新设备数据失败"); + } + } + + } + //更新出库单 + WarehouseOutOrder warehouseOutOrder = new WarehouseOutOrder(); + //更改状态未待确认发货 + warehouseOutOrder.setOutOrderCode(outOrderCode); + warehouseOutOrder.setWarehouseOutStatus("2"); + int updateWarehouseResult = warehouseOutOrderMapper.updateWarehouseOutOrderByCode(warehouseOutOrder); + if (updateWarehouseResult <= 0){ + throw new BusinessException("更新销售售后通知单数据失败"); } - return updateResult; + //更新销售出货通知单 + SysSalesShippingInform sysSalesShippingInform = new SysSalesShippingInform(); + sysSalesShippingInform.setOutOrderCode(outOrderCode); + sysSalesShippingInform.setWarehouseOutStatus("2"); + int updateShippingInformResult = shippingInformMapper.updateSysSalesShippingInformByOutOrderCode(sysSalesShippingInform); + if (updateShippingInformResult <= 0){ + throw new BusinessException("更新销售出货通知单数据失败"); + } + + + //更新售后维护设备出库单 + aftersalesOutOrder.setWarehouseOutStatus("2"); + int result = aftersalesOutOrderMapper.updateAftersalesOutOrder(aftersalesOutOrder); + + return result; + } /** @@ -225,22 +297,41 @@ public class AftersalesOutOrderServiceImpl implements IAftersalesOutOrderService * */ @Override public List getThisSalesOrderShippingDevices(AftersalesOutOrder aftersalesOutOrder) { + // 输入验证 + if (aftersalesOutOrder == null || StringUtils.isEmpty(aftersalesOutOrder.getRelatedOrderCode()) && + StringUtils.isEmpty(aftersalesOutOrder.getSalesOrderCode())) { + return Collections.emptyList(); + } List selectShippingDeviceVOS = new ArrayList<>(); + String materialNo = aftersalesOutOrder.getMaterialNo(); - String relatedOrderCode = aftersalesOutOrder.getRelatedOrderCode(); - String salesOrderCode = aftersalesOutOrder.getSalesOrderCode(); - //优先使用销售订单号关联 - if (StringUtils.isNotEmpty(salesOrderCode)){ - List afterSalesShippingDevices = afterSalesShippingDeviceMapper.selectShippingDeviceBySalesOrderCode(salesOrderCode); - convertToDeviceVOs(afterSalesShippingDevices, selectShippingDeviceVOS); - }else { - // 关联订单号可能存在逗号分隔的情况 - String[] splitRelatedOrderCode = relatedOrderCode.split(","); - List afterSalesShippingDevices = afterSalesShippingDeviceMapper.selectBatchShippingDeviceBySalesOrderCode(splitRelatedOrderCode); + // 优先使用销售订单号关联 + if (StringUtils.isNotEmpty(aftersalesOutOrder.getSalesOrderCode())) { + AfterSalesShippingDevice tempAfterSalesShippingDevice = new AfterSalesShippingDevice(); + tempAfterSalesShippingDevice.setMaterialNo(materialNo); + tempAfterSalesShippingDevice.setSalesOrderCode(aftersalesOutOrder.getSalesOrderCode()); + + List afterSalesShippingDevices = afterSalesShippingDeviceMapper.selectShippingDeviceByOrderCodeAndMaterialNo(tempAfterSalesShippingDevice); convertToDeviceVOs(afterSalesShippingDevices, selectShippingDeviceVOS); + + // 提前返回 + return selectShippingDeviceVOS; } + // 处理关联订单号 + String relatedOrderCode = aftersalesOutOrder.getRelatedOrderCode(); + Arrays.stream(relatedOrderCode.split(",")) + .map(String::trim) + .forEach(code -> { + AfterSalesShippingDevice tempAfterSalesShippingDevice = new AfterSalesShippingDevice(); + tempAfterSalesShippingDevice.setMaterialNo(materialNo); + tempAfterSalesShippingDevice.setSalesOrderCode(code); + + List afterSalesShippingDevices = afterSalesShippingDeviceMapper.selectShippingDeviceByOrderCodeAndMaterialNo(tempAfterSalesShippingDevice); + convertToDeviceVOs(afterSalesShippingDevices, selectShippingDeviceVOS); + }); + return selectShippingDeviceVOS; } @@ -253,13 +344,14 @@ public class AftersalesOutOrderServiceImpl implements IAftersalesOutOrderService List selectShippingDeviceVOS = new ArrayList<>(); String outOrderCode = aftersalesOutOrder.getOutOrderCode(); + String materialNo = aftersalesOutOrder.getMaterialNo(); List thisSalesOrderShippingDevices = this.getThisSalesOrderShippingDevices(aftersalesOutOrder); // 查找到当前销售订单的出货设备ID集合 List currentShippingDeviceIds = thisSalesOrderShippingDevices.stream() .map(SelectShippingDeviceVO::getShippingDeviceId) .collect(Collectors.toList()); //查找到所有出货设备id集合 - List afterSalesShippingDevices = afterSalesShippingDeviceMapper.selectAllShippingDevices(); + List afterSalesShippingDevices = afterSalesShippingDeviceMapper.selectShippingDevicesByMaterialNo(materialNo); //保留是否添加出货设备等于1的,以及等于0且出库单号等于本单据的 List filteredDevices = afterSalesShippingDevices.stream().filter(device -> "1".equals(device.getAddShippingDeviceFlag()) @@ -289,4 +381,35 @@ public class AftersalesOutOrderServiceImpl implements IAftersalesOutOrderService } + /** + * 展示第一次维护设备出库,已经添加了的出货设备 + * */ + @Override + public List showAddShippingDevicesOne(AftersalesOutOrder aftersalesOutOrder) { + String outOrderCode = aftersalesOutOrder.getOutOrderCode(); + String materialNo = aftersalesOutOrder.getMaterialNo(); + List selectShippingDeviceVOS = new ArrayList<>(); + AfterSalesShippingDevice tempShippingDevice = new AfterSalesShippingDevice(); + tempShippingDevice.setMaterialNo(materialNo); + tempShippingDevice.setOutOrderCode(outOrderCode); + List afterSalesShippingDevices = afterSalesShippingDeviceMapper.selectHasAddShippingDevice(tempShippingDevice); + convertToDeviceVOs(afterSalesShippingDevices, selectShippingDeviceVOS); + + return selectShippingDeviceVOS; + } + + + /** + * 逻辑删除出货设备(也就是取消关联) + * */ + @Override + public int deleteAftersalesShippingDeviceById(String shippingDeviceId) { + + AfterSalesShippingDevice tempShippingDevice = new AfterSalesShippingDevice(); + tempShippingDevice.setAddShippingDeviceFlag("1"); + tempShippingDevice.setShippingDeviceId(shippingDeviceId); + tempShippingDevice.setOutOrderCode(""); + int updateAfterSalesShippingDevice = afterSalesShippingDeviceMapper.updateAfterSalesShippingDevice(tempShippingDevice); + return updateAfterSalesShippingDevice; + } } diff --git a/ruoyi-admin/src/main/resources/mapper/aftersales/AfterSalesShippingDeviceMapper.xml b/ruoyi-admin/src/main/resources/mapper/aftersales/AfterSalesShippingDeviceMapper.xml index 6ed26895..d3744d6e 100644 --- a/ruoyi-admin/src/main/resources/mapper/aftersales/AfterSalesShippingDeviceMapper.xml +++ b/ruoyi-admin/src/main/resources/mapper/aftersales/AfterSalesShippingDeviceMapper.xml @@ -154,6 +154,30 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + + + + + + + insert into aftersales_shipping_device diff --git a/ruoyi-admin/src/main/resources/templates/aftersales/aftersalesOutOrder/addShippingDevicesOne.html b/ruoyi-admin/src/main/resources/templates/aftersales/aftersalesOutOrder/addShippingDevicesOne.html index 71b37b7c..7da460b2 100644 --- a/ruoyi-admin/src/main/resources/templates/aftersales/aftersalesOutOrder/addShippingDevicesOne.html +++ b/ruoyi-admin/src/main/resources/templates/aftersales/aftersalesOutOrder/addShippingDevicesOne.html @@ -124,46 +124,53 @@ obj[item.name] = item.value; return obj; }, {}); - // 获取bootstrap-table的数据,这里假设你使用bootstrap-table的API获取所有数据 - // var table = $('#table-shippingDevices').bootstrapTable('getData'); //获取选中复选框行的数据 const selectedThisRows = $("#thisSalesOrderShippingDevice-table").bootstrapTable('getSelections'); const selectedOtherRows = $("#otherSalesOrderShippingDevice-table").bootstrapTable('getSelections'); - + //获取所有数据 + const allThisRows = $("#thisSalesOrderShippingDevice-table").bootstrapTable('getData'); + const allOtherRows = $("#otherSalesOrderShippingDevice-table").bootstrapTable('getData'); // 将 outOrderCode 添加到 shippingDevicesData 对象中 shippingDevicesData.outOrderCode = outOrderCode; - // 检查表格数据是否为空 - if (selectedThisRows.length + selectedOtherRows.length === 0) { - $.modal.alertWarning("请至少选择一条出货设备后再保存!"); + // 检查是否有数据可以提交 + if (allThisRows.length === 0 && allOtherRows.length === 0) { + $.modal.alertWarning("没有数据可以提交!"); return; } - // 将表数据转换成一致的数组 - const equipDetailDataList = [ - ...selectedThisRows.map(item => ({ - "shippingDeviceId": item.shippingDeviceId, - "deviceModelCode": item.deviceModelCode, - "deviceRunningNumber": item.deviceRunningNumber, - "makePhotoUrl": item.makePhotoUrl - // ...其他字段 - })), - ...selectedOtherRows.map(item => ({ - "shippingDeviceId": item.shippingDeviceId, - "deviceModelCode": item.deviceModelCode, - "deviceRunningNumber": item.deviceRunningNumber, - "makePhotoUrl": item.makePhotoUrl - // ...其他字段 - })) - ]; - - // 合并表单数据和表格数据 - const combinedData = Object.assign({}, shippingDevicesData, { selectShippingDeviceVOList: equipDetailDataList }); - - console.log(combinedData) - // 使用 JSON.stringify() 序列化数据 - const jsonData = JSON.stringify(combinedData); - // 发送 AJAX 请求到后端接口 - $.operate.saveJson(prefix + "/addShippingDevicesOne", jsonData); + // 检查表格数据是否为空 + if (selectedThisRows.length + selectedOtherRows.length === 0) { + $.modal.alertWarning("请至少选择一条出货设备后再保存!"); + return; + } + // 将表数据转换成一致的数组 + const equipDetailDataList = [ + ...selectedThisRows.map(item => ({ + "shippingDeviceId": item.shippingDeviceId, + "deviceModelCode": item.deviceModelCode, + "deviceRunningNumber": item.deviceRunningNumber, + "makePhotoUrl": item.makePhotoUrl + // ...其他字段 + })), + ...selectedOtherRows.map(item => ({ + "shippingDeviceId": item.shippingDeviceId, + "deviceModelCode": item.deviceModelCode, + "deviceRunningNumber": item.deviceRunningNumber, + "makePhotoUrl": item.makePhotoUrl + // ...其他字段 + })) + ]; + + + + // 合并表单数据和表格数据 + const combinedData = Object.assign({}, shippingDevicesData, { selectShippingDeviceVOList: equipDetailDataList }); + + console.log(combinedData) + // 使用 JSON.stringify() 序列化数据 + const jsonData = JSON.stringify(combinedData); + // 发送 AJAX 请求到后端接口 + $.operate.saveJson(prefix + "/addShippingDevicesOne", jsonData); } diff --git a/ruoyi-admin/src/main/resources/templates/aftersales/aftersalesOutOrder/maintenanceEquipmentOne.html b/ruoyi-admin/src/main/resources/templates/aftersales/aftersalesOutOrder/maintenanceEquipmentOne.html index 2ca72924..d3702299 100644 --- a/ruoyi-admin/src/main/resources/templates/aftersales/aftersalesOutOrder/maintenanceEquipmentOne.html +++ b/ruoyi-admin/src/main/resources/templates/aftersales/aftersalesOutOrder/maintenanceEquipmentOne.html @@ -260,49 +260,76 @@ }) - // initChildTable = function(index, row, $detail) { - // var parentRow = row; - // var childTableId = 'child_table_'+index; - // $detail.html('
'); - // $('#'+childTableId).bootstrapTable({ - // url: prefix + "/showAftersalesShippingDeviceListOne", - // method: 'post', - // sidePagination: "server", - // contentType: "application/x-www-form-urlencoded", - // queryParams : { - // // salesOrderCode: aftersalesOutOrder.salesOrderCode, - // materialNo: parentRow.materialNo, - // salesOrderCode:aftersalesOutOrder.salesOrderCode, - // makeNo:aftersalesOutOrder.makeNo - // }, - // columns: [ - // { - // title: '出货设备ID', - // field: 'shippingDeviceId', - // }, - // { - // title: '设备型号', - // field: 'deviceModelCode', - // }, - // { - // title: '流水号', - // field: 'deviceRunningNumber', - // }, - // { - // title: '设备SN号', - // field: 'snCode', - // editable:true - // }, - // { - // title: '操作', - // align: 'center', - // formatter: function (value, row, index) { - // return '删除'; - // } - // } - // ], - // }); - // }; + initChildTable = function(index, row, $detail) { + var parentRow = row; + var childTableId = 'child_table_'+index; + $detail.html('
'); + $('#'+childTableId).bootstrapTable({ + url: prefix + "/showAddShippingDevicesOne", + method: 'post', + sidePagination: "server", + contentType: "application/x-www-form-urlencoded", + queryParams : { + outOrderCode: aftersalesOutOrder.outOrderCode, + materialNo: parentRow.materialNo, + // salesOrderCode:aftersalesOutOrder.salesOrderCode, + // makeNo:aftersalesOutOrder.makeNo + }, + columns: [ + { + title: '出货设备ID', + field: 'shippingDeviceId', + }, + { + title: '设备型号', + field: 'deviceModelCode', + }, + { + title: '追踪码', + field: 'deviceRunningNumber', + }, + { + title: '设备SN号', + field: 'snCode', + editable: { + validate: function(value) { + if ($.trim(value) === '') { + return '本次收货数不能为空'; + } + }, + }, + + + formatter: function (value, row) { + // 检查 snCode 是否存在 + if (row.snCode === undefined || row.snCode === null) { + return ""; + } + + // 根据 snCode 的值决定返回值 + if (row.snCode) { + return row.snCode; + } else { + return value; + } + } + + }, + + // { + // title: '售后图片', + // field: 'deviceRunningNumber', + // }, + { + title: '操作', + align: 'center', + formatter: function (value, row, index) { + return '删除'; + } + } + ], + }); + }; function queryParams(params) { @@ -393,51 +420,71 @@ - - // 获取所有子表数据的函数 // 获取所有子表数据的函数 function getAllSubTablesData() { var allSubData = []; - // 获取所有被展开的行 - var parentLength = $("#bootstrap-table").bootstrapTable("getData").length; - for (let i = 0; i < parentLength; i++) { - var sonData = $('#'+"child_table_" + i).bootstrapTable("getData"); - //循环获取子表中存在的行数据,每个行数据转换添加到allSubData数组中 - allSubData = allSubData.concat(sonData); + var parentData = $("#needShippingDevice-table").bootstrapTable("getData"); + var parentLength = parentData.length; + + if (parentLength !== 0) { + for (let i = 0; i < parentLength; i++) { + var sonData = $("#" + "child_table_" + i).bootstrapTable("getData"); + allSubData = allSubData.concat(sonData); + + // 获取主表的准备出库数 + var prepareOutOrderSum = parentData[i].prepareOutOrderSum; + var sonDataLength = sonData.length; + + // 比较主表的准备出库数和子表的长度 + if (sonDataLength < prepareOutOrderSum) { + + $.modal.alertWarning(`物料第 ${i + 1} 行的准备出库数为 ${prepareOutOrderSum},但已经添加出货设备为 ${sonDataLength},请添加出货设备`); + return; + }else if(sonDataLength > prepareOutOrderSum){ + $.modal.alertWarning(`物料第 ${i + 1} 行的准备出库数为 ${prepareOutOrderSum},但已经添加出货设备为 ${sonDataLength},请删除出货设备`); + return; + } + } } return allSubData; } - function deleteRow(shippingDeviceId) { + + function deleteRow(shippingDeviceId, index) { // 弹出确认框询问用户是否确定删除 - if (confirm("确定要删除这条记录吗?")) { - // 发送删除请求到服务器 - $.ajax({ - url: prefix + "/deleteRow", // 请根据实际API路径调整 - type: 'POST', - data: { - shippingDeviceId: shippingDeviceId, // 传递需要删除的记录的ID - }, - success: function(result) { - if (result.success) { // 假设result是一个对象,包含success属性来表示操作是否成功 - // 删除操作成功,从表格中移除这一行 - $('#child_table_' + index).bootstrapTable('remove', { - field: 'shippingDeviceId', - values: [shippingDeviceId] - }); - toastr.success("删除成功!"); // 显示成功提示信息,这里使用toastr作为示例,确保已引入相关库 - } else { - toastr.error("删除失败: " + result.message); // 显示失败原因,同样确保已引入toastr库 + $.modal.confirm("确定要删除这条记录吗?", function(confirmed) { + if (confirmed) { + // 发送删除请求到服务器 + $.ajax({ + url: prefix + "/deleteRow", // 请根据实际API路径调整 + type: 'POST', + data: { + shippingDeviceId: shippingDeviceId, // 传递需要删除的记录的ID + }, + success: function(result) { + handleDeleteResponse(result, shippingDeviceId, index); + }, + error: function(xhr, status, error) { + $.modal.msgError("发生错误,删除失败: " + xhr.responseText); } - }, - error: function() { - toastr.error("发生错误,删除失败!"); // 网络错误或后端错误处理 - } + }); + } + }); + } + + function handleDeleteResponse(result, shippingDeviceId, index) { + if (result.code === 0) { + // 删除操作成功,从表格中移除这一行 + $('#child_table_' + index).bootstrapTable('remove', { + field: 'shippingDeviceId', + values: [shippingDeviceId] }); + $.modal.msgSuccess("删除成功,请刷新表格"); + } else { + $.modal.msgError("删除失败: " + result.message); } - }; - + } /*添加出货设备*/ @@ -454,10 +501,13 @@ var makeNo = [[${aftersalesOutOrder.makeNo}]]; var queryParams = new URLSearchParams(); queryParams.append('outOrderDetailId', outOrderDetailId); - queryParams.append('salesOrderCode', encodeURIComponent(salesOrderCode)); - queryParams.append('makeNo',encodeURIComponent(makeNo)); - queryParams.append('relatedOrderCode',encodeURIComponent(relatedOrderCode)); - queryParams.append('outOrderCode',encodeURIComponent(outOrderCode)); + + // 仅对需要编码的部分进行编码 + queryParams.append('salesOrderCode', salesOrderCode); + queryParams.append('makeNo', makeNo); + queryParams.append('relatedOrderCode', relatedOrderCode); + queryParams.append('outOrderCode', outOrderCode); + var url = prefix + '/addShippingDevicesOne?' + queryParams.toString(); $.modal.open("添加出货设备", url); }