zhoushihao
2025-04-14 e42b239ac2c2a922172badbe32afaa4ba4f615f8
Merge remote-tracking branch 'origin/master'
26个文件已修改
6个文件已添加
3124 ■■■■■ 已修改文件
UI-Project/src/lang/en.js 1819 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/lang/zh.js 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/largescreendisplay/screendisplay.vue 774 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/largenscreen/entity/PieChartVO.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/largenscreen/service/LargenScreenService.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/largenscreen/service/impl/LargenScreenServiceImpl.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/order/controller/OrderController.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/order/entity/dto/OrderDTO.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/order/entity/request/OrderRequest.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/controller/FlowCardController.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/controller/ReportingWorkDetailController.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/dto/FlowCardPercentDTO.java 102 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/dto/ReportWorkDTO.java 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/request/FlowCardRequest.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/request/ReportWorkRequest.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/temperingglass/mapper/TemperingGlassInfoMapper.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/temperingglass/service/TemperingGlassInfoService.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/temperingglass/service/impl/TemperingGlassInfoServiceImpl.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/mapper/EdgStorageCageDetailsMapper.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/EdgStorageCageDetailsService.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/impl/EdgStorageCageDetailsServiceImpl.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/PushMessageToIndex.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/mapper/EdgStorageCageDetailsMapper.xml 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/BigStorageCageService.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageCageServiceImpl.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/OPCPlcSlicecage.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/job/PlcTemperingGlassTask.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/mapper/HollowGlassOutRelationInfoMapper.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/service/HollowGlassOutRelationInfoService.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/service/impl/HollowGlassOutRelationInfoServiceImpl.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/job/PushMessageToIndex.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/hollowGlassModule/src/main/resources/mapper/HollowGlassOutRelationInfoMapper.xml 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/lang/en.js
@@ -1,910 +1,919 @@
export  default {
export default {
    "northglassMESsystem": "NorthGlass MES System",
      login:{
          userErr:'Please enter account number',
          pwErr:'Please input a password',
          user:'Account number',
          password:'Password',
          login:'Log on',
          loginSuccessful:'Log on was successful!',
          register:'Register',
          namea:'Name cannot be empty',
          len:'The length cannot exceed 16',
          passnull:'Password cannot be empty',
          leng:'The password length cannot be less than 6 or more than 16',
          spwn:'Confirm password cannot be empty',
          depass:'The two passwords are not the same',
      },
      register:{
          registerSuccessful:'login was successful',
          newuserregister:'New user register',
          name:'Full name:',
          inputname:'Please enter your name',
          password:'Password:',
          pwErr:'Please input a password',
          passwordation:'Confirm password:',
          pwErration:'Please confirm password',
          registration:'Registration Confirm',
          false:'Cancel',
      },
      main:{
          connectErr:'The server connection is abnormal. Please try again later',
          titleFirst:"Welcome ",
          titleLast:' to use NorthGlass MES system!',
          quit:"Exit",
      },
      basicData:{
          untask:'无任务',
          tonumber:'上片总数量',
          finishnumber:'已完成数量',
          rackreset:'架子复位',
          prackreset:'是否架子复位?',
          printing:'自动打印',
          laserprinting:'Laser printing machine ready status:',
          cuttingmachine:'Cutting machine ready status:',
          machine:'Online status of the loading table:',
          machineaa:'Manual state of the loading table:',
          selectproject:"Select project",
          startloading:'Start loading',
          stop:'Pause',
          yes:'Confirm',
          change:'Switch',
          projectnumber:'Project number',
          glasswidth:'Glass width',
          glassheight:'Glass height',
          coatingtypes:'Coating types',
          coatingtypesa:'Coating types:',
          quantity:'Quantity',
          quantitya:'Quantity:',
          thickness:'Thickness',
          thicknessa:'Thickness:',
          startstatus:'Start status',
          pass:'Pass',
          waiting:'Waiting',
          up:'Loading',
          finish:'Completed',
          project:'Project ',
          plselectproject:'Please select project',
          confirm:'Confirm',
          cancel:'Cancel',
          startfilm:'Whether start loading?',
          whetherpause:'Whether pause?',
          station:'Station',
          width:'Width',
          widtha:'Width:',
          height:'Height',
          heighta:'Height:',
          operate:'Operate',
          add:'Increase',
          delete:'Delete',
          addglass:'Add glass',
          selectwidth:'Please select width',
          selectheight:'Please select high',
          selectcoatingtypes:'Please select the coating types',
          selectthickness:'Please select thickness',
          selectquantity:'Please enter the quantity',
          pause:'The height of the second and fourth rows must be greater than 2700 in order to save!',
          pausea:'Please confirm the ready status of marking machine and cutting machine!',
          infonull:'Project number cannot be empty!',
          updatanull:'This project has not been saved to the loading list!',
          glassnull:'An error occurred while updating the glass status',
          deletemessage:'Do you want to delete this message?',
          layoutSequence:'Serial Number',
      },
      sorter:{
          onesort:'一线掰片',
          twosort:'二线掰片',
          inPlace:'到位',
          ninPlace:'未到位',
          emptymissions:'空任务',
          advancetask:'进片任务',
          outputtasks:'出片任务',
          schedulingtasks:'调度任务',
          advancerequests:'进片请求',
          releaserequest:'出片请求',
          straighttasks:'直通任务',
          endingtask:'结束',
          another:'其他',
          taskRunning:'任务请求',
          updateTime:'更新时间',
          id:'磨边前理片笼表ID',
          remainWidth:'剩余',
          place:'是否到位',
          layernow:'当前层号',
          gridnumber:'Grid number',
          glassnumber:'Glass number',
          width:'Width',
          height:'Height',
          startstatus:'Start status',
          disable:'Disabled',
          start:'Enabled',
          deficiencieste:'Report deficiencies',
          updown:'Artificial filming',
          operate:'Operate',
          prompt:'Prompt',
          information:'Is the missing information reported?',
          infor:'Whether to manually download this information?',
          yes:'Yes',
          cancel:'Cancel',
      },
      order:{
          projectnumber:'请输入工程号',
          dilapidation:'Breakage',
          takeaway:'Manual removal',
          takeawaya:'是否人工拿走该条信息?',
          takeon:'The arrangement is complete',
      },
      searchOrder:{
          furnfullTemp:'玻璃总量',
          startCell:'目标层号',
          endCell:'预留层号',
          begin:'开始',
          finish:'完成',
          uncar:'未上车',
          inkage:'进片',
          successfullyprocessed:'任务成功处理',
          psuccessfullyprocessed:'是否进行任务成功处理?',
          taskfailure:'任务失败处理',
          ptaskfailure:'是否进行任务失败处理?',
          totallogarithms:'总对数',
          numberpairs:'配对数',
          numberoccupied:'占用格子数',
          totalfurnaces:'总炉数',
          cagesnumber:'笼内数量',
          slotnumber:'占有格子数',
          progress:'进度%',
          whethersame:'是否相同',
          same:'相同',
          notsame:'不相同',
          partask:'任务重置',
          partasks:'是否任务重置?',
          empty:'默认空任务',
          historicaltasks:'历史任务',
          cagedetails:'笼内详情',
          inkageEntity:'进片联机状态:',
          requestEntity:'进片请求状态:',
          mesReplyEntity:'启动命令:',
          outInkageEntity:'出片联机状态:',
          outRequestEntity:'出片请求状态:',
          breakagn:'未破损',
          lacknumber:'缺片数量',
          processcard:'指定流程卡',
          filminformation:'人工下片信息',
          currentglassinformation:'扫码枪当前玻璃信息',
          printlabels:'打印标签',
          deleteTask:'结束工程',
          pdeleteTask:'是否结束工程?',
          searchlayout:'Non-tempered process card inquiry',
          fullfurnaces:'Number of full furnaces',
          specifiedproject:'The currently specified project',
          undesignate:'取消钢化',
          allnumber:'Total quantity',
          numbercages:'Number of cages',
          missingquantity:'Missing quantity',
          breakquantity:'Breakage/Take Away quantity',
          ceng:'layer',
          cageinformation:'Sorter information',
          productionqueue:'Production queue',
          outputglassID:'Output glass ID',
          startposition:'Start position',
          targetlocation:'Target Position',
          trips:'Train number',
          number:'Serial Number',
          taskstatus:'Task state',
          filmenter:'Waiting for input glass',
          infilm:'In progress',
          endtask:'End task',
          completetask:'Complete the task',
          intoglassid:'Input glass ID',
          line:'Wire',
          Usage:'Usage rate',
          free:'Free(pieces)',
          addcage:'Add information on sorter',
          glassIDa:'Glass ID:',
          glassID:'Glass ID',
          inglassID:'Please enter the glass ID',
          pieceingrid:'The order of small pieces within the grid',
          pieceingrida:'The order of small pieces within the grid:',
          inpieceingrid:'Please enter the order of small pieces within the grid',
          cardnumber:'Process card number',
          cardnumbera:'Process card number:',
          incardnumber:'Please enter the process card number',
          typeglass:'Glass type',
          typeglassa:'Glass type:',
          intypeglass:'Please enter the glass type',
          width:'Width',
          widtha:'Width:',
          inwidth:'Please enter width',
          height:'Height',
          heighta:'Height:',
          inheight:'Please enter height',
          coatingtypes:'Coating types',
          thickness:'Thickness',
          thicknessa:'Thickness:',
          inthickness:'Please enter the thickness',
          layoutID:'Drawing ID of loading for tempering furnace',
          layoutIDa:'Drawing ID of loading for tempering furnace:',
          inlayoutID:'Please enter the drawing ID of loading for tempering furnace',
          picturesequence:'Drawing sequence of loading for tempering furnace',
          picturesequencea:'Drawing sequence of loading for tempering furnace:',
          inpicturesequence:'Please enter the drawing sequence of loading for tempering furnace',
          startstatus:'Start status',
          startstatusa:'Start status:',
          instartstatus:'Please enter the enabled status',
          glassgaps:'Glass gap',
          glassgapsa:'Glass gap:',
          inglassgaps:'Please enter the glass gap',
          sure:'Confirm',
          cancel:'Cancel',
          operate:'Operate',
          breakage:'Breakage',
          delete:'Delete',
          outfilm:'Output glass',
          cagetableID:'Sorter table ID',
          cagenumber:'Sorter number',
          gridnumber:'Grid number',
          gridnumbera:'Grid number:',
          grid:'Please enter a grid number',
          enable:'Enabled',
          disable:'Disabled',
          remainingwidth:'Remaining width',
          add:'Add',
          sheetID:'Tempered small piece information table ID',
          processcards:'Process card',
          processcardtype:'Process card glass type',
          acceptshorizontal:'Does tempering accept horizontal placement',
          xcoordinates:'x coordinate',
          ycoordinates:'Y coordinate',
          rotationangle:'Rotation angle (counterclockwise)',
          state:'Status',
          takeout:'Take away',
          deletemessage:'Do you want to delete this message?',
          prompt:'Prompt',
          yes:'Yes',
          accept:'Accept',
          noaccept:'Not accept',
          filmcomplete:'Glass output completed',
          waiting:'Waiting',
          broke:'Is this information damaged?',
          brokeb:'Do you need to delete the message?',
          outfil:'Whether the film is released or not?',
          inputid:'Please enter the glass ID',
          search:'Search',
          tabid:'Dali film cage details table ID',
          tid:'Device ID',
          tida:'Device ID:',
          fin:'Whether or not the task was completed?',
          sureadd:'Confirm the addition',
          sureadda:'Whether to confirm the addition?',
          zailong:'In a cage',
          rengongxp:'Artificial filming',
          up:'Previous',
          down:'Next',
          now:'The current page is displayed',
          tit:'data',
          temperingqueries:'Tempering queries',
          specifytempering:'Specify a furnace',
          specifyout:'指定人工出片',
          specifyengineerid:'Specify the project',
          projectnumber:'Project number',
          layoutnumber:'Drawing number of loading for tempering furnace',
          numberglasses:'Number of glasses',
          specifytemperinga:'请确认设备是否已关闭MES联机?',
          temperedswitch:'Tempered switch',
          dutyinformation:'Duty information',
          process:'Process',
          team:'Team',
          basic:'equipment',
          makesure:'Confirm the save',
          temperingtotal:'Number of tempering furnaces:',
          glasstotal:'Total number of glasses:',
          Labelprinting:'标签打印',
          Schedulingswitch:'调度开关',
      },
      workOrder:{
          upnumber:'上片位编号',
          coatingtypesbe:'原片膜系',
          glassID:'Glass ID',
          height:'Height',
          width:'Width',
          thickness:'Thickness',
          coatingtypes:'Coating types',
          productionsequence:'Production sequence',
          cardnumber:'Process card number',
          operate:'Operate',
          messagedamaged:'Is this information damaged?',
          prompt:'Prompt',
          yes:'Yes',
          cancel:'Cancel',
          takemessage:'Do you need to delete the message?',
          breakage:'Breakage',
          takeout:'Take away',
          glasstype:'Glass type',
          line:'Wire',
          status:'Status',
          time:'Time period',
          cway:'Please select a route',
          cstate:'Please select a status',
          edgingone:'Edging a line',
          edgingtwo:'Edging two lines',
          nedging:'Unedging',
          edging:'Edging',
          finedging:'has been edging',
        },
      processCard:{
          intofurnace:'Entering the furnace',
          beforefurnace:'Before entering the furnace',
          outfurnace:'Glass finished from tempering furnace',
          print:'Take away the print',
          printing:'print',
          projectnumber:'Please enter the project number',
          inquire:'Inquire',
          project:'Project number',
          awayprocess:'Take away the process',
          awayequipment:'Take away the equipment',
          awayteam:'Take away the crew',
          flowcard:'Process card',
          layer:'Layer number',
          temperinglayout:'Heat number',
          temperingfeed:'Preface',
          width:'Width',
          height:'Height',
          thickness:'Thickness',
          glasstakeout:'Glass take away list',
          layoutID:'Drawing ID of loading for tempering furnace',
          glassID:'Glass ID',
      },
      reportWork:{
          details:'Drop off details',
          filming:'Artificial filming',
          printing:'Automatic printing',
          cenumber:'Number of layers',
          artificialorder:'The number of pieces under artificial order',
          processcard:'Print the process card',
          printlabels:'Print labels',
          information:'Landing information',
          cstation:'Please select a desk',
          all:'all',
          timeperiod:'Time period',
          stationnumber:'Station number',
          order:'order',
          filminformation:'Manual film information',
          glassmation:'Artificial film current glass information',
          barcodescanner:'The current glass information of the barcode scanner',
          lowerbit:'Unloading station',
          shelfnumber:'Rack number',
          cardnumber:'Process card number',
          totalquantity:'Total quantity',
          beendropped:'Quantity of unloaded glass',
          state:'Status',
          devicenumber:'Equipment No.',
          startstatus:'Start status',
          enable:'Start',
          unenable:'Unstart',
          operate:'Operate',
          bindingshelves:'Assigned rack',
          clear:'Clear',
          workstation:'Station No.',
          shelfnumbera:'Rack number:',
          cardnumbera:'Process card number:',
          incardnumber:'Please select the process card number',
          clearglass:'Clear the glass on the shelf',
          sure:'Operate',
          cancel:'Cancel',
          glassinformation:'Glass information',
          glassID:'Glass ID',
          coatingtypes:'Coating types',
          thickness:'Thickness',
          width:'Width',
          height:'Height',
      },
      productStock:{
          configName:'配置名',
          configCode:'配置代码',
          configValue:'配置值',
          addusers:'Add user',
          username:'User name',
          usernamea:'User name:',
          inusername:'Enter one user name',
          role:'Role',
          rolea:'Role:',
          inrole:'Please select a role',
          test:'Test',
          admin:'Administrator',
          operate:'Operate',
          resetpassword:'Reset password',
          exit:'Edit',
          delete:'Delete',
          prompt:'Prompt',
          repassword:'Do you want to reset the user password?',
          yes:'Yes',
          cancel:'Cancel',
          reusername:'Modify Users',
          addusername:'Add user',
          password:'Password:',
          sure:'Confirm',
          inpassword:'Please input a password',
          deusername:'Do you want to delete the user?',
      },
      customer:{
          addmenua:'Add secondary menus',
          addmenu:'Add a first-level menu',
          firstmenu:'First level menu bar',
          firstmenuname:'The name of the first-level menu:',
          link:'Link',
          inlink:'Please enter the link',
          linka:'Link:',
          sort:'Sort',
          insort:'Please enter sorting',
          sorta:'Sort:',
          operate:'Operate',
          exit:'Edit',
          delete:'Delete',
          semenu:'Secondary menu bar',
          semenuname:'Secondary menu name:',
          menu:'Menu bar:',
          inmenu:'Please enter a menu name',
          sure:'Confirm',
          cancel:'Cancel',
          exmene:'Modify the first-level menu',
          exmenea:'Modify the secondary menu',
          yes:'Yes',
          demenu:'Do you want to delete this menu?',
          prompt:'Prompt',
      },
      delivery:{
          addrole:'Add Role',
          editrole:'Modify role',
          role :'Role',
          rolea :'Role:',
          inrole :'Please enter the role',
          operate :'Operate',
          edit :'Edit',
          delete :'Delete',
          yes:'Yes',
          sure :'Confirm',
          cancel :'Cancel',
          derole :'Do you want to delete this role',
          prompt:'Prompt',
          choice:'Menu permissions:',
          inchoice:'Please select Menu Permissions',
      },
      replenish:{
          patchManagement:'Mesh management',
      },
      rework:{
          reworkManagement:'Rework management',
          addRework:"Rework added ",
      },
      role:{
          id:'ID',
          characterHomepage:'Character Home',
      },
      user:{
          userId:'User ID',
          userHomepage:'User Home',
      },
      orderBasicData:{
          order:'orders',
          orderType:'The type of order',
      },
      machine:{
          basicId:'Device number',
          basicName:'The name of the device',
          basicCategory:'The process in which it is located',
          tempering:'Steel',
      },
      report:{
          productionReport:'Production reports',
          workInProgressReport:'WIP report',
      },
      productionBasicData:{
          basicDataQuery :'Basic data query',
      },
      mainIngredient:{
          materialInformation :'Material information',
      },
      mainIngredientStock:{
          materialName :'The name of the item',
          createTime :'Return date',
      },
      large:{
          percent:'Percent',
          time: 'The time of the break',
          tionnumber: 'Order number',
          jobnumber: 'Job number',
          productionnumber: 'The production order number',
          cardnumber: 'Process card number',
          projectname: 'The name of the project',
          batch: 'batch',
          detailID: 'Detail ID',
          building: 'Building No',
          serialnumber: 'Order serial number',
          productname: 'Product name',
          serial: 'Process validation number',
          slicemarker: 'Frame marker (position)',
          numberpatches: 'Number of patches',
          width: 'Width',
          height: 'Height',
          shape: 'Shape',
          responsibleprocess: 'Responsible process',
          process: 'This process',
          numberfractions: 'The number of unfilled fractions',
          breakreason: 'The reason for the break',
          breaktype: 'Sub-break type',
          responsiblepersonnel: 'Responsible Personnel',
          responsiblequipment: 'Responsible Equipment',
          responsibleteam: 'Responsible team',
          area: 'Sub-broken area',
          inspector: 'Quality inspector',
          operate: 'Operate',
          mes: 'Detail',
          projectnumber: 'The project order number',
          brokeno: 'The report is broken and not filled',
          close: 'Shut down',
          orderId: 'Order ID',
          order: '订单详情',
          customerName: 'The name of the customer',
          project: 'The name of the project',
          are: 'are',
          quantity: 'quantity',
          warehousing: 'State',
          deliveryDate: 'Delivery time',
          notstocked: 'Not yet in stock',
          inboundstatus: 'Partial inventory status',
          allstatus: 'All in stock status',
          completedquantity: 'Completed quantity',
          scrapquantity: 'Scrap Quantity',
          number: 'Quantity',
          method: 'Processing method',
          innumber: 'Quantity already entered',
          productstatus: 'Production status',
          right: 'normal',
          stop: 'termination',
          inquire: 'query',
          starttime :'Start Time',
          endtime :'End Time',
          loading :'In the process of uploading:',
          brokenNum:'brokenNum',
          inventory:'inventory',
          inventoryarea:'inventoryarea',
          shippedQuantity:'shippedQuantity',
          reportWorkQuantity:'reportWorkQuantity',
          reportWorkQuantityCount:'reporting_work_num_count',
          processId:'processId',
          historicaltasks1:'historicaltasks1',
          historicaltasks2:'historicaltasks2',
          historicaltasks3:'historicaltasks3',
          historicaltasks4:'historicaltasks4',
          historicaltasks5:'historicaltasks5',
          historicaltasks6:'historicaltasks6',
          historicaltasks7:'historicaltasks7',
          order:'order',
          date:'date',
          countOutOne:'countOutOne',
          totalAreaOutOne:'totalAreaOutOne',
          countOutTwo:'countOutTwo',
          totalAreaOutTwo:'totalAreaOutTwo',
          countIn:'countIn',
          totalAreaIn:'totalAreaIn',
          countOut:'countOut',
          totalAreaOut:'totalAreaOut',
          hollowCountOutOne:'hollowCountOutOne',
          hollowTotalAreaOutOne:'hollowTotalAreaOutOne',
          countOut:'countOut',
          hollowCountOutTwo:'hollowCountOutTwo',
      },
      reportmanage:{
          productiontime :'production time',
          starttime :'Start Time',
          endtime :'End Time',
          ctype :'Please select type',
          cstate :'Please select the status',
          cprocess :'Please select the process',
          all :'All',
          completed :'Completed',
          broke :'Damaged',
          takeout :'Takeout',
          dreportwork :'Unreported work',
          pendingwork :'Pending job application',
          reportwork :'Reported work',
          reportworked :'Reported worked',
          incise :'slicing',
          edging :'edging',
          steel :'toughened',
          inquire :'query',
          signingwork :'Reporting for work',
          reporteam :'Report work team',
          reportingequipment :'Reporting equipment',
          line :'line',
          process :'production processes',
          glassID :'Glass ID',
          projectnumber :'Project number',
          layoutID :'Tempered layout ID',
          type :'type',
          state :'state',
          processcards :'Flow Card',
          number :'Serial Number',
          layer :'storey',
          typebreakage :'Damage type',
          ptypebreakage :' Please select the type of damage',
          causebreakage :'Reason for damage',
          pcausebreakage :'Please select the reason for the damage',
          responsibleprocess :'Responsibility Process',
          responsiblepersonnel :'Responsible personnel',
          presponsiblepersonnel :'Please enter the responsible personnel',
          responsibleteam :'Responsible team',
          presponsibleteam :'Please select the responsible team',
          responsibleequipment :'Responsible equipment',
          presponsibleequipment :'Please select the responsible device',
          remark :'notes',
          premark :'Please enter a note',
      },
      film:{
          resetnumber:'架子号',
          fail:'失败',
          mes:'Original film storage details',
          warehousing:'store',
          pwarehousing:'入库请求',
          wareout:'原片出库',
          information:'是否出库该条信息?',
          pwareout:'出库请求',
          position:'吊装位:',
          cposition:'请选择吊装位',
          position1:'吊装位1',
          position2:'吊装位2',
          addglass:'原片信息',
          operate: 'Operate',
          exit:'Edit',
          delete:'Delete',
          outbound:'Outbound',
          deviceid:'device ID',
          enablestatea:'Enable tagging',
          disable:'Disable',
          start:'Enable',
          startslot:'Start workstation',
          endslot:'Target workstation',
          slotid:'Grid ID',
          slot:'格子号',
          width:'Width',
          widtha:'Width:',
          inwidth:'Please enter width',
          height:'Height',
          inheight:'Please enter height',
          heighta:'Height:',
          thickness:'Thickness',
          inthickness:'Please enter thickness',
          thicknessa:'Thickness:',
          films:'Films',
          infilms:'Please enter films',
          filmsa:'Films:',
          createtime:'Creation time',
          remainquantity:'Remaining Quantity',
          thickremainquant:'Remaining quantity of original film (sheets)',
          thickremainquantity:'Remaining quantity of original film (sheets):',
          inquantity:'Please enter the quantity',
          quantitya:'Number:',
          enableid:'Task ID',
          originateslot:'Starting grid',
          endoriginateslot:'目标格子',
          patternquantity:'Number',
          enabletype:'Task Type',
          enablestate:'Workstation status',
          finish:'Completed',
          unfinish:'Incomplete',
          dedelete:'Do you want to delete this content?',
          dedisable:'Do you want to disable this content?',
          deoutbound:'Whether to release the content of this item from the warehouse?',
          selectwarehousing:'Please select the lifting position',
          inwarehousing:'Lifting position:',
          warehousing1:'Lifting position 1',
          warehousing2:'Lifting position 2',
          starttime :'Start Time',
          endtime :'End Time',
          taskstatus :'Status',
          built :'newly built',
          execution :'In progress',
          tasktype :'Task Type',
          stocke :'store',
          dispatch :'dispatch',
          inquire :'query',
          station :'station',
      },
      Mounting:{
          previewproject :'Select Preview Project',
          loadinglinea :'Upper film line',
          loadingline :'Upper film line:',
          inloadingline :'Please select the upper film line',
          oneloadingline :'Line 1 on film',
          twoloadingline :'Line 2 on film',
          waiting :'Waiting',
          pass: 'Pass',
          setparameters :'Set parameters',
          project :'Project number',
          projecta :'Project number:',
          width :'Width',
          height :'Height',
          thickness :'Thickness',
          projectnumber :'Project original piece number',
          state :'state',
          createtime :'Creation time',
          all :'Select All',
          removalmethod: '请选择除膜方式',
          removalmethodp: '除膜方式',
          removalmethoda: '除膜方式:',
          noremoval: '不除膜',
          removal: '除膜',
          coarselyground: '粗磨',
          finegrinding: '精磨',
      },
      hellow: {
          totalPairQuantitya: '任务总配对数',
          pairQuantitya: '已出配对数',
          waitingout: '等待出片',
          finishout: '出片完成',
          hollowSequence: '中空顺序',
          isPair: '是否配对',
          no: '否',
          listFormula: '配方信息',
          HollowGlass: '队列信息',
          totalLayer: '总层数',
          totalPairQuantity: '总配对数量',
          pairQuantity: '已完成配对数量',
          isForceList: '是否强制',
          yesisForceList: '强制',
          noisForceList: '非强制',
          hollowCountOutOne: '中空一线玻璃数量',
          hollowCountOutTwo: '中空二线玻璃数量',
          hollowTotalAreaOutOne: '中空一线玻璃面积',
          hollowTotalAreaOutTwo: '中空二线玻璃面积',
          countIn: '钢化前大理片笼玻璃数量',
          countOut: '钢化玻璃数量',
          countOutOne: '切割一线玻璃数量',
          countOutTwo: '切割二线玻璃数量',
          totalAreaIn: '钢化前大理片笼玻璃面积',
          totalAreaOut: '钢化玻璃面积',
          totalAreaOutOne: '切割一线玻璃面积',
          totalAreaOutTwo: '切割二线玻璃面积',
          freeone: '一线空闲状态:',
          freetwo: '二线空闲状态:',
          freethree: '三线空闲状态:',
          casFour: '气体4',
          casFourb: '气体4:',
          casFoura: '请选择气体4',
          casOne: '气体1',
          casOneb: '气体1:',
          casOnea: '请选择气体1',
          casThree: '气体3',
          casThreeb: '气体3:',
          casThreea: '请选择气体3',
          casTwo: '气体2',
          casTwob: '气体2:',
          casTwoa: '请选择气体2',
          Y: '有',
          F: '无',
          frameFour: '间隔板4',
          frameFourb: '间隔板4:',
          frameFoura: '请输入间隔板4',
          frameOne: '间隔板1',
          frameOneb: '间隔板1:',
          frameOnea: '请输入间隔板1',
          frameThree: '间隔板3',
          frameThreeb: '间隔板3:',
          frameThreea: '请输入间隔板3',
          frameTwo: '间隔板2',
          frameTwob: '间隔板2:',
          frameTwoa: '请输入间隔板2',
          intervalFrameHeightOne: '间隔框高度1',
          intervalFrameHeightTwo: '间隔框高度2',
          intervalFrameHeightThree: '间隔框高度3',
          intervalFrameHeightFour: '间隔框高度4',
          intervalFrameHeightaOne: '请输入间隔框高度1',
          intervalFrameHeightaTwo: '请输入间隔框高度2',
          intervalFrameHeightaThree: '请输入间隔框高度3',
          intervalFrameHeightaFour:  '请输入间隔框高度4',
          intervalFrameHeightbOne: '间隔框高度1:',
          intervalFrameHeightbTwo: '间隔框高度2:',
          intervalFrameHeightbThree: '间隔框高度3:',
          intervalFrameHeightbFour:  '间隔框高度4:',
          intervalFrameTypeOne: '间隔框类型1',
          intervalFrameTypeTwo: '间隔框类型2',
          intervalFrameTypeThree: '间隔框类型3',
          intervalFrameTypeFour: '间隔框类型4',
          intervalFrameTypecOne: '请选择间隔框类型1',
          intervalFrameTypecTwo: '请选择间隔框类型2',
          intervalFrameTypecThree: '请选择间隔框类型3',
          intervalFrameTypecFour: '请选择间隔框类型4',
          intervalFrameTypedOne: '间隔框类型1:',
          intervalFrameTypedTwo: '间隔框类型2:',
          intervalFrameTypedThree: '间隔框类型3:',
          intervalFrameTypedFour: '间隔框类型4:',
          intervalFrameTypea: 'tps胶',
          intervalFrameTypeb: '铝间隔条',
          intervalFrameWidthOne: '间隔框宽度1',
          intervalFrameWidthTwo: '间隔框宽度2',
          intervalFrameWidthThree: '间隔框宽度3',
          intervalFrameWidthFour:  '间隔框宽度4',
          intervalFrameWidthaOne: '请输入间隔框宽度1',
          intervalFrameWidthaTwo: '请输入间隔框宽度2',
          intervalFrameWidthaThree: '请输入间隔框宽度3',
          intervalFrameWidthaFour:  '请输入间隔框宽度4',
          intervalFrameWidthbOne: '间隔框宽度1:',
          intervalFrameWidthbTwo: '间隔框宽度2:',
          intervalFrameWidthbThree: '间隔框宽度3:',
          intervalFrameWidthbFour:  '间隔框宽度4:',
          sealInsert: '密封嵌入',
          sealInsertb: '密封嵌入:',
          sealInserta: '请输入密封嵌入',
          hollowformula: '中空配方',
          hollowformuldet: '是否删除该中空配方?',
          hollowtaskdet: '是否删除该任务?',
          taskdet: '删除任务',
          edithollowformula: '修改中空配方',
          phollowformula: '请选择中空配方',
          hollowformulp: '中空配方:',
          bottomRemove: '下侧除膜量:',
          bottomRemovep: '下侧除膜量',
          bottomRemovea: '请输入下侧除膜量',
          topRemove: '上侧除膜量:',
          topRemovep: '上侧除膜量',
          topRemovea: '请输入上侧除膜量',
          leftRemove: '左侧除膜量:',
          leftRemovep: '左侧除膜量',
          leftRemovea: '请输入左侧除膜量',
          rightRemove: '右侧除膜量:',
          rightRemovep: '右侧除膜量',
          rightRemovea: '请输入右侧除膜量',
          formulaNamep: '配方名',
          formulaName: '配方名:',
          formulaNamea: '请输入配方名',
          stopproject: '暂停任务',
          pstopproject: '是否暂停任务?',
          reviewproject: '预览工程',
          line: '线路',
          linea: '线路:',
          line1: '线路一',
          line2: '线路二',
          line3: '线路三',
          createtask: '创建任务',
          starttask: '开始任务',
          pstarttask: '是否开始任务?',
          stoptask: '停止任务',
          pstoptask: '是否停止任务?',
          currenttask: '当前任务:',
          claimednumber: '已领取配对数量:',
          linenumber: '进入中空线数量:',
          order: '出片顺序',
          flowCardId: '流程卡',
          thickness: '厚度',
          coatingtypes: '膜系',
          layer: '层数',
          height: '长',
          width: '宽',
          state: '状态',
          cardnumber: '流程卡号',
          cardnumbera: '流程卡号:',
          layernumber: '层号',
          totalnumber: '总片数',
          pairsnumber: '已配对数量',
          missingnumber: '缺片数量',
          damagenumber: '破损数量',
          operate: '操作',
          claimquest: '领取任务',
          pclaimquest: '是否领取任务?',
          missingfilms: '缺片详情',
          forcedfilming: '强制出片',
          pforcedfilming: '是否强制出片?',
          brokenpieces: '破损片数',
          realpieces: '实际片数',
          route: '路线:',
          croute: '请选择路线',
          ptotalpairQuantity: '总配对数量:',
          cpairQuantity: '请输入总配对数量',
          schedulingswitch: '调度开关',
      },
    screendisplay:{
    login: {
        userErr: 'Please enter account number',
        pwErr: 'Please input a password',
        user: 'Account number',
        password: 'Password',
        login: 'Log on',
        loginSuccessful: 'Log on was successful!',
        register: 'Register',
        namea: 'Name cannot be empty',
        len: 'The length cannot exceed 16',
        passnull: 'Password cannot be empty',
        leng: 'The password length cannot be less than 6 or more than 16',
        spwn: 'Confirm password cannot be empty',
        depass: 'The two passwords are not the same',
    },
    register: {
        registerSuccessful: 'login was successful',
        newuserregister: 'New user register',
        name: 'Full name:',
        inputname: 'Please enter your name',
        password: 'Password:',
        pwErr: 'Please input a password',
        passwordation: 'Confirm password:',
        pwErration: 'Please confirm password',
        registration: 'Registration Confirm',
        false: 'Cancel',
    },
    main: {
        connectErr: 'The server connection is abnormal. Please try again later',
        titleFirst: "Welcome ",
        titleLast: ' to use NorthGlass MES system!',
        quit: "Exit",
    },
    basicData: {
        untask: '无任务',
        tonumber: '上片总数量',
        finishnumber: '已完成数量',
        rackreset: '架子复位',
        prackreset: '是否架子复位?',
        printing: '自动打印',
        laserprinting: 'Laser printing machine ready status:',
        cuttingmachine: 'Cutting machine ready status:',
        machine: 'Online status of the loading table:',
        machineaa: 'Manual state of the loading table:',
        selectproject: "Select project",
        startloading: 'Start loading',
        stop: 'Pause',
        yes: 'Confirm',
        change: 'Switch',
        projectnumber: 'Project number',
        glasswidth: 'Glass width',
        glassheight: 'Glass height',
        coatingtypes: 'Coating types',
        coatingtypesa: 'Coating types:',
        quantity: 'Quantity',
        quantitya: 'Quantity:',
        thickness: 'Thickness',
        thicknessa: 'Thickness:',
        startstatus: 'Start status',
        pass: 'Pass',
        waiting: 'Waiting',
        up: 'Loading',
        finish: 'Completed',
        project: 'Project ',
        plselectproject: 'Please select project',
        confirm: 'Confirm',
        cancel: 'Cancel',
        startfilm: 'Whether start loading?',
        whetherpause: 'Whether pause?',
        station: 'Station',
        width: 'Width',
        widtha: 'Width:',
        height: 'Height',
        heighta: 'Height:',
        operate: 'Operate',
        add: 'Increase',
        delete: 'Delete',
        addglass: 'Add glass',
        selectwidth: 'Please select width',
        selectheight: 'Please select high',
        selectcoatingtypes: 'Please select the coating types',
        selectthickness: 'Please select thickness',
        selectquantity: 'Please enter the quantity',
        pause: 'The height of the second and fourth rows must be greater than 2700 in order to save!',
        pausea: 'Please confirm the ready status of marking machine and cutting machine!',
        infonull: 'Project number cannot be empty!',
        updatanull: 'This project has not been saved to the loading list!',
        glassnull: 'An error occurred while updating the glass status',
        deletemessage: 'Do you want to delete this message?',
        layoutSequence: 'Serial Number',
    },
    sorter: {
        onesort: '一线掰片',
        twosort: '二线掰片',
        inPlace: '到位',
        ninPlace: '未到位',
        emptymissions: '空任务',
        advancetask: '进片任务',
        outputtasks: '出片任务',
        schedulingtasks: '调度任务',
        advancerequests: '进片请求',
        releaserequest: '出片请求',
        straighttasks: '直通任务',
        endingtask: '结束',
        another: '其他',
        taskRunning: '任务请求',
        updateTime: '更新时间',
        id: '磨边前理片笼表ID',
        remainWidth: '剩余',
        place: '是否到位',
        layernow: '当前层号',
        gridnumber: 'Grid number',
        glassnumber: 'Glass number',
        width: 'Width',
        height: 'Height',
        startstatus: 'Start status',
        disable: 'Disabled',
        start: 'Enabled',
        deficiencieste: 'Report deficiencies',
        updown: 'Artificial filming',
        operate: 'Operate',
        prompt: 'Prompt',
        information: 'Is the missing information reported?',
        infor: 'Whether to manually download this information?',
        yes: 'Yes',
        cancel: 'Cancel',
    },
    order: {
        projectnumber: '请输入工程号',
        dilapidation: 'Breakage',
        takeaway: 'Manual removal',
        takeawaya: '是否人工拿走该条信息?',
        takeon: 'The arrangement is complete',
    },
    searchOrder: {
        furnfullTemp: '玻璃总量',
        startCell: '目标层号',
        endCell: '预留层号',
        begin: '开始',
        finish: '完成',
        uncar: '未上车',
        inkage: '进片',
        successfullyprocessed: '任务成功处理',
        psuccessfullyprocessed: '是否进行任务成功处理?',
        taskfailure: '任务失败处理',
        ptaskfailure: '是否进行任务失败处理?',
        totallogarithms: '总对数',
        numberpairs: '配对数',
        numberoccupied: '占用格子数',
        totalfurnaces: '总炉数',
        cagesnumber: '笼内数量',
        slotnumber: '占有格子数',
        progress: '进度%',
        whethersame: '是否相同',
        same: '相同',
        notsame: '不相同',
        partask: '任务重置',
        partasks: '是否任务重置?',
        empty: '默认空任务',
        historicaltasks: '历史任务',
        cagedetails: '笼内详情',
        inkageEntity: '进片联机状态:',
        requestEntity: '进片请求状态:',
        mesReplyEntity: '启动命令:',
        outInkageEntity: '出片联机状态:',
        outRequestEntity: '出片请求状态:',
        breakagn: '未破损',
        lacknumber: '缺片数量',
        processcard: '指定流程卡',
        filminformation: '人工下片信息',
        currentglassinformation: '扫码枪当前玻璃信息',
        printlabels: '打印标签',
        deleteTask: '结束工程',
        pdeleteTask: '是否结束工程?',
        searchlayout: 'Non-tempered process card inquiry',
        fullfurnaces: 'Number of full furnaces',
        specifiedproject: 'The currently specified project',
        undesignate: '取消钢化',
        allnumber: 'Total quantity',
        numbercages: 'Number of cages',
        missingquantity: 'Missing quantity',
        breakquantity: 'Breakage/Take Away quantity',
        ceng: 'layer',
        cageinformation: 'Sorter information',
        productionqueue: 'Production queue',
        outputglassID: 'Output glass ID',
        startposition: 'Start position',
        targetlocation: 'Target Position',
        trips: 'Train number',
        number: 'Serial Number',
        taskstatus: 'Task state',
        filmenter: 'Waiting for input glass',
        infilm: 'In progress',
        endtask: 'End task',
        completetask: 'Complete the task',
        intoglassid: 'Input glass ID',
        line: 'Wire',
        Usage: 'Usage rate',
        free: 'Free(pieces)',
        addcage: 'Add information on sorter',
        glassIDa: 'Glass ID:',
        glassID: 'Glass ID',
        inglassID: 'Please enter the glass ID',
        pieceingrid: 'The order of small pieces within the grid',
        pieceingrida: 'The order of small pieces within the grid:',
        inpieceingrid: 'Please enter the order of small pieces within the grid',
        cardnumber: 'Process card number',
        cardnumbera: 'Process card number:',
        incardnumber: 'Please enter the process card number',
        typeglass: 'Glass type',
        typeglassa: 'Glass type:',
        intypeglass: 'Please enter the glass type',
        width: 'Width',
        widtha: 'Width:',
        inwidth: 'Please enter width',
        height: 'Height',
        heighta: 'Height:',
        inheight: 'Please enter height',
        coatingtypes: 'Coating types',
        thickness: 'Thickness',
        thicknessa: 'Thickness:',
        inthickness: 'Please enter the thickness',
        layoutID: 'Drawing ID of loading for tempering furnace',
        layoutIDa: 'Drawing ID of loading for tempering furnace:',
        inlayoutID: 'Please enter the drawing ID of loading for tempering furnace',
        picturesequence: 'Drawing sequence of loading for tempering furnace',
        picturesequencea: 'Drawing sequence of loading for tempering furnace:',
        inpicturesequence: 'Please enter the drawing sequence of loading for tempering furnace',
        startstatus: 'Start status',
        startstatusa: 'Start status:',
        instartstatus: 'Please enter the enabled status',
        glassgaps: 'Glass gap',
        glassgapsa: 'Glass gap:',
        inglassgaps: 'Please enter the glass gap',
        sure: 'Confirm',
        cancel: 'Cancel',
        operate: 'Operate',
        breakage: 'Breakage',
        delete: 'Delete',
        outfilm: 'Output glass',
        cagetableID: 'Sorter table ID',
        cagenumber: 'Sorter number',
        gridnumber: 'Grid number',
        gridnumbera: 'Grid number:',
        grid: 'Please enter a grid number',
        enable: 'Enabled',
        disable: 'Disabled',
        remainingwidth: 'Remaining width',
        add: 'Add',
        sheetID: 'Tempered small piece information table ID',
        processcards: 'Process card',
        processcardtype: 'Process card glass type',
        acceptshorizontal: 'Does tempering accept horizontal placement',
        xcoordinates: 'x coordinate',
        ycoordinates: 'Y coordinate',
        rotationangle: 'Rotation angle (counterclockwise)',
        state: 'Status',
        takeout: 'Take away',
        deletemessage: 'Do you want to delete this message?',
        prompt: 'Prompt',
        yes: 'Yes',
        accept: 'Accept',
        noaccept: 'Not accept',
        filmcomplete: 'Glass output completed',
        waiting: 'Waiting',
        broke: 'Is this information damaged?',
        brokeb: 'Do you need to delete the message?',
        outfil: 'Whether the film is released or not?',
        inputid: 'Please enter the glass ID',
        search: 'Search',
        tabid: 'Dali film cage details table ID',
        tid: 'Device ID',
        tida: 'Device ID:',
        fin: 'Whether or not the task was completed?',
        sureadd: 'Confirm the addition',
        sureadda: 'Whether to confirm the addition?',
        zailong: 'In a cage',
        rengongxp: 'Artificial filming',
        up: 'Previous',
        down: 'Next',
        now: 'The current page is displayed',
        tit: 'data',
        temperingqueries: 'Tempering queries',
        specifytempering: 'Specify a furnace',
        specifyout: '指定人工出片',
        specifyengineerid: 'Specify the project',
        projectnumber: 'Project number',
        layoutnumber: 'Drawing number of loading for tempering furnace',
        numberglasses: 'Number of glasses',
        specifytemperinga: '请确认设备是否已关闭MES联机?',
        temperedswitch: 'Tempered switch',
        dutyinformation: 'Duty information',
        process: 'Process',
        team: 'Team',
        basic: 'equipment',
        makesure: 'Confirm the save',
        temperingtotal: 'Number of tempering furnaces:',
        glasstotal: 'Total number of glasses:',
        Labelprinting: '标签打印',
        Schedulingswitch: '调度开关',
    },
    workOrder: {
        upnumber: '上片位编号',
        coatingtypesbe: '原片膜系',
        glassID: 'Glass ID',
        height: 'Height',
        width: 'Width',
        thickness: 'Thickness',
        coatingtypes: 'Coating types',
        productionsequence: 'Production sequence',
        cardnumber: 'Process card number',
        operate: 'Operate',
        messagedamaged: 'Is this information damaged?',
        prompt: 'Prompt',
        yes: 'Yes',
        cancel: 'Cancel',
        takemessage: 'Do you need to delete the message?',
        breakage: 'Breakage',
        takeout: 'Take away',
        glasstype: 'Glass type',
        line: 'Wire',
        status: 'Status',
        time: 'Time period',
        cway: 'Please select a route',
        cstate: 'Please select a status',
        edgingone: 'Edging a line',
        edgingtwo: 'Edging two lines',
        nedging: 'Unedging',
        edging: 'Edging',
        finedging: 'has been edging',
    },
    processCard: {
        intofurnace: 'Entering the furnace',
        beforefurnace: 'Before entering the furnace',
        outfurnace: 'Glass finished from tempering furnace',
        print: 'Take away the print',
        printing: 'print',
        projectnumber: 'Please enter the project number',
        inquire: 'Inquire',
        project: 'Project number',
        awayprocess: 'Take away the process',
        awayequipment: 'Take away the equipment',
        awayteam: 'Take away the crew',
        flowcard: 'Process card',
        layer: 'Layer number',
        temperinglayout: 'Heat number',
        temperingfeed: 'Preface',
        width: 'Width',
        height: 'Height',
        thickness: 'Thickness',
        glasstakeout: 'Glass take away list',
        layoutID: 'Drawing ID of loading for tempering furnace',
        glassID: 'Glass ID',
    },
    reportWork: {
        details: 'Drop off details',
        filming: 'Artificial filming',
        printing: 'Automatic printing',
        cenumber: 'Number of layers',
        artificialorder: 'The number of pieces under artificial order',
        processcard: 'Print the process card',
        printlabels: 'Print labels',
        information: 'Landing information',
        cstation: 'Please select a desk',
        all: 'all',
        timeperiod: 'Time period',
        stationnumber: 'Station number',
        order: 'order',
        filminformation: 'Manual film information',
        glassmation: 'Artificial film current glass information',
        barcodescanner: 'The current glass information of the barcode scanner',
        lowerbit: 'Unloading station',
        shelfnumber: 'Rack number',
        cardnumber: 'Process card number',
        totalquantity: 'Total quantity',
        beendropped: 'Quantity of unloaded glass',
        state: 'Status',
        devicenumber: 'Equipment No.',
        startstatus: 'Start status',
        enable: 'Start',
        unenable: 'Unstart',
        operate: 'Operate',
        bindingshelves: 'Assigned rack',
        clear: 'Clear',
        workstation: 'Station No.',
        shelfnumbera: 'Rack number:',
        cardnumbera: 'Process card number:',
        incardnumber: 'Please select the process card number',
        clearglass: 'Clear the glass on the shelf',
        sure: 'Operate',
        cancel: 'Cancel',
        glassinformation: 'Glass information',
        glassID: 'Glass ID',
        coatingtypes: 'Coating types',
        thickness: 'Thickness',
        width: 'Width',
        height: 'Height',
    },
    productStock: {
        configName: '配置名',
        configCode: '配置代码',
        configValue: '配置值',
        addusers: 'Add user',
        username: 'User name',
        usernamea: 'User name:',
        inusername: 'Enter one user name',
        role: 'Role',
        rolea: 'Role:',
        inrole: 'Please select a role',
        test: 'Test',
        admin: 'Administrator',
        operate: 'Operate',
        resetpassword: 'Reset password',
        exit: 'Edit',
        delete: 'Delete',
        prompt: 'Prompt',
        repassword: 'Do you want to reset the user password?',
        yes: 'Yes',
        cancel: 'Cancel',
        reusername: 'Modify Users',
        addusername: 'Add user',
        password: 'Password:',
        sure: 'Confirm',
        inpassword: 'Please input a password',
        deusername: 'Do you want to delete the user?',
    },
    customer: {
        addmenua: 'Add secondary menus',
        addmenu: 'Add a first-level menu',
        firstmenu: 'First level menu bar',
        firstmenuname: 'The name of the first-level menu:',
        link: 'Link',
        inlink: 'Please enter the link',
        linka: 'Link:',
        sort: 'Sort',
        insort: 'Please enter sorting',
        sorta: 'Sort:',
        operate: 'Operate',
        exit: 'Edit',
        delete: 'Delete',
        semenu: 'Secondary menu bar',
        semenuname: 'Secondary menu name:',
        menu: 'Menu bar:',
        inmenu: 'Please enter a menu name',
        sure: 'Confirm',
        cancel: 'Cancel',
        exmene: 'Modify the first-level menu',
        exmenea: 'Modify the secondary menu',
        yes: 'Yes',
        demenu: 'Do you want to delete this menu?',
        prompt: 'Prompt',
    },
    delivery: {
        addrole: 'Add Role',
        editrole: 'Modify role',
        role: 'Role',
        rolea: 'Role:',
        inrole: 'Please enter the role',
        operate: 'Operate',
        edit: 'Edit',
        delete: 'Delete',
        yes: 'Yes',
        sure: 'Confirm',
        cancel: 'Cancel',
        derole: 'Do you want to delete this role',
        prompt: 'Prompt',
        choice: 'Menu permissions:',
        inchoice: 'Please select Menu Permissions',
    },
    replenish: {
        patchManagement: 'Mesh management',
    },
    rework: {
        reworkManagement: 'Rework management',
        addRework: "Rework added ",
    },
    role: {
        id: 'ID',
        characterHomepage: 'Character Home',
    },
    user: {
        userId: 'User ID',
        userHomepage: 'User Home',
    },
    orderBasicData: {
        order: 'orders',
        orderType: 'The type of order',
    },
    machine: {
        basicId: 'Device number',
        basicName: 'The name of the device',
        basicCategory: 'The process in which it is located',
        tempering: 'Steel',
    },
    report: {
        productionReport: 'Production reports',
        workInProgressReport: 'WIP report',
    },
    productionBasicData: {
        basicDataQuery: 'Basic data query',
    },
    mainIngredient: {
        materialInformation: 'Material information',
    },
    mainIngredientStock: {
        materialName: 'The name of the item',
        createTime: 'Return date',
    },
    large: {
        load: 'load',
        edg: 'edg',
        temp: 'temp',
        hollow: 'hollow',
        oneFinish: 'oneFinish',
        twoFinish: 'twoFinish',
        oneunFinish: 'oneunFinish',
        twounFinish: 'twounFinish',
        ondDamage: 'ondDamage',
        percent: 'Percent',
        time: 'The time of the break',
        tionnumber: 'Order number',
        jobnumber: 'Job number',
        productionnumber: 'The production order number',
        cardnumber: 'Process card number',
        projectname: 'The name of the project',
        batch: 'batch',
        detailID: 'Detail ID',
        building: 'Building No',
        serialnumber: 'Order serial number',
        productname: 'Product name',
        serial: 'Process validation number',
        slicemarker: 'Frame marker (position)',
        numberpatches: 'Number of patches',
        width: 'Width',
        height: 'Height',
        shape: 'Shape',
        responsibleprocess: 'Responsible process',
        process: 'This process',
        numberfractions: 'The number of unfilled fractions',
        breakreason: 'The reason for the break',
        breaktype: 'Sub-break type',
        responsiblepersonnel: 'Responsible Personnel',
        responsiblequipment: 'Responsible Equipment',
        responsibleteam: 'Responsible team',
        area: 'Sub-broken area',
        inspector: 'Quality inspector',
        operate: 'Operate',
        mes: 'Detail',
        projectnumber: 'The project order number',
        brokeno: 'The report is broken and not filled',
        close: 'Shut down',
        orderId: 'Order ID',
        order: '订单详情',
        customerName: 'The name of the customer',
        project: 'The name of the project',
        are: 'are',
        quantity: 'quantity',
        warehousing: 'State',
        deliveryDate: 'Delivery time',
        notstocked: 'Not yet in stock',
        inboundstatus: 'Partial inventory status',
        allstatus: 'All in stock status',
        completedquantity: 'Completed quantity',
        scrapquantity: 'Scrap Quantity',
        number: 'Quantity',
        method: 'Processing method',
        innumber: 'Quantity already entered',
        productstatus: 'Production status',
        right: 'normal',
        stop: 'termination',
        inquire: 'query',
        starttime: 'Start Time',
        endtime: 'End Time',
        loading: 'In the process of uploading:',
        brokenNum: 'brokenNum',
        inventory: 'inventory',
        inventoryarea: 'inventoryarea',
        shippedQuantity: 'shippedQuantity',
        reportWorkQuantity: 'reportWorkQuantity',
        reportWorkQuantityCount: 'reporting_work_num_count',
        processId: 'processId',
        historicaltasks1: 'historicaltasks1',
        historicaltasks2: 'historicaltasks2',
        historicaltasks3: 'historicaltasks3',
        historicaltasks4: 'historicaltasks4',
        historicaltasks5: 'historicaltasks5',
        historicaltasks6: 'historicaltasks6',
        historicaltasks7: 'historicaltasks7',
        order: 'order',
        date: 'date',
        countOutOne: 'countOutOne',
        totalAreaOutOne: 'totalAreaOutOne',
        countOutTwo: 'countOutTwo',
        totalAreaOutTwo: 'totalAreaOutTwo',
        countIn: 'countIn',
        totalAreaIn: 'totalAreaIn',
        countOut: 'countOut',
        totalAreaOut: 'totalAreaOut',
        hollowCountOutOne: 'hollowCountOutOne',
        hollowTotalAreaOutOne: 'hollowTotalAreaOutOne',
        countOut: 'countOut',
        hollowCountOutTwo: 'hollowCountOutTwo',
    },
    reportmanage: {
        productiontime: 'production time',
        starttime: 'Start Time',
        endtime: 'End Time',
        ctype: 'Please select type',
        cstate: 'Please select the status',
        cprocess: 'Please select the process',
        all: 'All',
        completed: 'Completed',
        broke: 'Damaged',
        takeout: 'Takeout',
        dreportwork: 'Unreported work',
        pendingwork: 'Pending job application',
        reportwork: 'Reported work',
        reportworked: 'Reported worked',
        incise: 'slicing',
        edging: 'edging',
        steel: 'toughened',
        inquire: 'query',
        signingwork: 'Reporting for work',
        reporteam: 'Report work team',
        reportingequipment: 'Reporting equipment',
        line: 'line',
        process: 'production processes',
        glassID: 'Glass ID',
        projectnumber: 'Project number',
        layoutID: 'Tempered layout ID',
        type: 'type',
        state: 'state',
        processcards: 'Flow Card',
        number: 'Serial Number',
        layer: 'storey',
        typebreakage: 'Damage type',
        ptypebreakage: ' Please select the type of damage',
        causebreakage: 'Reason for damage',
        pcausebreakage: 'Please select the reason for the damage',
        responsibleprocess: 'Responsibility Process',
        responsiblepersonnel: 'Responsible personnel',
        presponsiblepersonnel: 'Please enter the responsible personnel',
        responsibleteam: 'Responsible team',
        presponsibleteam: 'Please select the responsible team',
        responsibleequipment: 'Responsible equipment',
        presponsibleequipment: 'Please select the responsible device',
        remark: 'notes',
        premark: 'Please enter a note',
    },
    film: {
        resetnumber: '架子号',
        fail: '失败',
        mes: 'Original film storage details',
        warehousing: 'store',
        pwarehousing: '入库请求',
        wareout: '原片出库',
        information: '是否出库该条信息?',
        pwareout: '出库请求',
        position: '吊装位:',
        cposition: '请选择吊装位',
        position1: '吊装位1',
        position2: '吊装位2',
        addglass: '原片信息',
        operate: 'Operate',
        exit: 'Edit',
        delete: 'Delete',
        outbound: 'Outbound',
        deviceid: 'device ID',
        enablestatea: 'Enable tagging',
        disable: 'Disable',
        start: 'Enable',
        startslot: 'Start workstation',
        endslot: 'Target workstation',
        slotid: 'Grid ID',
        slot: '格子号',
        width: 'Width',
        widtha: 'Width:',
        inwidth: 'Please enter width',
        height: 'Height',
        inheight: 'Please enter height',
        heighta: 'Height:',
        thickness: 'Thickness',
        inthickness: 'Please enter thickness',
        thicknessa: 'Thickness:',
        films: 'Films',
        infilms: 'Please enter films',
        filmsa: 'Films:',
        createtime: 'Creation time',
        remainquantity: 'Remaining Quantity',
        thickremainquant: 'Remaining quantity of original film (sheets)',
        thickremainquantity: 'Remaining quantity of original film (sheets):',
        inquantity: 'Please enter the quantity',
        quantitya: 'Number:',
        enableid: 'Task ID',
        originateslot: 'Starting grid',
        endoriginateslot: '目标格子',
        patternquantity: 'Number',
        enabletype: 'Task Type',
        enablestate: 'Workstation status',
        finish: 'Completed',
        unfinish: 'Incomplete',
        dedelete: 'Do you want to delete this content?',
        dedisable: 'Do you want to disable this content?',
        deoutbound: 'Whether to release the content of this item from the warehouse?',
        selectwarehousing: 'Please select the lifting position',
        inwarehousing: 'Lifting position:',
        warehousing1: 'Lifting position 1',
        warehousing2: 'Lifting position 2',
        starttime: 'Start Time',
        endtime: 'End Time',
        taskstatus: 'Status',
        built: 'newly built',
        execution: 'In progress',
        tasktype: 'Task Type',
        stocke: 'store',
        dispatch: 'dispatch',
        inquire: 'query',
        station: 'station',
    },
    Mounting: {
        previewproject: 'Select Preview Project',
        loadinglinea: 'Upper film line',
        loadingline: 'Upper film line:',
        inloadingline: 'Please select the upper film line',
        oneloadingline: 'Line 1 on film',
        twoloadingline: 'Line 2 on film',
        waiting: 'Waiting',
        pass: 'Pass',
        setparameters: 'Set parameters',
        project: 'Project number',
        projecta: 'Project number:',
        width: 'Width',
        height: 'Height',
        thickness: 'Thickness',
        projectnumber: 'Project original piece number',
        state: 'state',
        createtime: 'Creation time',
        all: 'Select All',
        removalmethod: '请选择除膜方式',
        removalmethodp: '除膜方式',
        removalmethoda: '除膜方式:',
        noremoval: '不除膜',
        removal: '除膜',
        coarselyground: '粗磨',
        finegrinding: '精磨',
    },
    hellow: {
        totalPairQuantitya: '任务总配对数',
        pairQuantitya: '已出配对数',
        waitingout: '等待出片',
        finishout: '出片完成',
        hollowSequence: '中空顺序',
        isPair: '是否配对',
        no: '否',
        listFormula: '配方信息',
        HollowGlass: '队列信息',
        totalLayer: '总层数',
        totalPairQuantity: '总配对数量',
        pairQuantity: '已完成配对数量',
        isForceList: '是否强制',
        yesisForceList: '强制',
        noisForceList: '非强制',
        hollowCountOutOne: '中空一线玻璃数量',
        hollowCountOutTwo: '中空二线玻璃数量',
        hollowTotalAreaOutOne: '中空一线玻璃面积',
        hollowTotalAreaOutTwo: '中空二线玻璃面积',
        countIn: '钢化前大理片笼玻璃数量',
        countOut: '钢化玻璃数量',
        countOutOne: '切割一线玻璃数量',
        countOutTwo: '切割二线玻璃数量',
        totalAreaIn: '钢化前大理片笼玻璃面积',
        totalAreaOut: '钢化玻璃面积',
        totalAreaOutOne: '切割一线玻璃面积',
        totalAreaOutTwo: '切割二线玻璃面积',
        freeone: '一线空闲状态:',
        freetwo: '二线空闲状态:',
        freethree: '三线空闲状态:',
        casFour: '气体4',
        casFourb: '气体4:',
        casFoura: '请选择气体4',
        casOne: '气体1',
        casOneb: '气体1:',
        casOnea: '请选择气体1',
        casThree: '气体3',
        casThreeb: '气体3:',
        casThreea: '请选择气体3',
        casTwo: '气体2',
        casTwob: '气体2:',
        casTwoa: '请选择气体2',
        Y: '有',
        F: '无',
        frameFour: '间隔板4',
        frameFourb: '间隔板4:',
        frameFoura: '请输入间隔板4',
        frameOne: '间隔板1',
        frameOneb: '间隔板1:',
        frameOnea: '请输入间隔板1',
        frameThree: '间隔板3',
        frameThreeb: '间隔板3:',
        frameThreea: '请输入间隔板3',
        frameTwo: '间隔板2',
        frameTwob: '间隔板2:',
        frameTwoa: '请输入间隔板2',
        intervalFrameHeightOne: '间隔框高度1',
        intervalFrameHeightTwo: '间隔框高度2',
        intervalFrameHeightThree: '间隔框高度3',
        intervalFrameHeightFour: '间隔框高度4',
        intervalFrameHeightaOne: '请输入间隔框高度1',
        intervalFrameHeightaTwo: '请输入间隔框高度2',
        intervalFrameHeightaThree: '请输入间隔框高度3',
        intervalFrameHeightaFour: '请输入间隔框高度4',
        intervalFrameHeightbOne: '间隔框高度1:',
        intervalFrameHeightbTwo: '间隔框高度2:',
        intervalFrameHeightbThree: '间隔框高度3:',
        intervalFrameHeightbFour: '间隔框高度4:',
        intervalFrameTypeOne: '间隔框类型1',
        intervalFrameTypeTwo: '间隔框类型2',
        intervalFrameTypeThree: '间隔框类型3',
        intervalFrameTypeFour: '间隔框类型4',
        intervalFrameTypecOne: '请选择间隔框类型1',
        intervalFrameTypecTwo: '请选择间隔框类型2',
        intervalFrameTypecThree: '请选择间隔框类型3',
        intervalFrameTypecFour: '请选择间隔框类型4',
        intervalFrameTypedOne: '间隔框类型1:',
        intervalFrameTypedTwo: '间隔框类型2:',
        intervalFrameTypedThree: '间隔框类型3:',
        intervalFrameTypedFour: '间隔框类型4:',
        intervalFrameTypea: 'tps胶',
        intervalFrameTypeb: '铝间隔条',
        intervalFrameWidthOne: '间隔框宽度1',
        intervalFrameWidthTwo: '间隔框宽度2',
        intervalFrameWidthThree: '间隔框宽度3',
        intervalFrameWidthFour: '间隔框宽度4',
        intervalFrameWidthaOne: '请输入间隔框宽度1',
        intervalFrameWidthaTwo: '请输入间隔框宽度2',
        intervalFrameWidthaThree: '请输入间隔框宽度3',
        intervalFrameWidthaFour: '请输入间隔框宽度4',
        intervalFrameWidthbOne: '间隔框宽度1:',
        intervalFrameWidthbTwo: '间隔框宽度2:',
        intervalFrameWidthbThree: '间隔框宽度3:',
        intervalFrameWidthbFour: '间隔框宽度4:',
        sealInsert: '密封嵌入',
        sealInsertb: '密封嵌入:',
        sealInserta: '请输入密封嵌入',
        hollowformula: '中空配方',
        hollowformuldet: '是否删除该中空配方?',
        hollowtaskdet: '是否删除该任务?',
        taskdet: '删除任务',
        edithollowformula: '修改中空配方',
        phollowformula: '请选择中空配方',
        hollowformulp: '中空配方:',
        bottomRemove: '下侧除膜量:',
        bottomRemovep: '下侧除膜量',
        bottomRemovea: '请输入下侧除膜量',
        topRemove: '上侧除膜量:',
        topRemovep: '上侧除膜量',
        topRemovea: '请输入上侧除膜量',
        leftRemove: '左侧除膜量:',
        leftRemovep: '左侧除膜量',
        leftRemovea: '请输入左侧除膜量',
        rightRemove: '右侧除膜量:',
        rightRemovep: '右侧除膜量',
        rightRemovea: '请输入右侧除膜量',
        formulaNamep: '配方名',
        formulaName: '配方名:',
        formulaNamea: '请输入配方名',
        stopproject: '暂停任务',
        pstopproject: '是否暂停任务?',
        reviewproject: '预览工程',
        line: '线路',
        linea: '线路:',
        line1: '线路一',
        line2: '线路二',
        line3: '线路三',
        createtask: '创建任务',
        starttask: '开始任务',
        pstarttask: '是否开始任务?',
        stoptask: '停止任务',
        pstoptask: '是否停止任务?',
        currenttask: '当前任务:',
        claimednumber: '已领取配对数量:',
        linenumber: '进入中空线数量:',
        order: '出片顺序',
        flowCardId: '流程卡',
        thickness: '厚度',
        coatingtypes: '膜系',
        layer: '层数',
        height: '长',
        width: '宽',
        state: '状态',
        cardnumber: '流程卡号',
        cardnumbera: '流程卡号:',
        layernumber: '层号',
        totalnumber: '总片数',
        pairsnumber: '已配对数量',
        missingnumber: '缺片数量',
        damagenumber: '破损数量',
        operate: '操作',
        claimquest: '领取任务',
        pclaimquest: '是否领取任务?',
        missingfilms: '缺片详情',
        forcedfilming: '强制出片',
        pforcedfilming: '是否强制出片?',
        brokenpieces: '破损片数',
        realpieces: '实际片数',
        route: '路线:',
        croute: '请选择路线',
        ptotalpairQuantity: '总配对数量:',
        cpairQuantity: '请输入总配对数量',
        schedulingswitch: '调度开关',
    },
    screendisplay: {
        pwidth: '请输入宽度',
        pheight: '请输入高度',
        upnumber: '上片数量',
    }
  }
}
UI-Project/src/lang/zh.js
@@ -511,6 +511,15 @@
          createTime :'返库日期',
      },
      large:{
          load:'切割',
          edg:'磨边',
          temp:'钢化',
          hollow:'中空',
          oneFinish:'一线完成',
          twoFinish:'二线完成',
          oneunFinish:'一线未完成',
          twounFinish:'二线未完成',
          ondDamage:'一线破损',
          percent:'进度百分比',
          time: '次破时间',
          tionnumber: '订单号',
UI-Project/src/views/largescreendisplay/screendisplay.vue
@@ -1,5 +1,5 @@
<script setup>
import { onBeforeUnmount, onMounted, onUnmounted, ref, computed } from "vue";
import { onBeforeUnmount, onMounted, onUnmounted, ref, computed, nextTick } from "vue";
import { useRouter } from "vue-router"
import { host, WebSocketHost } from '@/utils/constants'
import request from "@/utils/request"
@@ -7,7 +7,12 @@
import dayjs from 'dayjs';
import { ElMessage } from 'element-plus'
import { useI18n } from 'vue-i18n'
import * as echarts from 'echarts';
const load = ref(true)
const edg = ref(true)
const temp = ref(true)
const hollow = ref(true)
const router = useRouter()
const blinda = ref(false)
const blindb = ref(false)
@@ -27,6 +32,7 @@
const edgTwoTasks = ref([])
const engineeringOne = ref([])
const engineeringTwo = ref([])
const socketUrl1 = `ws://${WebSocketHost}:${host}/api/cacheGlass/api/talk/largenScreen`;
const handleMessage1 = (data) => {
  edgOneTasks.value = data.edgOneTasks[0];
@@ -41,6 +47,87 @@
    numBoxes2.value = edgTwoTasks.value.length;
    boxStart2();
  }
  const pieChartVOS = ref([]);
  pieChartVOS.value = data.pieChartVOS[0];
  let oneFinish = ref();
  let twoFinish = ref();
  let oneunFinish = ref();
  let twounFinish = ref();
  if (load.value) {
    oneFinish = pieChartVOS.value[0].oneCompletedQuantity;
    twoFinish = pieChartVOS.value[0].twoCompletedQuantity;
    oneunFinish = pieChartVOS.value[0].oneUncompletedQuantity;
    twounFinish = pieChartVOS.value[0].twoUncompletedQuantity;
  } else {
    oneFinish = pieChartVOS.value[0].oneCompletedArea;
    twoFinish = pieChartVOS.value[0].twoCompletedArea;
    oneunFinish = pieChartVOS.value[0].oneUncompletedArea;
    twounFinish = pieChartVOS.value[0].twoUncompletedArea;
  }
  const chartDomOne = chartOne.value;
  if (!chartDomOne) {
    console.error('图表容器未找到');
    return;
  }
  const myChartOne = echarts.init(chartDomOne);
  const optionOne = {
    title: {
      text: t('large.load'),
      subtext: '',
      left: 'right'
    },
    tooltip: {
      trigger: 'item'
    },
    legend: {
      orient: 'vertical',
      left: 'left'
    },
    series: [
      {
        name: '',
        type: 'pie',
        radius: '50%',
        data: [
          { value: oneFinish, name: t('large.oneFinish') },
          { value: twoFinish, name: t('large.twoFinish') },
          { value: oneunFinish, name: t('large.oneunFinish') },
          { value: twounFinish, name: t('large.twounFinish') },
        ],
        emphasis: {
          itemStyle: {
            shadowBlur: 10,
            shadowOffsetX: 0,
            shadowColor: 'rgba(0, 0, 0, 0.5)'
          }
        }
      }
    ],
    graphic: [
      {
        type: 'rect',
        left: 'center',
        top: 0,
        shape: {
          width: 80,
          height: 30
        },
        style: {
          text: load.value == true ? t('large.quantity') : t('large.are'),
          fill: '#5470C6',
          stroke: '#000',
          lineWidth: 1
        },
        onclick: function () {
          load.value = !load.value;
        }
      }
    ]
  };
  myChartOne.setOption(optionOne);
};
let socket2 = null;
const temperingTaskType = ref([])
@@ -60,29 +147,371 @@
    numBoxes4.value = 0;
  }
  temperingGlassInfoInList.value = data.temperingGlassInfoInList[0];
  // if (numBoxes4.value != temperingGlassInfoOutList.value) {
  //   numBoxes4.value = temperingGlassInfoOutList.value;
  //   boxStart3();
  // }
  const pieChartVOS = ref([]);
  pieChartVOS.value = data.pieChartVOS[0];
  let oneFinish = ref();
  let ondDamage = ref();
  let oneunFinish = ref();
  if (temp.value) {
    oneFinish = pieChartVOS.value[0].oneCompletedQuantity;
    ondDamage = pieChartVOS.value[0].oneDamageQuantity;
    oneunFinish = pieChartVOS.value[0].oneUncompletedQuantity;
  } else {
    oneFinish = pieChartVOS.value[0].oneCompletedArea;
    ondDamage = pieChartVOS.value[0].oneDamageArea;
    oneunFinish = pieChartVOS.value[0].oneUncompletedArea;
  }
  const chartDomOne = chartThree.value;
  if (!chartDomOne) {
    console.error('图表容器未找到');
    return;
  }
  const myChartOne = echarts.init(chartDomOne);
  const optionOne = {
    title: {
      text: t('large.temp'),
      subtext: '',
      left: 'right'
    },
    tooltip: {
      trigger: 'item'
    },
    legend: {
      orient: 'vertical',
      left: 'left'
    },
    series: [
      {
        name: '',
        type: 'pie',
        radius: '50%',
        data: [
          { value: oneFinish, name: t('large.oneFinish') },
          { value: ondDamage, name: t('large.ondDamage') },
          { value: oneunFinish, name: t('large.oneunFinish') },
        ],
        emphasis: {
          itemStyle: {
            shadowBlur: 10,
            shadowOffsetX: 0,
            shadowColor: 'rgba(0, 0, 0, 0.5)'
          }
        }
      }
    ],
    graphic: [
      {
        type: 'rect',
        left: 'center',
        top: 0,
        shape: {
          width: 80,
          height: 30
        },
        style: {
          text: temp.value == true ? t('large.quantity') : t('large.are'),
          fill: '#5470C6',
          stroke: '#000',
          lineWidth: 1
        },
        onclick: function () {
          temp.value = !temp.value;
        }
      }
    ]
  };
  myChartOne.setOption(optionOne);
};
let socket3 = null;
const bigStorageCageUsage = ref([])
const socketUrl3 = `ws://${WebSocketHost}:${host}/api/cacheVerticalGlass/api/talk/largenScreen`;
const handleMessage3 = (data) => {
  bigStorageCageUsage.value = data.bigStorageCageUsage[0];
  const pieChartVOS = ref([]);
  pieChartVOS.value = data.pieChartVOS[0];
  let oneFinish = ref();
  let twoFinish = ref();
  let oneunFinish = ref();
  let twounFinish = ref();
  if (edg.value) {
    oneFinish = pieChartVOS.value[0].oneCompletedQuantity;
    twoFinish = pieChartVOS.value[0].twoCompletedQuantity;
    oneunFinish = pieChartVOS.value[0].oneUncompletedQuantity;
    twounFinish = pieChartVOS.value[0].twoUncompletedQuantity;
  } else {
    oneFinish = pieChartVOS.value[0].oneCompletedArea;
    twoFinish = pieChartVOS.value[0].twoCompletedArea;
    oneunFinish = pieChartVOS.value[0].oneUncompletedArea;
    twounFinish = pieChartVOS.value[0].twoUncompletedArea;
  }
  const chartDomOne = chartTwo.value;
  if (!chartDomOne) {
    console.error('图表容器未找到');
    return;
  }
  const myChartOne = echarts.init(chartDomOne);
  const optionOne = {
    title: {
      text: t('large.edg'),
      subtext: '',
      left: 'right'
    },
    tooltip: {
      trigger: 'item'
    },
    legend: {
      orient: 'vertical',
      left: 'left'
    },
    series: [
      {
        name: '',
        type: 'pie',
        radius: '50%',
        data: [
          { value: oneFinish, name: t('large.oneFinish') },
          { value: twoFinish, name: t('large.twoFinish') },
          { value: oneunFinish, name: t('large.oneunFinish') },
          { value: twounFinish, name: t('large.twounFinish') },
        ],
        emphasis: {
          itemStyle: {
            shadowBlur: 10,
            shadowOffsetX: 0,
            shadowColor: 'rgba(0, 0, 0, 0.5)'
          }
        }
      }
    ],
    graphic: [
      {
        type: 'rect',
        left: 'center',
        top: 0,
        shape: {
          width: 80,
          height: 30
        },
        style: {
          text: edg.value == true ? t('large.quantity') : t('large.are'),
          fill: '#5470C6',
          stroke: '#000',
          lineWidth: 1
        },
        onclick: function () {
          edg.value = !edg.value;
        }
      }
    ]
  };
  myChartOne.setOption(optionOne);
};
let socket4 = null;
const hollowBigStorageCageUsage = ref([])
const socketUrl4 = `ws://${WebSocketHost}:${host}/api/hollowGlass/api/talk/largenScreen`;
const handleMessage4 = (data) => {
  hollowBigStorageCageUsage.value = data.hollowBigStorageCageUsage[0];
  const pieChartVOS = ref([]);
  pieChartVOS.value = data.pieChartVOS[0];
  let oneFinish = ref();
  let twoFinish = ref();
  let oneunFinish = ref();
  let twounFinish = ref();
  if (hollow.value) {
    oneFinish = pieChartVOS.value[0].oneCompletedQuantity;
    twoFinish = pieChartVOS.value[0].twoCompletedQuantity;
    oneunFinish = pieChartVOS.value[0].oneUncompletedQuantity;
    twounFinish = pieChartVOS.value[0].twoUncompletedQuantity;
  } else {
    oneFinish = pieChartVOS.value[0].oneCompletedArea;
    twoFinish = pieChartVOS.value[0].twoCompletedArea;
    oneunFinish = pieChartVOS.value[0].oneUncompletedArea;
    twounFinish = pieChartVOS.value[0].twoUncompletedArea;
  }
  const chartDomOne = chartFour.value;
  if (!chartDomOne) {
    console.error('图表容器未找到');
    return;
  }
  const myChartOne = echarts.init(chartDomOne);
  const optionOne = {
    title: {
      text: t('large.hollow'),
      subtext: '',
      left: 'right'
    },
    tooltip: {
      trigger: 'item'
    },
    legend: {
      orient: 'vertical',
      left: 'left'
    },
    series: [
      {
        name: '',
        type: 'pie',
        radius: '50%',
        data: [
          { value: oneFinish, name: t('large.oneFinish') },
          { value: twoFinish, name: t('large.twoFinish') },
          { value: oneunFinish, name: t('large.oneunFinish') },
          { value: twounFinish, name: t('large.twounFinish') },
        ],
        emphasis: {
          itemStyle: {
            shadowBlur: 10,
            shadowOffsetX: 0,
            shadowColor: 'rgba(0, 0, 0, 0.5)'
          }
        }
      }
    ],
    graphic: [
      {
        type: 'rect',
        left: 'center',
        top: 0,
        shape: {
          width: 80,
          height: 30
        },
        style: {
          text: hollow.value == true ? t('large.quantity') : t('large.are'),
          fill: '#5470C6',
          stroke: '#000',
          lineWidth: 1
        },
        onclick: function () {
          hollow.value = !hollow.value;
        }
      }
    ]
  };
  myChartOne.setOption(optionOne);
};
let socket5 = null;
const productionVO = ref([])
const socketUrl5 = `ws://${WebSocketHost}:${host}/api/cacheGlass/api/talk/largenScreenProduction`;
const handleMessage5 = (data) => {
  productionVO.value = data.productionVO;
  productionVO.value = data.productionVO[0];
  // 将原始数据转换为 ECharts 图表所需格式
  categories = productionVO.value.map(item => item.date); // 获取日期作为 x 轴
  totalAreaOutOne = productionVO.value.map(item => item.totalAreaOutOne);
  countIn = productionVO.value.map(item => item.countIn);
  totalAreaOutTwo = productionVO.value.map(item => item.totalAreaOutTwo);
  totalAreaOut = productionVO.value.map(item => item.totalAreaOut);
  countOut = productionVO.value.map(item => item.countOut);
  hollowTotalAreaOutTwo = productionVO.value.map(item => item.hollowTotalAreaOutTwo);
  hollowCountOutOne = productionVO.value.map(item => item.hollowCountOutOne);
  countOutTwo = productionVO.value.map(item => item.countOutTwo);
  hollowCountOutTwo = productionVO.value.map(item => item.hollowCountOutTwo);
  hollowTotalAreaOutOne = productionVO.value.map(item => item.hollowTotalAreaOutOne);
  totalAreaIn = productionVO.value.map(item => item.totalAreaIn);
  countOutOne = productionVO.value.map(item => item.countOutOne);
  //图表
  nextTick() // 确保 DOM 加载完成
  const chartDom = chartRef.value;
  if (!chartDom) {
    console.error('图表容器未找到');
    return;
  }
  const myChart = echarts.init(chartDom);
  const option = {
    title: { text: '' },
    tooltip: { trigger: 'axis' },
    legend: {
      data: [
        t('large.countOutOne'),
        t('large.totalAreaOutOne'),
        t('large.countOutTwo'),
        t('large.totalAreaOutTwo'),
        t('large.countIn'),
        t('large.totalAreaIn')
      ]
    },
    grid: { left: '3%', right: '4%', bottom: '3%', containLabel: true },
    toolbox: { feature: { saveAsImage: {} } },
    xAxis: {
      type: 'category',
      boundaryGap: false,
      data: categories // 这是日期数据
    },
    yAxis: { type: 'value' },
    series: [
      { name: t('large.countOutOne'), type: 'bar', data: countOutOne },
      { name: t('large.totalAreaOutOne'), type: 'bar', data: totalAreaOutOne },
      { name: t('large.countOutTwo'), type: 'bar', data: countOutTwo },
      { name: t('large.totalAreaOutTwo'), type: 'bar', data: totalAreaOutTwo },
      { name: t('large.countIn'), type: 'bar', data: countIn },
      { name: t('large.totalAreaIn'), type: 'bar', data: totalAreaIn }
    ]
  };
  myChart.setOption(option);
  const chartDom2 = chartRef2.value;
  if (!chartDom2) {
    console.error('图表容器未找到');
    return;
  }
  const myChart2 = echarts.init(chartDom2);
  const option2 = {
    title: { text: '' },
    tooltip: { trigger: 'axis' },
    legend: {
      data: [
        t('large.totalAreaOut'),
        t('large.countOut'),
        t('large.hollowTotalAreaOutOne'),
        t('large.hollowCountOutOne'),
        t('large.hollowCountOutTwo'),
        t('large.hollowTotalAreaOutTwo')
      ]
    },
    grid: { left: '3%', right: '4%', bottom: '3%', containLabel: true },
    toolbox: { feature: { saveAsImage: {} } },
    xAxis: {
      type: 'category',
      boundaryGap: false,
      data: categories // 这是日期数据
    },
    yAxis: { type: 'value' },
    series: [
      { name: t('large.totalAreaOut'), type: 'bar', data: totalAreaOut },
      { name: t('large.countOut'), type: 'bar', data: countOut },
      { name: t('large.hollowTotalAreaOutOne'), type: 'bar', data: hollowTotalAreaOutOne },
      { name: t('large.hollowCountOutOne'), type: 'bar', data: hollowCountOutOne },
      { name: t('large.hollowCountOutTwo'), type: 'bar', data: hollowCountOutTwo },
      { name: t('large.hollowTotalAreaOutTwo'), type: 'bar', data: hollowTotalAreaOutTwo }
    ]
  };
  myChart2.setOption(option2);
};
// 将原始数据转换为 ECharts 图表所需格式
let categories = ref([]); // 获取日期作为 x 轴
let totalAreaOutOne = ref([]);
let countIn = ref([]);
let totalAreaOutTwo = ref([]);
let totalAreaOut = ref([]);
let countOut = ref([]);
let hollowTotalAreaOutTwo = ref([]);
let hollowCountOutOne = ref([]);
let countOutTwo = ref([]);
let hollowCountOutTwo = ref([]);
let hollowTotalAreaOutOne = ref([]);
let totalAreaIn = ref([]);
let countOutOne = ref([]);
const tableDatad = ref([]);
const patternUsage = async () => {
@@ -148,8 +577,17 @@
  blindb.value = true;
  patternUsage()
};
const chartRef = ref(null)
const chartRef2 = ref(null)
const chartOne = ref(null)
const chartTwo = ref(null)
const chartThree = ref(null)
const chartFour = ref(null)
// 在组件挂载时设置默认时间范围
onMounted(() => {
onMounted(async () => {
  boxStart();
  boxStart2();
  boxStart3();
@@ -165,6 +603,7 @@
  const startTime = endTime.subtract(1, 'day').startOf('minute'); // 当前时间的前一天,精确到分钟
  // 设置时间范围为 [开始时间, 结束时间]
  // timeRange.value = [startTime.format('YYYY-MM-DD HH:mm:ss'), endTime.format('YYYY-MM-DD HH:mm:ss')];
});
// onMounted(() => {
//   socket = initializeWebSocket(socketUrl, handleMessage);
@@ -187,13 +626,13 @@
const numBoxes3 = ref(5);
const numBoxes4 = ref(1);
const speed = 0.1;
const maxX = 250; // 终点X坐标
const maxY = -90; // 终点Y坐标
const maxX = 200; // 终点X坐标
const maxY = -75; // 终点Y坐标
const maxX2 = 313; // 终点X坐标
const maxY2 = -204; // 终点Y坐标
const maxX3 = 125; // 终点X坐标
const maxY3 = -105; // 终点Y坐标
const maxX4 = 80; // 终点X坐标
const maxY2 = -165; // 终点Y坐标
const maxX3 = 95; // 终点X坐标
const maxY3 = -85; // 终点Y坐标
const maxX4 = 60; // 终点X坐标
const maxY4 = 0; // 终点Y坐标
const delayFrames = 600; // 每个 div 的延迟帧数
const boxes = ref([]);
@@ -455,179 +894,224 @@
  hollowTotalAreaOutTwo: t('large.hollowTotalAreaOutTwo'),
};
</script>
<template>
  <div style="height: 500px;">
    <el-dialog v-model="iframe1" top="5vh" width="95%" @close="iframeUrl1=''">
    <el-dialog v-model="iframe1" top="5vh" width="95%" @close="iframeUrl1 = ''">
      <iframe :src="iframeUrl1" marginwidth="2000px" marginheight="2000px" width="100%" height="700px"
        frameborder="0"></iframe>
    </el-dialog>
    <el-dialog v-model="iframe2" top="5vh" width="95%" @close="iframeUrl2=''">
    <el-dialog v-model="iframe2" top="5vh" width="95%" @close="iframeUrl2 = ''">
      <iframe :src="iframeUrl2" marginwidth="2000px" marginheight="2000px" width="100%" height="700px"
        frameborder="0"></iframe>
    </el-dialog>
    <el-dialog v-model="iframe3" top="5vh" width="95%" @close="iframeUrl3=''">
    <el-dialog v-model="iframe3" top="5vh" width="95%" @close="iframeUrl3 = ''">
      <iframe :src="iframeUrl3" marginwidth="2000px" marginheight="2000px" width="100%" height="700"
        frameborder="0"></iframe>
    </el-dialog>
    <el-dialog v-model="iframe4" top="5vh" width="95%" @close="iframeUrl4=''">
    <el-dialog v-model="iframe4" top="5vh" width="95%" @close="iframeUrl4 = ''">
      <iframe :src="iframeUrl4" marginwidth="2000px" marginheight="2000px" width="100%" height="750px"
        frameborder="0"></iframe>
    </el-dialog>
    <el-dialog v-model="iframe5" top="5vh" width="95%" @close="iframeUrl5=''">
    <el-dialog v-model="iframe5" top="5vh" width="95%" @close="iframeUrl5 = ''">
      <iframe :src="iframeUrl5" marginwidth="2000px" marginheight="2000px" width="100%" height="750px"
        frameborder="0"></iframe>
    </el-dialog>
    <el-dialog v-model="iframe6" top="5vh" width="95%" @close="iframeUrl6=''">
    <el-dialog v-model="iframe6" top="5vh" width="95%" @close="iframeUrl6 = ''">
      <iframe :src="iframeUrl6" marginwidth="2000px" marginheight="2000px" width="100%" height="750px"
        frameborder="0"></iframe>
    </el-dialog>
    <el-dialog v-model="iframe7" top="5vh" width="95%" @close="iframeUrl7=''">
    <el-dialog v-model="iframe7" top="5vh" width="95%" @close="iframeUrl7 = ''">
      <iframe :src="iframeUrl7" marginwidth="2000px" marginheight="2000px" width="100%" height="750px"
        frameborder="0"></iframe>
    </el-dialog>
    <el-dialog v-model="iframe8" top="5vh" width="95%" @close="iframeUrl8=''">
    <el-dialog v-model="iframe8" top="5vh" width="95%" @close="iframeUrl8 = ''">
      <iframe :src="iframeUrl8" marginwidth="2000px" marginheight="2000px" width="100%" height="750px"
        frameborder="0"></iframe>
    </el-dialog>
    <el-dialog v-model="iframe9" top="5vh" width="95%" @close="iframeUrl9=''">
    <el-dialog v-model="iframe9" top="5vh" width="95%" @close="iframeUrl9 = ''">
      <iframe :src="iframeUrl9" marginwidth="2000px" marginheight="2000px" width="100%" height="750px"
        frameborder="0"></iframe>
    </el-dialog>
    <el-dialog v-model="iframe10" top="5vh" width="95%" @close="iframeUrl10=''">
    <el-dialog v-model="iframe10" top="5vh" width="95%" @close="iframeUrl10 = ''">
      <iframe :src="iframeUrl10" marginwidth="2000px" marginheight="2000px" width="100%" height="750px"
        frameborder="0"></iframe>
    </el-dialog>
    <div class="awatch" style="display: flex;">
      <!-- 生产统计 -->
      <div style="height: 100px;width: 15%;float: right;">
        <el-table height="540" ref="table" :data="transposedData" @click="handlehistorical10"
          :header-cell-style="{ background: '#F2F3F5', color: '#1D2129' }">
          <el-table-column prop="name" align="center" min-width="100" />
          <el-table-column v-for="(item, index) in productionVO" :key="index" :prop="'value' + index" align="center"
            min-width="80" />
        </el-table>
        <div>
          <el-button style="margin-top: 5px;margin-left: 5px;" id="searchButton" type="primary"
            @click="handlehistorical1">{{
              $t('large.historicaltasks1') }}</el-button>
          <el-button style="margin-top: 5px;margin-left: 5px;" id="searchButton" type="primary"
            @click="blindc=true">{{
              $t('large.order') }}</el-button>
          <el-button style="margin-top: 5px;margin-left: 5px;" id="searchButton" type="primary"
            @click="handlehistorical2">{{
              $t('large.historicaltasks2') }}</el-button>
          <el-button style="margin-top: 5px;margin-left: 5px;" id="searchButton" type="primary"
            @click="handlehistorical3">{{
              $t('large.historicaltasks3') }}</el-button>
          <el-button style="margin-top: 5px;margin-left: 5px;" id="searchButton" type="primary"
            @click="handlehistorical4">{{
              $t('large.historicaltasks4') }}</el-button>
          <el-button style="margin-top: 5px;margin-left: 5px;" id="searchButton" type="primary"
            @click="handlehistorical5">{{
              $t('large.historicaltasks5') }}</el-button>
          <el-button style="margin-top: 5px;margin-left: 5px;" id="searchButton" type="primary"
            @click="handlehistorical7">{{
              $t('large.historicaltasks7') }}</el-button>
          <el-button style="margin-top: 5px;margin-left: 5px;" id="searchButton" type="primary"
            @click="handlehistorical8">{{
              $t('large.historicaltasks8') }}</el-button>
          <el-button style="margin-top: 5px;margin-left: 5px;" id="searchButton" type="primary"
            @click="handlehistorical6">{{
              $t('large.historicaltasks6') }}</el-button>
          <el-button style="margin-top: 5px;margin-left: 5px;" id="searchButton" type="primary"
            @click="handlehistorical9">{{
              $t('large.historicaltasks9') }}</el-button>
      <div style="height: 100px;width: 25%;float: right;">
        <div id="ss" style="width: 100%; display: flex; justify-content: center;">
          <div ref="chartRef" style="width: 600px; height: 400px;"></div>
        </div>
        <div style="width: 100%;height: 245px;display: flex;">
          <div ref="chartOne" style="width: 100%;"></div>
        </div>
        <div style="width: 100%;height: 245px;display: flex;">
          <div ref="chartTwo" style="width: 100%;"></div>
        </div>
      </div>
      <div class="img-screen" alt="Screen">
        <!-- 钢化色块 -->
        <div v-if="temperingGlassInfoInList > 0" class="tempering"
          style="width: 55px;height: 25px;top: 359px;left: 162px;position: absolute;background-color: #911005;"></div>
        <div v-if="temperingGlassInfoList > 0" class="tempering"
          style="width: 66px;height: 28px;top: 355px;left: 284px;position: absolute;background-color: #911005;"></div>
        <div v-if="temperingGlassInfoList > 1" class="tempering"
          style="width: 66px;height: 28px;top: 355px;left: 358px;position: absolute;background-color: #911005;"></div>
        <!-- 切割台色块 -->
        <div v-if="engineeringOne.length > 1" class="slicing"
          style="width: 59px;height: 29px;top: 629px;left: 562px;position: absolute;background-color: #911005;"></div>
        <div v-if="engineeringTwo.length > 1" class="slicing"
          style="width: 59px;height: 29px;top: 692px;left: 562px;position: absolute;background-color: #911005;"></div>
        <!-- 原片仓储色块 -->
        <div class="raw" style="width: 35px;height: 40px;top: 624px;left: 372px;position: absolute;">
          <div v-for="(item, index) in rawGlassStorageDetailList.slice(0, 7)" :key="index"
            :style='"width: " + (item.remainQuantity / 5) + "px;height: 5.6px;background-color: #911005;"'></div>
      <div style="width: 50%;">
        <div class="img-screen" alt="Screen">
          <!-- 钢化半透明色块 -->
          <div style="width: 80px;height: 40px;top: 130px;left: 130px;position: absolute;background-color: rgba(0, 0, 0, 0.5);color: white;font-size: 12px;z-index: 999;">
            <div>{{ $t('large.quantity') }}:{{ productionVO.length > 0 ? productionVO[6].countOut : 0 }}片</div>
            <div>{{ $t('large.are') }}:{{ productionVO.length > 0 ? productionVO[6].totalAreaOut : 0 }}m²</div>
          </div>
          <!-- 中空一线半透明色块 -->
          <div style="width: 80px;height: 40px;top: 315px;left: 450px;position: absolute;background-color: rgba(0, 0, 0, 0.5);color: white;font-size: 12px;z-index: 999;">
            <div>{{ $t('large.quantity') }}:{{ productionVO.length > 0 ? productionVO[6].hollowCountOutOne : 0 }}片</div>
            <div>{{ $t('large.are') }}:{{ productionVO.length > 0 ? productionVO[6].hollowTotalAreaOutOne : 0 }}m²</div>
          </div>
          <!-- 中空二线半透明色块 -->
          <div style="width: 80px;height: 40px;top: 230px;left: 450px;position: absolute;background-color: rgba(0, 0, 0, 0.5);color: white;font-size: 12px;z-index: 999;">
            <div>{{ $t('large.quantity') }}:{{ productionVO.length > 0 ? productionVO[6].hollowCountOutTwo : 0 }}片</div>
            <div>{{ $t('large.are') }}:{{ productionVO.length > 0 ? productionVO[6].hollowTotalAreaOutTwo : 0 }}m²</div>
          </div>
          <!-- 切割二线半透明色块 -->
          <div style="width: 80px;height: 40px;top: 542px;left: 410px;position: absolute;background-color: rgba(0, 0, 0, 0.5);color: white;font-size: 12px;z-index: 999;">
            <div>{{ $t('large.quantity') }}:{{ productionVO.length > 0 ? productionVO[6].countOutOne : 0 }}片</div>
            <div>{{ $t('large.are') }}:{{ productionVO.length > 0 ? productionVO[6].totalAreaOutOne : 0 }}m²</div>
          </div>
          <!-- 切割一线半透明色块 -->
          <div style="width: 80px;height: 40px;top: 490px;left: 410px;position: absolute;background-color: rgba(0, 0, 0, 0.5);color: white;font-size: 12px;z-index: 999;">
            <div>{{ $t('large.quantity') }}:{{ productionVO.length > 0 ? productionVO[6].countOutTwo : 0 }}片</div>
            <div>{{ $t('large.are') }}:{{ productionVO.length > 0 ? productionVO[6].totalAreaOutTwo : 0 }}m²</div>
          </div>
          <!-- 磨边一线半透明色块 -->
          <div style="width: 80px;height: 40px;top: 410px;left: 450px;position: absolute;background-color: rgba(0, 0, 0, 0.5);color: white;font-size: 12px;z-index: 999;">
            <div>{{ $t('large.quantity') }}:{{ productionVO.length > 0 ? productionVO[6].countOutOne : 0 }}片</div>
            <div>{{ $t('large.are') }}:{{ productionVO.length > 0 ? productionVO[6].totalAreaOutOne : 0 }}m²</div>
          </div>
          <!-- 磨边二线半透明色块 -->
          <div style="width: 80px;height: 40px;top: 369px;left: 450px;position: absolute;background-color: rgba(0, 0, 0, 0.5);color: white;font-size: 12px;z-index: 999;">
            <div>{{ $t('large.quantity') }}:{{ productionVO.length > 0 ? productionVO[6].countOutTwo : 0 }}片</div>
            <div>{{ $t('large.are') }}:{{ productionVO.length > 0 ? productionVO[6].totalAreaOutTwo : 0 }}m²</div>
          </div>
          <!-- 钢化前大理片半透明色块 -->
          <div style="width: 80px;height: 40px;top: 380px;left: 290px;position: absolute;background-color: rgba(0, 0, 0, 0.5);color: white;font-size: 12px;z-index: 999;">
            <div>{{ $t('large.quantity') }}:{{ productionVO.length > 0 ? productionVO[6].countIn : 0 }}片</div>
            <div>{{ $t('large.are') }}:{{ productionVO.length > 0 ? productionVO[6].totalAreaIn : 0 }}m²</div>
          </div>
          <!-- 钢化色块 -->
          <div v-if="temperingGlassInfoInList > 0" class="tempering"
            style="width: 44px;height: 19px;top: 284px;left: 178px;position: absolute;background-color: #911005;"></div>
          <div v-if="temperingGlassInfoList > 0" class="tempering"
            style="width: 53px;height: 22px;top: 282px;left: 226px;position: absolute;background-color: #911005;"></div>
          <div v-if="temperingGlassInfoList > 1" class="tempering"
            style="width: 53px;height: 22px;top: 282px;left: 282px;position: absolute;background-color: #911005;"></div>
          <!-- 切割台色块 -->
          <div v-if="engineeringOne.length > 1" class="slicing"
            style="width: 45px;height: 20px;top: 500px;left: 496px;position: absolute;background-color: #911005;"></div>
          <div v-if="engineeringTwo.length > 1" class="slicing"
            style="width: 45px;height: 20px;top: 550px;left: 496px;position: absolute;background-color: #911005;"></div>
          <!-- 原片仓储色块 -->
          <div class="raw" style="width: 27px;height: 30px;top: 497px;left: 296px;position: absolute;">
            <div v-for="(item, index) in rawGlassStorageDetailList.slice(0, 7)" :key="index"
              :style='"width: " + (item.remainQuantity / 1.8) + "px;height: 5.6px;background-color: #911005;"'></div>
          </div>
          <div class="raw" style="width: 27px;height: 45px;top: 535px;left: 296px;position: absolute;">
            <div v-for="(item, index) in rawGlassStorageDetailList.slice(8, 17)" :key="index"
              :style='"width: " + (item.remainQuantity / 1.8) + "px;height: 5.6px;background-color: #911005;"'></div>
          </div>
          <div class="raw" style="width: 27px;height: 13px;top: 598px;left: 296px;position: absolute;">
            <div v-for="(item, index) in rawGlassStorageDetailList.slice(18, 20)" :key="index"
              :style='"width: " + (item.remainQuantity / 1.8) + "px;height: 5.6px;background-color: #911005;"'></div>
          </div>
          <div class="raw" style="width: 27px;height: 23px;top: 580px;left: 365px;position: absolute;">
            <div v-for="(item, index) in rawGlassStorageDetailList.slice(21, 25)" :key="index"
              :style='"width: " + (item.remainQuantity / 1.8) + "px;height: 5.6px;background-color: #911005;"'></div>
          </div>
          <!-- <div class="raw" style="width: 27px;height: 12px;top: 611px;left: 459px;position: absolute;">
            <div v-for="(item, index) in rawGlassStorageDetailList.slice(26, 27)" :key="index"
              :style='"width: " + (item.remainQuantity / 1.8) + "px;height: 5.6px;background-color: #911005;"'></div>
          </div>
          <div class="raw" style="width: 27px;height: 12px;top: 6676px;left: 459px;position: absolute;">
            <div v-for="(item, index) in rawGlassStorageDetailList.slice(28, 29)" :key="index"
              :style='"width: " + (item.remainQuantity / 1.8) + "px;height: 5.6px;background-color: #911005;"'></div>
          </div> -->
          <!-- 磨边色块 -->
          <div class="container"
            style="position: relative;width: 15px;height: 15px;top: 500px;left: 638px;position: absolute;">
            <div v-for="(box, index) in boxes" :key="index" class="box" :style="box.style"></div>
          </div>
          <div class="container"
            style="position: relative;width: 15px;height: 15px;top: 548px;left: 690px;position: absolute;">
            <div v-for="(box, index) in boxes2" :key="index" class="box" :style="box.style"></div>
          </div>
          <!-- 钢化运动色块 -->
          <div class="container"
            style="position: relative;width: 15px;height: 15px;top: 370px;left: 195px;position: absolute;background-color: red;">
            <div v-for="(box, index) in boxes3" :key="index" class="box" :style="box.style"></div>
          </div>
          <div class="container"
            style="position: relative;width: 15px;height: 15px;top: 284px;left: 489px;position: absolute;">
            <div v-for="(box, index) in boxes4" :key="index" class="box" :style="box.style"></div>
          </div>
          <!-- 钢化前大理片色块 -->
          <div class="container" v-for="(item, index) in bigStorageCageUsage.slice(0, 1)" :key="index"
            :style='"position: relative;width: " + (37 * item.percentage / 100) + "px;height: 13px;top: 374px;left: 309px;position: absolute;background-color: #911005;"'>
          </div>
          <div class="container" v-for="(item, index) in bigStorageCageUsage.slice(1, 2)" :key="index"
            :style='"position: relative;width: " + (37 * item.percentage / 100) + "px;height: 13px;top: 390px;left: 309px;position: absolute;background-color: #911005;"'>
          </div>
          <div class="container" v-for="(item, index) in bigStorageCageUsage.slice(2, 3)" :key="index"
            :style='"position: relative;width: " + (37 * item.percentage / 100) + "px;height: 13px;top: 406px;left: 309px;position: absolute;background-color: #911005;"'>
          </div>
          <div class="container" v-for="(item, index) in bigStorageCageUsage.slice(3, 4)" :key="index"
            :style='"position: relative;width: " + (37 * item.percentage / 100) + "px;height: 13px;top: 422px;left: 309px;position: absolute;background-color: #911005;"'>
          </div>
          <!-- 中空前大理片色块 -->
          <div class="container" v-for="(item, index) in hollowBigStorageCageUsage.slice(0, 1)" :key="index"
            :style='"position: relative;width: " + (37 * item.percentage / 100) + "px;height: 13px;top: 265px;left: 662px;position: absolute;background-color: #911005;"'>
          </div>
          <div class="container" v-for="(item, index) in hollowBigStorageCageUsage.slice(1, 2)" :key="index"
            :style='"position: relative;width: " + (37 * item.percentage / 100) + "px;height: 13px;top: 281px;left: 662px;position: absolute;background-color: #911005;"'>
          </div>
          <div class="container" v-for="(item, index) in hollowBigStorageCageUsage.slice(2, 3)" :key="index"
            :style='"position: relative;width: " + (37 * item.percentage / 100) + "px;height: 13px;top: 297px;left: 662px;position: absolute;background-color: #911005;"'>
          </div>
          <div class="container" v-for="(item, index) in hollowBigStorageCageUsage.slice(3, 4)" :key="index"
            :style='"position: relative;width: " + (37 * item.percentage / 100) + "px;height: 13px;top: 313px;left: 662px;position: absolute;background-color: #911005;"'>
          </div>
          <div class="container" v-for="(item, index) in hollowBigStorageCageUsage.slice(4, 5)" :key="index"
            :style='"position: relative;width: " + (37 * item.percentage / 100) + "px;height: 13px;top: 329px;left: 662px;position: absolute;background-color: #911005;"'>
          </div>
          <div class="clickable-area" @click="handlehistorical"
            style="position: relative;width: 108px;height: 134px;top: 478px;left: 290px;"></div>
        </div>
        <div class="raw" style="width: 35px;height: 58px;top: 673px;left: 372px;position: absolute;">
          <div v-for="(item, index) in rawGlassStorageDetailList.slice(8, 17)" :key="index"
            :style='"width: " + (item.remainQuantity / 5) + "px;height: 5.6px;background-color: #911005;"'></div>
        <div style="height: 190px;width: 100%;float: right;">
          <el-table height="190" ref="table" :data="orderDTOS"
            :header-cell-style="{ background: '#F2F3F5 ', color: '#1D2129' }">
            <el-table-column prop="orderId" align="center" :label="$t('large.orderId')" min-width="50" />
            <el-table-column prop="customerName" align="center" :show-overflow-tooltip="true"
              :label="$t('large.customerName')" min-width="90" />
            <el-table-column prop="project" align="center" :label="$t('large.project')" min-width="50" />
            <el-table-column prop="area" align="center" :label="$t('large.are')" min-width="50" />
            <el-table-column prop="quantity" align="center" :label="$t('large.quantity')" min-width="50" />
            <el-table-column prop="percent" align="center" :label="$t('large.percent')" min-width="50" />
            <el-table-column align="center" :label="$t('large.operate')" min-width="50">
              <template #default="scope">
                <el-button type="text" style="margin-left: 10px;margin-bottom: 10px;"
                  @click="flowCardDetail(scope.row.orderId)">{{ $t('large.mes') }}</el-button>
              </template>
            </el-table-column>
          </el-table>
        </div>
        <div class="raw" style="width: 35px;height: 20px;top: 751px;left: 372px;position: absolute;">
          <div v-for="(item, index) in rawGlassStorageDetailList.slice(18, 20)" :key="index"
            :style='"width: " + (item.remainQuantity / 5) + "px;height: 5.6px;background-color: #911005;"'></div>
      </div>
      <div style="height: 100px;width: 25%;float: right;">
        <div id="ss" style="width: 100%; display: flex; justify-content: center;">
          <div ref="chartRef2" style="width: 600px; height: 400px;"></div>
        </div>
        <div class="raw" style="width: 35px;height: 27px;top: 732px;left: 459px;position: absolute;">
          <div v-for="(item, index) in rawGlassStorageDetailList.slice(21, 25)" :key="index"
            :style='"width: " + (item.remainQuantity / 5) + "px;height: 5.6px;background-color: #911005;"'></div>
        <div style="width: 100%;height: 245px;display: flex;">
          <div ref="chartThree" style="width: 100%;"></div>
        </div>
        <div class="raw" style="width: 35px;height: 12px;top: 611px;left: 459px;position: absolute;">
          <div v-for="(item, index) in rawGlassStorageDetailList.slice(26, 27)" :key="index"
            :style='"width: " + (item.remainQuantity / 5) + "px;height: 5.6px;background-color: #911005;"'></div>
        <div style="width: 100%;height: 245px;display: flex;">
          <div ref="chartFour" style="width: 100%;"></div>
        </div>
        <div class="raw" style="width: 35px;height: 12px;top: 6676px;left: 459px;position: absolute;">
          <div v-for="(item, index) in rawGlassStorageDetailList.slice(28, 29)" :key="index"
            :style='"width: " + (item.remainQuantity / 5) + "px;height: 5.6px;background-color: #911005;"'></div>
        </div>
        <!-- 磨边色块 -->
        <div class="container"
          style="position: relative;width: 20px;height: 20px;top: 628px;left: 804px;position: absolute;">
          <div v-for="(box, index) in boxes" :key="index" class="box" :style="box.style"></div>
        </div>
        <div class="container"
          style="position: relative;width: 20px;height: 20px;top: 690px;left: 867px;position: absolute;">
          <div v-for="(box, index) in boxes2" :key="index" class="box" :style="box.style"></div>
        </div>
        <!-- 钢化运动色块 -->
        <div class="container"
          style="position: relative;width: 20px;height: 20px;top: 468px;left: 250px;position: absolute;">
          <div v-for="(box, index) in boxes3" :key="index" class="box" :style="box.style"></div>
        </div>
        <div class="container"
          style="position: relative;width: 20px;height: 20px;top: 357px;left: 618px;position: absolute;">
          <div v-for="(box, index) in boxes4" :key="index" class="box" :style="box.style"></div>
        </div>
        <!-- 钢化前大理片色块 -->
        <div class="container" v-for="(item, index) in bigStorageCageUsage.slice(0, 1)" :key="index"
          :style='"position: relative;width: " + (46 * item.percentage / 100) + "px;height: 17px;top: 471px;left: 389px;position: absolute;background-color: #911005;"'>
        </div>
        <div class="container" v-for="(item, index) in bigStorageCageUsage.slice(1, 2)" :key="index"
          :style='"position: relative;width: " + (46 * item.percentage / 100) + "px;height: 17px;top: 491px;left: 389px;position: absolute;background-color: #911005;"'>
        </div>
        <div class="container" v-for="(item, index) in bigStorageCageUsage.slice(2, 3)" :key="index"
          :style='"position: relative;width: " + (46 * item.percentage / 100) + "px;height: 17px;top: 510px;left: 389px;position: absolute;background-color: #911005;"'>
        </div>
        <div class="container" v-for="(item, index) in bigStorageCageUsage.slice(3, 4)" :key="index"
          :style='"position: relative;width: " + (46 * item.percentage / 100) + "px;height: 17px;top: 530px;left: 389px;position: absolute;background-color: #911005;"'>
        </div>
        <!-- 中空前大理片色块 -->
        <div class="container" v-for="(item, index) in hollowBigStorageCageUsage.slice(0, 1)" :key="index"
          :style='"position: relative;width: " + (46 * item.percentage / 100) + "px;height: 17px;top: 334px;left: 832px;position: absolute;background-color: #911005;"'>
        </div>
        <div class="container" v-for="(item, index) in hollowBigStorageCageUsage.slice(1, 2)" :key="index"
          :style='"position: relative;width: " + (46 * item.percentage / 100) + "px;height: 17px;top: 354px;left: 832px;position: absolute;background-color: #911005;"'>
        </div>
        <div class="container" v-for="(item, index) in hollowBigStorageCageUsage.slice(2, 3)" :key="index"
          :style='"position: relative;width: " + (46 * item.percentage / 100) + "px;height: 17px;top: 374px;left: 832px;position: absolute;background-color: #911005;"'>
        </div>
        <div class="container" v-for="(item, index) in hollowBigStorageCageUsage.slice(3, 4)" :key="index"
          :style='"position: relative;width: " + (46 * item.percentage / 100) + "px;height: 17px;top: 394px;left: 832px;position: absolute;background-color: #911005;"'>
        </div>
        <div class="container" v-for="(item, index) in hollowBigStorageCageUsage.slice(4, 5)" :key="index"
          :style='"position: relative;width: " + (46 * item.percentage / 100) + "px;height: 17px;top: 414px;left: 832px;position: absolute;background-color: #911005;"'>
        </div>
        <div class="clickable-area" @click="handlehistorical"
          style="position: relative;width: 140px;height: 170px;top: 603px;left: 364px;"></div>
      </div>
    </div>
  </div>
@@ -740,8 +1224,8 @@
  /* float: left; */
  position: relative;
  background-image: url('../../assets/screen.png');
  width: 1002px;
  height: 878px;
  width: 795px;
  height: 700px;
  background-size: contain;
  background-repeat: no-repeat;
  /* background-position: center; */
hangzhoumesParent/common/servicebase/src/main/java/com/mes/largenscreen/entity/PieChartVO.java
New file
@@ -0,0 +1,50 @@
package com.mes.largenscreen.entity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * @Author : zhoush
 * @Date: 2025/3/12 14:30
 * @Description:
 */
@Data
public class PieChartVO {
    @ApiModelProperty(value = "一线已完成玻璃数量")
    private Integer oneCompletedQuantity;
    @ApiModelProperty(value = "一线已完成玻璃面积")
    private Double oneCompletedArea;
    @ApiModelProperty(value = "一线次破玻璃数量")
    private Integer oneDamageQuantity;
    @ApiModelProperty(value = "一线次破玻璃面积")
    private Double oneDamageArea;
    @ApiModelProperty(value = "二线已完成玻璃数量")
    private Integer twoCompletedQuantity;
    @ApiModelProperty(value = "二线已完成玻璃面积")
    private Double twoCompletedArea;
    @ApiModelProperty(value = "二线次破玻璃数量")
    private Integer twoDamageQuantity;
    @ApiModelProperty(value = "二线次破玻璃面积")
    private Double twoDamageArea;
    @ApiModelProperty(value = "一线未完成玻璃数量")
    private Integer oneUncompletedQuantity;
    @ApiModelProperty(value = "一线未完成玻璃面积")
    private Double oneUncompletedArea;
    @ApiModelProperty(value = "二线未完成玻璃数量")
    private Integer twoUncompletedQuantity;
    @ApiModelProperty(value = "二线未完成玻璃面积")
    private Double twoUncompletedArea;
}
hangzhoumesParent/common/servicebase/src/main/java/com/mes/largenscreen/service/LargenScreenService.java
@@ -3,6 +3,9 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.mes.largenscreen.entity.DailyProductionVO;
import com.mes.largenscreen.entity.DateRequest;
import com.mes.largenscreen.entity.PieChartVO;
import java.util.List;
/**
 * @Author : zhoush
@@ -13,5 +16,6 @@
    Page<DailyProductionVO> queryDailyProduction(DateRequest query);
    DailyProductionVO querySameDayProduction(DateRequest query);
    List<DailyProductionVO> querySameDayProduction(DateRequest query);
}
hangzhoumesParent/common/servicebase/src/main/java/com/mes/largenscreen/service/impl/LargenScreenServiceImpl.java
@@ -11,6 +11,7 @@
import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
@@ -37,14 +38,16 @@
    }
    @Override
    public DailyProductionVO querySameDayProduction(DateRequest query) {
    public List<DailyProductionVO> querySameDayProduction(DateRequest query) {
        if (StringUtils.isEmpty(query.getBeginDate())) {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            query.setBeginDate(sdf.format(new Date()));
            Calendar calendar = Calendar.getInstance();
            calendar.add(Calendar.DAY_OF_MONTH, -6);
            query.setBeginDate(sdf.format(calendar.getTime()));
            query.setEndDate(sdf.format(new Date()));
        }
        List<DailyProductionVO> list = largenScreenMapper.queryDailyProduction(query.getBeginDate(), query.getEndDate());
        return list.get(0);
        return list;
    }
hangzhoumesParent/common/servicebase/src/main/java/com/mes/order/controller/OrderController.java
@@ -1,6 +1,9 @@
package com.mes.order.controller;
import com.mes.order.entity.Orderdetail;
import com.mes.order.entity.Orders;
import com.mes.order.entity.dto.OrderDTO;
import com.mes.order.entity.request.OrderRequest;
import com.mes.order.service.OrdersService;
import com.mes.utils.Result;
import io.swagger.annotations.Api;
@@ -13,7 +16,7 @@
/**
 * <p>
 *  前端控制器
 * 前端控制器
 * </p>
 *
 * @author wu
@@ -37,5 +40,13 @@
        log.info("显示订单详情信息:{}", glass);
        return Result.build(200, "", glass);
    }
    @ApiOperation("订单接口查询")
    @PostMapping("/selectOrder") //显示工程选择信息
    @ResponseBody
    public Result<List<OrderDTO>> selectOrder(@RequestBody OrderRequest orderRequest) {
//        OrderDTO orderDTO = new OrderDTO();
        return Result.build(200, "", null);
    }
}
hangzhoumesParent/common/servicebase/src/main/java/com/mes/order/entity/dto/OrderDTO.java
@@ -2,6 +2,7 @@
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import io.swagger.models.auth.In;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -41,12 +42,12 @@
    /**
     * 订单数量
     */
    private String quantity;
    private Integer quantity;
    /**
     * 订单面积
     */
    private String area;
    private Double area;
    /**
     * 创建时间
@@ -56,7 +57,12 @@
    /**
     * 订单进度百分比
     */
    private String percent;
    private Double percent;
    /**
     * 订单状态
     */
    private Integer orderStatus;
}
hangzhoumesParent/common/servicebase/src/main/java/com/mes/order/entity/request/OrderRequest.java
New file
@@ -0,0 +1,42 @@
package com.mes.order.entity.request;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
import java.util.Date;
/**
 * <p>
 *
 * </p>
 *
 * @author wu
 * @since 2024-06-17
 */
@Data
@EqualsAndHashCode(callSuper = false)
public class OrderRequest implements Serializable {
    @ApiModelProperty(value = "订单Id")
    private String orderId;
    @ApiModelProperty(value = "客户名称")
    private String customerName;
    @ApiModelProperty(value = "项目名称")
    private String project;
    @ApiModelProperty(value = "订单状态")
    private Integer orderStatus;
    @ApiModelProperty(value = "开始时间")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date startTime;
    @ApiModelProperty(value = "结束时间")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date endTime;
}
hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/controller/FlowCardController.java
@@ -2,6 +2,8 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.mes.pp.entity.dto.FlowCardPercentDTO;
import com.mes.pp.entity.request.FlowCardRequest;
import com.mes.pp.service.FlowCardService;
import com.mes.utils.Result;
import io.swagger.annotations.Api;
@@ -14,6 +16,7 @@
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.List;
/**
 * <p>
@@ -37,5 +40,11 @@
        return Result.build(200, "查询成功", flowCardService.flowCardReportForms(orderId));
    }
    @ApiOperation("订单详情进度接口")
    @PostMapping("/flowCardPercent")
    public Result<List<FlowCardPercentDTO>> flowCardPercent(@RequestBody FlowCardRequest flowCardRequest) {
        return Result.build(200, "查询成功", null);
    }
}
hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/controller/ReportingWorkDetailController.java
@@ -1,21 +1,37 @@
package com.mes.pp.controller;
import com.mes.pp.entity.dto.FlowCardPercentDTO;
import com.mes.pp.entity.dto.ReportWorkDTO;
import com.mes.pp.entity.request.FlowCardRequest;
import com.mes.pp.entity.request.ReportWorkRequest;
import com.mes.utils.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
 * <p>
 *  前端控制器
 * 前端控制器
 * </p>
 *
 * @author wu
 * @since 2024-07-25
 */
@Api(tags = "报工")
@RestController
@RequestMapping("/reporting-work-detail")
public class ReportingWorkDetailController {
    @ApiOperation("报工数据查询接口")
    @PostMapping("/reportWorkQuery")
    public Result<List<ReportWorkDTO>> reportWorkQuery(@RequestBody ReportWorkRequest reportWorkRequest) {
        return Result.build(200, "查询成功", null);
    }
}
hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/dto/FlowCardPercentDTO.java
New file
@@ -0,0 +1,102 @@
package com.mes.pp.entity.dto;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
/**
 * <p>
 *
 * </p>
 *
 * @author wu
 * @since 2024-07-25
 */
@Data
@EqualsAndHashCode(callSuper = false)
public class FlowCardPercentDTO implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * 流程卡号
     */
    private String processId;
    /**
     * 层号
     */
    private Integer technologyNumber;
    /**
     * 订单序号
     */
    private Integer orderNumber;
    /**
     * 项目名称
     */
    private String productName;
    /**
     * 玻璃名称
     */
    private String glassChild;
    /**
     * 宽
     */
    private Double width;
    /**
     * 高
     */
    private Double height;
    /**
     * 订单数量
     */
    private Integer quantity;
    /**
     * 订单类型
     */
    private String orderType;
    /**
     * 面积
     */
    private Double area;
    /**
     * 补片数量
     */
    private Integer PatchQuantity;
    /**
     * 报工工序
     */
    private String reportWorkProcess;
    /**
     * 报工数量
     */
    private String reportWorkQuantityCount;
    /**
     * 库存数量
     */
    private Integer inventory;
    /**
     * 生产终止状态
     */
    private String orderNumberStatus;
    /**
     * 生产终止状态
     */
    private String packagingMethod;
}
hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/dto/ReportWorkDTO.java
New file
@@ -0,0 +1,67 @@
package com.mes.pp.entity.dto;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
/**
 * <p>
 *
 * </p>
 *
 * @author wu
 * @since 2024-07-25
 */
@Data
@EqualsAndHashCode(callSuper = false)
public class ReportWorkDTO implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * 流程卡号
     */
    private String processId;
    /**
     * 层号
     */
    private Integer technologyNumber;
    /**
     * 报工工序
     */
    private String reportWorkProcess;
    /**
     * 玻璃名称
     */
    private String glassChild;
    /**
     * 报工数量
     */
    private String reportWorkQuantity;
    /**
     * 报工面积
     */
    private String reportWorkArea;
    /**
     * 次破数量
     */
    private String damageWorkQuantity;
    /**
     * 次破面积
     */
    private String damageWorkArea;
    /**
     * 时间
     */
    private String reportTime;
}
hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/request/FlowCardRequest.java
New file
@@ -0,0 +1,28 @@
package com.mes.pp.entity.request;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
import java.util.Date;
/**
 * <p>
 *
 * </p>
 *
 * @author wu
 * @since 2024-06-17
 */
@Data
@EqualsAndHashCode(callSuper = false)
public class FlowCardRequest implements Serializable {
    @ApiModelProperty(value = "订单Id")
    private String orderId;
}
hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/request/ReportWorkRequest.java
New file
@@ -0,0 +1,38 @@
package com.mes.pp.entity.request;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
import java.util.Date;
/**
 * <p>
 *
 * </p>
 *
 * @author wu
 * @since 2024-06-17
 */
@Data
@EqualsAndHashCode(callSuper = false)
public class ReportWorkRequest implements Serializable {
    @ApiModelProperty(value = "流程卡号")
    private String processId;
    @ApiModelProperty(value = "工序名称")
    private String reportWorkProcess;
    @ApiModelProperty(value = "开始时间")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date startTime;
    @ApiModelProperty(value = "结束时间")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date endTime;
}
hangzhoumesParent/common/servicebase/src/main/java/com/mes/temperingglass/mapper/TemperingGlassInfoMapper.java
@@ -2,6 +2,7 @@
import com.baomidou.dynamic.datasource.annotation.DS;
import com.github.yulichang.base.MPJBaseMapper;
import com.mes.largenscreen.entity.PieChartVO;
import com.mes.temperingglass.entity.TemperingGlassInfo;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
@@ -30,4 +31,17 @@
            "deleted = CASE WHEN #{state} < 8 THEN 0 ELSE deleted END " +
            "WHERE glass_id = #{glassId}")
    Integer updateTemperingGlassInfo(TemperingGlassInfo temperingGlassInfo);
    @Select("SELECT\n" +
            "\tround( SUM ( CASE WHEN state <> - 1 AND state <> 8 THEN 1 ELSE 0 END ), 2 ) AS oneCompletedQuantity,\n" +
            "\tround( SUM ( CASE WHEN state <> - 1 AND state <> 8 THEN CAST ( width AS FLOAT ) * height / 1000000 ELSE 0 END ), 2 ) AS oneCompletedArea,\n" +
            "\tround( SUM ( CASE WHEN state = 8 THEN 1 ELSE 0 END ), 2 ) AS oneDamageQuantity,\n" +
            "\tround( SUM ( CASE WHEN state = 8 THEN CAST ( width AS FLOAT ) * height / 1000000 ELSE 0 END ), 2 ) AS oneDamageArea,\n" +
            "\tround( SUM ( CASE WHEN state = - 1 THEN 1 ELSE 0 END ), 2 ) AS oneUncompletedQuantity,\n" +
            "\tround(SUM ( CASE WHEN state = - 1 THEN CAST ( width AS FLOAT ) * height / 1000000 ELSE 0 END ), 2 ) AS oneUncompletedArea \n" +
            "FROM\n" +
            "\ttempering_glass_info \n" +
            "WHERE\n" +
            "\tCONVERT ( DATE, create_time ) = CONVERT ( DATE, getdate( ) )")
    List<PieChartVO> queryPieChart();
}
hangzhoumesParent/common/servicebase/src/main/java/com/mes/temperingglass/service/TemperingGlassInfoService.java
@@ -3,6 +3,7 @@
import com.github.yulichang.base.MPJBaseService;
import com.mes.glassinfo.entity.GlassInfo;
import com.mes.glassinfo.entity.LoadGlassInfo;
import com.mes.largenscreen.entity.PieChartVO;
import com.mes.temperingglass.entity.TemperingGlassInfo;
import java.util.List;
@@ -60,4 +61,10 @@
    GlassInfo selectTempering(GlassInfo glassInfo);
    List<LoadGlassInfo> selectTemperingGlass(GlassInfo glassInfo);
    /**
     * 获取钢化饼图信息
     * @return
     */
    List<PieChartVO> queryPieChart();
}
hangzhoumesParent/common/servicebase/src/main/java/com/mes/temperingglass/service/impl/TemperingGlassInfoServiceImpl.java
@@ -8,6 +8,7 @@
import com.mes.glassinfo.entity.GlassInfo;
import com.mes.glassinfo.entity.LoadGlassInfo;
import com.mes.glassinfo.mapper.GlassInfoMapper;
import com.mes.largenscreen.entity.PieChartVO;
import com.mes.temperingglass.entity.TemperingGlassInfo;
import com.mes.temperingglass.mapper.TemperingGlassInfoMapper;
import com.mes.temperingglass.service.TemperingGlassInfoService;
@@ -26,7 +27,7 @@
 * @since 2024-04-07
 */
@Service
@DS("salve_northGlassMes")
@DS("north_glass_mes")
public class TemperingGlassInfoServiceImpl extends MPJBaseServiceImpl<TemperingGlassInfoMapper, TemperingGlassInfo> implements TemperingGlassInfoService {
    @Resource
    TemperingGlassInfoMapper temperingMapper;
@@ -167,4 +168,9 @@
//                .select("engineer_id,tempering_layout_id,width,height,tempering_feed_sequence,x_coordinate,y_coordinate,angle,glass_id");
//        return glassInfoMapper.selectList(wrapper);
    }
    @Override
    public List<PieChartVO> queryPieChart() {
        return baseMapper.queryPieChart();
    }
}
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/mapper/EdgStorageCageDetailsMapper.java
@@ -4,6 +4,7 @@
import com.mes.edgstoragecage.entity.EdgStorageCageDetails;
import com.mes.edgstoragecage.entity.vo.CutDrawingVO;
import com.mes.edgstoragecage.entity.vo.EdgSlotRemainVO;
import com.mes.largenscreen.entity.PieChartVO;
import org.apache.ibatis.annotations.Param;
import org.springframework.security.core.parameters.P;
@@ -24,4 +25,6 @@
    List<CutDrawingVO> queryCutDrawingByEngineerId(@Param("engineerId") String engineerId, @Param("patternSequence") int patternSequence, @Param("isAll") int isAll);
    List<EdgSlotRemainVO> querySlotRemainWidth(@Param("cellLength") int cellLength, @Param("glassGap") int glassGap);
    List<PieChartVO> queryPieChart();
}
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/EdgStorageCageDetailsService.java
@@ -6,6 +6,7 @@
import com.mes.edgstoragecage.entity.EdgStorageCageDetails;
import com.mes.edgstoragecage.entity.vo.CutDrawingVO;
import com.mes.edgstoragecage.entity.vo.EdgSlotRemainVO;
import com.mes.largenscreen.entity.PieChartVO;
import java.util.List;
import java.util.Map;
@@ -99,4 +100,6 @@
    String edgDetailsOperate(DamageRequest request);
    List<EdgSlotRemainVO> querySlotRemainWidth(int cellLength, int glassGap);
    List<PieChartVO> queryPieChart();
}
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/impl/EdgStorageCageDetailsServiceImpl.java
@@ -26,6 +26,7 @@
import com.mes.engineering.mapper.EngineeringMapper;
import com.mes.glassinfo.entity.GlassInfo;
import com.mes.glassinfo.service.GlassInfoService;
import com.mes.largenscreen.entity.PieChartVO;
import com.mes.pp.entity.OptimizeHeatDetail;
import com.mes.pp.entity.OptimizeHeatLayout;
import com.mes.pp.entity.OptimizeProject;
@@ -369,4 +370,9 @@
    public List<EdgSlotRemainVO> querySlotRemainWidth(int cellLength, int glassGap) {
        return this.baseMapper.querySlotRemainWidth(cellLength, glassGap);
    }
    @Override
    public List<PieChartVO> queryPieChart(){
        return this.baseMapper.queryPieChart();
    }
}
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/PushMessageToIndex.java
@@ -12,6 +12,7 @@
import com.mes.engineering.service.EngineeringService;
import com.mes.largenscreen.entity.DailyProductionVO;
import com.mes.largenscreen.entity.DateRequest;
import com.mes.largenscreen.entity.PieChartVO;
import com.mes.largenscreen.service.LargenScreenService;
import com.mes.opctask.entity.EdgStorageDeviceTaskHistory;
import com.mes.opctask.service.EdgStorageDeviceTaskHistoryService;
@@ -150,7 +151,7 @@
    @Scheduled(fixedDelay = 1000)
    public void querySameDayProductionTask() {
        JSONObject jsonObject = new JSONObject();
        DailyProductionVO productionVO = largenScreenService.querySameDayProduction(new DateRequest());
        List<DailyProductionVO> productionVO = largenScreenService.querySameDayProduction(new DateRequest());
        jsonObject.append("productionVO", productionVO);
        ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("largenScreenProduction");
@@ -198,6 +199,8 @@
        );
        jsonObject.append("engineeringOne", engineeringOne);
        jsonObject.append("engineeringTwo", engineeringTow);
        List<PieChartVO> pieChartVOS = edgStorageCageDetailsService.queryPieChart();
        jsonObject.append("pieChartVOS", pieChartVOS);
        ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("largenScreen");
        if (sendwServer != null) {
            for (WebSocketServer webserver : sendwServer) {
hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/mapper/EdgStorageCageDetailsMapper.xml
@@ -78,4 +78,21 @@
        sum(GREATEST(width,height)+#{glassGap}) )as
        remain_width from edg_storage_cage_details where state = 100 group by device_id,slot
    </select>
    <select id="queryPieChart" resultType="com.mes.largenscreen.entity.PieChartVO">
        SELECT
            round(sum( CASE WHEN e.station_cell = 5 THEN 1 ELSE 0 END ),2) as oneCompletedQuantity,
            round(sum( CASE WHEN e.station_cell = 5 THEN escd.width*escd.height/1000000 ELSE 0 END ),2) as oneCompletedArea,
            round(sum( CASE WHEN e.station_cell = 6 THEN 1 ELSE 0 END ),2) as twoCompletedQuantity,
            round(sum( CASE WHEN e.station_cell = 6 THEN escd.width*escd.height/1000000 ELSE 0 END ),2) as twoCompletedArea,
            round(sum( CASE WHEN e.station_cell = 5 and escd.device_id is null THEN 1 ELSE 0 END ),2) as oneUncompletedQuantity,
            round(sum( CASE WHEN e.station_cell = 5 and escd.device_id is null THEN gi.width*gi.height/1000000 ELSE 0 END ),2) as oneUncompletedArea,
            round(sum( CASE WHEN e.station_cell = 6 and escd.device_id is null THEN 1 ELSE 0 END ),2) as twoUncompletedQuantity,
            round(sum( CASE WHEN e.station_cell = 6 and escd.device_id is null THEN gi.width*gi.height/1000000 ELSE 0 END ),2) as twoUncompletedArea
        FROM
            glass_info gi
                left join edg_storage_cage_details escd ON gi.glass_id = escd.glass_id
                left join engineering e on gi.engineer_id=e.engineer_id
        WHERE
            date(e.create_time) = date(now())
    </select>
</mapper>
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/BigStorageCageService.java
@@ -7,6 +7,7 @@
import com.mes.bigstorage.entity.dto.BigStorageSummaryDTO;
import com.mes.bigstorage.entity.vo.BigStorageDetailsQueryVO;
import com.mes.glassinfo.entity.GlassInfo;
import com.mes.largenscreen.entity.PieChartVO;
import java.util.List;
import java.util.Map;
@@ -46,5 +47,7 @@
    Boolean resetCage();
    List<PieChartVO> queryPieChart();
//    List<Integer> queryFreeDeviceByNotUsed(double thickness);
}
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageCageServiceImpl.java
@@ -19,6 +19,7 @@
import com.mes.common.config.Const;
import com.mes.glassinfo.entity.GlassInfo;
import com.mes.glassinfo.service.GlassInfoService;
import com.mes.largenscreen.entity.PieChartVO;
import com.mes.temperingglass.entity.TemperingGlassInfo;
import com.mes.temperingglass.service.TemperingGlassInfoService;
import lombok.extern.slf4j.Slf4j;
@@ -321,6 +322,11 @@
        return Boolean.TRUE;
    }
    @Override
    public List<PieChartVO> queryPieChart() {
        return baseMapper.queryPieChart();
    }
//    @Override
//    public List<Integer> queryFreeDeviceByNotUsed(double thickness) {
//        return baseMapper.queryFreeDeviceByNotUsed(thickness);
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/OPCPlcSlicecage.java
@@ -13,6 +13,7 @@
import com.mes.bigstoragecagetask.service.BigStorageCageTaskService;
import com.mes.common.config.Const;
import com.mes.glassinfo.service.GlassInfoService;
import com.mes.largenscreen.entity.PieChartVO;
import com.mes.temperingglass.entity.TemperingGlassInfo;
import com.mes.temperingglass.service.TemperingGlassInfoService;
import com.mes.tools.WebSocketServer;
@@ -210,6 +211,8 @@
        //理片笼使用情况
        List<Map<String, Object>> bigStorageCageUsage = bigStorageCageService.selectBigStorageCageUsage();
        jsonObject.append("bigStorageCageUsage", bigStorageCageUsage);
        List<PieChartVO> pieChartVOS = bigStorageCageService.queryPieChart();
        jsonObject.append("pieChartVOS", pieChartVOS);
        ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("largenScreen");
        if (sendwServer != null) {
            for (WebSocketServer webserver : sendwServer) {
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/job/PlcTemperingGlassTask.java
@@ -7,6 +7,7 @@
import com.mes.damage.entity.Damage;
import com.mes.damage.service.DamageService;
import com.mes.engineering.entity.Engineering;
import com.mes.largenscreen.entity.PieChartVO;
import com.mes.temperingglass.service.TemperingGlassInfoService;
import com.mes.temperingglass.entity.TemperingGlassInfo;
import com.mes.tools.WebSocketServer;
@@ -128,6 +129,9 @@
                        .groupBy(TemperingGlassInfo::getEngineerId, TemperingGlassInfo::getTemperingLayoutId) // 按 engineerId 和 temperingLayoutId 分组
        );
        jsonObject.append("temperingGlassInfoInList", temperingGlassInfoInList.size());
        //钢化饼图数据
        List<PieChartVO> pieChartVOS = temperingAgoService.queryPieChart();
        jsonObject.append("pieChartVOS", pieChartVOS);
        ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("largenScreen");
        if (sendwServer != null) {
            for (WebSocketServer webserver : sendwServer) {
hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/mapper/HollowGlassOutRelationInfoMapper.java
@@ -3,7 +3,10 @@
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.mes.hollow.entity.HollowGlassOutRelationInfo;
import com.mes.hollow.entity.dto.OrderDTO;
import com.mes.largenscreen.entity.PieChartVO;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
 * (HollowGlassOutRelationInfo)表数据库访问层
@@ -14,5 +17,7 @@
public interface HollowGlassOutRelationInfoMapper extends BaseMapper<HollowGlassOutRelationInfo> {
    OrderDTO queryOrderByFlowCardId(@Param("flowCardId") String flowCardId);
    List<PieChartVO> queryPieChart();
}
hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/service/HollowGlassOutRelationInfoService.java
@@ -6,6 +6,7 @@
import com.mes.hollow.entity.request.HollowHistoryTaskRequest;
import com.mes.hollow.entity.request.HollowTaskRequest;
import com.mes.hollowqueue.entity.HollowGlassQueueInfo;
import com.mes.largenscreen.entity.PieChartVO;
import java.io.IOException;
import java.util.List;
@@ -39,5 +40,7 @@
    String generateHollowLisecFile(String flowCardId, int cell, int isForce, int isOut) throws IOException;
    Page<HollowGlassOutRelationInfo> queryHollowHistoryTask(HollowHistoryTaskRequest request);
    List<PieChartVO> queryPieChart();
}
hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/service/impl/HollowGlassOutRelationInfoServiceImpl.java
@@ -23,6 +23,7 @@
import com.mes.hollow.service.HollowGlassRelationInfoService;
import com.mes.hollowqueue.entity.HollowGlassQueueInfo;
import com.mes.hollowqueue.service.HollowGlassQueueInfoService;
import com.mes.largenscreen.entity.PieChartVO;
import com.mes.tools.DateUtil;
import com.mes.utils.Blank;
import com.mes.utils.RedisUtil;
@@ -425,5 +426,10 @@
        queueInfo.setUpdateTime(new Date());
        return queueInfo;
    }
    @Override
    public List<PieChartVO> queryPieChart(){
        return baseMapper.queryPieChart();
    }
}
hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/job/PushMessageToIndex.java
@@ -19,6 +19,7 @@
import com.mes.hollow.service.HollowGlassRelationInfoService;
import com.mes.hollowqueue.entity.HollowGlassQueueInfo;
import com.mes.hollowqueue.service.HollowGlassQueueInfoService;
import com.mes.largenscreen.entity.PieChartVO;
import com.mes.tools.WebSocketServer;
import com.mes.utils.RedisUtil;
import lombok.extern.slf4j.Slf4j;
@@ -226,6 +227,9 @@
        //理片笼使用情况
        List<Map<String, Object>> hollowBigStorageCageUsage = hollowBigStorageCageService.selectBigStorageCageUsage();
        jsonObject.append("hollowBigStorageCageUsage", hollowBigStorageCageUsage);
        //钢化饼图数据
        List<PieChartVO> pieChartVOS = hollowGlassOutRelationInfoService.queryPieChart();
        jsonObject.append("pieChartVOS", pieChartVOS);
        ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("largenScreen");
        if (sendwServer != null) {
            for (WebSocketServer webserver : sendwServer) {
hangzhoumesParent/moduleService/hollowGlassModule/src/main/resources/mapper/HollowGlassOutRelationInfoMapper.xml
@@ -10,4 +10,33 @@
        where t.process_id = #{flowCardId}
        limit 1
    </select>
    <select id="queryPieChart" resultType="com.mes.largenscreen.entity.PieChartVO">
        SELECT
            round( sum( CASE WHEN hgori.cell = 930 AND hgqi.state = 0 THEN 1 ELSE 0 END ), 2 ) AS oneCompletedQuantity,
            round(
                    sum( CASE WHEN hgori.cell = 930 AND hgqi.state = 0 THEN hgqi.width * hgqi.height / 1000000 ELSE 0 END ),
                    2
                ) AS oneCompletedArea,
            round( sum( CASE WHEN hgori.cell = 931 AND hgqi.state = 0 THEN 1 ELSE 0 END ), 2 ) AS twoCompletedQuantity,
            round(
                    sum( CASE WHEN hgori.cell = 931 AND hgqi.state = 0 THEN hgqi.width * hgqi.height / 1000000 ELSE 0 END ),
                    2
                ) AS twoCompletedArea,
            round( sum( CASE WHEN hgori.cell = 930 AND hgqi.state =- 1 THEN 1 ELSE 0 END ), 2 ) AS oneUncompletedQuantity,
            round(
                    sum( CASE WHEN hgori.cell = 930 AND hgqi.state =- 1 THEN hgqi.width * hgqi.height / 1000000 ELSE 0 END ),
                    2
                ) AS oneUncompletedArea,
            round( sum( CASE WHEN hgori.cell = 931 AND hgqi.state =- 1 THEN 1 ELSE 0 END ), 2 ) AS twoUncompletedQuantity,
            round(
                    sum( CASE WHEN hgori.cell = 931 AND hgqi.state =- 1 THEN hgqi.width * hgqi.height / 1000000 ELSE 0 END ),
                    2
                ) AS twoUncompletedArea
        FROM
            hollow_glass_out_relation_info hgori
                INNER JOIN hollow_glass_queue_info hgqi ON hgori.formula_id = hgqi.relation_id
        WHERE
            date( hgori.create_time ) = date(
            now())
    </select>
</mapper>