| | |
| | | "pinia": "^2.1.6", |
| | | "pinia-plugin-persistedstate": "^3.2.0", |
| | | "sortablejs": "^1.15.1", |
| | | "sweetalert2": "^11.10.7", |
| | | "vue": "^3.3.4", |
| | | "vue-router": "^4.2.4", |
| | | "vxe-table": "^4.5.15", |
| | |
| | | "node": ">=0.8" |
| | | } |
| | | }, |
| | | "node_modules/sweetalert2": { |
| | | "version": "11.10.7", |
| | | "resolved": "https://registry.npmmirror.com/sweetalert2/-/sweetalert2-11.10.7.tgz", |
| | | "integrity": "sha512-5Jlzrmaitay6KzU+2+LhYu9q+L4v/dZ8oZyEDH14ep0C/QilCnFLHmqAyD/Lhq/lm5DiwsOs6Tr58iv8k3wyGg==" |
| | | }, |
| | | "node_modules/to-fast-properties": { |
| | | "version": "2.0.0", |
| | | "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", |
| | |
| | | "frac": "~1.1.2" |
| | | } |
| | | }, |
| | | "sweetalert2": { |
| | | "version": "11.10.7", |
| | | "resolved": "https://registry.npmmirror.com/sweetalert2/-/sweetalert2-11.10.7.tgz", |
| | | "integrity": "sha512-5Jlzrmaitay6KzU+2+LhYu9q+L4v/dZ8oZyEDH14ep0C/QilCnFLHmqAyD/Lhq/lm5DiwsOs6Tr58iv8k3wyGg==" |
| | | }, |
| | | "to-fast-properties": { |
| | | "version": "2.0.0", |
| | | "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", |
| | |
| | | "pinia": "^2.1.6", |
| | | "pinia-plugin-persistedstate": "^3.2.0", |
| | | "sortablejs": "^1.15.1", |
| | | "sweetalert2": "^11.10.7", |
| | | "vue": "^3.3.4", |
| | | "vue-router": "^4.2.4", |
| | | "vxe-table": "^4.5.15", |
| | |
| | | </template> |
| | | |
| | | <script> |
| | | |
| | | export default { |
| | | data() { |
| | | return { |
| | |
| | | <template> |
| | | <el-card style="margin-left: 10px;margin-top: 10px;margin-right: 10px;" v-loading="loading"> |
| | | <el-card style="margin-left: 10px; margin-top: 10px; margin-right: 10px;" v-loading="loading"> |
| | | <div style="display: flex;"> |
| | | <div style="margin-left: 400px;font-size: 20px;">工程号:P20240305001 </div> |
| | | <div style="margin-left: 150px;font-size: 20px;">版图编号:1</div> |
| | | <div style="margin-left: 400px; font-size: 20px;">工程号:P20240305001 </div> |
| | | <div style="margin-left: 150px; font-size: 20px;">版图编号:1</div> |
| | | </div> |
| | | <svg width="100%" height="650" xmlns="http://www.w3.org/2000/svg"> |
| | | <g stroke="null" id="Layer_1"> |
| | | <title stroke="null">Layer 1</title> |
| | | <image x="100" y="50" width="100" xlink:href="${pageContext.request.contextPath}/static/images/log2.png"/> |
| | | <!-- <text stroke="#000" xml:space="preserve" font-family="'Catamaran'" font-size="25" class="font1" y="105" x="740">1号线玻璃落架指导</text> --> |
| | | |
| | | <!-- 使用 v-for 循环渲染数据 --> |
| | | <g v-for="(rack, index) in racks" :key="index"> |
| | | <rect :x="rack.x" :y="rack.y" :width="rack.width" :height="rack.height" :fill="rack.fillColor"/> |
| | | <rect |
| | | :x="calculateItemXPosition(rack, rack.item, index)" |
| | | :y="calculateItemYPosition(rack, rack.item, index)" |
| | | :width="rack.item.width" |
| | | :height="rack.item.height" |
| | | :fill="rack.item.fillColor" |
| | | /> |
| | | <!-- <text :x="rack.x" :y="rack.y-10" text-anchor="middle">{{ index + 1 }}号工位</text> --> |
| | | <!-- <text :x="rack.x" :y="rack.y-30" text-anchor="middle">{{rack.item.content}}</text> --> |
| | | </g> |
| | | |
| | | <!-- 其他元素 --> |
| | | <!-- <text id="glass_size" font-size="30px" font-weight="bold" x="100" y="600" text-anchor="middle" alignment-baseline="middle"></text> --> |
| | | <!-- <text id="glass_pos" font-size="30px" font-weight="bold" x="100" y="600" text-anchor="middle" alignment-baseline="middle"></text> --> |
| | | <svg width="100%" height="650" xmlns="http://www.w3.org/2000/svg"> |
| | | <g v-for="(rack, index) in racks" :key="index"> |
| | | <rect |
| | | :x="rack.x" |
| | | :y="rack.y" |
| | | :width="rack.width" |
| | | :height="rack.height" |
| | | :fill="rack.fillColor" |
| | | :data-index="index" |
| | | class="rack-rect" |
| | | @click="showRectInfo(rack)" |
| | | /> |
| | | <g v-for="(item, itemIndex) in rack.items" :key="itemIndex"> |
| | | <rect |
| | | :x="calculateItemXPosition(rack, item, itemIndex)" |
| | | :y="calculateItemYPosition(rack, item, itemIndex)" |
| | | :width="item.width" |
| | | :height="item.height" |
| | | :fill="item.fillColor" |
| | | /> |
| | | </g> |
| | | </svg> |
| | | </g> |
| | | </svg> |
| | | </el-card> |
| | | </template> |
| | | |
| | | <script> |
| | | import Swal from 'sweetalert2' |
| | | export default { |
| | | data() { |
| | | return { |
| | | loading: false, |
| | | racks: [ |
| | | { x: 70, y: 126, width: 600, height: 240, fillColor: '#79bbff', item: { width: 40, height: 30, top:5, fillColor: '#911005' ,content:'NG123456'} }, |
| | | { x: 675, y: 126, width: 600, height: 240, fillColor: '#a0cfff', item: { width: 40, height: 30, fillColor: 'yellow' ,content:'NG1234567'} }, |
| | | { x: 70, y: 370, width: 1100, height: 260, fillColor: '#529b2e', item: { width: 40, height: 30, fillColor: 'yellow' ,content:'NG12345678'} }, |
| | | { x: 1175, y: 370, width: 200, height: 300, fillColor: '#529b2e', item: { width: 40, height: 30, fillColor: 'yellow' ,content:'NG123456910'} }, |
| | | ] |
| | | { |
| | | x: 70, y: 126, width: 600, height: 240, fillColor: '#79bbff', |
| | | items: [ |
| | | { position: 'top-left', width: 40, height: 30, fillColor: '#911005', content: 'NG123456' }, |
| | | { position: 'bottom-right', width: 40, height: 30, fillColor: 'yellow', content: 'NG1234567' } |
| | | ] |
| | | }, |
| | | { |
| | | x: 675, y: 126, width: 600, height: 240, fillColor: '#79bbff', |
| | | items: [ |
| | | { position: 'top-left', width: 40, height: 30, fillColor: '#911005', content: 'NG123456' }, |
| | | { position: 'top-right', width: 40, height: 30, fillColor: 'yellow', content: 'NG1234567' } |
| | | ] |
| | | }, |
| | | { |
| | | x: 70, y: 370, width: 1100, height: 260, fillColor: '#79bbff', |
| | | items: [ |
| | | { position: 'top-left', width: 40, height: 30, fillColor: '#911005', content: 'NG123456' }, |
| | | { position: 'top-right', width: 40, height: 30, fillColor: 'yellow', content: 'NG1234567' } |
| | | ] |
| | | }, |
| | | { |
| | | x: 1175, y: 370, width: 200, height: 300,fillColor: '#79bbff', |
| | | items: [ |
| | | { position: 'top-left', width: 40, height: 30, fillColor: '#911005', content: 'NG123456' }, |
| | | { position: 'top-right', width: 40, height: 30, fillColor: 'yellow', content: 'NG1234567' } |
| | | ] |
| | | } |
| | | |
| | | // Add more racks and items here as needed |
| | | ], |
| | | }; |
| | | }, |
| | | |
| | | methods: { |
| | | calculateItemXPosition(rack, item, index) { |
| | | if (index === 4) { |
| | | // 第五个矩形,确保不超出架子右边界 |
| | | return Math.min(rack.x + rack.width - item.width, rack.x + rack.width); |
| | | } else { |
| | | return Math.max(rack.x, Math.min(rack.x + rack.width / 2 - item.width / 2, rack.x + rack.width - item.width)); |
| | | } |
| | | }, |
| | | calculateItemYPosition(rack, item, index) { |
| | | if (index === 0 || index === 2) { |
| | | // 第一个和第三个矩形,贴近架子顶部 |
| | | return Math.min(rack.y, rack.y + rack.height); |
| | | } else if (index === 1 || index === 3) { |
| | | // 第二个和第四个矩形,贴近架子底部 |
| | | return Math.max(rack.y, Math.min(rack.y + rack.height - item.height, rack.y + rack.height)); |
| | | } |
| | | } |
| | | if (item.position === 'top-right' || item.position === 'bottom-right') { |
| | | return Math.min(rack.x + rack.width - item.width, rack.x + rack.width); |
| | | } else { |
| | | return rack.x; |
| | | } |
| | | }, |
| | | |
| | | calculateItemYPosition(rack, item, index) { |
| | | if (item.position === 'bottom-left' || item.position === 'bottom-right') { |
| | | return Math.min(rack.y + rack.height - item.height, rack.y + rack.height); |
| | | } else { |
| | | return rack.y; |
| | | } |
| | | }, |
| | | |
| | | showCustomAlert(content) { |
| | | Swal.fire({ |
| | | title: 'Rack Information', |
| | | text: content, |
| | | icon: 'info', |
| | | }); |
| | | }, |
| | | |
| | | showRectInfo(rectInfo) { |
| | | const contents = rectInfo.items.map(item => item.content).join(', '); |
| | | this.$nextTick(() => { |
| | | this.showCustomAlert(contents); |
| | | }); |
| | | }, |
| | | } |
| | | }; |
| | | </script> |
| | |
| | | width: 100%; |
| | | height: 80vh; |
| | | } |
| | | .rack-rect:hover { |
| | | cursor: pointer; |
| | | } |
| | | .custom-popover-class { |
| | | background-color: lightgrey; |
| | | color: black; |
| | | border: 1px solid black; |
| | | } |
| | | </style> |
| | |
| | | private Integer deviceId; // 设备id
|
| | | private Integer enableState; // 启用状态
|
| | | private Integer workState; // 工作状态
|
| | | private Integer racks_number; // 已落架数量
|
| | | private Integer total_quantity; // 总数量
|
| | | private int racksnumber; // 已落架数量
|
| | | private Integer totalquantity; // 总数量
|
| | |
|
| | | } |
| | |
| | | //从机械手任务表查询状态为1的流程卡号
|
| | | // @Select("SELECT * FROM down_workstation_task WHERE state = 1")
|
| | | // List<DownWorkstation> selectdownWorkstationstate();
|
| | |
|
| | | @Select("SELECT dw.flow_card_id,dw.racks_number FROM down_workstation_task dwt JOIN down_workstation dw ON dwt.flow_card_id = dw.flow_card_id WHERE dwt.state = 1 LIMIT 1")
|
| | | //查询工位表和任务表中状态为1的流程卡号和已落架数量
|
| | | @Select("SELECT dwt.flow_card_id,dw.id,dw.racks_number FROM down_workstation_task dwt JOIN down_workstation dw ON dwt.flow_card_id = dw.flow_card_id WHERE dwt.state = 1 LIMIT 1")
|
| | | List<DownWorkstation> selectdownWorkstationstate();
|
| | |
|
| | | //更新落架数量
|
| | | @Update("UPDATE down_workstation SET racks_number = #{racksNumber} " +
|
| | | "WHERE flow_card_id = #{flowCardId}")
|
| | | void update_racks_number(@Param("flowCardId") String flowCardId,
|
| | | @Param("racksNumber") Integer racksNumber);
|
| | |
|
| | |
|
| | | //插入机械任务表
|
| | | @Insert("INSERT INTO down_workstation_task (flow_card_id, width, height, thickness, filmsid,state) " +
|
| | | "VALUES (#{flowCardId}, #{width}, #{height}, #{thickness}, #{filmsid},1)")
|
| | | void insertdownWorkstationtask(DownGlassInfo downGlassInfo);
|
| | |
|
| | | //根据工位id更新实体类接收的数据
|
| | | @Update("UPDATE down_workstation SET width = #{width}, height = #{height}, flow_card_id = #{flowCardId} WHERE workstation_id = #{workstationId}")
|
| | | void updateFlowCardId(DownWorkstation downWorkstation);
|
| | |
|
| | |
|
| | |
|
| | | //满架拉走,清空信息
|
| | | @Update("UPDATE down_workstation SET width = null, height = null, flow_card_id = null WHERE workstation_id = #{workstationId}")
|
| | | void clearFlowCardId(DownWorkstation downWorkstation);
|
| | |
|
| | |
|
| | |
|
| | | @Update("UPDATE down_workstation_task SET state = 0 WHERE flow_card_id = #{flowCardId}")
|
| | | void update_task_state_to_zero(@Param("flowCardId") String flowCardId);
|
| | | }
|
| | |
| | | downGlassInfoMapper.insert(newdownGlassInfo);
|
| | | //插入数据到机械手任务表
|
| | | downWorkstationMapper.insertdownWorkstationtask(newdownGlassInfo);
|
| | | //更新任务表状态为0
|
| | | //更新下片任务表状态为0
|
| | | downGlassInfoMapper.updateTaskStateToZero(downGlassInfo.getFlowCardId());
|
| | |
|
| | | sequence++; // 递增顺序字段值
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
| | | //downWorkstationMapper = WebSocketServer.applicationContext.getBean(DownWorkstationMapper.class);
|
| | | //downGlassInfoMapper = WebSocketServer.applicationContext.getBean(DownGlassInfoMapper.class);
|
| | | try {
|
| | | //查询下片工位表中架子是否绑定了流程卡号 工位表和任务表中状态为1的流程卡号和已落架数量
|
| | | List<DownWorkstation> taskdownWorkstation = downWorkstationMapper.selectdownWorkstationstate();
|
| | | if (taskdownWorkstation != null && !taskdownWorkstation.isEmpty()) {
|
| | | //查询下片工位表中是否绑定了架子是否绑定了流程卡号,如果已经绑定则更新已落架数量,并且删除下片任务表中的记录
|
| | | //,如果已经绑定则更新已落架数量,并且删除下片任务表中的记录
|
| | | for (DownWorkstation downWorkstation : taskdownWorkstation) {
|
| | | downWorkstationMapper.update_racks_number(downWorkstation.getFlowCardId(),6 );
|
| | |
|
| | | //更新下片工位表中已落架数量
|
| | | downWorkstationMapper.update_racks_number(downWorkstation.getFlowCardId(),downWorkstation.getRacksnumber()+1 );
|
| | |
|
| | | //更新机械任务表中状态为0
|
| | | downWorkstationMapper.update_task_state_to_zero(downWorkstation.getFlowCardId());
|
| | | //删除下片任务表中的记录
|
| | | downGlassInfoMapper.deletetask(downWorkstation.getFlowCardId());
|
| | |
|
| | | }
|
| | |
| | |
|
| | |
|
| | |
|
| | | //绑定流程卡号架子
|
| | |
|
| | | // 绑定流程卡号架子
|
| | | public void bindingshelf(DownWorkstation downWorkstation){
|
| | |
|
| | | String FlowCardId=downWorkstation.getFlowCardId();
|
| | | int WorkstationId=downWorkstation.getWorkstationId();
|
| | |
|
| | |
|
| | |
|
| | | downWorkstationMapper.updateFlowCardId(downWorkstation);
|
| | | }
|
| | |
|
| | |
|
| | |
|
| | | // 满架拉走 清除流程卡信息
|
| | | public void clearFlowCardId(DownWorkstation downWorkstation){
|
| | |
|
| | | downWorkstationMapper.clearFlowCardId(downWorkstation);
|
| | | }
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|