ZengTao
2025-03-28 f68d3c71819feb59e7a227a5d992b059b900916c
修改报表,界面添加查询流程卡个数,调整推送数据到前端的间隔
50个文件已修改
7个文件已添加
3736 ■■■■■ 已修改文件
UI-Project/config.js 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/lang/en.js 1276 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/lang/zh.js 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/router/index.js 505 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/utils/constants.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/NewPage.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/PurchaseReturn/purchaseReturn.vue 135 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/Reportmanage/reportBigFeed.vue 161 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/Reportmanage/reportBigOut.vue 171 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/Reportmanage/reportDownCache.vue 164 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/Reportmanage/reportEdgCache.vue 164 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/Slicecage/slicecage.vue 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/order/controller/OrderController.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/order/service/OrdersService.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/order/service/impl/OrdersServiceImpl.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/OrderChange.java 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/temperingglass/mapper/TemperingGlassInfoMapper.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/CacheGlassTask.java 25 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/controller/TaskCacheController.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/entity/TaskCache.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/service/TaskCacheService.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/service/impl/TaskCacheServiceImpl.java 39 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/application.yml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/controller/BigStorageCageDetailsController.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/dto/FlowCardDTO.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/mapper/BigStorageCageDetailsMapper.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/BigStorageCageDetailsService.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageCageDetailsServiceImpl.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/controller/BigStorageCageFeedTaskController.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/controller/BigStorageCageOutTaskController.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/entity/BigStorageCageOutTask.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/service/BigStorageCageFeedTaskService.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/service/BigStorageCageOutTaskService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/service/impl/BigStorageCageFeedTaskServiceImpl.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/service/impl/BigStorageCageOutTaskServiceImpl.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/PlcSlicecage.java 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/PlcStorageCageTask.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application.yml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageDetailsMapper.xml 72 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/engineering/controller/EngineeringController.java 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/engineering/mapper/EngineeringMapper.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/engineering/mapper/xml/EngineeringMapper.xml 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/engineering/service/EngineeringService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/engineering/service/impl/EngineeringServiceImpl.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/job/PlcLoadGlassTask.java 28 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/LoadGlassModule/src/main/resources/application.yml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/LoadGlassModule/src/main/resources/mapper/EngineeringMapper.xml 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/job/PlcScreenTask.java 57 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/job/PlcTemperingGlassTask.java 54 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/application.yml 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/controller/DownGlassTaskController.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/DownGlassTaskService.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/impl/DownGlassTaskServiceImpl.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/service/impl/DownWorkstationServiceImpl.java 35 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/job/DownLoadCacheGlassTask.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/job/Downpush.java 172 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/application.yml 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/config.js
@@ -1,12 +1,12 @@
export default {
    // serverUrl: "10.153.19.150:88/api",
    // serverUrl: "10.153.19.44:88/api",
 serverUrl: "192.168.1.199:88/api",
    // serverUrl: "127.0.0.1:88/api",
//  serverUrl: "192.168.1.199:88/api",
    serverUrl: "127.0.0.1:88/api",
    // serverUrl2: "10.153.19.150:88"
    // serverUrl2: "10.153.19.44:88"
    serverUrl2: "192.168.1.199:88"
    // serverUrl2: "127.0.0.1:88"
    // serverUrl2: "192.168.1.199:88"
    serverUrl2: "127.0.0.1:88"
    //serverUrl:"res.abeim.cn"
}
UI-Project/src/lang/en.js
@@ -1,624 +1,654 @@
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:{
          Automaticprintingswitch:'Automatic printing switch',
          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:{
          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:{
          dilapidation:'Breakage',
          takeaway:'Manual removal',
          takeon:'The arrangement is complete',
      },
      searchOrder:{
          searchlayout:'Non-tempered process card inquiry',
          fullfurnaces:'Number of full furnaces',
          specifiedproject:'The currently specified project',
          undesignate:'Undesignate',
          allnumber:'Total quantity',
          numbercages:'Number of cages',
          numberslots:'Number of slots',
          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',
          filmwait:'Waiting for start',
          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',
          specifyengineerid:'Specify the project',
          projectnumber:'Project number',
          layoutnumber:'Drawing number of loading for tempering furnace',
          numberglasses:'Number of glasses',
          specifytemperinga:'Whether to specify the tempering of this information?',
          temperedswitch:'Tempered switch',
          dutyinformation:'Duty information',
          process:'Process',
          team:'Team',
          basic:'equipment',
          makesure:'Confirm the save',
          // cancel:'取消',
          temperingtotal:'Number of tempering furnaces:',
          glasstotal:'Total number of glasses:',
          scheduletime:'Time of schedule:'
      },
      workOrder:{
          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',
          confirmclear:'Please confirm that the process card and label have been printed before clearing them',
          sure:'Operate',
          cancel:'Cancel',
          glassinformation:'Glass information',
          glassID:'Glass ID',
          coatingtypes:'Coating types',
          thickness:'Thickness',
          width:'Width',
          height:'Height',
      },
      productStock:{
          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:{
          time: 'The time of the break',
          number: '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',
          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',
          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:',
      },
      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',
          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:{
          mes:'Original film storage details',
          warehousing:'store',
          operate: 'Operate',
          exit:'Edit',
          delete:'Delete',
          outbound:'Outbound',
          deviceid:'device ID',
          slot:'Grid number',
          enablestatea:'Enable tagging',
          disable:'Disable',
          start:'Enable',
          startslot:'Start workstation',
          endslot:'Target workstation',
          slotid:'Grid ID',
          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',
          thickremainquantity:'Remaining quantity of original film (sheets):',
          inquantity:'Please enter the quantity',
          quantitya:'Number:',
          enableid:'Task ID',
          originateslot:'Starting grid',
          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',
          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',
      }
  }
    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: {
        Automaticprintingswitch: 'Automatic printing switch',
        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: {
        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: {
        dilapidation: 'Breakage',
        takeaway: 'Manual removal',
        takeon: 'The arrangement is complete',
    },
    searchOrder: {
        cageTemper: 'Cage temperature',
        cageArea: 'Cage area',
        totalAreas: 'Total area',
        totalTemper: 'Total temper',
        "processcardinquiry": "process card inquiry",
        searchlayout: 'Non-tempered process card inquiry',
        fullfurnaces: 'Number of full furnaces',
        specifiedproject: 'The currently specified project',
        undesignate: 'Undesignate',
        allnumber: 'Total quantity',
        numbercages: 'Number of cages',
        numberslots: 'Number of slots',
        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',
        filmwait: 'Waiting for start',
        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',
        processcardqueriesa: 'Process card queries',
        specifytempering: 'Specify a furnace',
        specifyengineerid: 'Specify the project',
        projectnumber: 'Project number',
        layoutnumber: 'Drawing number of loading for tempering furnace',
        numberglasses: 'Number of glasses',
        specifytemperinga: 'Whether to specify the tempering of this information?',
        temperedswitch: 'Tempered switch',
        dutyinformation: 'Duty information',
        process: 'Process',
        team: 'Team',
        basic: 'equipment',
        makesure: 'Confirm the save',
        // cancel:'取消',
        temperingtotal: 'Number of tempering furnaces:',
        glasstotal: 'Total number of glasses:',
        scheduletime: 'Time of schedule:'
    },
    workOrder: {
        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',
        confirmclear: 'Please confirm that the process card and label have been printed before clearing them',
        sure: 'Operate',
        cancel: 'Cancel',
        glassinformation: 'Glass information',
        glassID: 'Glass ID',
        coatingtypes: 'Coating types',
        thickness: 'Thickness',
        width: 'Width',
        height: 'Height',
    },
    productStock: {
        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: {
        time: 'The time of the break',
        number: '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',
        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',
        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:',
    },
    reportmanage: {
        feed: 'feed',
        out: 'out',
        straightthrough: 'straightthrough',
        complete: 'complete',
        incomplete: 'incomplete',
        outed: 'outed',
        scan: 'scan',
        feeding: 'feeding',
        in: 'in',
        car: 'car',
        cage: 'cage',
        oneline: 'oneline',
        twoline: 'twoline',
        id: 'id',
        targetSlot: 'targetSlot',
        endSlot: 'endSlot',
        state: 'state',
        width: 'width',
        height: 'height',
        createTime: 'createTime',
        totalCounts: 'totalCounts',
        totalAreas: 'totalAreas',
        totalDamages: 'totalDamages',
        totalTakes: 'totalTakes',
        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',
        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: {
        mes: 'Original film storage details',
        warehousing: 'store',
        operate: 'Operate',
        exit: 'Edit',
        delete: 'Delete',
        outbound: 'Outbound',
        deviceid: 'device ID',
        slot: 'Grid number',
        enablestatea: 'Enable tagging',
        disable: 'Disable',
        start: 'Enable',
        startslot: 'Start workstation',
        endslot: 'Target workstation',
        slotid: 'Grid ID',
        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',
        thickremainquantity: 'Remaining quantity of original film (sheets):',
        inquantity: 'Please enter the quantity',
        quantitya: 'Number:',
        enableid: 'Task ID',
        originateslot: 'Starting grid',
        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',
        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',
    }
}
UI-Project/src/lang/zh.js
@@ -110,8 +110,13 @@
          takeall:'全部拿走',
      },
      searchOrder:{
        cageTemper: '笼内炉数',
        cageArea: '笼内面积',
        totalAreas:'总面积',
        totalTemper:'总炉数',
          deleteTask:'删除工程',
          pdeleteTask:'是否删除工程?',
          processcardinquiry:"工程查询",
          searchlayout:'非钢化流程卡查询',
          fullfurnaces:'满炉数量',
          specifiedproject:'当前指定工程',
@@ -223,6 +228,7 @@
          now:'当前页显示',
          tit:'条数据',
          temperingqueries:'钢化查询',
          processcardqueriesa:'工程查询',
          specifytempering:'指定一炉',
          specifyout:'指定人工出片',
          specifyengineerid:'指定工程',
@@ -507,6 +513,12 @@
          loading :'正在上片:',
      },
      reportmanage:{
          feed: '进片',
          out: '出片',
          straightthrough: '直通',
          complete:'已完成',
          incomplete:'未完成',
          outed:'已出片',
          scan:'扫码',
          feeding:'正在进卧转立',
          in:'在卧转立',
@@ -516,6 +528,7 @@
          twoline:'二线',
          id:'编号',
          targetSlot:'目标格子',
          endSlot:'目标架子',
          state:'任务状态',
          width:'宽',
          height:'高',
UI-Project/src/router/index.js
@@ -1,4 +1,4 @@
import {createRouter, createWebHashHistory} from 'vue-router'
import { createRouter, createWebHashHistory } from 'vue-router'
// import i18n from '@/utils/lang'
// import User from '../views/sys/User.vue'
// import Role from '../views/sys/Role.vue'
@@ -19,185 +19,185 @@
    },
    {
      path: '/new-page', // 新增的无需登录的页面  
      name: 'newPage',
      name: 'newPage',
      component: () => import('../views/NewPage.vue')
    },
    {
      path: '/main',
      name: 'main',
      component: () => import('../layout/MainErpView.vue'),
      children:[
      children: [
        {
          path: 'Temperedlayout',
          name: 'Temperedlayout',
          component: () => import('../views/TL/Temperedlayout/Temperedlayout.vue'),
          children:[
          children: [
            {
             path: 'selectLayout',
              path: 'selectLayout',
              name: 'selectLayout',
              component: () => import('../views/TL/Temperedlayout/Temperedlayout.vue'),
            }
         ]
          ]
        },
/*----------- 用户列表 ----------------*/
// {
//   path: 'User',
//   name: 'User',
//   component: () => import('../views/User/userlist.vue'),
//   children:[
//     {
//       path: '/User/userlist',
//       name: 'userlist',
//       component: () => import('../views/User/userlist.vue')
//     },
//   ]
//   },
/*----------- 权限列表 ----------------*/
// {
//   path: 'Permissions',
//   name: 'Permissions',
//   component: () => import('../views/Permissions/permissionslist.vue'),
//   children:[
//     {
//       path: '/Permissions/permissionslist',
//       name: 'permissionslist',
//       component: () => import('../views/Permissions/permissionslist.vue')
//     },
//   ]
//   },
        /*----------- 用户列表 ----------------*/
        // {
        //   path: 'User',
        //   name: 'User',
        //   component: () => import('../views/User/userlist.vue'),
        //   children:[
        //     {
        //       path: '/User/userlist',
        //       name: 'userlist',
        //       component: () => import('../views/User/userlist.vue')
        //     },
        //   ]
        //   },
        /*----------- 权限列表 ----------------*/
        // {
        //   path: 'Permissions',
        //   name: 'Permissions',
        //   component: () => import('../views/Permissions/permissionslist.vue'),
        //   children:[
        //     {
        //       path: '/Permissions/permissionslist',
        //       name: 'permissionslist',
        //       component: () => import('../views/Permissions/permissionslist.vue')
        //     },
        //   ]
        //   },
        /*----------- 上片机 ----------------*/
      {
        path: 'Returns',
        name: 'return',
        component: () => import('../views/Returns/return.vue'),
        children:[
          {
            path: '/Returns/returns',
            name: 'returns',
            component: () => import('../views/Returns/returns.vue')
          },
          {
            path: '/Returns/upreturns',
            name: 'upreturns',
            component: () => import('../views/Returns/upreturns.vue')
          },
          {
            path: '/Returns/upreturns2',
            name: 'upreturns2',
            component: () => import('../views/Returns/upreturns2.vue')
          },
        ]
      },
      /*----------- 掰片/识别 ----------------*/
    {
      path: 'Identify',
      name: 'ident',
      component: () => import('../views/Identify/ident.vue'),
      children: [
        {
          path: '/Identify/identify',
          name: 'identify',
          component: () => import('../views/Identify/identify.vue')
          path: 'Returns',
          name: 'return',
          component: () => import('../views/Returns/return.vue'),
          children: [
            {
              path: '/Returns/returns',
              name: 'returns',
              component: () => import('../views/Returns/returns.vue')
            },
            {
              path: '/Returns/upreturns',
              name: 'upreturns',
              component: () => import('../views/Returns/upreturns.vue')
            },
            {
              path: '/Returns/upreturns2',
              name: 'upreturns2',
              component: () => import('../views/Returns/upreturns2.vue')
            },
          ]
        },
        /*----------- 掰片/识别 ----------------*/
        {
          path: '/Identify/identifwu',
          name: 'identifwu',
          component: () => import('../views/Identify/identifwu.vue')
          path: 'Identify',
          name: 'ident',
          component: () => import('../views/Identify/ident.vue'),
          children: [
            {
              path: '/Identify/identify',
              name: 'identify',
              component: () => import('../views/Identify/identify.vue')
            },
            {
              path: '/Identify/identifwu',
              name: 'identifwu',
              component: () => import('../views/Identify/identifwu.vue')
            },
          ]
        },
      ]
    },
    /*----------- 卧式缓存 ----------------*/
  {
    path: 'Caching',
    name: 'Caching',
    component: () => import('../views/Caching/caching.vue'),
    children:[
      {
        path: '/Caching/cachingbefore',
        name: 'cachingbefore',
        component: () => import('../views/Caching/cachingbefore.vue')
      },
      {
        path: '/Caching/cachingun',
        name: 'cachingun',
        component: () => import('../views/Caching/cachingun.vue')
      },
      {
        path: '/Caching/cachingyiwu',
        name: 'cachingyiwu',
        component: () => import('../views/Caching/cachingyiwu.vue')
      },
    ]
  },
  /*----------- 磨边(冷加工) ----------------*/
{
  path: 'StockBasicData',
  name: 'Select',
  component: () => import('../views/StockBasicData/Select.vue'),
  children:[
    {
      path: '/StockBasicData/stockBasicData',
      name: 'stockBasicData',
      component: () => import('../views/StockBasicData/stockBasicData.vue')
    },
    {
      path: '/StockBasicData/stockBasicDatatwo',
      name: 'stockBasicDatatwo',
      component: () => import('../views/StockBasicData/stockBasicDatatwo.vue')
    },
    {
      path: '/StockBasicData/stockBasicyiwu',
      name: 'stockBasicyiwu',
      component: () => import('../views/StockBasicData/stockBasicyiwu.vue')
    },
  ]
},
/*----------- 大理片笼 ----------------*/
{
path: 'Slicecage',
name: 'Slicecage',
component: () => import('../views/Slicecage/slicecage.vue'),
children:[
  {
    path: '/Slicecage/slicecage',
    name: 'slicecage',
    component: () => import('../views/Slicecage/slicecage.vue')
  },
]
},
/*----------- 钢化 ----------------*/
{
path: 'PurchaseReturn',
name: 'purchase',
component: () => import('../views/PurchaseReturn/purchase.vue'),
children:[
  {
    path: '/PurchaseReturn/purchaseReturn',
    name: 'purchaseReturn',
    component: () => import('../views/PurchaseReturn/purchaseReturn.vue')
  },
  {
    path: '/PurchaseReturn/purchaseStorage',
    name: 'purchaseStorage',
    component: () => import('../views/PurchaseReturn/purchaseStorage.vue')
  },
  {
    path: '/PurchaseReturn/purchaseprint',
    name: 'purchaseprint',
    component: () => import('../views/PurchaseReturn/purchaseprint.vue')
  },
]
},
          /*----------- 下片台 ----------------*/
        /*----------- 卧式缓存 ----------------*/
        {
          path: 'Caching',
          name: 'Caching',
          component: () => import('../views/Caching/caching.vue'),
          children: [
            {
              path: '/Caching/cachingbefore',
              name: 'cachingbefore',
              component: () => import('../views/Caching/cachingbefore.vue')
            },
            {
              path: '/Caching/cachingun',
              name: 'cachingun',
              component: () => import('../views/Caching/cachingun.vue')
            },
            {
              path: '/Caching/cachingyiwu',
              name: 'cachingyiwu',
              component: () => import('../views/Caching/cachingyiwu.vue')
            },
          ]
        },
        /*----------- 磨边(冷加工) ----------------*/
        {
          path: 'StockBasicData',
          name: 'Select',
          component: () => import('../views/StockBasicData/Select.vue'),
          children: [
            {
              path: '/StockBasicData/stockBasicData',
              name: 'stockBasicData',
              component: () => import('../views/StockBasicData/stockBasicData.vue')
            },
            {
              path: '/StockBasicData/stockBasicDatatwo',
              name: 'stockBasicDatatwo',
              component: () => import('../views/StockBasicData/stockBasicDatatwo.vue')
            },
            {
              path: '/StockBasicData/stockBasicyiwu',
              name: 'stockBasicyiwu',
              component: () => import('../views/StockBasicData/stockBasicyiwu.vue')
            },
          ]
        },
        /*----------- 大理片笼 ----------------*/
        {
          path: 'Slicecage',
          name: 'Slicecage',
          component: () => import('../views/Slicecage/slicecage.vue'),
          children: [
            {
              path: '/Slicecage/slicecage',
              name: 'slicecage',
              component: () => import('../views/Slicecage/slicecage.vue')
            },
          ]
        },
        /*----------- 钢化 ----------------*/
        {
          path: 'PurchaseReturn',
          name: 'purchase',
          component: () => import('../views/PurchaseReturn/purchase.vue'),
          children: [
            {
              path: '/PurchaseReturn/purchaseReturn',
              name: 'purchaseReturn',
              component: () => import('../views/PurchaseReturn/purchaseReturn.vue')
            },
            {
              path: '/PurchaseReturn/purchaseStorage',
              name: 'purchaseStorage',
              component: () => import('../views/PurchaseReturn/purchaseStorage.vue')
            },
            {
              path: '/PurchaseReturn/purchaseprint',
              name: 'purchaseprint',
              component: () => import('../views/PurchaseReturn/purchaseprint.vue')
            },
          ]
        },
        /*----------- 下片台 ----------------*/
        {
          path: 'UnLoadGlass',
          name: 'UnLoadGlass',
          component: () => import('../views/UnLoadGlass/UnLoadGlass.vue'),
          children:[
          children: [
            {
              path: '/UnLoadGlass/loadmachinerack',
              name: 'loadmachinerack',
@@ -220,12 +220,12 @@
            }
          ]
        },
         /*----------- 仓储中心 ----------------*/
         {
        /*----------- 仓储中心 ----------------*/
        {
          path: 'GlassStorage',
          name: 'GlassStorage',
          component: () => import('../views/GlassStorage/GlassStorage.vue'),
          children:[
          children: [
            {
              path: '/GlassStorage/MaterialRackManagement',
              name: 'MaterialRackManagement',
@@ -238,13 +238,13 @@
            }
          ]
        },
         /*----------- 可视化系统 ----------------*/
         {
        /*----------- 可视化系统 ----------------*/
        {
          path: 'Visualization',
          name: 'screen',
          component: () => import('../views/Visualization/screen.vue'),
          children:[
          children: [
            {
              path: '/Visualization/screenone',
              name: 'screenone',
@@ -261,69 +261,108 @@
              component: () => import('../views/Visualization/screenthree.vue')
            }
          ]
         },
/*----------- 系统管理 ----------------*/
{
  path: 'User',
  name: 'user',
  component: () => import('../views/User/user.vue'),
  children:[
    {
      path: '/User/userlist',
      name: 'userlist',
      component: () => import('../views/User/userlist.vue')
    },
    {
      path: '/User/rolelist',
      name: 'rolelist',
      component: () => import('../views/User/rolelist.vue')
    },
    {
      path: '/User/permissions',
      name: 'permissions',
      component: () => import('../views/User/permissions.vue')
    }
  ]
 },
  /*----------- 大屏显示 ----------------*/
  {
    path: 'largescreen',
    name: 'largescreen',
    component: () => import('../views/largescreen/largescreen.vue'),
    children:[
      {
        path: '/largescreen/largescreen',
        name: 'largescreen',
        component: () => import('../views/largescreen/largescreen.vue')
      },
    ]
  },
  /*----------- 报工管理 ----------------*/
  {
    path: 'reportWork',
    name: 'reportWork',
    component: () => import('../views/ReportWork/reportWork.vue'),
    children: [
      {
        path: '/ReportWork/reportWork',
        name: 'reportWork',
        component: () => import('../views/ReportWork/reportWork.vue')
      },
    ]
  },
  /*----------- 报表管理 ----------------*/
  {
    path: 'reportManage',
    name: 'reportManage',
    component: () => import('../views/Reportmanage/reportmanage.vue'),
    children: [
      {
        path: '/Reportmanage/reportmanage',
        name: 'reportManage',
        component: () => import('../views/Reportmanage/reportmanage.vue')
      },
    ]
  },
        },
        /*----------- 系统管理 ----------------*/
        {
          path: 'User',
          name: 'user',
          component: () => import('../views/User/user.vue'),
          children: [
            {
              path: '/User/userlist',
              name: 'userlist',
              component: () => import('../views/User/userlist.vue')
            },
            {
              path: '/User/rolelist',
              name: 'rolelist',
              component: () => import('../views/User/rolelist.vue')
            },
            {
              path: '/User/permissions',
              name: 'permissions',
              component: () => import('../views/User/permissions.vue')
            }
          ]
        },
        /*----------- 大屏显示 ----------------*/
        {
          path: 'largescreen',
          name: 'largescreen',
          component: () => import('../views/largescreen/largescreen.vue'),
          children: [
            {
              path: '/largescreen/largescreen',
              name: 'largescreen',
              component: () => import('../views/largescreen/largescreen.vue')
            },
          ]
        },
        /*----------- 报工管理 ----------------*/
        {
          path: 'reportWork',
          name: 'reportWork',
          component: () => import('../views/ReportWork/reportWork.vue'),
          children: [
            {
              path: '/ReportWork/reportWork',
              name: 'reportWork',
              component: () => import('../views/ReportWork/reportWork.vue')
            },
          ]
        },
        /*----------- 大理片进片报表 ----------------*/
        {
          path: 'reportBigFeed',
          name: 'reportBigFeed',
          component: () => import('../views/Reportmanage/reportBigFeed.vue'),
          children: [
            {
              path: '/Reportmanage/reportBigFeed',
              name: 'reportBigFeed',
              component: () => import('../views/Reportmanage/reportBigFeed.vue')
            },
          ]
        },
        /*----------- 大理片出片报表 ----------------*/
        {
          path: 'reportBigOut',
          name: 'reportBigOut',
          component: () => import('../views/Reportmanage/reportBigOut.vue'),
          children: [
            {
              path: '/Reportmanage/reportBigOut',
              name: 'reportBigOut',
              component: () => import('../views/Reportmanage/reportBigOut.vue')
            },
          ]
        },
        /*----------- 磨边卧理片报表 ----------------*/
        {
          path: 'reportEdgCache',
          name: 'reportEdgCache',
          component: () => import('../views/Reportmanage/reportEdgCache.vue'),
          children: [
            {
              path: '/Reportmanage/reportEdgCache',
              name: 'reportEdgCache',
              component: () => import('../views/Reportmanage/reportEdgCache.vue')
            },
          ]
        },
        /*----------- 下片卧理片报表 ----------------*/
        {
          path: 'reportDownCache',
          name: 'reportDownCache',
          component: () => import('../views/Reportmanage/reportDownCache.vue'),
          children: [
            {
              path: '/Reportmanage/reportDownCache',
              name: 'reportDownCache',
              component: () => import('../views/Reportmanage/reportDownCache.vue')
            },
          ]
        },
        /*----------- 中空 ----------------*/
        {
@@ -372,17 +411,17 @@
      name: 'register',
      component: () => import('../views/RegisterView.vue')
    }
  ]
})
// 导航守卫  
router.beforeEach((to, from, next) => {
router.beforeEach((to, from, next) => {
  const isAuthenticated = !!localStorage.getItem('authToken'); // 假设这是你的登录状态检查逻辑  
  if (to.matched.some(record => record.meta.requiresAuth) && !isAuthenticated) {
  if (to.matched.some(record => record.meta.requiresAuth) && !isAuthenticated) {
    next({ name: 'login' }); // 如果需要登录但未登录,则重定向到登录页面  
  } else {
  } else {
    next(); // 否则继续导航  
  }
});
  }
});
export default router
UI-Project/src/utils/constants.js
@@ -1,5 +1,5 @@
 export const WebSocketHost = "192.168.1.199";
//  export const WebSocketHost = "192.168.1.199";
// export const WebSocketHost = "10.153.19.150";
// export const WebSocketHost = "10.153.19.44";
// export const WebSocketHost = "127.0.0.1";
export const WebSocketHost = "127.0.0.1";
export const host = "88";
UI-Project/src/views/NewPage.vue
@@ -22,6 +22,7 @@
       height: `${rect.height}px`,  
      backgroundColor:  'lightblue'}">
   <div  class="centered-text">
  <div style="font-size: 15px;font-weight: bold;">{{ rect.sort }}</div>
  <div style="font-size: 15px;font-weight: bold;">{{ rect.process_id }}</div>  
  <div style="font-size: 15px;font-weight: bold;">{{ rect.project_no }}</div>  
  <div style="font-size: 30px;font-weight: bold;">{{ rect.widtha }}*{{ rect.heighta }}</div>  
UI-Project/src/views/PurchaseReturn/purchaseReturn.vue
@@ -949,6 +949,26 @@
    console.error(error);
  }
}
// 钢化炉
const handleal11 = async () => {
  try  {
  const response = await request.post('/temperingGlass/temperingGlassInfo/updateTemperingStateAll', {
    temperingLayoutId: currenttemperingLayoutId.value,
    engineerId: currentengineerId.value,
    state: 2,
    })
    if (response.code == 200) {
      ElMessage.success('成功!');
      blinda.value = false;
    } else {
      ElMessage.error(response.message);
    }
}
catch (error) {
    // 处理错误
    console.error(error);
  }
}
// 进炉前人工拿走
const takeouta = async () => {
  try  {
@@ -1014,12 +1034,50 @@
    console.error(error);
  }
}
const handleall1 = async () => {
  try  {
  const response = await request.post('/temperingGlass/temperingGlassInfo/updateTemperingStateAll', {
    temperingLayoutId: currenttemperingLayoutId.value,
    engineerId: currentengineerId.value,
    state: 3,
    })
    if (response.code == 200) {
      ElMessage.success('成功!');
      blind1.value = false;
    } else {
      ElMessage.error(response.message);
    }
}
catch (error) {
    // 处理错误
    console.error(error);
  }
}
const handletakeall33 = async () => {
  try  {
  const response = await request.post('/temperingGlass/temperingGlassInfo/updateTemperingStateAll', {
    temperingLayoutId: currenttemperingLayoutId.value,
    engineerId: currentengineerId.value,
    state: 9,
    })
    if (response.code == 200) {
      ElMessage.success('成功!');
      blind3.value = false;
    } else {
      ElMessage.error(response.message);
    }
}
catch (error) {
    // 处理错误
    console.error(error);
  }
}
const handleall3 = async () => {
  try  {
  const response = await request.post('/temperingGlass/temperingGlassInfo/updateTemperingStateAll', {
    temperingLayoutId: currenttemperingLayoutId.value,
    engineerId: currentengineerId.value,
    state: 3,
    })
    if (response.code == 200) {
      ElMessage.success('成功!');
@@ -1052,6 +1110,25 @@
    console.error(error);
  }
}
const handleall2 = async () => {
  try  {
  const response = await request.post('/temperingGlass/temperingGlassInfo/updateTemperingStateAll', {
    temperingLayoutId: currenttemperingLayoutId.value,
    engineerId: currentengineerId.value,
    state: 3,
    })
    if (response.code == 200) {
      ElMessage.success('成功!');
      blind2.value = false;
    } else {
      ElMessage.error(response.message);
    }
}
catch (error) {
    // 处理错误
    console.error(error);
  }
}
const handletakeall44 = async () => {
  try  {
  const response = await request.post('/temperingGlass/temperingGlassInfo/updateTemperingStateAll', {
@@ -1071,12 +1148,51 @@
    console.error(error);
  }
}
const handleall4 = async () => {
  try  {
  const response = await request.post('/temperingGlass/temperingGlassInfo/updateTemperingStateAll', {
    temperingLayoutId: currenttemperingLayoutId.value,
    engineerId: currentengineerId.value,
    state: 3,
    })
    if (response.code == 200) {
      ElMessage.success('成功!');
      blind4.value = false;
    } else {
      ElMessage.error(response.message);
    }
}
catch (error) {
    // 处理错误
    console.error(error);
  }
}
const handletakeall4 = async () => {
  try  {
  const response = await request.post('/temperingGlass/temperingGlassInfo/updateTemperingStateAll', {
    temperingLayoutId: currenttemperingLayoutId.value,
    engineerId: currentengineerId.value,
    state: 9,
    })
    if (response.code == 200) {
      ElMessage.success('成功!');
      blind4.value = false;
    } else {
      ElMessage.error(response.message);
    }
}
catch (error) {
    // 处理错误
    console.error(error);
  }
}
// 出片
const handleall14 = async () => {
  try  {
  const response = await request.post('/temperingGlass/temperingGlassInfo/updateTemperingStateAll', {
    temperingLayoutId: currenttemperingLayoutId.value,
    engineerId: currentengineerId.value,
    state: 4,
    })
    if (response.code == 200) {
      ElMessage.success('成功!');
@@ -1484,6 +1600,9 @@
        <el-button type="info" plain @click="handletakeall1" :disabled="!cantakeall" style="width: 150px;margin-left: 10px;margin-top: 10px;">
          {{ $t('order.takeall') }}
        </el-button>
        <el-button type="info" plain @click="handleall1" :disabled="!cantakeall" style="width: 150px;margin-left: 10px;margin-top: 10px;">
          {{ $t('processCard.outfurnace') }}
        </el-button>
  </el-dialog>  
<el-dialog v-model="blind2" top="30vh" width="15%" style="text-align: center;" @close="handleDialogClose2">
        <el-button :disabled="!canSelectProject2" type="warning" plain :icon="Delete" @click="handleDamage2"  style="width: 150px;margin-left: 10px;">
@@ -1495,6 +1614,9 @@
        </el-button>
        <el-button type="info" plain @click="handletakeall2" :disabled="!cantakeall" style="width: 150px;margin-left: 10px;margin-top: 10px;">
          {{ $t('order.takeall') }}
        </el-button>
        <el-button type="info" plain @click="handleall2" :disabled="!cantakeall" style="width: 150px;margin-left: 10px;margin-top: 10px;">
          {{ $t('processCard.outfurnace') }}
        </el-button>
  </el-dialog>  
<el-dialog v-model="blind3" top="30vh" width="15%" style="text-align: center;" @close="handleDialogClose3">
@@ -1508,6 +1630,9 @@
        <el-button type="info" plain @click="handletakeall33" :disabled="!cantakeall" style="width: 150px;margin-left: 10px;margin-top: 10px;">
          {{ $t('order.takeall') }}
        </el-button>
        <el-button type="info" plain @click="handleall3" :disabled="!cantakeall" style="width: 150px;margin-left: 10px;margin-top: 10px;">
          {{ $t('processCard.outfurnace') }}
        </el-button>
  </el-dialog>  
<el-dialog v-model="blind4" top="30vh" width="15%" style="text-align: center;" @close="handleDialogClose4">
        <el-button :disabled="!canSelectProject4" type="warning" plain :icon="Delete" @click="handleDamage4"  style="width: 150px;margin-left: 10px;">
@@ -1519,6 +1644,9 @@
        </el-button>
        <el-button type="info" plain @click="handletakeall44" :disabled="!cantakeall" style="width: 150px;margin-left: 10px;margin-top: 10px;">
          {{ $t('order.takeall') }}
        </el-button>
        <el-button type="info" plain @click="handleall4" :disabled="!cantakeall" style="width: 150px;margin-left: 10px;margin-top: 10px;">
          {{ $t('processCard.outfurnace') }}
        </el-button>
  </el-dialog>  
  <!-- 进炉前 -->
@@ -1536,6 +1664,9 @@
        <el-button type="info" plain @click="handletakeall3" :disabled="!cantakeall" style="width: 150px;margin-left: 10px;margin-top: 10px;">
          {{ $t('order.takeall') }}
        </el-button>
        <el-button type="info" plain @click="handleal11" :disabled="!cantakeall" style="width: 150px;margin-left: 10px;margin-top: 10px;">
          {{ $t('processCard.intofurnace') }}
        </el-button>
  </el-dialog>  
  <!-- 已出炉 -->
<el-dialog v-model="blindb" top="30vh" width="15%" style="text-align: center;" @close="handleDialogCloseb">
@@ -1549,6 +1680,10 @@
        <el-button type="info" plain @click="handletakeall4" :disabled="!cantakeall" style="width: 150px;margin-left: 10px;margin-top: 10px;">
          {{ $t('order.takeall') }}
        </el-button>
        <el-button type="info" plain @click="handleall14" :disabled="!cantakeall" style="width: 150px;margin-left: 10px;margin-top: 10px;">
          {{ $t('searchOrder.outfilm') }}
        </el-button>
        <!-- <el-button type="success" plain :icon="Edit" @click="takeonb" :disabled="!canonb" style="width: 150px;margin-left: 10px;margin-top: 10px;">
          {{ $t('order.takeon') }}
        </el-button> -->
UI-Project/src/views/Reportmanage/reportBigFeed.vue
New file
@@ -0,0 +1,161 @@
<template>
  <div style="height: 600px;">
    <div style="display: flex; flex-direction: row; align-items: center; margin-top: 20px;">
      <span style="margin-left: 10px;" class="demonstration">{{ $t('reportmanage.productiontime') }}</span>
      <el-date-picker style="margin-left: 10px;" v-model="timeRange" type="daterange" format="YYYY/MM/DD"
        value-format="YYYY-MM-DD" :start-placeholder="$t('reportmanage.starttime')"
        :end-placeholder="$t('reportmanage.endtime')" :default-time="defaultTime" />
      <el-input v-model="report.targetSlot" style="margin-left: 15px;width: 150px" placeholder="请输入格子号" />
      <el-input v-model="report.width" style="margin-left: 15px;width: 150px" placeholder="请输入宽" />
      <el-input v-model="report.height" style="margin-left: 15px;width: 150px" placeholder="请输入高" />
      <!-- <el-select v-model="report.taskType" :placeholder="$t('reportmanage.ctype')" style="margin-left: 10px;">
        <el-option :label="$t('reportmanage.all')" value="0"></el-option>
        <el-option :label="$t('reportmanage.go')" value="1"></el-option>
        <el-option :label="$t('reportmanage.nogo')" value="2"></el-option>
      </el-select> -->
      <el-select v-model="report.taskState" :placeholder="$t('reportmanage.cstate')" style="margin-left: 10px;">
        <el-option :label="$t('reportmanage.all')" value="-1"></el-option>
        <el-option :label="$t('reportmanage.scan')" value="0"></el-option>
        <el-option :label="$t('reportmanage.feeding')" value="1"></el-option>
        <el-option :label="$t('reportmanage.in')" value="2"></el-option>
        <el-option :label="$t('reportmanage.car')" value="3"></el-option>
        <el-option :label="$t('reportmanage.cage')" value="4"></el-option>
      </el-select>
      <el-select v-model="report.line" :placeholder="$t('reportmanage.cprocess')" style="margin-left: 10px;">
        <el-option :label="$t('reportmanage.all')" value="0"></el-option>
        <el-option :label="$t('reportmanage.oneline')" value="2001"></el-option>
        <el-option :label="$t('reportmanage.twoline')" value="2002"></el-option>
      </el-select>
      <el-button type="primary" style="margin-left: 10px;" @click="selectReportData()">{{ $t('reportmanage.inquire')
        }}</el-button>
    </div>
    <el-card style="flex: 1;margin-left: 10px;margin-top: 20px;" v-loading="loading">
      <div style="margin-bottom: 20px">
        <el-row style="margin-top: -15px;margin-bottom: -2px;">
          <el-col :span="3">
            <div id="dta" style="font-size: 15px;">
              <el-form-item :label="$t('reportmanage.totalCounts')" style="width: 14vw">
                {{ totalCounts }}
              </el-form-item>
            </div>
          </el-col>
          <el-col :span="3">
            <div id="dt" style="font-size: 15px;">
              <el-form-item :label="$t('reportmanage.totalAreas')" style="width: 14vw">
                {{ totalAreas }}
              </el-form-item>
            </div>
          </el-col>
          <el-col :span="3">
            <div id="dt" style="font-size: 15px;">
              <el-form-item :label="$t('reportmanage.totalDamages')" style="width: 14vw">
                {{ totalDamages }}
              </el-form-item>
            </div>
          </el-col>
          <el-col :span="3">
            <div id="dt" style="font-size: 15px;">
              <el-form-item :label="$t('reportmanage.totalTakes')" style="width: 14vw">
                {{ totalTakes }}
              </el-form-item>
            </div>
          </el-col>
        </el-row>
    </div>
      <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;">
        <el-table height="700" ref="table" :data="reportData"
          :header-cell-style="{ background: '#F2F3F5 ', color: '#1D2129' }">
          <el-table-column prop="id" align="center" :label="$t('reportmanage.id')"
            min-width="120" />
          <el-table-column prop="glassId" align="center" :label="$t('reportmanage.glassID')" min-width="130" />
          <el-table-column prop="targetSlot" align="center" :label="$t('reportmanage.targetSlot')"
            min-width="120" />
          <el-table-column prop="line" align="center" :label="$t('reportmanage.line')" min-width="120" />
          <el-table-column prop="taskState" align="center" :label="$t('reportmanage.state')" min-width="120" />
          <el-table-column prop="width" align="center" :label="$t('reportmanage.width')" min-width="120" />
          <el-table-column prop="height" align="center" :label="$t('reportmanage.height')"
            min-width="120" />
          <el-table-column prop="createTime" align="center" :label="$t('reportmanage.createTime')"
            min-width="230" />
        </el-table>
      </div>
    </el-card>
  </div>
</template>
<script setup>
import { Delete, Upload } from '@element-plus/icons-vue'
import { ElMessage, ElMessageBox } from 'element-plus'
import { ref, onMounted, onBeforeUnmount, reactive, computed, shallowRef, onUnmounted, watchEffect } from "vue";
import request from "@/utils/request"
import { WebSocketHost, host } from '@/utils/constants'
import { initializeWebSocket, closeWebSocket } from '@/utils/WebSocketService';
import { useI18n } from 'vue-i18n'
const { t } = useI18n()
const report = ref({
  targetSlot: '',
  taskType: '0',
  taskState: '-1',
  line: '0',
  width: '',
  height: ''
});
const reportData = ref([])
const endDate = new Date();
const startDate = new Date();
startDate.setDate(endDate.getDate() - 100);  // 获取一个星期前的时间
// 格式化为 "YYYY-MM-DD" 格式
const formatDate = (date) => {
  const year = date.getFullYear();
  const month = String(date.getMonth() + 1).padStart(2, '0');
  const day = String(date.getDate()).padStart(2, '0');
  return `${year}-${month}-${day}`;
};
const timeRange = ref([formatDate(startDate), formatDate(endDate)]);
const totalCounts = ref(0);
const totalAreas = ref(0);
const totalDamages = ref(0);
const totalTakes = ref(0);
// 查询数据
const selectReportData = async () => {
  const response = await request.post("/cacheVerticalGlass/bigStorageCageFeedTask/selectBigStorageCageFeedTask?startTime="+timeRange.value[0]+"&&endTime="+timeRange.value[1]+"", {
    startTime: timeRange.value[0],
    endTime: timeRange.value[1],
    targetSlot: report.value.targetSlot,
    width: report.value.width,
    height: report.value.height,
    taskType: report.value.taskType,
    taskState: report.value.taskState,
    line: report.value.line
  })
  if (response.code === 200) {
    reportData.value = response.data;
    let totalCount = 0;
    let totalArea = 0;
    let totalDamage = 0;
    let totalTake = 0;
    response.data.forEach(item => {
        if(item.taskState == 4){
          totalCount+=1;
          totalArea+=item.width*item.height/1000000;
        }
        if(item.taskState == 8){
          totalDamage+=1;
        }
        if(item.taskState == 9){
          totalTake+=1;
        }
      });
      totalCounts.value = totalCount;
      totalAreas.value = totalArea.toFixed(2);
      totalDamages.value = totalDamage;
      totalTakes.value = totalTake;
    ElMessage.success(response.message);
  } else {
    ElMessage.error(response.message);
  }
};
</script>
UI-Project/src/views/Reportmanage/reportBigOut.vue
New file
@@ -0,0 +1,171 @@
<template>
  <div style="height: 600px;">
    <div style="display: flex; flex-direction: row; align-items: center; margin-top: 20px;">
      <span style="margin-left: 10px;" class="demonstration">{{ $t('reportmanage.productiontime') }}</span>
      <el-date-picker style="margin-left: 10px;" v-model="timeRange" type="daterange" format="YYYY/MM/DD"
        value-format="YYYY-MM-DD" :start-placeholder="$t('reportmanage.starttime')"
        :end-placeholder="$t('reportmanage.endtime')" :default-time="defaultTime" />
      <el-input v-model="report.targetSlot" style="margin-left: 15px;width: 150px" placeholder="请输入格子号" />
      <el-input v-model="report.width" style="margin-left: 15px;width: 150px" placeholder="请输入宽" />
      <el-input v-model="report.height" style="margin-left: 15px;width: 150px" placeholder="请输入高" />
      <!-- <el-select v-model="report.taskType" :placeholder="$t('reportmanage.ctype')" style="margin-left: 10px;">
        <el-option :label="$t('reportmanage.all')" value="0"></el-option>
        <el-option :label="$t('reportmanage.go')" value="1"></el-option>
        <el-option :label="$t('reportmanage.nogo')" value="2"></el-option>
      </el-select> -->
      <el-select v-model="report.taskState" :placeholder="$t('reportmanage.cstate')" style="margin-left: 10px;">
        <el-option :label="$t('reportmanage.all')" value="-1"></el-option>
        <el-option :label="$t('reportmanage.cage')" value="1"></el-option>
        <el-option :label="$t('reportmanage.car')" value="2"></el-option>
        <el-option :label="$t('reportmanage.outed')" value="3"></el-option>
      </el-select>
      <el-select v-model="report.line" :placeholder="$t('reportmanage.cprocess')" style="margin-left: 10px;">
        <el-option :label="$t('reportmanage.all')" value="0"></el-option>
        <el-option :label="$t('reportmanage.oneline')" value="3001"></el-option>
        <el-option :label="$t('reportmanage.twoline')" value="3002"></el-option>
      </el-select>
      <el-button type="primary" style="margin-left: 10px;" @click="selectReportData()">{{ $t('reportmanage.inquire')
      }}</el-button>
    </div>
    <el-card style="flex: 1;margin-left: 10px;" v-loading="loading">
      <div style="margin-bottom: 20px">
        <el-row style="margin-top: -15px;margin-bottom: -2px;">
          <el-col :span="3">
            <div id="dta" style="font-size: 15px;">
              <el-form-item :label="$t('reportmanage.totalCounts')" style="width: 14vw">
                {{ totalCounts }}
              </el-form-item>
            </div>
          </el-col>
          <el-col :span="3">
            <div id="dt" style="font-size: 15px;">
              <el-form-item :label="$t('reportmanage.totalAreas')" style="width: 14vw">
                {{ totalAreas }}
              </el-form-item>
            </div>
          </el-col>
          <el-col :span="3">
            <div id="dt" style="font-size: 15px;">
              <el-form-item :label="$t('reportmanage.totalDamages')" style="width: 14vw">
                {{ totalDamages }}
              </el-form-item>
            </div>
          </el-col>
          <el-col :span="3">
            <div id="dt" style="font-size: 15px;">
              <el-form-item :label="$t('reportmanage.totalTakes')" style="width: 14vw">
                {{ totalTakes }}
              </el-form-item>
            </div>
          </el-col>
        </el-row>
      </div>
      <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;">
        <el-table height="700" ref="table" :data="reportData"
          :header-cell-style="{ background: '#F2F3F5 ', color: '#1D2129' }">
          <el-table-column prop="id" align="center" :label="$t('reportmanage.id')" min-width="120" />
          <el-table-column prop="glassId" align="center" :label="$t('reportmanage.glassID')" min-width="130" />
          <el-table-column prop="startSlot" align="center" :label="$t('reportmanage.targetSlot')" min-width="120" />
          <el-table-column prop="endSlot" align="center" :label="$t('reportmanage.line')" min-width="120" />
          <el-table-column prop="taskState" align="center" :label="$t('reportmanage.state')" min-width="120">
            <template #default="scope">
              <span v-if="scope.row.taskState == 1">{{ $t('reportmanage.cage') }}</span>
              <span v-if="scope.row.taskState == 2">{{ $t('reportmanage.car') }}</span>
              <span v-if="scope.row.taskState == 3">{{ $t('reportmanage.outed') }}</span>
            </template>
          </el-table-column>
          <el-table-column prop="width" align="center" :label="$t('reportmanage.width')" min-width="120">
            <template #default="scope">
              {{scope.row.width/10}}
            </template>
          </el-table-column>
          <el-table-column prop="height" align="center" :label="$t('reportmanage.height')" min-width="120" >
            <template #default="scope">
              {{scope.row.height/10}}
            </template>
          </el-table-column>
          <el-table-column prop="createTime" align="center" :label="$t('reportmanage.createTime')" min-width="230" />
        </el-table>
      </div>
    </el-card>
  </div>
</template>
<script setup>
import { Delete, Upload } from '@element-plus/icons-vue'
import { ElMessage, ElMessageBox } from 'element-plus'
import { ref, onMounted, onBeforeUnmount, reactive, computed, shallowRef, onUnmounted, watchEffect } from "vue";
import request from "@/utils/request"
import { WebSocketHost, host } from '@/utils/constants'
import { initializeWebSocket, closeWebSocket } from '@/utils/WebSocketService';
import { useI18n } from 'vue-i18n'
const { t } = useI18n()
const report = ref({
  targetSlot: '',
  taskType: '0',
  taskState: '-1',
  line: '0',
  width: '',
  height: ''
});
const reportData = ref([])
const endDate = new Date();
const startDate = new Date();
startDate.setDate(endDate.getDate() - 100);  // 获取一个星期前的时间
// 格式化为 "YYYY-MM-DD" 格式
const formatDate = (date) => {
  const year = date.getFullYear();
  const month = String(date.getMonth() + 1).padStart(2, '0');
  const day = String(date.getDate()).padStart(2, '0');
  return `${year}-${month}-${day}`;
};
const timeRange = ref([formatDate(startDate), formatDate(endDate)]);
const totalCounts = ref(0);
const totalAreas = ref(0);
const totalDamages = ref(0);
const totalTakes = ref(0);
// 查询数据
const selectReportData = async () => {
  const response = await request.post("/cacheVerticalGlass/bigStorageCageOutTask/selectBigStorageCageOutTask?startTime=" + timeRange.value[0] + "&&endTime=" + timeRange.value[1] + "", {
    startTime: timeRange.value[0],
    endTime: timeRange.value[1],
    startSlot: report.value.targetSlot,
    width: report.value.width,
    height: report.value.height,
    taskType: report.value.taskType,
    taskState: report.value.taskState,
    endSlot: report.value.line
  })
  if (response.code === 200) {
    reportData.value = response.data;
    let totalCount = 0;
    let totalArea = 0;
    let totalDamage = 0;
    let totalTake = 0;
    response.data.forEach(item => {
      if (item.taskState == 3) {
        totalCount += 1;
        totalArea += item.width * item.height / 100000000;
      }
      if (item.taskState == 8) {
        totalDamage += 1;
      }
      if (item.taskState == 9) {
        totalTake += 1;
      }
    });
    totalCounts.value = totalCount;
    totalAreas.value = totalArea.toFixed(2);
    totalDamages.value = totalDamage;
    totalTakes.value = totalTake;
    ElMessage.success(response.message);
  } else {
    ElMessage.error(response.message);
  }
};
</script>
UI-Project/src/views/Reportmanage/reportDownCache.vue
New file
@@ -0,0 +1,164 @@
<template>
  <div style="height: 600px;">
    <div style="display: flex; flex-direction: row; align-items: center; margin-top: 20px;">
      <span style="margin-left: 10px;" class="demonstration">{{ $t('reportmanage.productiontime') }}</span>
      <el-date-picker style="margin-left: 10px;" v-model="timeRange" type="daterange" format="YYYY/MM/DD"
        value-format="YYYY-MM-DD" :start-placeholder="$t('reportmanage.starttime')"
        :end-placeholder="$t('reportmanage.endtime')" :default-time="defaultTime" />
      <el-input v-model="report.targetSlot" style="margin-left: 15px;width: 150px" placeholder="请输入格子号" />
      <!-- <el-input v-model="report.width" style="margin-left: 15px;width: 150px" placeholder="请输入宽" />
      <el-input v-model="report.height" style="margin-left: 15px;width: 150px" placeholder="请输入高" /> -->
      <el-select v-model="report.taskType" :placeholder="$t('reportmanage.ctype')" style="margin-left: 10px;">
        <el-option :label="$t('reportmanage.all')" value="-1"></el-option>
        <el-option :label="$t('reportmanage.incomplete')" value="0"></el-option>
        <el-option :label="$t('reportmanage.complete')" value="1"></el-option>
      </el-select>
      <el-select v-model="report.taskState" :placeholder="$t('reportmanage.cstate')" style="margin-left: 10px;">
        <el-option :label="$t('reportmanage.all')" value="-1"></el-option>
        <el-option :label="$t('reportmanage.feed')" value="1"></el-option>
        <el-option :label="$t('reportmanage.out')" value="2"></el-option>
        <el-option :label="$t('reportmanage.straightthrough')" value="3"></el-option>
      </el-select>
      <!-- <el-select v-model="report.line" :placeholder="$t('reportmanage.cprocess')" style="margin-left: 10px;">
        <el-option :label="$t('reportmanage.all')" value="0"></el-option>
        <el-option :label="$t('reportmanage.oneline')" value="2001"></el-option>
        <el-option :label="$t('reportmanage.twoline')" value="2002"></el-option>
      </el-select> -->
      <el-button type="primary" style="margin-left: 10px;" @click="selectReportData()">{{ $t('reportmanage.inquire')
      }}</el-button>
    </div>
    <el-card style="flex: 1;margin-left: 10px;" v-loading="loading">
      <!-- <div style="margin-bottom: 20px">
        <el-row style="margin-top: -15px;margin-bottom: -2px;">
          <el-col :span="3">
            <div id="dta" style="font-size: 15px;">
              <el-form-item :label="$t('reportmanage.totalCounts')" style="width: 14vw">
                {{ totalCounts }}
              </el-form-item>
            </div>
          </el-col>
          <el-col :span="3">
            <div id="dt" style="font-size: 15px;">
              <el-form-item :label="$t('reportmanage.totalAreas')" style="width: 14vw">
                {{ totalAreas }}
              </el-form-item>
            </div>
          </el-col>
          <el-col :span="3">
            <div id="dt" style="font-size: 15px;">
              <el-form-item :label="$t('reportmanage.totalDamages')" style="width: 14vw">
                {{ totalDamages }}
              </el-form-item>
            </div>
          </el-col>
          <el-col :span="3">
            <div id="dt" style="font-size: 15px;">
              <el-form-item :label="$t('reportmanage.totalTakes')" style="width: 14vw">
                {{ totalTakes }}
              </el-form-item>
            </div>
          </el-col>
        </el-row>
      </div> -->
      <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;">
        <el-table height="750" ref="table" :data="reportData"
          :header-cell-style="{ background: '#F2F3F5 ', color: '#1D2129' }">
          <el-table-column prop="glassId" align="center" :label="$t('reportmanage.glassID')" min-width="130" />
          <el-table-column prop="startCell" align="center" :label="$t('reportmanage.targetSlot')" min-width="120" />
          <el-table-column prop="endCell" align="center" :label="$t('reportmanage.endSlot')" min-width="120" />
          <el-table-column prop="taskStatus" align="center" :label="$t('reportmanage.state')" min-width="120">
            <template #default="scope">
              <span v-if="scope.row.taskStatus == 0">{{ $t('reportmanage.incomplete') }}</span>
              <span v-if="scope.row.taskStatus == 1">{{ $t('reportmanage.complete') }}</span>
            </template>
          </el-table-column>
          <el-table-column prop="taskType" align="center" :label="$t('reportmanage.type')" min-width="120">
            <template #default="scope">
              <span v-if="scope.row.taskType == 1">{{ $t('reportmanage.cage') }}</span>
              <span v-if="scope.row.taskType == 2">{{ $t('reportmanage.out') }}</span>
              <span v-if="scope.row.taskType == 3">{{ $t('reportmanage.straightthrough') }}</span>
            </template>
          </el-table-column>
          <el-table-column prop="createTime" align="center" :label="$t('reportmanage.createTime')" min-width="230" />
        </el-table>
      </div>
    </el-card>
  </div>
</template>
<script setup>
import { Delete, Upload } from '@element-plus/icons-vue'
import { ElMessage, ElMessageBox } from 'element-plus'
import { ref, onMounted, onBeforeUnmount, reactive, computed, shallowRef, onUnmounted, watchEffect } from "vue";
import request from "@/utils/request"
import { WebSocketHost, host } from '@/utils/constants'
import { initializeWebSocket, closeWebSocket } from '@/utils/WebSocketService';
import { useI18n } from 'vue-i18n'
const { t } = useI18n()
const report = ref({
  targetSlot: '',
  taskType: '-1',
  taskState: '-1',
  line: '0',
  width: '',
  height: ''
});
const reportData = ref([])
const endDate = new Date();
const startDate = new Date();
startDate.setDate(endDate.getDate() - 100);  // 获取一个星期前的时间
// 格式化为 "YYYY-MM-DD" 格式
const formatDate = (date) => {
  const year = date.getFullYear();
  const month = String(date.getMonth() + 1).padStart(2, '0');
  const day = String(date.getDate()).padStart(2, '0');
  return `${year}-${month}-${day}`;
};
const timeRange = ref([formatDate(startDate), formatDate(endDate)]);
const totalCounts = ref(0);
const totalAreas = ref(0);
const totalDamages = ref(0);
const totalTakes = ref(0);
// 查询数据
const selectReportData = async () => {
  const response = await request.post("/unLoadGlass/downGlassTask/selectDownGlassTask?startTime=" + timeRange.value[0] + "&&endTime=" + timeRange.value[1] + "", {
    startTime: timeRange.value[0],
    endTime: timeRange.value[1],
    startCell: report.value.targetSlot,
    width: report.value.width,
    height: report.value.height,
    taskType: report.value.taskType,
    taskStatus: report.value.taskState,
    endCell: report.value.line
  })
  if (response.code === 200) {
    reportData.value = response.data;
    let totalCount = 0;
    let totalArea = 0;
    let totalDamage = 0;
    let totalTake = 0;
    // response.data.forEach(item => {
    //   if (item.taskState == 3) {
    //     totalCount += 1;
    //     totalArea += item.width * item.height / 100000000;
    //   }
    //   if (item.taskState == 8) {
    //     totalDamage += 1;
    //   }
    //   if (item.taskState == 9) {
    //     totalTake += 1;
    //   }
    // });
    totalCounts.value = totalCount;
    totalAreas.value = totalArea.toFixed(2);
    totalDamages.value = totalDamage;
    totalTakes.value = totalTake;
    ElMessage.success(response.message);
  } else {
    ElMessage.error(response.message);
  }
};
</script>
UI-Project/src/views/Reportmanage/reportEdgCache.vue
New file
@@ -0,0 +1,164 @@
<template>
  <div style="height: 600px;">
    <div style="display: flex; flex-direction: row; align-items: center; margin-top: 20px;">
      <span style="margin-left: 10px;" class="demonstration">{{ $t('reportmanage.productiontime') }}</span>
      <el-date-picker style="margin-left: 10px;" v-model="timeRange" type="daterange" format="YYYY/MM/DD"
        value-format="YYYY-MM-DD" :start-placeholder="$t('reportmanage.starttime')"
        :end-placeholder="$t('reportmanage.endtime')" :default-time="defaultTime" />
      <el-input v-model="report.targetSlot" style="margin-left: 15px;width: 150px" placeholder="请输入格子号" />
      <!-- <el-input v-model="report.width" style="margin-left: 15px;width: 150px" placeholder="请输入宽" />
      <el-input v-model="report.height" style="margin-left: 15px;width: 150px" placeholder="请输入高" /> -->
      <el-select v-model="report.taskType" :placeholder="$t('reportmanage.ctype')" style="margin-left: 10px;">
        <el-option :label="$t('reportmanage.all')" value="-1"></el-option>
        <el-option :label="$t('reportmanage.incomplete')" value="0"></el-option>
        <el-option :label="$t('reportmanage.complete')" value="1"></el-option>
      </el-select>
      <el-select v-model="report.taskState" :placeholder="$t('reportmanage.cstate')" style="margin-left: 10px;">
        <el-option :label="$t('reportmanage.all')" value="-1"></el-option>
        <el-option :label="$t('reportmanage.feed')" value="1"></el-option>
        <el-option :label="$t('reportmanage.out')" value="2"></el-option>
        <el-option :label="$t('reportmanage.straightthrough')" value="3"></el-option>
      </el-select>
      <el-select v-model="report.line" :placeholder="$t('reportmanage.cprocess')" style="margin-left: 10px;">
        <el-option :label="$t('reportmanage.all')" value="0"></el-option>
        <el-option :label="$t('reportmanage.oneline')" value="2001"></el-option>
        <el-option :label="$t('reportmanage.twoline')" value="2002"></el-option>
      </el-select>
      <el-button type="primary" style="margin-left: 10px;" @click="selectReportData()">{{ $t('reportmanage.inquire')
      }}</el-button>
    </div>
    <el-card style="flex: 1;margin-left: 10px;" v-loading="loading">
      <!-- <div style="margin-bottom: 20px">
        <el-row style="margin-top: -15px;margin-bottom: -2px;">
          <el-col :span="3">
            <div id="dta" style="font-size: 15px;">
              <el-form-item :label="$t('reportmanage.totalCounts')" style="width: 14vw">
                {{ totalCounts }}
              </el-form-item>
            </div>
          </el-col>
          <el-col :span="3">
            <div id="dt" style="font-size: 15px;">
              <el-form-item :label="$t('reportmanage.totalAreas')" style="width: 14vw">
                {{ totalAreas }}
              </el-form-item>
            </div>
          </el-col>
          <el-col :span="3">
            <div id="dt" style="font-size: 15px;">
              <el-form-item :label="$t('reportmanage.totalDamages')" style="width: 14vw">
                {{ totalDamages }}
              </el-form-item>
            </div>
          </el-col>
          <el-col :span="3">
            <div id="dt" style="font-size: 15px;">
              <el-form-item :label="$t('reportmanage.totalTakes')" style="width: 14vw">
                {{ totalTakes }}
              </el-form-item>
            </div>
          </el-col>
        </el-row>
      </div> -->
      <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;">
        <el-table height="750" ref="table" :data="reportData"
          :header-cell-style="{ background: '#F2F3F5 ', color: '#1D2129' }">
          <el-table-column prop="glassId" align="center" :label="$t('reportmanage.glassID')" min-width="130" />
          <el-table-column prop="startCell" align="center" :label="$t('reportmanage.targetSlot')" min-width="120" />
          <el-table-column prop="endCell" align="center" :label="$t('reportmanage.line')" min-width="120" />
          <el-table-column prop="taskStatus" align="center" :label="$t('reportmanage.state')" min-width="120">
            <template #default="scope">
              <span v-if="scope.row.taskStatus == 0">{{ $t('reportmanage.incomplete') }}</span>
              <span v-if="scope.row.taskStatus == 1">{{ $t('reportmanage.complete') }}</span>
            </template>
          </el-table-column>
          <el-table-column prop="taskType" align="center" :label="$t('reportmanage.type')" min-width="120">
            <template #default="scope">
              <span v-if="scope.row.taskType == 1">{{ $t('reportmanage.cage') }}</span>
              <span v-if="scope.row.taskType == 2">{{ $t('reportmanage.out') }}</span>
              <span v-if="scope.row.taskType == 3">{{ $t('reportmanage.straightthrough') }}</span>
            </template>
          </el-table-column>
          <el-table-column prop="createTime" align="center" :label="$t('reportmanage.createTime')" min-width="230" />
        </el-table>
      </div>
    </el-card>
  </div>
</template>
<script setup>
import { Delete, Upload } from '@element-plus/icons-vue'
import { ElMessage, ElMessageBox } from 'element-plus'
import { ref, onMounted, onBeforeUnmount, reactive, computed, shallowRef, onUnmounted, watchEffect } from "vue";
import request from "@/utils/request"
import { WebSocketHost, host } from '@/utils/constants'
import { initializeWebSocket, closeWebSocket } from '@/utils/WebSocketService';
import { useI18n } from 'vue-i18n'
const { t } = useI18n()
const report = ref({
  targetSlot: '',
  taskType: '-1',
  taskState: '-1',
  line: '0',
  width: '',
  height: ''
});
const reportData = ref([])
const endDate = new Date();
const startDate = new Date();
startDate.setDate(endDate.getDate() - 100);  // 获取一个星期前的时间
// 格式化为 "YYYY-MM-DD" 格式
const formatDate = (date) => {
  const year = date.getFullYear();
  const month = String(date.getMonth() + 1).padStart(2, '0');
  const day = String(date.getDate()).padStart(2, '0');
  return `${year}-${month}-${day}`;
};
const timeRange = ref([formatDate(startDate), formatDate(endDate)]);
const totalCounts = ref(0);
const totalAreas = ref(0);
const totalDamages = ref(0);
const totalTakes = ref(0);
// 查询数据
const selectReportData = async () => {
  const response = await request.post("/cacheGlass/taskCache/selectTaskCache?startTime=" + timeRange.value[0] + "&&endTime=" + timeRange.value[1] + "", {
    startTime: timeRange.value[0],
    endTime: timeRange.value[1],
    startCell: report.value.targetSlot,
    width: report.value.width,
    height: report.value.height,
    taskType: report.value.taskType,
    taskStatus: report.value.taskState,
    endCell: report.value.line
  })
  if (response.code === 200) {
    reportData.value = response.data;
    let totalCount = 0;
    let totalArea = 0;
    let totalDamage = 0;
    let totalTake = 0;
    // response.data.forEach(item => {
    //   if (item.taskState == 3) {
    //     totalCount += 1;
    //     totalArea += item.width * item.height / 100000000;
    //   }
    //   if (item.taskState == 8) {
    //     totalDamage += 1;
    //   }
    //   if (item.taskState == 9) {
    //     totalTake += 1;
    //   }
    // });
    totalCounts.value = totalCount;
    totalAreas.value = totalArea.toFixed(2);
    totalDamages.value = totalDamage;
    totalTakes.value = totalTake;
    ElMessage.success(response.message);
  } else {
    ElMessage.error(response.message);
  }
};
</script>
UI-Project/src/views/Slicecage/slicecage.vue
@@ -18,6 +18,7 @@
const dialogFormVisibleb = ref(false)
const dialogFormVisiblec = ref(false)
const dialogFormVisibles = ref(false)
const dialogFormVisibleq = ref(false)
const tableData = ref([])
const tableDatagh = ref([])
const tableDatab = ref([])
@@ -27,6 +28,7 @@
const tableDatae = ref([])
const tableDatax = ref([])
const tableDatas = ref([])
const tableDataq = ref([])
const carPosition = ref([])
const ganghua = ref('')
const adjustedRects = ref([]);
@@ -712,6 +714,19 @@
  }
}
const fetchFlowss = async () => {
  try {
    const response = await request.post('/cacheVerticalGlass/bigStorageCageDetails/selectFlowCardCount');
    if (response.code === 200) {
      tableDataq.value = response.data
    } else {
      ElMessage.warning(response.msg)
    }
  } catch (error) {
    // console.error('Error fetching rects :', error);
  }
}
const scheduleTime = async () => {
  try {
    const response = await request.post('/cacheVerticalGlass/bigStorageCageDetails/scheduleTime')
@@ -1014,11 +1029,15 @@
      $t('searchOrder.dutyinformation') }}</el-button>
    <el-button style="margin-top: 5px;margin-left: 10px;" id="searchButton" type="info"
      @click="dialogFormVisibles = true; fetchFlows()">{{ $t('searchOrder.searchlayout') }}</el-button>
    <el-button style="margin-top: 5px;margin-left: 10px;" id="searchButton" type="info"
      @click="dialogFormVisibleq = true; fetchFlowss()">{{ $t('searchOrder.processcardinquiry') }}</el-button>
    <el-switch style="margin-top: 5px;margin-left: 10px;" v-model="ganghua" class="mb-2"
      :inactive-text="$t('searchOrder.temperedswitch')" @change="handleChange" />
    <el-button style="margin-top: 10px;margin-left: 10px;margin-bottom: 10px;" id="searchButton" type="primary"
    <!-- <el-button style="margin-top: 10px;margin-left: 10px;margin-bottom: 10px;" id="searchButton" type="primary"
      @click="dialogFormVisibleaDownGlasss = true">标签打印
    </el-button>
    </el-button> -->
    <div style="display: flex;">
      <el-card style="flex: 1;margin-left: 10px;margin-top: 5px;" v-loading="loading">
        <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;max-height: 240px;">
@@ -1672,6 +1691,18 @@
      </el-table-column>
    </el-table>
  </el-dialog>
  <el-dialog v-model="dialogFormVisibleq" top="5vh" width="85%" :title="$t('searchOrder.processcardqueriesa')">
    <el-table ref="table" style="margin-top: 20px;height: 500px;" :data="tableDataq"
      :header-cell-style="{ background: '#F2F3F5 ', color: '#1D2129' }">
      <el-table-column prop="engineerId" fixed align="center" :label="$t('searchOrder.projectnumber')" />
      <el-table-column prop="flowCardIdCount" align="center" :label="$t('searchOrder.cardnumber')" />
      <el-table-column prop="totalTemper" align="center" :label="$t('searchOrder.totalTemper')" />
      <el-table-column prop="glassTotalArea" align="center" :label="$t('searchOrder.totalAreas')" />
      <el-table-column prop="cageTemper" align="center" :label="$t('searchOrder.cageTemper')" />
      <el-table-column prop="cageArea" align="center" :label="$t('searchOrder.cageArea')" />
    </el-table>
  </el-dialog>
  <el-dialog v-model="dialogFormVisibleaDownGlasss" top="2vh" width="97%" title="人工下片信息">
    <div style="display:flex;justify-content: space-around;">
      <el-card
hangzhoumesParent/common/servicebase/src/main/java/com/mes/order/controller/OrderController.java
@@ -2,6 +2,7 @@
import com.mes.order.entity.Orderdetail;
import com.mes.order.entity.Orders;
import com.mes.order.service.OrdersService;
import com.mes.pp.entity.OrderChange;
import com.mes.utils.Result;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
@@ -35,5 +36,11 @@
        log.info("显示订单详情信息:{}", glass);
        return Result.build(200, "", glass);
    }
    @ApiOperation("订单变更")
    @PostMapping("/orderChange") //显示工程选择信息
    public Result orderChange(@RequestBody List<OrderChange> orderChanges) {
        return Result.build(200, "传入参数"+orderChanges, ordersService.orderChange(orderChanges));
    }
}
hangzhoumesParent/common/servicebase/src/main/java/com/mes/order/service/OrdersService.java
@@ -4,6 +4,7 @@
import com.mes.order.entity.Order;
import com.mes.order.entity.Orderdetail;
import com.mes.order.entity.Orders;
import com.mes.pp.entity.OrderChange;
import java.util.List;
@@ -20,4 +21,6 @@
    List<Orders> selectOrders();
    List<Orderdetail> selectOrderdetail(Orders orders);
    List<OrderChange> orderChange(List<OrderChange> orderChanges);
}
hangzhoumesParent/common/servicebase/src/main/java/com/mes/order/service/impl/OrdersServiceImpl.java
@@ -2,21 +2,28 @@
import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.mes.glassinfo.entity.GlassInfo;
import com.mes.glassinfo.mapper.GlassInfoMapper;
import com.mes.glassinfo.service.GlassInfoService;
import com.mes.order.entity.Orderdetail;
import com.mes.order.entity.Orders;
import com.mes.order.mapper.OrderdetailMapper;
import com.mes.order.mapper.OrdersMapper;
import com.mes.order.service.OrdersService;
import com.mes.pp.entity.OrderChange;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.Collections;
import java.util.List;
/**
 * <p>
 *  服务实现类
 * 服务实现类
 * </p>
 *
 * @author wu
@@ -24,9 +31,15 @@
 */
@Service
@DS("sd")
@Slf4j
public class OrdersServiceImpl extends ServiceImpl<OrdersMapper, Orders> implements OrdersService {
@Autowired
private OrderdetailMapper orderdetailMapper;
    @Resource
    private OrderdetailMapper orderdetailMapper;
    @Resource
    private GlassInfoService glassInfoService;
    @Resource
    private GlassInfoMapper glassInfoMapper;
    @Override
    public List<Orders> selectOrders() {
        //获取所有未完成的订单
@@ -41,4 +54,24 @@
        queryWrapper.eq("order_id", orders.getOrderId());
        return orderdetailMapper.selectList(queryWrapper);
    }
    @Override
    public List<OrderChange> orderChange(List<OrderChange> orderChanges) {
        for (OrderChange orderChange : orderChanges) {
            int affectedRows = glassInfoMapper.update(null,
                    new LambdaUpdateWrapper<GlassInfo>()
                            .eq(GlassInfo::getFlowCardId, orderChange.getOldProcessId())
                            .eq(GlassInfo::getGlassType, orderChange.getOldOrderNumber())
                            .eq(GlassInfo::getLayer, orderChange.getOldTechnologyNumber())
                            .set(GlassInfo::getFlowCardId, orderChange.getNewProcessId())
                            .set(GlassInfo::getGlassType, orderChange.getNewOrderNumber())
                            .set(GlassInfo::getLayer, orderChange.getNewTechnologyNumber())
                            .last("limit " + orderChange.getChangeNumber())
                            .inSql(GlassInfo::getGlassId, "select glass_id from edg_storage_cage_details where flow_card_id ='" + orderChange.getOldProcessId() +
                                    "' and glass_id not in (select glass_id from damage where (type=8 or type=9) and process_id='" + orderChange.getOldProcessId() + "')"));
            orderChange.setChangedNumber(affectedRows);
        }
        log.info("订单变更:" + orderChanges);
        return orderChanges;
    }
}
hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/OrderChange.java
New file
@@ -0,0 +1,65 @@
package com.mes.pp.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
 * <p>
 *
 * </p>
 *
 * @author wu
 * @since 2024-08-07
 */
@Data
@EqualsAndHashCode(callSuper = false)
public class OrderChange implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * 旧流程卡号
     */
    private String oldProcessId;
    /**
     * 旧序号
     */
    private Integer oldOrderNumber;
    /**
     * 旧层号
     */
    private Integer oldTechnologyNumber;
    /**
     * 信流程卡号
     */
    private String newProcessId;
    /**
     * 新序号
     */
    private Integer newOrderNumber;
    /**
     * 新层号
     */
    private Integer newTechnologyNumber;
    /**
     * 变更数量
     */
    private Integer changeNumber;
    /**
     * 已变更数量
     */
    private Integer changedNumber;
}
hangzhoumesParent/common/servicebase/src/main/java/com/mes/temperingglass/mapper/TemperingGlassInfoMapper.java
@@ -22,7 +22,7 @@
    boolean saveBatch(@Param(value = "list") List<TemperingGlassInfo> list);
    //绕过全局逻辑进行查询
    @Select("SELECT * FROM tempering_glass_info " + "WHERE tempering_layout_id = #{temperingLayoutId} " + "AND engineer_id = #{engineerId} " + "ORDER BY tempering_layout_id DESC, tempering_feed_sequence ASC")
    @Select("SELECT * FROM tempering_glass_info " + "WHERE tempering_layout_id = #{temperingLayoutId} " + "AND engineer_id = #{engineerId} " + "AND deleted=0 ORDER BY tempering_layout_id DESC, tempering_feed_sequence ASC")
    List<TemperingGlassInfo> selectByEngineerIdAndLayoutId(String engineerId, Integer temperingLayoutId);
    //绕过全局逻辑进行修改
    @Update("UPDATE tempering_glass_info " +
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/CacheGlassTask.java
@@ -399,13 +399,13 @@
                    new LambdaQueryWrapper<GlassInfo>()
                            .eq(GlassInfo::getGlassId, glassId)
            );
            if(glassInfos!=null){
            if (glassInfos != null) {
                if (Math.max(glassInfos.getWidth(), glassInfos.getHeight()) > Integer.parseInt(firstLength) && out08Glassstate == 1) {
                    endcell = Const.A09_OUT_TARGET_POSITION;
                } else {
                    endcell = computerLineByState(out08Glassstate, out10Glassstate);
                }
            }else{
            } else {
                endcell = computerLineByState(out08Glassstate, out10Glassstate);
            }
            if (out08Glassstate == 1 && out10Glassstate == 1) {
@@ -925,18 +925,17 @@
        }
    }
    @Scheduled(fixedDelay = 500)
    @Scheduled(fixedDelay = 3000)
    public void CacheGlassTasks() {
        JSONObject jsonObject = new JSONObject();
        List<Map<String, Object>> currentCutTerritorys = edgStorageCageDetailsService.selectCutTerritory();
        jsonObject.append("currentCutTerritory", currentCutTerritorys);
        //log.info("本次识别版图{},++++{}",engineerId,currentCutTerritorys);
        //卧室缓存笼内信息
        List<Map<String, Object>> EdgStorageCageinfos = edgStorageCageService.selectEdgStorageCages();
        jsonObject.append("EdgStorageCageinfos", EdgStorageCageinfos);
        ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("cacheGlass");
        if (sendwServer != null) {
            JSONObject jsonObject = new JSONObject();
            List<Map<String, Object>> currentCutTerritorys = edgStorageCageDetailsService.selectCutTerritory();
            jsonObject.append("currentCutTerritory", currentCutTerritorys);
            //log.info("本次识别版图{},++++{}",engineerId,currentCutTerritorys);
            //卧室缓存笼内信息
            List<Map<String, Object>> EdgStorageCageinfos = edgStorageCageService.selectEdgStorageCages();
            jsonObject.append("EdgStorageCageinfos", EdgStorageCageinfos);
            for (WebSocketServer webserver : sendwServer) {
                if (webserver != null) {
                    webserver.sendMessage(jsonObject.toString());
@@ -952,7 +951,7 @@
        }
    }
    @Scheduled(fixedDelay = 500)
    @Scheduled(fixedDelay = 3000)
    public void cacheGlassIsRun() {
        JSONObject jsonObject = new JSONObject();
        //正在进行的任务
@@ -970,7 +969,7 @@
        }
    }
    @Scheduled(fixedDelay = 500)
    @Scheduled(fixedDelay = 3000)
    public void CacheGlassTaskss() {
        JSONObject jsonObject = new JSONObject();
        //log.info("本次识别版图{},++++{}",engineerId,currentCutTerritorys);
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/controller/TaskCacheController.java
@@ -2,6 +2,7 @@
import com.mes.edgglasstask.entity.request.IdentWornRequest;
import com.mes.edgstoragecage.service.EdgStorageCageDetailsService;
import com.mes.taskcache.entity.TaskCache;
import com.mes.taskcache.service.TaskCacheService;
import com.mes.utils.Result;
import io.swagger.annotations.Api;
@@ -73,5 +74,12 @@
        return Result.build(200, "成功", EdgTasks);
    }
    @ApiOperation("卧理任务报表")
    @PostMapping("/selectTaskCache")
    public Result selectTaskCache(@RequestBody TaskCache taskCache,
                                              @RequestParam(required = false) String startTime,
                                              @RequestParam(required = false) String endTime) {
        return Result.build(200, "查询成功", taskCacheService.selectTaskCache(taskCache, startTime, endTime));
    }
}
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/entity/TaskCache.java
@@ -2,6 +2,7 @@
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.models.auth.In;
import lombok.Data;
import java.util.Date;
@@ -19,19 +20,19 @@
    /**
     * 起始
     */
    private int startCell;
    private Integer startCell;
    /**
     * 结束
     */
    private int endCell;
    private Integer endCell;
    /**
     * 任务类型
     */
    private int taskType;
    private Integer taskType;
    /**
     * 任务状态
     */
    private int taskStatus;
    private Integer taskStatus;
    /**
     * 创建时间
     */
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/service/TaskCacheService.java
@@ -74,5 +74,11 @@
     */
    TaskCache selectLastOutCacheInfo(int line);
    /**
     * 查询  任务条件
     * @param startTime
     * @param endTime
     * @return
     */
    List<TaskCache> selectTaskCache(TaskCache taskCache, String startTime, String endTime);
}
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/service/impl/TaskCacheServiceImpl.java
@@ -21,6 +21,7 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.*;
/**
@@ -35,12 +36,12 @@
@Service
public class TaskCacheServiceImpl extends MPJBaseServiceImpl<TaskCacheMapper, TaskCache> implements TaskCacheService {
    @Autowired
    @Resource
    EdgStorageCageDetailsMapper edgStorageCageDetailsMapper;
    @Autowired
    @Resource
    GlassInfoMapper glassInfoMapper;
    @Autowired
    @Resource
    private TaskCacheMapper taskCacheMapper;
@@ -181,6 +182,36 @@
    }
    @Override
    public List<TaskCache> selectTaskCache(TaskCache taskCache, String startTime, String endTime){
        if (endTime != null && !endTime.isEmpty()) {
            endTime = endTime + " 23:59:59";
        }
        LambdaQueryWrapper<TaskCache> wrapper = new LambdaQueryWrapper<>();
        if (taskCache.getStartCell() != null) {
            wrapper.eq(TaskCache::getStartCell, taskCache.getStartCell());
        }
        if (taskCache.getEndCell() != 0) {
            wrapper.eq(TaskCache::getEndCell, taskCache.getEndCell());
        }
        if (taskCache.getTaskStatus() != -1) {
            wrapper.eq(TaskCache::getTaskStatus, taskCache.getTaskStatus());
        }
        if (taskCache.getTaskType() != -1) {
            wrapper.eq(TaskCache::getTaskType, taskCache.getTaskType());
        }
        if (startTime != null && !startTime.isEmpty()) {
            wrapper.ge(TaskCache::getCreateTime, startTime);
        }
        if (endTime != null && !endTime.isEmpty()) {
            wrapper.le(TaskCache::getCreateTime, endTime);
        }
        wrapper.orderByDesc(TaskCache::getCreateTime);
        wrapper.and(item -> item.eq(TaskCache::getDeleted, 0)
                .or()
                .eq(TaskCache::getDeleted, 1));
        wrapper.between(TaskCache::getCreateTime, startTime, endTime);
        return baseMapper.selectList(wrapper);
    }
}
hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/application.yml
@@ -13,6 +13,12 @@
      pool:
        size: 10
      thread-name-prefix: task-cache
  druid:
    initial-size: 5
    min-idle: 5
    max-active: 10
    time-between-eviction-runs-millis: 60000
    connection-properties: druid,stat,mergeSql=true,druid,stat ,slowSalMillis=5000
mybatis-plus:
  mapper-locations: classpath*:mapper/*.xml
#  configuration:
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/controller/BigStorageCageDetailsController.java
@@ -126,6 +126,12 @@
        return Result.build(200, "查询成功", flowCardIdCount);
    }
    @ApiOperation("流程卡个数查询")
        @PostMapping("/selectFlowCardCount")
    public Result selectFlowCardCount() {
        return Result.build(200, "查询成功", bigStorageCageDetailsService.selectFlowCardCount());
    }
    @ApiOperation("指定流程卡")
    @PostMapping("/appointFlowCard")
    public Result appointFlowCard(@RequestBody BigStorageCageDetails bigStorageCageDetails) {
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/dto/FlowCardDTO.java
New file
@@ -0,0 +1,41 @@
package com.mes.bigstorage.entity.dto;
import lombok.Data;
/**
 * @Author : zhoush
 * @Date: 2024/6/13 15:51
 * @Description:
 */
@Data
public class FlowCardDTO {
    /**
     * 工程号
     */
    private String engineerId;
    /**
     * 流程卡个数
     */
    private Integer flowCardIdCount;
    /**
     * 总面积
     */
    private Double glassTotalArea;
    /**
     * 总炉数
     */
    private Integer totalTemper;
    /**
     * 笼内炉数
     */
    private Integer cageTemper;
    /**
     * 笼内面积
     */
    private Double cageArea;
}
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/mapper/BigStorageCageDetailsMapper.java
@@ -2,6 +2,7 @@
import com.github.yulichang.base.MPJBaseMapper;
import com.mes.bigstorage.entity.BigStorageCageDetails;
import com.mes.bigstorage.entity.dto.FlowCardDTO;
import com.mes.bigstorage.entity.dto.SlotSequenceDTO;
import com.mes.bigstorage.entity.dto.TemperingLayoutDTO;
import com.mes.bigstoragetask.entity.UpdateBigStorageCageDTO;
@@ -47,4 +48,6 @@
    void updateBySlot(@Param(value = "list") List<UpdateBigStorageCageDTO> glassList, @Param(value = "state") int state);
    List<Map<String, Object>> selectTemperingGlassCount();
    List<FlowCardDTO> selectFlowCardCount();
}
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/BigStorageCageDetailsService.java
@@ -3,6 +3,7 @@
import com.baomidou.mybatisplus.extension.service.IService;
import com.mes.bigstorage.entity.BigStorageCageDetails;
import com.mes.bigstorage.entity.BigStorageDTO;
import com.mes.bigstorage.entity.dto.FlowCardDTO;
import com.mes.bigstorage.entity.dto.SlotSequenceDTO;
import com.mes.bigstorage.entity.dto.TemperingLayoutDTO;
import com.mes.bigstoragetask.entity.UpdateBigStorageCageDTO;
@@ -82,4 +83,6 @@
    long scheduleTime();
    void cancelOutTask();
    List<FlowCardDTO> selectFlowCardCount();
}
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageCageDetailsServiceImpl.java
@@ -11,6 +11,7 @@
import com.mes.bigstorage.entity.BigStorageCage;
import com.mes.bigstorage.entity.BigStorageCageDetails;
import com.mes.bigstorage.entity.BigStorageDTO;
import com.mes.bigstorage.entity.dto.FlowCardDTO;
import com.mes.bigstorage.entity.dto.SlotSequenceDTO;
import com.mes.bigstorage.entity.dto.TemperingLayoutDTO;
import com.mes.bigstorage.mapper.BigStorageCageDetailsMapper;
@@ -558,18 +559,24 @@
                        .in(BigStorageCageOutTask::getEndSlot, Const.OUT_TARGET_POSITION_ALL)
                        .eq(BigStorageCageOutTask::getTaskState, Const.BIG_STORAGE_OUT_NEW)
        );
        List<String> outGlassId = bigStorageCageOutTasks.stream().map(BigStorageCageOutTask::getGlassId).collect(Collectors.toList());
        temperingGlassInfoService.remove(
                new LambdaUpdateWrapper<TemperingGlassInfo>()
                        .in(TemperingGlassInfo::getGlassId, outGlassId)
        );
        bigStorageCageDetailsService.update(
                new LambdaUpdateWrapper<BigStorageCageDetails>()
                        .set(BigStorageCageDetails::getState, Const.GLASS_STATE_IN)
                        .eq(BigStorageCageDetails::getState, Const.GLASS_STATE_OUT_ING)
                        .in(BigStorageCageDetails::getGlassId, outGlassId)
        );
        bigStorageCageOutTaskService.deleteTask(bigStorageCageOutTasks);
        if(bigStorageCageOutTasks.size()>0){
            List<String> outGlassId = bigStorageCageOutTasks.stream().map(BigStorageCageOutTask::getGlassId).collect(Collectors.toList());
            temperingGlassInfoService.remove(
                    new LambdaUpdateWrapper<TemperingGlassInfo>()
                            .in(TemperingGlassInfo::getGlassId, outGlassId)
            );
            bigStorageCageDetailsService.update(
                    new LambdaUpdateWrapper<BigStorageCageDetails>()
                            .set(BigStorageCageDetails::getState, Const.GLASS_STATE_IN)
                            .eq(BigStorageCageDetails::getState, Const.GLASS_STATE_OUT_ING)
                            .in(BigStorageCageDetails::getGlassId, outGlassId)
            );
            bigStorageCageOutTaskService.deleteTask(bigStorageCageOutTasks);
        }
    }
    @Override
    public List<FlowCardDTO> selectFlowCardCount(){
        return baseMapper.selectFlowCardCount();
    }
}
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/controller/BigStorageCageFeedTaskController.java
@@ -44,40 +44,7 @@
    public Result selectBigStorageCageFeedTask(@RequestBody BigStorageCageFeedTask bigStorageCageFeedTask,
                                               @RequestParam(required = false) String startTime,
                                               @RequestParam(required = false) String endTime) {
        if (endTime != null && !endTime.isEmpty()) {
            endTime = endTime + " 23:59:59";
        }
        LambdaQueryWrapper<BigStorageCageFeedTask> wrapper = new LambdaQueryWrapper<>();
        if (bigStorageCageFeedTask.getTargetSlot() != null) {
            wrapper.eq(BigStorageCageFeedTask::getTargetSlot, bigStorageCageFeedTask.getTargetSlot());
        }
        if (bigStorageCageFeedTask.getWidth() != null) {
            wrapper.eq(BigStorageCageFeedTask::getWidth, bigStorageCageFeedTask.getWidth());
        }
        if (bigStorageCageFeedTask.getHeight() != null) {
            wrapper.eq(BigStorageCageFeedTask::getHeight, bigStorageCageFeedTask.getHeight());
        }
        if (bigStorageCageFeedTask.getLine() != 0) {
            wrapper.eq(BigStorageCageFeedTask::getLine, bigStorageCageFeedTask.getLine());
        }
        if (bigStorageCageFeedTask.getTaskState() != -1) {
            wrapper.eq(BigStorageCageFeedTask::getTaskState, bigStorageCageFeedTask.getTaskState());
        }
        if (bigStorageCageFeedTask.getTaskType() != 0) {
            wrapper.eq(BigStorageCageFeedTask::getTaskType, bigStorageCageFeedTask.getTaskType());
        }
        if (startTime != null && !startTime.isEmpty()) {
            wrapper.ge(BigStorageCageFeedTask::getCreateTime, startTime);
        }
        if (endTime != null && !endTime.isEmpty()) {
            wrapper.le(BigStorageCageFeedTask::getCreateTime, endTime);
        }
        wrapper.orderByDesc(BigStorageCageFeedTask::getId);
        wrapper.and(item -> item.eq(BigStorageCageFeedTask::getDeleted, 0)
                .or()
                .eq(BigStorageCageFeedTask::getDeleted, 1));
        wrapper.between(BigStorageCageFeedTask::getCreateTime, startTime, endTime);
        return Result.build(200, "查询成功", bigStorageCageFeedTaskService.list(wrapper));
        return Result.build(200, "查询成功", bigStorageCageFeedTaskService.selectBigStorageCageFeedTask(bigStorageCageFeedTask, startTime, endTime));
    }
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/controller/BigStorageCageOutTaskController.java
@@ -1,12 +1,16 @@
package com.mes.bigstoragetask.controller;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.mes.bigstoragetask.entity.BigStorageCageFeedTask;
import com.mes.bigstoragetask.entity.BigStorageCageOutTask;
import com.mes.bigstoragetask.service.BigStorageCageOutTaskService;
import com.mes.temperingglass.entity.TemperingGlassInfo;
import com.mes.temperingglass.service.TemperingGlassInfoService;
import com.mes.utils.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.tomcat.util.bcel.Const;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@@ -14,7 +18,7 @@
/**
 * <p>
 *  前端控制器
 * 前端控制器
 * </p>
 *
 * @author zhoush
@@ -27,13 +31,34 @@
    @Autowired
    private BigStorageCageOutTaskService bigStorageCageOutTaskService;
    @Autowired
    private TemperingGlassInfoService temperingGlassInfoService;
    @ApiOperation("出片任务修改")
    @PostMapping("/updatebigStorageCageOutTask")
    public Result deleteBigStorageCageDetails(@RequestBody BigStorageCageOutTask bigStorageCageOutTask) {
        if (bigStorageCageOutTask.getTaskState() > 3) {
            temperingGlassInfoService.remove(
                    new LambdaUpdateWrapper<TemperingGlassInfo>()
                            .in(TemperingGlassInfo::getGlassId, bigStorageCageOutTask.getGlassId())
            );
        } else {
            temperingGlassInfoService.update(
                    new LambdaUpdateWrapper<TemperingGlassInfo>()
                            .in(TemperingGlassInfo::getGlassId, bigStorageCageOutTask.getGlassId())
                            .set(TemperingGlassInfo::getState, 0)
            );
        }
        bigStorageCageOutTaskService.updateById(bigStorageCageOutTask);
        return Result.build(200, "修改成功", 1);
    }
    @ApiOperation("出片任务报表")
    @PostMapping("/selectBigStorageCageOutTask")
    public Result selectBigStorageCageOutTask(@RequestBody BigStorageCageOutTask bigStorageCageOutTask,
                                               @RequestParam(required = false) String startTime,
                                               @RequestParam(required = false) String endTime) {
        return Result.build(200, "查询成功", bigStorageCageOutTaskService.selectBigStorageCageOutTask(bigStorageCageOutTask, startTime, endTime));
    }
}
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/entity/BigStorageCageOutTask.java
@@ -69,12 +69,12 @@
     * 目标位置
     */
    @ApiModelProperty(value = "目标位置", position = 5)
    private double width;
    private Double width;
    /**
     * 目标位置
     */
    @ApiModelProperty(value = "目标位置", position = 5)
    private double height;
    private Double height;
    /**
     * 车次
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/service/BigStorageCageFeedTaskService.java
@@ -5,12 +5,13 @@
import com.mes.bigstorage.entity.BigStorageCageDetails;
import com.mes.bigstorage.entity.BigStorageDTO;
import com.mes.bigstoragetask.entity.BigStorageCageFeedTask;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.List;
/**
 * <p>
 *  服务类
 * 服务类
 * </p>
 *
 * @author zhoush
@@ -31,4 +32,6 @@
     * 查询卧转立玻璃是否进片完成
     */
    List<Integer> querySitToUpGlass();
    List<BigStorageCageFeedTask> selectBigStorageCageFeedTask(BigStorageCageFeedTask bigStorageCageFeedTask, String startTime, String endTime);
}
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/service/BigStorageCageOutTaskService.java
@@ -24,4 +24,6 @@
    void deleteOutTask(String glassId);
    void deleteTask(List<BigStorageCageOutTask> outGlassId);
    List<BigStorageCageOutTask> selectBigStorageCageOutTask(BigStorageCageOutTask bigStorageCageOutTask, String startTime, String endTime);
}
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/service/impl/BigStorageCageFeedTaskServiceImpl.java
@@ -7,6 +7,7 @@
import com.mes.bigstoragetask.entity.BigStorageCageFeedTask;
import com.mes.bigstoragetask.mapper.BigStorageCageFeedTaskMapper;
import com.mes.bigstoragetask.service.BigStorageCageFeedTaskService;
import com.mes.utils.Result;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
@@ -52,4 +53,42 @@
    public List<Integer> querySitToUpGlass() {
        return baseMapper.querySitToUpGlass();
    }
    @Override
    public List<BigStorageCageFeedTask> selectBigStorageCageFeedTask(BigStorageCageFeedTask bigStorageCageFeedTask, String startTime, String endTime) {
        if (endTime != null && !endTime.isEmpty()) {
            endTime = endTime + " 23:59:59";
        }
        LambdaQueryWrapper<BigStorageCageFeedTask> wrapper = new LambdaQueryWrapper<>();
        if (bigStorageCageFeedTask.getTargetSlot() != null) {
            wrapper.eq(BigStorageCageFeedTask::getTargetSlot, bigStorageCageFeedTask.getTargetSlot());
        }
        if (bigStorageCageFeedTask.getWidth() != null) {
            wrapper.eq(BigStorageCageFeedTask::getWidth, bigStorageCageFeedTask.getWidth());
        }
        if (bigStorageCageFeedTask.getHeight() != null) {
            wrapper.eq(BigStorageCageFeedTask::getHeight, bigStorageCageFeedTask.getHeight());
        }
        if (bigStorageCageFeedTask.getLine() != 0) {
            wrapper.eq(BigStorageCageFeedTask::getLine, bigStorageCageFeedTask.getLine());
        }
        if (bigStorageCageFeedTask.getTaskState() != -1) {
            wrapper.eq(BigStorageCageFeedTask::getTaskState, bigStorageCageFeedTask.getTaskState());
        }
        if (bigStorageCageFeedTask.getTaskType() != 0) {
            wrapper.eq(BigStorageCageFeedTask::getTaskType, bigStorageCageFeedTask.getTaskType());
        }
        if (startTime != null && !startTime.isEmpty()) {
            wrapper.ge(BigStorageCageFeedTask::getCreateTime, startTime);
        }
        if (endTime != null && !endTime.isEmpty()) {
            wrapper.le(BigStorageCageFeedTask::getCreateTime, endTime);
        }
        wrapper.orderByDesc(BigStorageCageFeedTask::getId);
        wrapper.and(item -> item.eq(BigStorageCageFeedTask::getDeleted, 0)
                .or()
                .eq(BigStorageCageFeedTask::getDeleted, 1));
        wrapper.between(BigStorageCageFeedTask::getCreateTime, startTime, endTime);
        return baseMapper.selectList(wrapper);
    }
}
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/service/impl/BigStorageCageOutTaskServiceImpl.java
@@ -4,6 +4,7 @@
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.mes.bigstorage.entity.BigStorageCageDetails;
import com.mes.bigstorage.mapper.BigStorageCageDetailsMapper;
import com.mes.bigstoragetask.entity.BigStorageCageFeedTask;
import com.mes.bigstoragetask.entity.BigStorageCageOutTask;
import com.mes.bigstoragetask.mapper.BigStorageCageOutTaskMapper;
import com.mes.bigstoragetask.service.BigStorageCageOutTaskService;
@@ -97,4 +98,39 @@
    public void deleteTask(List<BigStorageCageOutTask> outGlassId){
        baseMapper.deleteTask(outGlassId);
    }
    @Override
    public List<BigStorageCageOutTask> selectBigStorageCageOutTask(BigStorageCageOutTask bigStorageCageOutTask, String startTime, String endTime){
        if (endTime != null && !endTime.isEmpty()) {
            endTime = endTime + " 23:59:59";
        }
        LambdaQueryWrapper<BigStorageCageOutTask> wrapper = new LambdaQueryWrapper<>();
        if (bigStorageCageOutTask.getStartSlot() != null) {
            wrapper.eq(BigStorageCageOutTask::getStartSlot, bigStorageCageOutTask.getStartSlot());
        }
        if (bigStorageCageOutTask.getWidth() != null) {
            wrapper.eq(BigStorageCageOutTask::getWidth, bigStorageCageOutTask.getWidth());
        }
        if (bigStorageCageOutTask.getHeight() != null) {
            wrapper.eq(BigStorageCageOutTask::getHeight, bigStorageCageOutTask.getHeight());
        }
        if (bigStorageCageOutTask.getEndSlot() != 0) {
            wrapper.eq(BigStorageCageOutTask::getEndSlot, bigStorageCageOutTask.getEndSlot());
        }
        if (bigStorageCageOutTask.getTaskState() != -1) {
            wrapper.eq(BigStorageCageOutTask::getTaskState, bigStorageCageOutTask.getTaskState());
        }
        if (startTime != null && !startTime.isEmpty()) {
            wrapper.ge(BigStorageCageOutTask::getCreateTime, startTime);
        }
        if (endTime != null && !endTime.isEmpty()) {
            wrapper.le(BigStorageCageOutTask::getCreateTime, endTime);
        }
        wrapper.orderByDesc(BigStorageCageOutTask::getId);
        wrapper.and(item -> item.eq(BigStorageCageOutTask::getDeleted, 0)
                .or()
                .eq(BigStorageCageOutTask::getDeleted, 1));
        wrapper.between(BigStorageCageOutTask::getCreateTime, startTime, endTime);
        return baseMapper.selectList(wrapper);
    }
}
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/PlcSlicecage.java
@@ -118,17 +118,16 @@
     * fixedRate : 上一个调用开始后再次调用的延时(不用等待上一次调用完成)
     * fixedDelay : 上一个调用结束后再次调用的延时
     */
    @Scheduled(fixedDelay = 300)
    @Scheduled(fixedDelay = 3000)
    public void plcStorageCageTask() throws InterruptedException {
        jsonObject = new JSONObject();
        try {
            //查询使用数据源1查询数据
            queryDataSource1();
            //查询使用数据源2查询数据
            queryDataSource2();
            ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("slicecage");
            if (sendwServer != null) {
                //查询使用数据源1查询数据
                queryDataSource1();
                //查询使用数据源2查询数据
                queryDataSource2();
                for (WebSocketServer webserver : sendwServer) {
                    if (webserver != null) {
                        webserver.sendMessage(jsonObject.toString());
@@ -147,7 +146,7 @@
        }
    }
    @Scheduled(fixedDelay = 300)
    @Scheduled(fixedDelay = 3000)
    public void temperingIsRun() {
        JSONObject jsonObject = new JSONObject();
        //进片任务数据
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/PlcStorageCageTask.java
@@ -1001,6 +1001,7 @@
        bigStorageCageFeedTask.setWidth(width);
        bigStorageCageFeedTask.setHeight(height);
        bigStorageCageFeedTask.setCreateTime(new Date());
        bigStorageCageFeedTask.setTargetSlot(0);
        //删除理片笼表拿走/破损数据数据
        damageService.deleteByGlassId(glassId);
        Damage damage = new Damage();
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application.yml
@@ -13,6 +13,12 @@
      pool:
        size: 10
      thread-name-prefix: task-cacheVertical
  druid:
    initial-size: 5
    min-idle: 5
    max-active: 10
    time-between-eviction-runs-millis: 60000
    connection-properties: druid,stat,mergeSql=true,druid,stat ,slowSalMillis=5000
mybatis-plus:
  mapper-locations: classpath*:mapper/*.xml
#  configuration:
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageDetailsMapper.xml
@@ -44,15 +44,16 @@
                             GROUP BY ENGINEER_ID, TEMPERING_LAYOUT_ID) T3 ON T2.ENGINEER_ID = T3.ENGINEER_ID
            AND T2.TEMPERING_LAYOUT_ID = T3.TEMPERING_LAYOUT_ID
            AND T2.COUNT = T3.COUNT
                 INNER JOIN ENGINEERING T4 ON T2.ENGINEER_ID=T4.ENGINEER_ID
                 INNER JOIN ENGINEERING T4 ON T2.ENGINEER_ID = T4.ENGINEER_ID
        ORDER BY T4.ID, T2.TEMPERING_LAYOUT_ID
    </select>
    <select id="queryTemperingOccupySlot" resultMap="temperingLayoutDTO">
        SELECT ENGINEER_ID,
            TEMPERING_LAYOUT_ID,
            COUNT(DISTINCT SLOT) as SLOT_COUNT
               TEMPERING_LAYOUT_ID,
               COUNT(DISTINCT SLOT) as SLOT_COUNT
        FROM BIG_STORAGE_CAGE_DETAILS
        WHERE STATE = 100 AND TEMPERING_LAYOUT_ID!=0 AND THICKNESS &lt; 8
        WHERE STATE = 100
          AND TEMPERING_LAYOUT_ID!=0 AND THICKNESS &lt; 8
        GROUP BY ENGINEER_ID,
            TEMPERING_LAYOUT_ID
        HAVING SLOT_COUNT &gt;= #{count}
@@ -96,13 +97,60 @@
    </update>
    <select id="selectTemperingGlassCount" resultType="java.util.Map">
        select a.engineer_id,a.tempering_layout_id,count2,count1,count2-count1 as count3,count(c.glass_id) as count4,slots from
            (select engineer_id,tempering_layout_id,count(*) as count1,group_concat(distinct slot order by tempering_feed_sequence) as slots from big_storage_cage_details where state=100 and tempering_layout_id!=0 group by engineer_id,tempering_layout_id) as a
                left join
            (select engineer_id,tempering_layout_id,count(*) as count2 from glass_info group by engineer_id,tempering_layout_id) as b
            on a.engineer_id=b.engineer_id and a.tempering_layout_id=b.tempering_layout_id
                left join damage as c on a.engineer_id=c.engineer_id and a.tempering_layout_id=c.tempering_layout_id and (type = 8 or type = 9)
        group by a.engineer_id,a.tempering_layout_id
        order by a.engineer_id,a.tempering_layout_id
        select a.engineer_id,
               a.tempering_layout_id,
               count2,
               count1,
               count2 - count1   as count3,
               count(c.glass_id) as count4,
               slots
        from (select engineer_id,
                     tempering_layout_id,
                     count(*)                                                     as count1,
                     group_concat(distinct slot order by tempering_feed_sequence) as slots
              from big_storage_cage_details
              where state = 100
                and tempering_layout_id!=0
              group by engineer_id, tempering_layout_id) as a
                 left join
             (select engineer_id, tempering_layout_id, count(*) as count2
              from glass_info
              group by engineer_id, tempering_layout_id) as b
             on a.engineer_id = b.engineer_id and a.tempering_layout_id = b.tempering_layout_id
                 left join damage as c
                           on a.engineer_id = c.engineer_id and a.tempering_layout_id = c.tempering_layout_id and
                              (type = 8 or type = 9)
        group by a.engineer_id, a.tempering_layout_id
        order by a.engineer_id, a.tempering_layout_id
    </select>
    <select id="selectFlowCardCount" resultType="com.mes.bigstorage.entity.dto.FlowCardDTO">
        SELECT fc.engineer_id                            AS engineerId,
               count(DISTINCT fc.flow_card_id, fc.layer) AS flowCardIdCount,
               count(DISTINCT gi.tempering_layout_id)    AS totalTemper,
               e.glass_total_area,
               count(distinct bscd.tempering_layout_id) as cageTemper,
               round(sum(bscd.width*bscd.height/1000000),2) as cageArea
        FROM (
                 SELECT engineer_id,
                        flow_card_id,
                        IF
                            (combine = 0, layer, 1) AS layer,
                        combine
                 FROM glass_info
                 WHERE engineer_id IN (SELECT DISTINCT engineer_id FROM big_storage_cage_details WHERE state = 100)
                 GROUP BY engineer_id,
                          flow_card_id,
                          IF
                              (combine = 0, layer, 1),
                          combine
             ) AS fc
                 INNER JOIN glass_info gi ON fc.engineer_id = gi.engineer_id
            AND gi.tempering_layout_id != 0
    INNER JOIN engineering e
        ON fc.engineer_id = e.engineer_id
            left join big_storage_cage_details bscd on gi.glass_id=bscd.glass_id and bscd.state=100 and fc.flow_card_id=bscd.flow_card_id and fc.layer=bscd.layer
        GROUP BY
            fc.engineer_id
    </select>
</mapper>
hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/engineering/controller/EngineeringController.java
@@ -18,7 +18,7 @@
/**
 * <p>
 *  前端控制器
 * 前端控制器
 * </p>
 *
 * @author wu
@@ -36,40 +36,42 @@
    private GlassInfoService glassInfoService;
    @Autowired
    private OptimizeProjectService optimizeProjectService;
    @ApiOperation("开始/暂停任务/传递工程号和状态,开始是1 暂停是0")
    @PostMapping("/pauseTask") //暂停上片任务
    @ResponseBody
    public  Result <List<UpPattenUsage>> pauseTask(@RequestBody Engineering engineering) {
        boolean work=engineeringService.changeTask(engineering.getEngineerId(),engineering.getState());
    public Result<List<UpPattenUsage>> pauseTask(@RequestBody Engineering engineering) {
        boolean work = engineeringService.changeTask(engineering.getEngineerId(), engineering.getState());
        List<UpPattenUsage> glass = upPattenUsageService.prioritylist();
        if(work){
            return Result.build(200,"成功",glass);
        }else {
            return Result.build(100,"失败",glass);
        if (work) {
            return Result.build(200, "成功", glass);
        } else {
            return Result.build(100, "失败", glass);
        }
    }
    @ApiOperation("暂停")
    @PostMapping("/pause") //暂停上片任务
    @ResponseBody
    public  Result <List<UpPattenUsage>> pause(@RequestBody Engineering engineering) {
        boolean work=engineeringService.pauseTask(engineering.getEngineerId(),engineering.getState());
        List<UpPattenUsage> glass = upPattenUsageService.prioritylist();String message;
        if(work){
            return Result.build(200,"成功",glass);
        }else {
            return Result.build(100,"成功",glass);
    public Result<List<UpPattenUsage>> pause(@RequestBody Engineering engineering) {
        boolean work = engineeringService.pauseTask(engineering.getEngineerId(), engineering.getState());
        List<UpPattenUsage> glass = upPattenUsageService.prioritylist();
        String message;
        if (work) {
            return Result.build(200, "成功", glass);
        } else {
            return Result.build(100, "成功", glass);
        }
    }
    @ApiOperation("开始上片")
    @PostMapping("/changeTask") //调用上片任务
    @ResponseBody
    public  Result <Boolean> changeTask(@RequestBody Engineering engineering) {
    public Result<Boolean> changeTask(@RequestBody Engineering engineering) {
        log.info("engineeringId:{}", engineering);
        UpPattenUsage upPattenUsage = upPattenUsageService.selectedEngineering(engineering.getEngineerId());
        if (upPattenUsage != null) {
            boolean work=engineeringService.changeTask(engineering.getEngineerId(),engineering.getState());
            boolean work = engineeringService.changeTask(engineering.getEngineerId(), engineering.getState());
            List<UpPattenUsage> glass = upPattenUsageService.prioritylist();
            optimizeProjectService.changeTask(engineering.getEngineerId(), 200);
            return Result.build(200, "已保存过", work);
@@ -85,13 +87,13 @@
            engineeringService.saveEngineering(listEngineering);
            log.info("更改pp表状态为已领取");
            //将engineering表状态为正在上片
            boolean work=engineeringService.changeTask(engineering.getEngineerId(),engineering.getState());
            boolean work = engineeringService.changeTask(engineering.getEngineerId(), engineering.getState());
            List<UpPattenUsage> glass = upPattenUsageService.prioritylist();
            optimizeProjectService.changeTask(engineering.getEngineerId(), 200);
            if (work) {
                return Result.build(200, "保存成功"+engineering.getEngineerId(), true);
            }else {
                return Result.build(200, "保存成功"+engineering.getEngineerId(), false);
                return Result.build(200, "保存成功" + engineering.getEngineerId(), true);
            } else {
                return Result.build(200, "保存成功" + engineering.getEngineerId(), false);
            }
        }
@@ -100,16 +102,21 @@
    @ApiOperation("删除工程上片")
    @PostMapping("/deleteTask") //调用上片任务
    @ResponseBody
    public  Result <Boolean> deleteTask(@RequestBody Engineering engineering) {
    public Result<Boolean> deleteTask(@RequestBody Engineering engineering) {
        //删除工程表、小片表、上片表,更改优化表状态
        boolean work=engineeringService.deleteTask(engineering.getEngineerId());
        glassInfoService.deleteTask(engineering.getEngineerId());
        upPattenUsageService.deleteTask(engineering.getEngineerId());
        optimizeProjectService.changeTask(engineering.getEngineerId(), 100);
        boolean work = false;
        Engineering engineeringState = engineeringService.selectEngineeringState(engineering.getEngineerId());
        if (engineeringState == null) {
            work = engineeringService.deleteTask(engineering.getEngineerId());
            glassInfoService.deleteTask(engineering.getEngineerId());
            upPattenUsageService.deleteTask(engineering.getEngineerId());
            optimizeProjectService.changeTask(engineering.getEngineerId(), 100);
        }
        if (work) {
            return Result.build(200, "删除成功"+engineering.getEngineerId(), true);
        }else {
            return Result.build(200, "删除失败"+engineering.getEngineerId(), false);
            return Result.build(200, "删除成功" + engineering.getEngineerId(), true);
        } else {
            return Result.build(200, "删除失败" + engineering.getEngineerId(), false);
        }
    }
@@ -117,10 +124,10 @@
    @ApiOperation("查询可以上片的工程号")
    @GetMapping("/selectTask") //调用上片任务
    @ResponseBody
    public Result <List<Engineering>> selectTask() {
        List<Engineering> engineering=engineeringService.selectTask();
    public Result<List<Engineering>> selectTask() {
        List<Engineering> engineering = engineeringService.selectTask();
        log.info("可领取任务返回:{}", engineering);
        return Result.build(200, "",engineering);
        return Result.build(200, "", engineering);
    }
}
hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/engineering/mapper/EngineeringMapper.java
@@ -2,6 +2,8 @@
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.mes.engineering.entity.Engineering;
import com.mes.workstation.entity.UpWorkSequence;
import org.apache.ibatis.annotations.Param;
/**
 * <p>
@@ -13,4 +15,6 @@
 */
public interface EngineeringMapper extends BaseMapper<Engineering> {
    //获取工位信息
    Engineering selectEngineeringState(@Param("engineerId") String engineerId);
}
hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/engineering/mapper/xml/EngineeringMapper.xml
@@ -2,4 +2,11 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mes.engineering.mapper.EngineeringMapper">
    <select id="selectEngineeringState" resultMap="com.mes.engineering.entity.Engineering">
        select DISTINCT engineer_id from edg_storage_cage_details
        <where>
            engineer_id=#{engineerId}
        </where>
    </select>
</mapper>
hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/engineering/service/EngineeringService.java
@@ -44,5 +44,7 @@
    boolean pauseTask(String engineerId, Integer state);
    boolean deleteTask(String engineerId);
    Engineering selectEngineeringState(String engineerId);
}
hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/engineering/service/impl/EngineeringServiceImpl.java
@@ -127,4 +127,10 @@
        return this.remove(wrapper);
    }
    @Override
    public Engineering selectEngineeringState(String engineerId){
        //查询工程状态
        return baseMapper.selectEngineeringState(engineerId);
    }
}
hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/job/PlcLoadGlassTask.java
@@ -118,21 +118,22 @@
    @Scheduled(fixedDelay = 1000)
    public void loadGlassHome() {
        JSONObject jsonObject = new JSONObject();
        //正在进行的任务
        List<UpPattenUsage> upPattenUsages = upPattenUsageService.prioritylist();
        if(upPattenUsages!=null){
            jsonObject.append("prioritylist", upPattenUsages);
        }
        //工位信息
        List<UpWorkstation> upWorkstations = upWorkstationService.list();
        jsonObject.append("list", upWorkstations);
        //是否开始工程
        Engineering engineering = engineeringService.selectInitiate(1);
        jsonObject.append("engineering", engineering);
        ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("loadGlass");
        if (sendwServer != null) {
            //正在进行的任务
            List<UpPattenUsage> upPattenUsages = upPattenUsageService.prioritylist();
            if (upPattenUsages != null) {
                jsonObject.append("prioritylist", upPattenUsages);
            }
            //工位信息
            List<UpWorkstation> upWorkstations = upWorkstationService.list();
            jsonObject.append("list", upWorkstations);
            //是否开始工程
            Engineering engineering = engineeringService.selectInitiate(1);
            jsonObject.append("engineering", engineering);
            for (WebSocketServer webserver : sendwServer) {
                if (webserver != null) {
                    webserver.sendMessage(jsonObject.toString());
@@ -152,7 +153,7 @@
    public void loadGlassStatus() {
        JSONObject jsonObject = new JSONObject();
        //正在进行的任务
        String inkageStatus =plcParameterObject.getPlcParameter("InkageStatus").getValue();
        String inkageStatus = plcParameterObject.getPlcParameter("InkageStatus").getValue();
//        String inkageStatus ="1";
        jsonObject.append("InkageStatus", inkageStatus);
        ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("loadGlass");
@@ -166,12 +167,13 @@
            }
        }
    }
    @Scheduled(fixedDelay = 1000)
    public void loadGlassIsRun() {
        JSONObject jsonObject = new JSONObject();
        //是否开始工程
        Engineering engineering = engineeringService.selectInitiate(1);
            jsonObject.append("engineering", engineering);
        jsonObject.append("engineering", engineering);
        //工位信息
        List<UpWorkstation> upWorkstations = upWorkstationService.list();
        jsonObject.append("list", upWorkstations);
hangzhoumesParent/moduleService/LoadGlassModule/src/main/resources/application.yml
@@ -7,6 +7,12 @@
    name: loadGlass
  liquibase:
    enabled: false
  druid:
    initial-size: 5
    min-idle: 5
    max-active: 10
    time-between-eviction-runs-millis: 60000
    connection-properties: druid,stat,mergeSql=true,druid,stat ,slowSalMillis=5000
mybatis-plus:
  mapper-locations: classpath*:mapper/*.xml
#  configuration:
hangzhoumesParent/moduleService/LoadGlassModule/src/main/resources/mapper/EngineeringMapper.xml
New file
@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mes.engineering.mapper.EngineeringMapper">
    <resultMap id="sequenceMap" type="com.mes.engineering.entity.Engineering">
        <id property="engineerId" column="engineer_id"/>
        <!--        <result property="number" column="number"/>-->
    </resultMap>
    <select id="selectEngineeringState" resultMap="sequenceMap">
        select DISTINCT engineer_id from edg_storage_cage_details
        <where>
            engineer_id=#{engineerId}
        </where>
    </select>
</mapper>
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/job/PlcScreenTask.java
@@ -1,4 +1,5 @@
package com.mes.job;
import cn.hutool.json.JSONObject;
import com.mes.order.entity.Orders;
import com.mes.order.service.OrdersService;
@@ -31,6 +32,7 @@
    private OptimizeProjectService optimizeProjectService;
    @Autowired
    private OrdersService ordersService;
    /**
     * fixedRate : 上一个调用开始后再次调用的延时(不用等待上一次调用完成)
     * fixedDelay : 上一个调用结束后再次调用的延时
@@ -39,40 +41,41 @@
    @Scheduled(fixedDelay = 10000)
    public void screenHome() {
        JSONObject jsonObject = new JSONObject();
        Reportingdamage reportingdamage = new Reportingdamage();
        // 获取当前日期
        LocalDate today = LocalDate.now();
        // 计算最近七天的开始日期
        LocalDate startOfPeriod = today.minusDays(6); // 7天的范围包括今天,所以减去6天
        // 最近七天的结束日期就是今天
        LocalDate endOfPeriod = today;
        // 格式化日期为字符串
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        String startOfPeriodStr = startOfPeriod.format(formatter);
        String endOfPeriodStr = endOfPeriod.format(formatter);
        // 设置为最近七天的时间范围
//        reportingdamage.setReportingWorkTime("2024-05-11");
        reportingdamage.setReportingWorkTime(startOfPeriodStr);
        reportingdamage.setReportingWorkTime2(endOfPeriodStr);
        //扇形图各设备的加工破损数量
        List<Reportingdamage> device = reportingWorkService.selectDamage(reportingdamage);
        jsonObject.append("device", device);
        //获取次破未补信息
        List<AwaitingRepair> awaitingRepairs = reportingWorkService.selectAwaitingRepair();
        jsonObject.append("awaitingRepairs", awaitingRepairs);
        //获取正在进行的工程
        List<OptimizeProject> optimizeProjects = optimizeProjectService.getDoingTask();
        jsonObject.append("DoingTask", optimizeProjects);
        //获取当前订单
        List<Orders> orders = ordersService.selectOrders();
        jsonObject.append("orders", orders);
        /*现场规划图显示*/
        ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("screen");
        if (sendwServer != null) {
            Reportingdamage reportingdamage = new Reportingdamage();
            // 获取当前日期
            LocalDate today = LocalDate.now();
            // 计算最近七天的开始日期
            LocalDate startOfPeriod = today.minusDays(6); // 7天的范围包括今天,所以减去6天
            // 最近七天的结束日期就是今天
            LocalDate endOfPeriod = today;
            // 格式化日期为字符串
            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
            String startOfPeriodStr = startOfPeriod.format(formatter);
            String endOfPeriodStr = endOfPeriod.format(formatter);
            // 设置为最近七天的时间范围
//        reportingdamage.setReportingWorkTime("2024-05-11");
            reportingdamage.setReportingWorkTime(startOfPeriodStr);
            reportingdamage.setReportingWorkTime2(endOfPeriodStr);
            //扇形图各设备的加工破损数量
            List<Reportingdamage> device = reportingWorkService.selectDamage(reportingdamage);
            jsonObject.append("device", device);
            //获取次破未补信息
            List<AwaitingRepair> awaitingRepairs = reportingWorkService.selectAwaitingRepair();
            jsonObject.append("awaitingRepairs", awaitingRepairs);
            //获取正在进行的工程
            List<OptimizeProject> optimizeProjects = optimizeProjectService.getDoingTask();
            jsonObject.append("DoingTask", optimizeProjects);
            //获取当前订单
            List<Orders> orders = ordersService.selectOrders();
            jsonObject.append("orders", orders);
            for (WebSocketServer webserver : sendwServer) {
                if (webserver != null) {
                    webserver.sendMessage(jsonObject.toString());
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/job/PlcTemperingGlassTask.java
@@ -37,20 +37,24 @@
    @Scheduled(fixedDelay = 1000)
    public void temperingGlassHome() {
        JSONObject jsonObject = new JSONObject();
        //正在等待进片的玻璃
        List<TemperingGlassInfo> waitingGlass = temperingAgoService.selectWaitingGlass();
        if (waitingGlass != null) {
            jsonObject.append("waitingGlass", waitingGlass);
        }
        //获取整在炉中的两个版图id
        List<TemperingGlassInfo> layoutId = temperingAgoService.selectLayoutId();
        //进炉中的玻璃
        if (!layoutId.isEmpty()) {
            for (int i = 0; i < layoutId.size(); i++) {
                List<TemperingGlassInfo> intoGlass = temperingAgoService.selectIntoGlass(layoutId.get(i));
                jsonObject.append("intoGlass" + (i + 1), intoGlass);
        ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("temperingGlass");
        if (sendwServer != null) {
            //正在等待进片的玻璃
            List<TemperingGlassInfo> waitingGlass = temperingAgoService.selectWaitingGlass();
            if (waitingGlass != null) {
                jsonObject.append("waitingGlass", waitingGlass);
            }
            //获取整在炉中的两个版图id
            List<TemperingGlassInfo> layoutId = temperingAgoService.selectLayoutId();
            //进炉中的玻璃
            if (!layoutId.isEmpty()) {
                for (int i = 0; i < layoutId.size(); i++) {
                    List<TemperingGlassInfo> intoGlass = temperingAgoService.selectIntoGlass(layoutId.get(i));
                    jsonObject.append("intoGlass" + (i + 1), intoGlass);
                }
//            List<TemperingGlassInfo> intoGlass = temperingAgoService.selectIntoGlass(layoutId.get(0));
//            jsonObject.append("intoGlass", intoGlass);
//            //进炉中的第二个版图
@@ -59,22 +63,18 @@
//                jsonObject.append("intoGlass2", intoGlass2);
//            }
        }
        //出炉后的玻璃
        List<TemperingGlassInfo> outGlass = temperingAgoService.selectOutGlass();
        if (outGlass != null) {
            jsonObject.append("outGlass", outGlass);
        }
            }
            //出炉后的玻璃
            List<TemperingGlassInfo> outGlass = temperingAgoService.selectOutGlass();
            if (outGlass != null) {
                jsonObject.append("outGlass", outGlass);
            }
        //过旋转台钢化后的玻璃
        List<TemperingGlassInfo> overGlass = temperingAgoService.selectOverGlass();
        if (outGlass != null) {
            jsonObject.append("overGlass", overGlass);
        }
        ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("temperingGlass");
        if (sendwServer != null) {
            //过旋转台钢化后的玻璃
            List<TemperingGlassInfo> overGlass = temperingAgoService.selectOverGlass();
            if (outGlass != null) {
                jsonObject.append("overGlass", overGlass);
            }
            for (WebSocketServer webserver : sendwServer) {
                if (webserver != null) {
                    webserver.sendMessage(jsonObject.toString());
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/application.yml
@@ -2,7 +2,7 @@
  port: 8084
spring:
  profiles:
    active: dev
    active: cz
  application:
    name: temperingGlass
  liquibase:
@@ -12,6 +12,12 @@
      pool:
        size: 10
      thread-name-prefix: task-tempering
  druid:
    initial-size: 5
    min-idle: 5
    max-active: 10
    time-between-eviction-runs-millis: 60000
    connection-properties: druid,stat,mergeSql=true,druid,stat ,slowSalMillis=5000
mybatis-plus:
  mapper-locations: classpath*:mapper/*.xml
#  configuration:
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/controller/DownGlassTaskController.java
@@ -10,10 +10,7 @@
import com.mes.utils.Result;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
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 org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
@@ -55,5 +52,13 @@
        );
        return Result.build(200, "清空成功", true);
    }
    @ApiOperation("卧理任务报表")
    @PostMapping("/selectDownGlassTask")
    public Result selectDownGlassTask(@RequestBody DownGlassTask downGlassTask,
                                  @RequestParam(required = false) String startTime,
                                  @RequestParam(required = false) String endTime) {
        return Result.build(200, "查询成功", downGlassTaskService.selectDownGlassTask(downGlassTask, startTime, endTime));
    }
}
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/DownGlassTaskService.java
@@ -62,4 +62,12 @@
     * @return
     */
    List<DownGlassTask> selectOutTaskCache();
    /**
     * 查询下片卧理任务
     *
     * @return
     */
    List<DownGlassTask> selectDownGlassTask(DownGlassTask downGlassTask, String startTime, String endTime);
}
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/impl/DownGlassTaskServiceImpl.java
@@ -121,5 +121,35 @@
        return baseMapper.selectList(new QueryWrapper<DownGlassTask>().eq("task_status", 0).eq("task_type", 2));
    }
    @Override
    public List<DownGlassTask> selectDownGlassTask(DownGlassTask downGlassTask, String startTime, String endTime){
        if (endTime != null && !endTime.isEmpty()) {
            endTime = endTime + " 23:59:59";
        }
        LambdaQueryWrapper<DownGlassTask> wrapper = new LambdaQueryWrapper<>();
        if (downGlassTask.getStartCell() != null) {
            wrapper.eq(DownGlassTask::getStartCell, downGlassTask.getStartCell());
        }
        if (downGlassTask.getEndCell() != 0) {
            wrapper.eq(DownGlassTask::getEndCell, downGlassTask.getEndCell());
        }
        if (downGlassTask.getTaskStatus() != -1) {
            wrapper.eq(DownGlassTask::getTaskStatus, downGlassTask.getTaskStatus());
        }
        if (downGlassTask.getTaskType() != -1) {
            wrapper.eq(DownGlassTask::getTaskType, downGlassTask.getTaskType());
        }
        if (startTime != null && !startTime.isEmpty()) {
            wrapper.ge(DownGlassTask::getCreateTime, startTime);
        }
        if (endTime != null && !endTime.isEmpty()) {
            wrapper.le(DownGlassTask::getCreateTime, endTime);
        }
        wrapper.orderByDesc(DownGlassTask::getCreateTime);
        wrapper.and(item -> item.eq(DownGlassTask::getDeleted, 0)
                .or()
                .eq(DownGlassTask::getDeleted, 1));
        wrapper.between(DownGlassTask::getCreateTime, startTime, endTime);
        return baseMapper.selectList(wrapper);
    }
}
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/service/impl/DownWorkstationServiceImpl.java
@@ -1,6 +1,8 @@
package com.mes.downworkstation.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.yulichang.query.MPJQueryWrapper;
@@ -10,6 +12,7 @@
import com.mes.device.PlcParameterObject;
import com.mes.downglassinfo.entity.DownGlassInfo;
import com.mes.downglassinfo.mapper.DownGlassInfoMapper;
import com.mes.downglassinfo.service.DownGlassInfoService;
import com.mes.downworkstation.entity.DownWorkstation;
import com.mes.downworkstation.entity.DownWorkstationTask;
import com.mes.downworkstation.entity.DownWorkstionAndDownGlassinfo;
@@ -17,6 +20,7 @@
import com.mes.downworkstation.mapper.DownWorkstationTaskMapper;
import com.mes.downworkstation.service.DownWorkstationService;
import com.mes.downworkstation.service.DownWorkstationTaskService;
import com.mes.glassinfo.entity.GlassInfo;
import com.mes.glassinfo.service.GlassInfoService;
import com.mes.utils.RedisUtil;
import lombok.extern.slf4j.Slf4j;
@@ -40,6 +44,8 @@
    private DownWorkstationTaskMapper downWorkstationTaskMapper;
    @Autowired
    private DownGlassInfoMapper downGlassInfoMapper;
    @Autowired
    private DownGlassInfoService downGlassInfoService;
    @Autowired
    private GlassInfoService glassInfoService;
    @Autowired
@@ -147,16 +153,37 @@
    @Override
    public void updateFlowCardIdAndCount(String flowCardId, int workstationId, int layer) {
        int glassInfoCount = glassInfoService.getGlassInfoCountByFlowCardId(flowCardId, layer);
        GlassInfo glassInfo = glassInfoService.getOne(
                new LambdaQueryWrapper<GlassInfo>()
                        .eq(GlassInfo::getFlowCardId, flowCardId)
                        .last("limit 1")
        );
        QueryWrapper<Damage> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("process_id", flowCardId);
        queryWrapper.eq("technology_number", layer);
        int otherNumber = damageservice.count(queryWrapper);
        LambdaQueryWrapper<DownGlassInfo> wrapper = new LambdaQueryWrapper();
        wrapper.eq(DownGlassInfo::getFlowCardId, flowCardId);
        wrapper.lt(DownGlassInfo::getWorkStationId, 7);
        UpdateWrapper<DownWorkstation> updateWrapper = new UpdateWrapper<>();
        int glassInfoCount = 0;
        if (glassInfo.getCombine() == 0) {
            glassInfoCount = glassInfoService.getGlassInfoCountByFlowCardId(flowCardId, layer);
            queryWrapper.eq("technology_number", layer);
            wrapper.eq(DownGlassInfo::getLayer, layer);
            updateWrapper.set("layer", layer);
        } else {
            glassInfoCount = glassInfoService.getGlassInfoCountByFlowCardId(flowCardId, 0);
            updateWrapper.set("layer", 0);
        }
        int otherNumber = damageservice.count(queryWrapper);
        int racksNumber = downGlassInfoService.count(wrapper);
        updateWrapper.set("total_quantity", glassInfoCount)
                .set("flow_card_id", flowCardId)
                .set("layer", layer)
                .set("other_number", otherNumber)
                .set("racks_number", racksNumber)
                .eq("workstation_id", workstationId);
//        .eq("id", workstationId);
        this.update(updateWrapper);
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/job/DownLoadCacheGlassTask.java
@@ -94,6 +94,15 @@
        String confirmationWrodAddress = plcParameterObject.getPlcParameter("confirmationWord").getAddress();
        String currentSlot = plcParameterObject.getPlcParameter("currentCell").getValue();
//        requestWord="3";
//        glassIdeValue="P25031802|4|1";
//        out06Glassstate="1";
//        out08Glassstate="1";
//        out11Glassstate ="1";
//        out13Glassstate="1";
//        currentSlot="1";
//        confirmationWrodValue="0";
        log.info("1、获取到的请求字为:{},获取到的扫描ID为:{},获取到的确认字为:{},获取到的出片状态分别为:g06:{}、g08:{}、g11:{}、g13:{},当前格子号为:{}",
                requestWord, glassIdeValue, confirmationWrodValue, out06Glassstate, out08Glassstate, out11Glassstate, out13Glassstate, currentSlot);
@@ -227,6 +236,7 @@
        //玻璃尺寸是否走人工下片
        if (glassWidth > maxWidth || glassHeight > maxHeight || glassWidth < minWidth || glassHeight < minHeight) {
            log.info("该玻璃尺寸不符合要求,需要走人工下片直接进片");
            return;
        } else {
            log.info("该玻璃尺寸非人工下片");
            //获取该玻璃的流程卡是否已绑定架子
@@ -677,24 +687,27 @@
            wrapper.eq(DownGlassInfo::getLayer, downGlassInfo.getLayer());
        }
//        downGlassInfo.setSequence(downGlassInfoService.queryMaxSequence(downGlassInfo.getFlowCardId(), downGlassInfo.getLayer()));
        int k = 0;
        DownGlassInfo downGlassInfo1 = downGlassInfoService.getOne(wrapper);
        if (downGlassInfo1 != null) {
            k = 1;
        } else {
            k = 1;
        }
        downGlassInfo.setSequence(k);
        downGlassInfo.setWorkStationId(endCell);
        downGlassInfo.setGmtCreate(new Date());
        downGlassInfoService.save(downGlassInfo);
        //生成任务信息
        int k = 1;
//        DownGlassInfo downGlassInfo1 = downGlassInfoService.getOne(wrapper);
//        if (downGlassInfo1 != null) {
//            k = 1;
//        } else {
//            k = 1;
//        }
        GlassInfo glassInfo = new GlassInfo();
        BeanUtils.copyProperties(downStorageCageDetails, glassInfo);
        //删除理片笼表拿走/破损数据数据
        GlassInfo glassInfo1 = glassInfoService.getOne(
                new LambdaUpdateWrapper<GlassInfo>().eq(GlassInfo::getGlassId, glassInfo.getGlassId())
        );
        downGlassInfo.setSequence(k);
        downGlassInfo.setWorkStationId(endCell);
        downGlassInfo.setGmtCreate(new Date());
        downGlassInfo.setLayer(glassInfo1.getLayer());
        downGlassInfoService.save(downGlassInfo);
        //生成任务信息
        //删除理片笼表拿走/破损数据数据
        glassInfo.setLayer(glassInfo1.getLayer());
        damageService.deleteByGlassId(glassInfo.getGlassId());
        return initDownGlassTask(glassInfo, downStorageCageDetails.getSlot(), endCell, taskType);
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/job/Downpush.java
@@ -57,28 +57,28 @@
    @Autowired
    private RedisUtil redisUtil;
    @Scheduled(fixedDelay = 2000)
    @Scheduled(fixedDelay = 3000)
    public void sendDownWorkstations() {
        log.info("发送工位玻璃信息");
        JSONObject jsonObject = new JSONObject();
        List<DownWorkstation> data = downWorkstationService.list();
        List<DownGlassTask> downGlassTasks = downGlassTaskService.list(
                new LambdaQueryWrapper<DownGlassTask>()
                        .eq(DownGlassTask::getEndCell, 7)
                        .eq(DownGlassTask::getTaskType, 3)
                        .lt(DownGlassTask::getTaskStatus, 3)
        );
        DownWorkstation downWorkstation = new DownWorkstation();
        downWorkstation.setWorkstationId(7);
        downWorkstation.setEnableState(1);
        downWorkstation.setRacksNumber(downGlassTasks.size());
        downWorkstation.setTotalQuantity(downGlassTasks.size());
        data.add(downWorkstation);
        jsonObject.append("params", data);
        log.info(jsonObject.toString());
        JSONObject jsonObject = new JSONObject();
        ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("unloadglass");
        if (sendwServer != null) {
            log.info("发送工位玻璃信息");
            List<DownWorkstation> data = downWorkstationService.list();
            List<DownGlassTask> downGlassTasks = downGlassTaskService.list(
                    new LambdaQueryWrapper<DownGlassTask>()
                            .eq(DownGlassTask::getEndCell, 7)
                            .eq(DownGlassTask::getTaskType, 3)
                            .lt(DownGlassTask::getTaskStatus, 3)
            );
            DownWorkstation downWorkstation = new DownWorkstation();
            downWorkstation.setWorkstationId(7);
            downWorkstation.setEnableState(1);
            downWorkstation.setRacksNumber(downGlassTasks.size());
            downWorkstation.setTotalQuantity(downGlassTasks.size());
            data.add(downWorkstation);
            jsonObject.append("params", data);
            log.info(jsonObject.toString());
            for (WebSocketServer webserver : sendwServer) {
                if (webserver != null && webserver.session.isOpen()) {
                    log.info("已发送");
@@ -88,15 +88,16 @@
        }
    }
    @Scheduled(fixedDelay = 1000)
    @Scheduled(fixedDelay = 3000)
    public void sendGlassInfoData() {
        log.info("发送工位显示图信息1");
        JSONObject jsonObject2 = new JSONObject();
        List<Map<String, Object>> glassinfodata = downWorkstationService.getTotalGlassDimensionsByWorkstation(1, 3);
        jsonObject2.append("glassinfo", glassinfodata);
        log.info(jsonObject2.toString());
        ArrayList<WebSocketServer> sendwServer2 = WebSocketServer.sessionMap.get("unloadglass2");
        if (sendwServer2 != null) {
            log.info("发送工位显示图信息1");
            JSONObject jsonObject2 = new JSONObject();
            List<Map<String, Object>> glassinfodata = downWorkstationService.getTotalGlassDimensionsByWorkstation(1, 3);
            jsonObject2.append("glassinfo", glassinfodata);
            log.info(jsonObject2.toString());
            for (WebSocketServer webserver : sendwServer2) {
                if (webserver != null && webserver.session.isOpen()) {
                    webserver.sendMessage(jsonObject2.toString());
@@ -105,15 +106,14 @@
        }
    }
    @Scheduled(fixedDelay = 1000)
    @Scheduled(fixedDelay = 3000)
    public void sendGlassInfoData2() {
        log.info("发送工位显示图信息2");
        JSONObject jsonObject3 = new JSONObject();
        List<Map<String, Object>> glassinfodata2 = downWorkstationService.getTotalGlassDimensionsByWorkstation(4, 6);
        jsonObject3.append("glassinfo2", glassinfodata2);
        log.info(jsonObject3.toString());
        ArrayList<WebSocketServer> sendwServer3 = WebSocketServer.sessionMap.get("unloadglass3");
        if (sendwServer3 != null) {
            log.info("发送工位显示图信息2");
            JSONObject jsonObject3 = new JSONObject();
            List<Map<String, Object>> glassinfodata2 = downWorkstationService.getTotalGlassDimensionsByWorkstation(4, 6);
            jsonObject3.append("glassinfo2", glassinfodata2);
            for (WebSocketServer webserver : sendwServer3) {
                if (webserver != null && webserver.session.isOpen()) {
                    webserver.sendMessage(jsonObject3.toString());
@@ -122,7 +122,7 @@
        }
    }
    @Scheduled(fixedDelay = 2000)
    @Scheduled(fixedDelay = 3000)
    public void sendDownStorageCages() {
        log.info("发送缓存玻璃信息");
        JSONObject jsonObject4 = new JSONObject();
@@ -139,56 +139,57 @@
        }
    }
    @Scheduled(fixedDelay = 2000)
    @Scheduled(fixedDelay = 3000)
    public void sendDownGlassInfo() {
        DownGlassInfoRequest request = redisUtil.getCacheObject("downGlassRequest");
        if (null == request) {
            request = new DownGlassInfoRequest();
        }
        if (request.getBeginDate() == null) {
            request.setBeginDate(DateUtil.getBeginDate());
            request.setEndDate(DateUtil.getEndDate());
        }
        log.info("发送当前正在执行工程已落架的玻璃信息");
        LambdaQueryWrapper<DownGlassInfo> wrapper = new LambdaQueryWrapper<DownGlassInfo>()
                .between(null != request.getBeginDate(), DownGlassInfo::getGmtCreate, request.getBeginDate(), request.getEndDate())
                .eq(StringUtils.isNotBlank(request.getEngineerId()), DownGlassInfo::getEngineerId, request.getEngineerId());
        if (null == request.getWorkStationId() || 0 == request.getWorkStationId()) {
            wrapper.in(DownGlassInfo::getWorkStationId, Const.WORK_STATION_ALL);
        } else {
            wrapper.eq(DownGlassInfo::getWorkStationId, request.getWorkStationId());
        }
        List<DownGlassInfo> downGlassInfos = downGlassInfoService.list(wrapper);
//        Map<Integer, List<DownGlassInfo>> listMap = downGlassInfos.stream().collect(Collectors.groupingBy(DownGlassInfo::getWorkStationId));
        List<Object> engineerIdListTemp = downGlassInfoService.listObjs(new QueryWrapper<DownGlassInfo>().select("distinct engineer_id"));
        List<String> engineerIdList = engineerIdListTemp.stream().map(String::valueOf).collect(Collectors.toList());
        JSONObject jsonObject4 = new JSONObject();
        jsonObject4.append("downGlassInfos", downGlassInfos);
        jsonObject4.append("engineerIdList", engineerIdList);
        //打印开关
        boolean autoPrint = false;
        if (redisUtil.getCacheObject("autoPrint") == null) {
            redisUtil.setCacheObject("autoPrint", false);
        } else {
            autoPrint = redisUtil.getCacheObject("autoPrint");
        }
        jsonObject4.append("autoPrint", autoPrint);
        //人工下片位置最后一片
        DownGlassTask takeGlass = downGlassTaskService.getOne(
                new QueryWrapper<DownGlassTask>()
                        .select("Top 1 *")
                        .eq("end_cell", Const.G13_WORK_STATION)
                        .eq("task_type", 3)
                        .lt("task_status", Const.UNLOAD_GLASS_DOWN)
                        .orderByAsc("id")
        );
        if (takeGlass != null) {
            jsonObject4.append("takeGlass", takeGlass);
        }
        ArrayList<WebSocketServer> sendwServer4 = WebSocketServer.sessionMap.get("unloadglass");
        if (sendwServer4 != null) {
            DownGlassInfoRequest request = redisUtil.getCacheObject("downGlassRequest");
            if (null == request) {
                request = new DownGlassInfoRequest();
            }
            if (request.getBeginDate() == null) {
                request.setBeginDate(DateUtil.getBeginDate());
                request.setEndDate(DateUtil.getEndDate());
            }
            log.info("发送当前正在执行工程已落架的玻璃信息");
            LambdaQueryWrapper<DownGlassInfo> wrapper = new LambdaQueryWrapper<DownGlassInfo>()
                    .between(null != request.getBeginDate(), DownGlassInfo::getGmtCreate, request.getBeginDate(), request.getEndDate())
                    .eq(StringUtils.isNotBlank(request.getEngineerId()), DownGlassInfo::getEngineerId, request.getEngineerId());
            if (null == request.getWorkStationId() || 0 == request.getWorkStationId()) {
                wrapper.in(DownGlassInfo::getWorkStationId, Const.WORK_STATION_ALL);
            } else {
                wrapper.eq(DownGlassInfo::getWorkStationId, request.getWorkStationId());
            }
            List<DownGlassInfo> downGlassInfos = downGlassInfoService.list(wrapper);
//        Map<Integer, List<DownGlassInfo>> listMap = downGlassInfos.stream().collect(Collectors.groupingBy(DownGlassInfo::getWorkStationId));
            List<Object> engineerIdListTemp = downGlassInfoService.listObjs(new QueryWrapper<DownGlassInfo>().select("distinct engineer_id"));
            List<String> engineerIdList = engineerIdListTemp.stream().map(String::valueOf).collect(Collectors.toList());
            JSONObject jsonObject4 = new JSONObject();
            jsonObject4.append("downGlassInfos", downGlassInfos);
            jsonObject4.append("engineerIdList", engineerIdList);
            //打印开关
            boolean autoPrint = false;
            if (redisUtil.getCacheObject("autoPrint") == null) {
                redisUtil.setCacheObject("autoPrint", false);
            } else {
                autoPrint = redisUtil.getCacheObject("autoPrint");
            }
            jsonObject4.append("autoPrint", autoPrint);
            //人工下片位置最后一片
            DownGlassTask takeGlass = downGlassTaskService.getOne(
                    new QueryWrapper<DownGlassTask>()
                            .select("Top 1 *")
                            .eq("end_cell", Const.G13_WORK_STATION)
                            .eq("task_type", 3)
                            .lt("task_status", Const.UNLOAD_GLASS_DOWN)
                            .orderByAsc("id")
            );
            if (takeGlass != null) {
                jsonObject4.append("takeGlass", takeGlass);
            }
            for (WebSocketServer webserver : sendwServer4) {
                if (webserver != null && webserver.session.isOpen()) {
                    webserver.sendMessage(jsonObject4.toString());
@@ -199,14 +200,14 @@
    @Scheduled(fixedDelay = 1000)
    public void isRun() {
        JSONObject jsonObject = new JSONObject();
        //正在进行的任务
        List<DownWorkstation> downWorkstation = downWorkstationService.getoneDownWorkstations(1, 6);
        jsonObject.append("downWorkstation", downWorkstation);
        List<DownGlassTask> downGlassTask = downGlassTaskService.selectOutTaskCache();
        jsonObject.append("downGlassTask", downGlassTask);
        ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("unLoadGlassIsRun");
        if (sendwServer != null) {
            JSONObject jsonObject = new JSONObject();
            //正在进行的任务
            List<DownWorkstation> downWorkstation = downWorkstationService.getoneDownWorkstations(1, 6);
            jsonObject.append("downWorkstation", downWorkstation);
            List<DownGlassTask> downGlassTask = downGlassTaskService.selectOutTaskCache();
            jsonObject.append("downGlassTask", downGlassTask);
            for (WebSocketServer webserver : sendwServer) {
                if (webserver != null) {
                    webserver.sendMessage(jsonObject.toString());
@@ -222,8 +223,9 @@
        log.info("扫描任务已启动");
        while (true) {
            JSONObject jsonObject = new JSONObject();
            try (Socket socket = new Socket(scanIp, scanPort);
                 BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()))) {
            try (Socket socket = new Socket(scanIp, scanPort)) {
                socket.setSoTimeout(1000);
                BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                // 接收服务器响应
                log.info("等待扫码中......");
                String glassId = in.readLine();
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/application.yml
@@ -13,7 +13,12 @@
      pool:
        size: 10
      thread-name-prefix: task-unLoad
  druid:
    initial-size: 5
    min-idle: 5
    max-active: 10
    time-between-eviction-runs-millis: 60000
    connection-properties: druid,stat,mergeSql=true,druid,stat ,slowSalMillis=5000
mybatis-plus:
  mapper-locations: classpath*:mapper/*.xml