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<OutPark> pages = outParkService.findPage(pageable);
|
return success("",pages);
|
}
|
|
//道闸code
|
@PostMapping("findByBarrierCode")
|
public Object findById(String code) {
|
Specification<Barrier> specification = new Specification<Barrier>() {
|
@Override
|
public Predicate toPredicate(Root<Barrier> root, CriteriaQuery<?> cq, CriteriaBuilder cb) {
|
List<Predicate> list = new ArrayList<Predicate>();
|
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<Barrier> 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<Barrier> specification = new Specification<Barrier>() {
|
// @Override
|
// public Predicate toPredicate(Root<Barrier> root, CriteriaQuery<?> cq, CriteriaBuilder cb) {
|
// List<Predicate> list = new ArrayList<Predicate>();
|
// 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<Barrier> 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<String,Object> 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<Barrier> specification = new Specification<Barrier>() {
|
// @Override
|
// public Predicate toPredicate(Root<Barrier> root, CriteriaQuery<?> cq, CriteriaBuilder cb) {
|
// List<Predicate> list = new ArrayList<Predicate>();
|
// 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<Barrier> all = barrierService.findAll(specification);
|
// if(all.size()==0){
|
// return error("未找到该设备");
|
// }else{
|
// enterPark.setBarrierId(all.get(0).getId());
|
// enterPark.setParkId(all.get(0).getParkId());
|
// }
|
//
|
// Specification<Ticket> specification2 = new Specification<Ticket>() {
|
// @Override
|
// public Predicate toPredicate(Root<Ticket> root, CriteriaQuery<?> cq, CriteriaBuilder cb) {
|
// List<Predicate> list = new ArrayList<Predicate>();
|
// 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<Ticket> tickets = ticketService.findAll(specification2);
|
// if(tickets.size()>0){
|
// enterPark.setStatus(1);//发现有违章
|
// }
|
//
|
// enterParkService.save(enterPark);
|
// Map<String,Object> 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<Ticket> specification2 = new Specification<Ticket>() {
|
// @Override
|
// public Predicate toPredicate(Root<Ticket> root, CriteriaQuery<?> cq, CriteriaBuilder cb) {
|
// List<Predicate> list = new ArrayList<Predicate>();
|
// 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<Ticket> 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<Barrier> specification = new Specification<Barrier>() {
|
@Override
|
public Predicate toPredicate(Root<Barrier> root, CriteriaQuery<?> cq, CriteriaBuilder cb) {
|
List<Predicate> list = new ArrayList<Predicate>();
|
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<Barrier> 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<Barrier> specification = new Specification<Barrier>() {
|
// @Override
|
// public Predicate toPredicate(Root<Barrier> root, CriteriaQuery<?> cq, CriteriaBuilder cb) {
|
// List<Predicate> list = new ArrayList<Predicate>();
|
// 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<Barrier> 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("打印错误");
|
}
|
}
|
}
|