增加二维码重复使用校验

This commit is contained in:
2023-09-18 17:31:32 +08:00
parent 52aa9659a2
commit 0930a8a48b
8 changed files with 130 additions and 11 deletions

View File

@@ -1,10 +1,8 @@
package com.sv.netty.netty.service.impl; package com.sv.netty.netty.service.impl;
import com.enums.BarCodeStatusEnum;
import com.enums.EnterEnum; import com.enums.EnterEnum;
import com.sv.entity.Member; import com.sv.entity.*;
import com.sv.entity.MemberEnterVenueLog;
import com.sv.entity.MemberMoneyLog;
import com.sv.entity.Venue;
import com.sv.mapper.BarcodeMapper; import com.sv.mapper.BarcodeMapper;
import com.sv.netty.config.*; import com.sv.netty.config.*;
import com.sv.netty.netty.service.MessageService; import com.sv.netty.netty.service.MessageService;
@@ -110,6 +108,9 @@ public class ServerMessageHandlerAdapter implements MessageService {
public void outVenue(String barcode) { public void outVenue(String barcode) {
VenueBarCode venueBarCode = MakeCode.decodeCode(barcode); VenueBarCode venueBarCode = MakeCode.decodeCode(barcode);
barcode = MakeCode.reWriteBarcode(barcode); barcode = MakeCode.reWriteBarcode(barcode);
if (!checkBarcode(barcode)){
throw new ServiceException("二维码已经使用");
}
Channel channel = getCurrentChannel(venueBarCode.getDeviceName(),venueBarCode.getVenueId()); Channel channel = getCurrentChannel(venueBarCode.getDeviceName(),venueBarCode.getVenueId());
Member member = memberService.findByMember(venueBarCode.getMemberId()); Member member = memberService.findByMember(venueBarCode.getMemberId());
if (member != null) { if (member != null) {
@@ -139,6 +140,9 @@ public class ServerMessageHandlerAdapter implements MessageService {
public void enterVenue(String barcode) { public void enterVenue(String barcode) {
VenueBarCode venueBarCode = MakeCode.decodeCode(barcode); VenueBarCode venueBarCode = MakeCode.decodeCode(barcode);
barcode = MakeCode.reWriteBarcode(barcode); barcode = MakeCode.reWriteBarcode(barcode);
if (!checkBarcode(barcode)){
throw new ServiceException("二维码已经使用");
}
Channel channel = getCurrentChannel(venueBarCode.getDeviceName(), venueBarCode.getVenueId()); Channel channel = getCurrentChannel(venueBarCode.getDeviceName(), venueBarCode.getVenueId());
Member member = memberService.findByMember(venueBarCode.getMemberId()); Member member = memberService.findByMember(venueBarCode.getMemberId());
if (member != null) { if (member != null) {
@@ -155,6 +159,22 @@ public class ServerMessageHandlerAdapter implements MessageService {
} }
} }
/**
* 校验二维码是否已被使用
* @param barcode
* @return
*/
private boolean checkBarcode(String barcode) {
Barcode code = barcodeMapper.checkCodeStatus(barcode);
if (code == null) {
throw new ServiceException("二维码不存在或者已经被使用");
}
if (BarCodeStatusEnum.INIT.getValue()==code.getStatus()){
return true;
}
return false;
}
private void writeOffCode(String barcode) { private void writeOffCode(String barcode) {
barcodeMapper.writeOffCode(barcode); barcodeMapper.writeOffCode(barcode);
} }

View File

@@ -1,5 +1,9 @@
package com.sv.barcode; package com.sv.barcode;
import com.sv.barcode.button.EnterClick;
import com.sv.barcode.button.OutClick;
import com.sv.barcode.button.TestCodeClick;
import javax.swing.*; import javax.swing.*;
import java.awt.*; import java.awt.*;
@@ -7,13 +11,25 @@ public class ListenKeyFrame extends Thread{
Frame frame; Frame frame;
public void newFrame (int i) { public void newFrame (String title) {
frame = new Frame("智慧云馆门禁" + i); frame = new Frame("智慧云馆门禁" + title);
frame.setBounds(300,100,600,500); frame.setBounds(300,100,600,500);
frame.setLayout(new FlowLayout(FlowLayout.CENTER,5,200));//设计布局 frame.setLayout(new FlowLayout(FlowLayout.CENTER,20,50));//设计布局
JLabel label = new JLabel("请保持该界面被选中,否则将无法监听二维码扫描!"); JLabel label = new JLabel("请保持该界面被选中,否则将无法监听二维码扫描!");
JButton buttonIn = new JButton("入场开门");
buttonIn.addActionListener(new EnterClick());
JButton buttonOut = new JButton("出场开门");
buttonOut.addActionListener(new OutClick());
JTextField jTextField = new JTextField(33);
//设置输入框大小
JButton buttonSubmit = new JButton("验证二维码(测试专用)");
buttonSubmit.addActionListener(new TestCodeClick(jTextField));
frame.addKeyListener(new ScanBarCode()); frame.addKeyListener(new ScanBarCode());
frame.add(label); frame.add(label);
frame.add(buttonIn);
frame.add(buttonOut);
// frame.add(jTextField); // 注释
// frame.add(buttonSubmit); // 注释
frame.setVisible(true); frame.setVisible(true);
frame.setFocusable(true); frame.setFocusable(true);
} }
@@ -24,4 +40,10 @@ public class ListenKeyFrame extends Thread{
} }
} }
public void focus() {
if (frame != null) {
frame.setFocusable(true);
}
}
} }

View File

@@ -0,0 +1,20 @@
package com.sv.barcode.button;
import com.sv.netty.ClientHandler;
import com.sv.netty.ClientThread;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class EnterClick implements ActionListener {
private final Logger logger = LoggerFactory.getLogger(ClientHandler.class);
@Override
public void actionPerformed(ActionEvent e) {
// 开门
logger.error("开门成功!!!!!!!");
}
}

View File

@@ -0,0 +1,19 @@
package com.sv.barcode.button;
import com.sv.netty.ClientHandler;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class OutClick implements ActionListener {
private final Logger logger = LoggerFactory.getLogger(ClientHandler.class);
@Override
public void actionPerformed(ActionEvent e) {
// 开门
logger.error("开门成功!!!!!!!");
}
}

View File

@@ -0,0 +1,27 @@
package com.sv.barcode.button;
import com.sv.netty.ClientHandler;
import com.sv.netty.ClientThread;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class TestCodeClick implements ActionListener {
private final Logger logger = LoggerFactory.getLogger(ClientHandler.class);
private JTextField barcode;
public TestCodeClick(JTextField barcode) {
this.barcode = barcode;
}
@Override
public void actionPerformed(ActionEvent e) {
logger.error("发送验证二维码消息!!!=========" + barcode.getText());
ClientThread.getInstance().checkBarcode(barcode.getText());
}
}

View File

@@ -40,19 +40,19 @@ public class ClientService {
Thread.sleep(3000); Thread.sleep(3000);
ListenKeyFrame listenKeyFrame = new ListenKeyFrame(); ListenKeyFrame listenKeyFrame = new ListenKeyFrame();
listenKeyFrame.newFrame(1); listenKeyFrame.newFrame("-加载中12%");
Thread.sleep(3000); Thread.sleep(3000);
listenKeyFrame.close(); listenKeyFrame.close();
ListenKeyFrame listenKeyFrame1 = new ListenKeyFrame(); ListenKeyFrame listenKeyFrame1 = new ListenKeyFrame();
listenKeyFrame1.newFrame(2); listenKeyFrame1.newFrame("-加载中53%");
Thread.sleep(3000); Thread.sleep(3000);
listenKeyFrame1.close(); listenKeyFrame1.close();
ListenKeyFrame listenKeyFrame2 = new ListenKeyFrame(); ListenKeyFrame listenKeyFrame2 = new ListenKeyFrame();
listenKeyFrame2.newFrame(3); listenKeyFrame2.newFrame("-加载中53%");
Thread.sleep(3000); Thread.sleep(3000);
listenKeyFrame2.close(); listenKeyFrame2.close();
ListenKeyFrame listenKeyFrame3 = new ListenKeyFrame(); ListenKeyFrame listenKeyFrame3 = new ListenKeyFrame();
listenKeyFrame3.newFrame(4); listenKeyFrame3.newFrame("");
} }

View File

@@ -23,4 +23,7 @@ public interface BarcodeMapper {
@NoPlatform @NoPlatform
Barcode findBarcode(@Param("venueId") Integer venueId,@Param("memberId") Integer memberId); Barcode findBarcode(@Param("venueId") Integer venueId,@Param("memberId") Integer memberId);
@NoPlatform
Barcode checkCodeStatus(@Param("barcode") String barcode);
} }

View File

@@ -168,4 +168,12 @@
and status = 0 and status = 0
</select> </select>
<select id="checkCodeStatus" resultMap="BaseResultMap" parameterType="String" >
select
<include refid="Base_Column_List" />
from sv_barcode
where barcode = #{barcode,jdbcType=VARCHAR}
and status = 0
</select>
</mapper> </mapper>