package com.boying.controller; import com.boying.common.BaseController; import com.boying.common.SystemConfigProperties; import com.boying.common.util.DateUtil; import com.boying.common.util.StringUtil; import com.boying.entity.*; import com.boying.service.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; import org.springframework.data.jpa.domain.Specification; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.CriteriaQuery; import javax.persistence.criteria.Predicate; import javax.persistence.criteria.Root; import java.beans.Transient; import java.io.BufferedWriter; import java.io.FileWriter; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; import java.util.concurrent.TimeUnit; import static com.boying.common.util.DateUtil.getMinute; @RestController @RequestMapping("outPark") public class OutParkController extends BaseController { @Autowired private OutParkService outParkService; @Autowired private EnterParkService enterParkService; @Autowired private BarrierService barrierService; @Autowired private TicketService ticketService; @Autowired private SystemConfigProperties systemConfigProperties; @Autowired private CostRuleService costRuleService; @Autowired private ParkService parkService; @Autowired private StringRedisTemplate redisTemplate; @PostMapping("findPage") public Object findPage(int page,int pageSize) { Pageable pageable = PageRequest.of(page-1,pageSize, Sort.Direction.DESC,"id"); Page pages = outParkService.findPage(pageable); return success("",pages); } //道闸code @PostMapping("findByBarrierCode") public Object findById(String code) { Specification specification = new Specification() { @Override public Predicate toPredicate(Root root, CriteriaQuery cq, CriteriaBuilder cb) { List list = new ArrayList(); list.add(cb.equal(root.get("code2").as(String.class), code)); Predicate[] arr = new Predicate[list.size()]; cq.where(list.toArray(arr)); return null; } }; List all = barrierService.findAll(specification); if(all.size()==0){ return error("未找到该设备"); }else{ Barrier barrier = all.get(0); String carNo = barrier.getCarNo(); OutPark outPark = outParkService.findByCarNoAndBarrierId(carNo,barrier.getId()); if(outPark==null){ return error("未识别到车牌号"); }else{ outPark.setParkName(barrier.getName()); return success("请求成功",outPark); } } } // @PostMapping("save") // public Object save(OutPark outPark,String barrierCode) { // if(StringUtil.isNullOrEmpty(barrierCode)){ // return error("barrierCode不能为空"); // } // if(StringUtil.isNullOrEmpty(outPark.getCarNo())){ // return error("carNo不能为空"); // } // if(outPark.getCreateTime()==null){ // return error("createTime不能为空"); // } // // Specification specification = new Specification() { // @Override // public Predicate toPredicate(Root root, CriteriaQuery cq, CriteriaBuilder cb) { // List list = new ArrayList(); // list.add(cb.equal(root.get("code").as(String.class), barrierCode)); // Predicate[] arr = new Predicate[list.size()]; // cq.where(list.toArray(arr)); // return null; // } // }; // List all = barrierService.findAll(specification); // if(all.size()==0){ // return error("未找到该设备"); // }else{ // Barrier barrier = all.get(0); // outPark.setBarrierId(barrier.getId()); // outPark.setParkId(barrier.getParkId()); // barrier.setCarNo(outPark.getCarNo()); // barrierService.save(barrier); // } // int i = -((int) (outPark.getTime())); // outPark.setEnterTime(getMinute(outPark.getCreateTime(),i)); // outParkService.save(outPark); // Map map = new HashMap<>(); // map.put("id",outPark.getId()); // return success("保存成功",map); // } @PostMapping("delete") public Object delete(Long id) { outParkService.delete(id); return success("删除成功"); } //进停车场接口 // @PostMapping("enterPark") // public Object enterPark(EnterPark enterPark,String barrierCode) { // if(StringUtil.isNullOrEmpty(barrierCode)){ // return error("barrierCode不能为空"); // } // if(StringUtil.isNullOrEmpty(enterPark.getCarNo())){ // return error("carNo不能为空"); // } // if(enterPark.getCreateTime()==null){ // return error("createTime不能为空"); // } // // Specification specification = new Specification() { // @Override // public Predicate toPredicate(Root root, CriteriaQuery cq, CriteriaBuilder cb) { // List list = new ArrayList(); // list.add(cb.equal(root.get("code").as(String.class), barrierCode)); // Predicate[] arr = new Predicate[list.size()]; // cq.where(list.toArray(arr)); // return null; // } // }; // List all = barrierService.findAll(specification); // if(all.size()==0){ // return error("未找到该设备"); // }else{ // enterPark.setBarrierId(all.get(0).getId()); // enterPark.setParkId(all.get(0).getParkId()); // } // // Specification specification2 = new Specification() { // @Override // public Predicate toPredicate(Root root, CriteriaQuery cq, CriteriaBuilder cb) { // List list = new ArrayList(); // list.add(cb.equal(root.get("carNo").as(String.class), enterPark.getCarNo())); // list.add(cb.notEqual(root.get("payStatus"), 1)); // Predicate[] arr = new Predicate[list.size()]; // cq.where(list.toArray(arr)); // return null; // } // }; // List tickets = ticketService.findAll(specification2); // if(tickets.size()>0){ // enterPark.setStatus(1);//发现有违章 // } // // enterParkService.save(enterPark); // Map map = new HashMap<>(); // map.put("id",enterPark.getId()); // return success("保存成功",map); // } @PostMapping("enterPark2") public Object enterPark(String carNo,Long barrierId,Long parkId,String code2) { Barrier barrier1 = findBarrier(code2); barrierId = barrier1.getId(); parkId = barrier1.getParkId(); Park park = (Park)parkService.findById(parkId); int num = 0; String s = redisTemplate.opsForValue().get("car_park_" + parkId); if(park != null){ num = park.getNum(); if(s !=null){ if(Integer.parseInt(s) > num){ return "null"; } }else { s= "0"; redisTemplate.opsForValue().set("car_park_" + parkId,s,30, TimeUnit.DAYS); } } enterParkService.deleteByCarNo(carNo,parkId); EnterPark enterPark = new EnterPark(); enterPark.setCreateTime(new Date()); enterPark.setCarNo(carNo); enterPark.setBarrierId(barrierId); enterPark.setParkId(parkId); // Specification specification2 = new Specification() { // @Override // public Predicate toPredicate(Root root, CriteriaQuery cq, CriteriaBuilder cb) { // List list = new ArrayList(); // list.add(cb.equal(root.get("carNo").as(String.class), enterPark.getCarNo())); // list.add(cb.notEqual(root.get("payStatus"), 1)); // Predicate[] arr = new Predicate[list.size()]; // cq.where(list.toArray(arr)); // return null; // } // }; // List tickets = ticketService.findAll(specification2); // if(tickets.size()>0){ // enterPark.setStatus(1);//发现有违章 // } enterParkService.save(enterPark); int i = Integer.parseInt(s); i++; redisTemplate.opsForValue().set("car_park_" + parkId,Integer.toString(i),30, TimeUnit.DAYS); Barrier barrier = (Barrier) barrierService.findById(barrierId); barrier.setType2(1); barrierService.save(barrier); return success("请求成功"); } @PostMapping("outPark2") public Object outPark(String carNo,Long barrierId,Long parkId,String code2) { String s = "开始执行出场接口------>\n"; Barrier barrier1 = findBarrier(code2); barrierId = barrier1.getId(); parkId = barrier1.getParkId(); OutPark outPark = new OutPark(); outPark.setCarNo(carNo); outPark.setParkId(parkId); outPark.setBarrierId(barrierId); outPark.setCreateTime(new Date()); outPark.setCode(System.currentTimeMillis()+""); EnterPark enterPark = enterParkService.findByCarNo(carNo).get(0); if(enterPark==null){ s += "未发现入场车辆:"+carNo+"\n"; writeTxt(s); return error("无进场记录或手机号进出输入不一致",null); }else{ s += "发现入场车辆: "+enterPark.getCarNo()+",道闸id为:"+enterPark.getBarrierId()+",停车场id:"+enterPark.getParkId()+",违章标识:"+enterPark.getStatus()+"\n"; outPark.setEnterTime(enterPark.getCreateTime()); } String redis = redisTemplate.opsForValue().get("car_park_" + parkId); long l = outPark.getCreateTime().getTime() - enterPark.getCreateTime().getTime(); s+= "场内时长为:"+l+"毫秒,合计为: "+l/(1000*60)+"秒\n"; outPark.setTime(l/(1000*60)); double money = 0; try { money = costRuleService.getMoney(parkId, enterPark.getCreateTime(), outPark.getCreateTime(), 1); s+="金额为:"+money+"\n"; } catch (ParseException e) { e.printStackTrace(); } outPark.setPrice(Double.valueOf(String.format("%.1f", money))); //outPark.setStatus3(findTicket(carNo)); outParkService.save(outPark); int i = Integer.parseInt(redis); i--; if(i<0){ redisTemplate.opsForValue().set("car_park_" + parkId,"0",30, TimeUnit.DAYS); }else { redisTemplate.opsForValue().set("car_park_" + parkId,Integer.toString(i),30, TimeUnit.DAYS); } Barrier barrier = (Barrier) barrierService.findById(barrierId); barrier.setCarNo(carNo); if(outPark.getPrice()==0&&outPark.getStatus3()==0){ barrier.setType2(1); }else { barrier.setType2(0); } barrierService.save(barrier); s += "\n"; writeTxt(s); return success("请求成功",outPark); } public Barrier findBarrier(String code2) { Specification specification = new Specification() { @Override public Predicate toPredicate(Root root, CriteriaQuery cq, CriteriaBuilder cb) { List list = new ArrayList(); list.add(cb.equal(root.get("code2").as(String.class), code2)); Predicate[] arr = new Predicate[list.size()]; cq.where(list.toArray(arr)); return null; } }; List all = barrierService.findAll(specification); if(all.size()==0){ return null; }else{ Barrier barrier = all.get(0); return barrier; } } //设备状态接口 // @PostMapping("status") // public Object status(String barrierCode) { // Specification specification = new Specification() { // @Override // public Predicate toPredicate(Root root, CriteriaQuery cq, CriteriaBuilder cb) { // List list = new ArrayList(); // list.add(cb.equal(root.get("code").as(String.class), barrierCode)); // Predicate[] arr = new Predicate[list.size()]; // cq.where(list.toArray(arr)); // return null; // } // }; // List all = barrierService.findAll(specification); // if(all.size()==0){ // return error("未找到该设备"); // }else{ // Barrier barrier = all.get(0); // barrier.setCreateTime(new Date()); // barrierService.save(barrier); // } // return success("保存成功"); // } private void writeTxt( String txt) { SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); try { FileWriter f = new FileWriter(systemConfigProperties.getLogPath()+sdf.format(new Date())+".txt",true); BufferedWriter bw=new BufferedWriter(f); bw.write(txt); bw.newLine(); bw.close(); } catch(Exception e) { System.out.println("打印错误"); } } }