package com.boying.controller.phone; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.boying.common.R; import com.boying.entity.*; import com.boying.service.*; import com.boying.util.DateUtilOther; import com.boying.util.FileUtil; import com.boying.util.NumberToCN; import io.swagger.annotations.ApiOperation; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import org.apache.commons.io.FileUtils; import org.apache.commons.io.FilenameUtils; import org.apache.commons.io.IOUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartHttpServletRequest; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.math.BigDecimal; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; @RestController @RequestMapping("ffzf/ticket") @RequiredArgsConstructor @Tag(description = "ffzf/ticket" , name = "手持开罚单接口" ) public class TicketController{ private final TicketService ticketService; @Value("${ffpark.uploadPath}") private String uploadImgPath; @Value("${ffpark.ip2}") private String ip2; // @Autowired // private final SystemConfigProperties systemConfigProperties; private final UserService userService; private final ViolationTypeService violationTypeService; private final TicketBlackService ticketBlackService; private final OrderRecordService orderRecordService; private final StreetLogoService streetLogoService; private final NowPayOrderService nowPayOrderService; //图片回显 @RequestMapping(value = "/showImg", method = RequestMethod.GET) @Operation(summary = "图片回显" , description = "图片回显" ) public void getAwardAsByteArray(HttpServletResponse response, HttpServletRequest request) throws IOException { String result = request.getParameter("result"); InputStream in = null; in = FileUtils.openInputStream(new File(uploadImgPath+result)); response.setContentType(MediaType.IMAGE_PNG_VALUE); ServletOutputStream out = response.getOutputStream(); try { IOUtils.copy(in, out); out.close(); in.close(); } catch (IOException e) { } } @PostMapping("findPage") @Operation(summary = "分页查询" , description = "分页查询" ) public Object findPage(Page page, Ticket ticket){ QueryWrapper wrapper = new QueryWrapper<>(); wrapper.lambda() .like(StringUtils.isNotBlank(ticket.getCarNo()),Ticket::getCarNo,ticket.getCarNo()) .eq(ticket.getType() != null,Ticket::getType,ticket.getType()) .eq(ticket.getViolationTypeId() != null,Ticket::getViolationTypeId,ticket.getViolationTypeId()) .eq(ticket.getPayStatus() != null,Ticket::getPayStatus,ticket.getPayStatus()) .ne(Ticket::getStatus,3) .orderByDesc(Ticket::getCreateTime); return R.ok(ticketService.page(page, wrapper)); } @PostMapping("/save") @Operation(summary = "保存罚单" , description = "保存罚单" ) public Object save(Ticket ticket,HttpServletRequest request) throws IOException{ String imgStr = ""; MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; List imgs = multipartRequest.getFiles("imgs"); for (int i = 0; i < imgs.size(); i++) { MultipartFile multipartFile = imgs.get(i); if(multipartFile != null){ String fileExtension = FilenameUtils.getExtension(multipartFile.getOriginalFilename());//获取后缀 String newFileName = System.currentTimeMillis() + "." + fileExtension;//图片名称 String newFilePath = uploadImgPath + newFileName;//上传路径 File destFile = new File(newFilePath); FileUtils.writeByteArrayToFile(destFile, multipartFile.getBytes()); if(i != imgs.size()-1){ imgStr+=newFileName+","; }else { imgStr+=newFileName; } } } ticket.setImg(imgStr); if(ticket.getUserId()!=null){ User user = userService.getById(ticket.getUserId()); ticket.setUserName(user.getName()); } if(ticket.getViolationTypeId()!=null){ ViolationType violationType = violationTypeService.getById(ticket.getViolationTypeId()); ticket.setViolationTypeName(violationType.getName()); ticket.setMoney(violationType.getMoney()); } if(ticket.getId()==null){ ticket.setCode(System.currentTimeMillis()+""); updateBlackTicket(ticket); } ticket.setStatus(1);//已处理 ticket.setPayStatus(0); ticketService.saveOrUpdate(ticket); if(StringUtils.isBlank(ticket.getQrUrl())){ ticket.setQrUrl(ip2+"#/index?id="+ticket.getId()); ticketService.saveOrUpdate(ticket); } if(StringUtils.isNotBlank(ticket.getLng())&&StringUtils.isNotBlank(ticket.getLat())){ saveLogo(ticket.getAddress(),ticket.getLng(),ticket.getLat()); } if(ticket.getType() == 2){ try { ticket.setPayStatus(1); QueryWrapper wrapper = new QueryWrapper<>(); wrapper.lambda() .eq(TicketBlack::getCarNo,ticket.getCarNo()); List list = ticketBlackService.list(wrapper); if(list.size()>0){ for (TicketBlack ticketBlack : list) { ticketBlackService.removeById(ticketBlack.getId()); } } ticket = ticketService.getNumber(ticket); ticket.setPush(0); ticketService.uploadInfo(ticket); }catch (Exception e){ e.printStackTrace(); } } return R.ok(ticket); } @PostMapping("/save2") @Operation(summary = "保存罚单(废弃)" , description = "保存罚单(废弃)" ) public Object save2(Ticket ticket) throws IOException{ if(ticket.getUserId()!=null){ User user = userService.getById(ticket.getUserId()); ticket.setUserName(user.getName()); } if(ticket.getViolationTypeId()!=null){ ViolationType violationType = violationTypeService.getById(ticket.getViolationTypeId()); ticket.setViolationTypeName(violationType.getName()); ticket.setMoney(violationType.getMoney()); } if(ticket.getId()==null){ ticket.setCode(System.currentTimeMillis()+""); } updateBlackTicket(ticket); ticketService.saveOrUpdate(ticket); ticket.setQrUrl(ip2+"#/index?id="+ticket.getId()); ticket.setType(1); ticketService.saveOrUpdate(ticket); return R.ok(ticket); } /** * 通过id查询票据表 * @param id id * @return R */ @ApiOperation(value = "通过id查询", notes = "通过id查询") @GetMapping("/{id}" ) @Operation(summary = "通过id查询罚单" , description = "通过id查询罚单" ) public R getById(@PathVariable("id" ) Integer id) { Ticket byId = ticketService.getById(id); byId.setContent(violationTypeService.getById(byId.getViolationTypeId()).getContent()); String shouQianMing = byId.getShouQianMing(); String zfQianMing1 = byId.getZfQianMing1(); String zfQianMing2 = byId.getZfQianMing2(); if(StringUtils.isNotBlank(shouQianMing)){ String get = FileUtil.netSourceToBase64(shouQianMing, "GET"); byId.setShouQianMing("data:image/png;base64,"+get); } if(StringUtils.isNotBlank(zfQianMing1)){ String get = FileUtil.netSourceToBase64(zfQianMing1, "GET"); byId.setZfQianMing1("data:image/png;base64,"+get); } if(StringUtils.isNotBlank(zfQianMing2)){ String get = FileUtil.netSourceToBase64(zfQianMing2, "GET"); byId.setZfQianMing2("data:image/png;base64,"+get); } return R.ok(byId); } @PostMapping("/delete") @Operation(summary = "删除罚单" , description = "删除罚单" ) public Object delete(Long id){ Ticket ticket =ticketService.getById(id); ticket.setStatus(3); ticketService.saveOrUpdate(ticket); QueryWrapper wrapper = new QueryWrapper<>(); wrapper.lambda() .eq(TicketBlack::getCarNo,ticket.getCarNo()); List list = ticketBlackService.list(wrapper); if(list.size()>0){ for (TicketBlack ticketBlack : list) { ticketBlackService.removeById(ticketBlack.getId()); } } return R.ok("操作成功"); } @PostMapping("/updateById") @Operation(summary = "更新罚单状态" , description = "更新罚单状态" ) public Object updateById(Ticket ticket){ if(ticket.getMoney() >0){ BigDecimal numberOfMoney = new BigDecimal(ticket.getMoney()+""); String s = NumberToCN.number2CNMontrayUnit(numberOfMoney); ticket.setMoneyStr(s.toString()); } if(ticket.getMoney() == 0){ if(StringUtils.isBlank(ticket.getNumber())){ ticket = ticketService.getNumber(ticket); ticket.setPush(0); ticketService.uploadInfo(ticket); } } if(StringUtils.isBlank(ticket.getZfName1())){ ticket.setZfName1("王俊祥"); ticket.setZfName2("张净雷"); ticket.setZfNum1("03041699001"); ticket.setZfNum2("03041618001"); ticket.setZfQianMing1("http://127.0.0.1:8089/ffzf/fileinfo/showImg/wangjunxiang.png"); ticket.setZfQianMing2("http://127.0.0.1:8089/ffzf/fileinfo/showImg/zhangjinglei.png"); } if(StringUtils.isBlank(ticket.getNumber())){ ticket.setNumber("--"); } ticketService.updateById(ticket); return R.ok(); } //与执法对接 @GetMapping("/getResult") @Operation(summary = "与执法平台对接,获取签字结果" , description = "与执法平台对接,获取签字结果" ) public Object getResult(Ticket ticket){ ticketService.updateById(ticket); return R.ok(); } public void saveLogo(String name,String lng,String lat){ if(StringUtils.isBlank(name)||StringUtils.isBlank(lng)){ return; } StreetLogo logo = new StreetLogo(); logo.setLat(lat); logo.setLng(lng); logo.setName(name); streetLogoService.saveOrUpdate(logo); } private void updateBlackTicket(Ticket ticket){ QueryWrapper wrapper = new QueryWrapper<>(); wrapper.lambda() .eq(TicketBlack::getCarNo,ticket.getCarNo()); List all = ticketBlackService.list(wrapper); if(all.size()==0){ TicketBlack tb = new TicketBlack(); tb.setCarNo(ticket.getCarNo()); tb.setCarType(ticket.getCarType()); tb.setColor(ticket.getColor()); tb.setViolationCount(1); tb.setIsActive(0); ticketBlackService.saveOrUpdate(tb); }else { TicketBlack ticketBlack = all.get(0); //ticketBlack.setStatus(1); ticketBlack.setViolationCount(ticketBlack.getViolationCount()+1); ticketBlackService.saveOrUpdate(ticketBlack); } } @PostMapping("/getZhiFa") @Operation(summary = "根据状态查询罚单" , description = "根据状态查询罚单" ) public Object getZhiFa(Integer status,Page page){ QueryWrapper wrapper = new QueryWrapper<>(); wrapper.lambda() .eq(Ticket::getStatus,status) .eq(Ticket::getType,1) .orderByDesc(Ticket::getId); return R.ok(ticketService.page(page, wrapper)); } @PostMapping("/getCar") @Operation(summary = "获取黑名单车辆" , description = "获取黑名单车辆" ) public Object getCar(String carNo,Page page,int type){ QueryWrapper wrapper = new QueryWrapper<>(); wrapper.lambda() .eq(type == 2,TicketBlack::getBlackType,1) .like(StringUtils.isNotBlank(carNo),TicketBlack::getCarNo,carNo) .orderByDesc(TicketBlack::getId); return R.ok( ticketBlackService.page(page,wrapper)); } @PostMapping("/getCarList") @Operation(summary = "根据车牌分页获取罚单" , description = "根据车牌分页获取罚单" ) public Object getCarList(String carNo,Page page){ QueryWrapper wrapper = new QueryWrapper<>(); wrapper.lambda() .like(StringUtils.isNotBlank(carNo),Ticket::getCarNo,carNo) .orderByDesc(Ticket::getId); return R.ok(ticketService.page(page, wrapper)); } @PostMapping("/noFound") @Operation(summary = "更新罚单状态,增加备注" , description = "更新罚单状态,增加备注" ) public Object noFound(Long ticketId,String remark){ Ticket ticket = ticketService.getById(ticketId); ticket.setStatus(2); ticket.setRemark(remark); ticketService.saveOrUpdate(ticket); return R.ok("请求成功"); } @PostMapping("/getStatisticByYear") @Operation(summary = "统计年度罚单" , description = "统计年度罚单" ) public Object getStatistic(int year){ Map map = new HashMap<>(); List list = new ArrayList<>(); Date yearFirst = DateUtilOther.getYearFirst(year); Date yearLast = DateUtilOther.getYearLast(year); long count = orderRecordService.countByYear(yearFirst,yearLast); Double money = orderRecordService.sumByYear(yearFirst,yearLast); map.put("yearCount",count); map.put("yearMoney",money); Calendar cal = Calendar.getInstance(); int month = cal.get(Calendar.MONTH) + 1; int year2 = cal.get(Calendar.YEAR); if(year==year2){ for(int i=month;i>0;i--){ list.add(getStatisticByMonth(year,i)); } } map.put("list",list); return R.ok(map); } public Object getStatisticByMonth(int year,int month){ Map map = new HashMap<>(); map.put("year",year); map.put("month",month); Date yearFirst = DateUtilOther.getFirstDayOfMonth(year,month); Date yearLast = DateUtilOther.getLastDayOfMonth(year,month); long count = orderRecordService.countByYear(yearFirst,yearLast); Double money = orderRecordService.sumByYear(yearFirst,yearLast); map.put("monthCount",count); map.put("monthMoney",money); return map; } @PostMapping("/getOrderList") @Operation(summary = "根据年和月统计罚单" , description = "根据年和月统计罚单" ) public Object getOrderList(int year,int month){ Date yearFirst = DateUtilOther.getFirstDayOfMonth(year,month); Date yearLast = DateUtilOther.getLastDayOfMonth(year,month); QueryWrapper wrapper =new QueryWrapper<>(); wrapper.lambda() .eq(OrderRecord::getType,0) .between(OrderRecord::getCreateTime,yearFirst,yearLast) .orderByDesc(OrderRecord::getId); return R.ok(orderRecordService.list(wrapper)); } @PostMapping("findById") @Operation(summary = "根据id查询" , description = "根据id查询" ) public Object findById(Long id){ Ticket ticket = ticketService.getById(id); if(ticket.getViolationTypeId()!=null){ ViolationType violationType = violationTypeService.getById(ticket.getViolationTypeId()); ticket.setUserName(violationType.getCode()); ticket.setRemark(violationType.getContent()); } return R.ok(ticket); } /** * 手动缴费 * @param id id * @return R */ @ApiOperation(value = "手动缴费", notes = "手动缴费") @PostMapping("/jiaofei" ) @Operation(summary = "手动缴费更新二维码" , description = "手动缴费更新二维码" ) public R jiaofei(Integer id) { Ticket byId = ticketService.getById(id); if(byId.getPayStatus() == 1){ return R.failed("此罚单已支付"); }else if(byId.getMoney() == 0){ return R.failed("此罚单无需缴费"); }else { NowPayOrder nowPayOrder = new NowPayOrder(); nowPayOrder.setQueryId(byId.getId()); nowPayOrder.setType(0); nowPayOrder.setCarNo(byId.getCarNo()); nowPayOrderService.saveOrder(nowPayOrder); return R.ok("请扫码缴费"); } } /** * 测试对接 * @param * @return R */ @ApiOperation(value = "测试对接", notes = "测试对接") @GetMapping("/test" ) @Operation(summary = "测试对接执法平台" , description = "测试对接执法平台" ) public R test() { Ticket byId = ticketService.getById(13); byId = ticketService.getNumber(byId); byId.setPush(0); ticketService.uploadInfo(byId); return R.ok(); } }