zhitong.yu
2024-10-11 4f58a93c95ff123d51adcb8fa2e521333e8ab022
src/main/java/com/hxzk/controller/FaKaController.java
@@ -7,20 +7,33 @@
import com.hxzk.service.FaKaQuService;
import com.hxzk.service.FaKaService;
import com.hxzk.service.PersonService;
import com.hxzk.util.LogInFo;
import com.hxzk.util.Netty.NettyServerHandler;
import com.hxzk.util.result;
import com.hxzk.util.resultutil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.math.BigInteger;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
@RestController
@RequestMapping("/")
public class FaKaController {
    private static final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
    private String doorsNo;
    private String devriceid;
    @Autowired
    LogInFo log;
    @Autowired
    FaKaService faKaService;
    @Autowired
@@ -29,6 +42,8 @@
    FaKaQuService faKaQuService;
    @Autowired
    FaKaHuanLogService faKaHuanLogService;
    @Autowired
    NettyServerHandler nettyServerHandler;
    @GetMapping("findFaKa")
    result<List<TbFakaji>> findFaKa(Integer page, Integer limit){
@@ -40,47 +55,99 @@
    @PostMapping("takeCard")
    public Map<String,String> takeCard(@RequestBody FaKa faKa){
        TbFakaji fakaji = faKaService.findFaka(faKa);
        //如果根据柜门号和卡号查出来是空,则可以取卡
        if (fakaji == null){
            return KaFan("200","2","success");
        }else{
            if (fakaji.getState().equals("1")){
                return KaFan("200","2","success");
        TbFakaji fakaji2 = faKaService.findFakaUserId(faKa);
        Map<String,String> map = new HashMap<>();
        if (fakaji2==null){
            //如果根据柜门号和卡号查出来是空,则可以取卡
            if (fakaji == null){
                map.put("code","200");
                map.put("status","2");
                map.put("msg","柜子不存在");
                log.warn("取卡:柜子不存在"+gettime1());
                return map;
            }else{
                TbPerson personName = personService.findtagidPerson(Integer.valueOf(faKa.getCardId()));
                if (personName == null){
                    return KaFan("101","0","该设备号不存在");
                map.put("code","200");
                map.put("cardID",fakaji.getTagid());
                map.put("doorNo",Integer.toHexString(Integer.parseInt(fakaji.getKacaoid())));
                if (fakaji.getGuizistate().equals("0")){
                    map.put("status","1");
                    map.put("msg","success");
                    //修改状态为待取出
                    TbFakaji fakaji1 = new TbFakaji();
                    fakaji1.setTagid(fakaji.getTagid());
                    fakaji1.setGuiziid(faKa.getDeviceId());
                    fakaji1.setKacaoid(fakaji.getKacaoid());
                    faKaService.updateStaticFaKa(fakaji1);
                    scheduler.schedule(() -> {
                        updataChaoShi(fakaji1);
                    }, 10, TimeUnit.SECONDS);
                    log.Info("请求取卡:"+gettime1());
                    log.Info("返回卡号"+fakaji.getTagid()+",柜门"+fakaji.getKacaoid());
                }
                return KaFan("200","1","success");
                if (fakaji.getGuizistate().equals("1")){
                    map.put("status","1");
                    map.put("msg","插卡错误");
                    log.warn("取卡:插卡错误"+gettime1());
                }
                if (fakaji.getGuizistate().equals("2")){
                    map.put("status","2");
                    map.put("msg","门控故障");
                    log.warn("取卡:门控故障"+gettime1());
                }
                if (fakaji.getGuizistate().equals("3")){
                    map.put("status","2");
                    map.put("msg","过流");
                    log.warn("取卡:过流"+gettime1());
                }
                if (fakaji.getGuizistate().equals("4")){
                    map.put("status","1");
                    map.put("msg","过压");
                    log.warn("取卡:过压"+gettime1());
                }
                if (fakaji.getGuizistate().equals("5")){
                    map.put("status","1");
                    map.put("msg","欠压");
                    log.warn("取卡:欠压"+gettime1());
                }
                if (fakaji.getGuizistate().equals("6")){
                    map.put("status","2");
                    map.put("msg","内部通信故障");
                    log.warn("取卡:内部通信故障"+gettime1());
                }
                return map;
            }
        }else{
            map.put("code","200");
            map.put("status","2");
            map.put("msg","已取过卡");
            log.warn("取卡:已取过卡"+gettime1());
            return map;
        }
    }
    @PostMapping("takeSuccess")
    public Map<String,String> takeSuccess(@RequestBody FaKa faKa){
        TbFakaji fakaji = faKaService.findFaka(faKa);
        faKa.setDoorNo(String.valueOf(decodeHEX(faKa.getDoorNo())));
        //如果根据柜门号和卡号查出来是空,则可以取卡
        if (fakaji == null){
            return KaFan("200","2","success");
        }else{
            if (fakaji.getState().equals("1")){
                return KaFan("200","2","success");
            }else{
                //可以发卡并切保存记录和保存到实时表中
                //根据卡编号查询人员名称
                TbPerson personName = personService.findtagidPerson(Integer.valueOf(faKa.getCardId()));
                if (personName == null){
                    return KaFan("101","0","该设备号不存在");
                }
        TbPerson personName = personService.findtagidPerson(String.valueOf(faKa.getCardId()));
        if (personName == null){
            log.warn("取卡:设备号不存在"+gettime1());
            return KaFan("101","0","该设备号不存在");
        }
                TbFakaji tbFakaji = new TbFakaji();
                tbFakaji.setGuiziid(faKa.getDeviceId());
                tbFakaji.setKacaoid(faKa.getDoorNo());
                tbFakaji.setTagid(faKa.getCardId());
                tbFakaji.setTime(gettime());
                tbFakaji.setState("1");
                tbFakaji.setTagname(personName.getPName());
                Integer count = faKaService.updateFaKa(tbFakaji);
        TbFakaji tbFakaji = new TbFakaji();
        tbFakaji.setGuiziid(faKa.getDeviceId());
        tbFakaji.setKacaoid(faKa.getDoorNo());
        tbFakaji.setTagid(faKa.getCardId());
        tbFakaji.setTime(gettime());
        tbFakaji.setState("1");
        tbFakaji.setStatics("2");
        tbFakaji.setUserid(faKa.getUserId()+"取卡");
        tbFakaji.setTagname(personName.getPName());
        TbPerson person = personService.findtagidPerson(String.valueOf(tbFakaji.getTagid()));
        if (person.getBaoliu41().equals("0")){
            Integer count = faKaService.updateFaKa(tbFakaji);
            if (count>0){
                //添加记录表
                TbFakaqulog fakaqulog = new TbFakaqulog();
                fakaqulog.setGuiziid(faKa.getDoorNo());
@@ -88,67 +155,74 @@
                fakaqulog.setPersonname(personName.getPName());
                fakaqulog.setTime(gettime());
                faKaQuService.InserteFaka(fakaqulog);
                TbPerson person1 = new TbPerson();
                person1.setPTagid(tbFakaji.getTagid());
                person1.setBaoliu41("1");
                personService.UpPersonFaKaState(person1);
                log.Info("取卡成功:"+gettime1());
                log.Info("取卡信息:卡号"+faKa.getCardId()+",柜门:"+faKa.getDoorNo());
                doorsNo = faKa.getDoorNo();
                devriceid =faKa.getDeviceId();
                return KaFan("200","1","success");
            }
        }
    }
    @PostMapping("takeSuccessTest")
    public Map<String,String> takeSuccessTest(FaKa faKa){
        TbFakaji fakaji = faKaService.findFaka(faKa);
        //如果根据柜门号和卡号查出来是空,则可以取卡
        if (fakaji == null){
            return KaFan("200","2","success");
        }else{
            if (fakaji.getState().equals("1")){
                return KaFan("200","2","success");
            }else{
                //可以发卡并切保存记录和保存到实时表中
                //根据卡编号查询人员名称
                TbPerson personName = personService.findtagidPerson(Integer.valueOf(faKa.getCardId()));
                if (personName == null){
                    return KaFan("101","0","该设备号不存在");
                }
                TbFakaji tbFakaji = new TbFakaji();
                tbFakaji.setGuiziid(faKa.getDeviceId());
                tbFakaji.setKacaoid(faKa.getDoorNo());
                tbFakaji.setTagid(faKa.getCardId());
                tbFakaji.setTime(gettime());
                tbFakaji.setState("1");
                tbFakaji.setTagname(personName.getPName());
                Integer count = faKaService.updateFaKa(tbFakaji);
                //添加记录表
                TbFakaqulog fakaqulog = new TbFakaqulog();
                fakaqulog.setGuiziid(faKa.getDoorNo());
                fakaqulog.setTagid(faKa.getDeviceId());
                fakaqulog.setPersonname(personName.getPName());
                fakaqulog.setTime(gettime());
                faKaQuService.InserteFaka(fakaqulog);
                return KaFan("200","1","success");
                log.warn("取卡失败"+gettime1());
                return KaFan("200","2","success");
            }
        }else{
            log.warn("取卡:取卡失败,还并没有还卡"+gettime1());
            return KaFan("200","2","请还卡之后再次取卡");
        }
    }
    @PostMapping("saveCard")
    public Map<String,String> saveCard(@RequestBody FaKa faKa){
        if (faKa.getDeviceId() == null || faKa.getDoorNo() == null){
            return KaFan("200","2","success");
        }
        TbPerson personName = personService.findtagidPerson(String.valueOf(faKa.getCardId()));
        if (personName == null){
            log.warn("还卡:设备编号不存在,还卡失败");
            return KaFan("200","1","设备编号不存在");
        }
        Integer nums = decodeHEX(faKa.getDoorNo());
        TbFakaji  fakaji = new TbFakaji();
        fakaji.setGuiziid(faKa.getDeviceId());
        fakaji.setKacaoid(faKa.getDoorNo());
        fakaji.setKacaoid(String.valueOf(nums));
        fakaji.setTagid(faKa.getCardId());
        fakaji.setState("0");
        fakaji.setTime(gettime());
        fakaji.setUserid(faKa.getUserId()+"还卡");
        fakaji.setTagname(personName.getPName());
        TbFakahuanlog tbFakahuanlog = new TbFakahuanlog();
        tbFakahuanlog.setGuiziid(faKa.getDeviceId());
        tbFakahuanlog.setTagid(faKa.getCardId());
        tbFakahuanlog.setTime(gettime());
        faKaHuanLogService.InsertFaKaHuan(tbFakahuanlog);
        //添加成功之后删除实时表
        //添加成功之后修改实时表
        fakaji.setStatics("0");
        faKaService.deleteFakaji(fakaji);
        TbPerson person1 = new TbPerson();
        person1.setPTagid(faKa.getCardId());
        person1.setBaoliu41("0");
        personService.UpPersonFaKaState(person1);
        faKaService.updateFaKaQuKaState(devriceid,doorsNo);
        log.Info(faKa.getCardId()+"已还卡,修改可取卡");
       return KaFan("200","1","success");
    }
@@ -157,6 +231,77 @@
        return faKaService.updateStateFaKa(fakaji);
    }
    @GetMapping("UpPersonStateFaKa")
    public Integer UpPersonStateFaKa(String tagid){
            return personService.UpdatePersonBaoLiu41(tagid);
    }
    @PostMapping("cardStatus")
    public Map<String,String> cardStatus(@RequestBody FaKa faKa){
        System.out.println("上报卡状态");
//        if (faKa.getCardId().equals("0000")){
//            //修改为无卡
//            faKa.setDoorNo(String.valueOf(decodeHEX(faKa.getDoorNo())));
//            TbFakaji tbFakaji = new TbFakaji();
//            tbFakaji.setGuiziid(faKa.getDeviceId());
//            tbFakaji.setKacaoid(faKa.getDoorNo());
//            tbFakaji.setStatics("2");
//            tbFakaji.setState("1");
//            tbFakaji.setGuizistate(faKa.getStatus());
//            faKaService.updateFaKaCardStatus(tbFakaji);
//            System.out.println(faKa.getDoorNo()+"修改无卡"+gettime1());
//            return KaFan("200","1","success");
//        }else{
//            //修改为有卡
//            faKa.setDoorNo(String.valueOf(decodeHEX(faKa.getDoorNo())));
//            TbFakaji tbFakaji = new TbFakaji();
//            tbFakaji.setGuiziid(faKa.getDeviceId());
//            tbFakaji.setKacaoid(faKa.getDoorNo());
//            tbFakaji.setGuizistate(faKa.getStatus());
//            tbFakaji.setStatics("0");
//            tbFakaji.setState("0");
//            tbFakaji.setTagid(faKa.getCardId());
//            faKaService.updateFaKaCardStatus(tbFakaji);
//            System.out.println(faKa.getDoorNo()+"修改有卡"+gettime1());
            return KaFan("200","1","success");
//        }
    }
    @PostMapping("ShouDongXiaFa")
    public void ShouDongXiaFa(){
      nettyServerHandler.xiafa(personService);
    }
    @GetMapping("ShouDongShengJi")
    public void ShouDongShengJi(){
        nettyServerHandler.shengji();
        System.out.println("升级");
    }
    @GetMapping("ShouDongKaiSuo")
    public void ShouDongKaiSuo(String doorNo){
        Integer door = Integer.valueOf(doorNo);
        String hexDoor = Integer.toHexString(door);
// 对于前15个值,确保格式为两位数
        if (door < 15) {
            hexDoor = String.format("%02x", door); // 使用小写 'x'
        } else {
            // 确保十六进制
            hexDoor = hexDoor.toLowerCase(); // 确保 hexDoor 是小写
        }
        nettyServerHandler.kaisuo(hexDoor);
        System.out.println("开锁"+hexDoor);
    }
    public Integer updataChaoShi(TbFakaji fakaji){
        Integer tps = faKaService.updateStaticFaKaChaoShi(fakaji);
        System.out.println("超时"+tps+"条");
        return tps;
    }
    public Map<String,String> KaFan(String code,String status,String msg){
        Map map = new HashMap<>();
        map.put("code",code);
@@ -164,12 +309,34 @@
        map.put("msg",msg);
        return map;
    }
    //根据柜子编号查找所有柜门信息
    @GetMapping("findFakaNum")
    public List<TbFakaji> findFakaNum(String num){
        return  faKaService.findFakaNum(num);
    }
    public String gettime(){
        Date now = new Date();
        // 创建日期格式化对象,设置格式为 "yyyy-MM-dd HH:mm"
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        // 格式化日期对象,输出字符串结果
        String formattedDate = sdf.format(now);
        return formattedDate;
    }
    public String gettime1(){
        Date now = new Date();
        // 创建日期格式化对象,设置格式为 "yyyy-MM-dd HH:mm"
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        // 格式化日期对象,输出字符串结果
        String formattedDate = sdf.format(now);
        return formattedDate;
    }
    public static int decodeHEX(String hexs) {
        BigInteger bigint = new BigInteger(hexs, 16);
        int numb = bigint.intValue();
        return numb;
    }
}