package com.huimv.farm.damsubsidy.controller;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.UUID;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.huimv.farm.damsubsidy.common.token.TokenSign;
import com.huimv.farm.damsubsidy.common.utils.*;
import com.huimv.farm.damsubsidy.entity.BaseAnimal;
import com.huimv.farm.damsubsidy.entity.BillLandingInspection;
import com.huimv.farm.damsubsidy.service.IBaseAnimalService;
import com.huimv.farm.damsubsidy.service.IBillLandingInspectionService;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.util.EntityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import java.io.*;
import java.net.*;
import java.util.*;
/**
*
* 落地检 前端控制器
*
*
* @author author
* @since 2023-04-26
*/
@RestController
@RequestMapping("/bill-landing-inspection")
@CrossOrigin
public class BillLandingInspectionController {
@Autowired
private IBillLandingInspectionService iBillLandingInspectionService;
@Autowired
private IBaseAnimalService baseAnimalService;
@Autowired
private UploadImage uploadImage;
@PostMapping("/addApplication")
public Result addApplication(HttpServletRequest httpServletRequest, @RequestParam("inspectionNum") String inspectionNum,
@RequestParam("cargoOwner") String cargoOwner,
@RequestParam("ownerPhone") String ownerPhone,
@RequestParam("animalType") String animalType,
@RequestParam("animalNumberUp") String animalNumberUp,
@RequestParam("useTo") String useTo,
@RequestParam("startTran") String startTran,
@RequestParam("reachTran") String reachTran,
@RequestParam("veterId") String veter,
@RequestParam("eartags") String eartags,
@RequestParam(value = "quarantineImage", required = false) MultipartFile quarantineImage,
@RequestParam(value = "image1", required = false) MultipartFile image1,
@RequestParam(value ="image2", required = false) MultipartFile image2,
@RequestParam(value ="image3", required = false) MultipartFile image3,
@RequestParam(value ="image4", required = false) MultipartFile image4,
@RequestParam(value ="image5", required = false) MultipartFile image5) throws IOException {
return iBillLandingInspectionService.addApplication(httpServletRequest,inspectionNum,cargoOwner,ownerPhone,animalType,animalNumberUp,useTo,startTran,reachTran,veter,eartags,quarantineImage,image1,image2,image3,image4,image5);
}
@PostMapping("/cancelApplication")
public Result cancelApplication(HttpServletRequest httpServletRequest, @RequestBody Map paramsMap){
return iBillLandingInspectionService.cancelApplication(httpServletRequest,paramsMap);
}
//根据检疫证号返回全部耳标
@PostMapping("/getEartagNoBy")
public Result getEartagNoBy(HttpServletRequest httpServletRequest, @RequestBody Map paramsMap){
return iBillLandingInspectionService.getEartagNoBy(httpServletRequest,paramsMap);
}
@PostMapping("agreeApplication")
public Result agreeApplication(HttpServletRequest httpServletRequest, @RequestBody Map paramsMap){
return iBillLandingInspectionService.agreeApplication(httpServletRequest,paramsMap);
}
@PostMapping("/listApplication")
public Result listApplication(HttpServletRequest httpServletRequest, @RequestBody Map paramsMap){
return iBillLandingInspectionService.listApplication(httpServletRequest,paramsMap);
}
@PostMapping("/listDetail")
public Result listDetail(HttpServletRequest httpServletRequest, @RequestBody Map paramsMap){
String id = paramsMap.get("id");
return new Result(ResultCode.SUCCESS,iBillLandingInspectionService.getById(id));
}
@PostMapping("/rejectApplication")
public Result rejectApplication(HttpServletRequest httpServletRequest, @RequestBody Map paramsMap){
return iBillLandingInspectionService.rejectApplication(httpServletRequest,paramsMap);
}
@PostMapping("/listReadyApplication")
public Result listReadyApplication(){
return iBillLandingInspectionService.listReadyApplication();
}
@PostMapping("/listPersonal")
public Result listPersonal(HttpServletRequest httpServletRequest){
return new Result(ResultCode.SUCCESS,iBillLandingInspectionService.list(new QueryWrapper()
.eq("inspection_sch",4)
.eq("create_user",TokenSign.getMemberIdByJwtToken(httpServletRequest))
.isNull("reject_reason")
.eq("is_delete",0)));
}
@Autowired
private IBillLandingInspectionService billLandingInspectionService;
@RequestMapping("/list")
public Result list(HttpServletRequest httpServletRequest, @RequestBody Map paramsMap) {
return billLandingInspectionService.list(httpServletRequest, paramsMap);
}
@RequestMapping("/listById")
public Result listById(HttpServletRequest httpServletRequest, @RequestBody Map paramsMap) {
return billLandingInspectionService.listById(httpServletRequest, paramsMap);
}
@RequestMapping("/addPay")
public Result addPay(HttpServletRequest httpServletRequest,
@RequestParam(name = "idCordBackUrl",required = false) MultipartFile idCordBackUrl,
@RequestParam("id") String id) throws IOException {
Map map = new HashMap<>();
if (ObjectUtil.isNotEmpty(idCordBackUrl)) {
String content = uploadImage.getImageCom(idCordBackUrl);;
map.put("url", content);
} else {
String content = null;
map.put("url", "");
}
map.put("id", id);
return billLandingInspectionService.addPay(httpServletRequest, map);
}
@PostMapping("/QRImage")
public Result QRImage(@RequestParam(name = "url") MultipartFile url) throws Exception {
UploadImage uploadImage = new UploadImage();
String img = uploadImage.uploadImg(url);
System.out.println(img);
download(img,"ceshi.jpg","/home/image/test/");
String daying = daying("/home/image/test/ceshi.jpg");
JSONObject jsonObject = JSON.parseObject(daying);
Object error_code = jsonObject.get("error_code");
if (Integer.parseInt(error_code.toString()) == 0) {
Object action = jsonObject.get("data");
JSONObject jsonObject1 = JSON.parseObject(action.toString());
Object action1 = jsonObject1.get("ret");
Map map = new HashMap<>();
JSONArray jsonArray = JSON.parseArray(action1.toString());
for (int i = 0; i < jsonArray.size(); i++) {
Object action2 = jsonArray.get(i);
JSONObject jsonObject2 = JSON.parseObject(action2.toString());
Object key = jsonObject2.get("word_name");
Object action3 = jsonArray.get(i);
JSONObject jsonObject3 = JSON.parseObject(action3.toString());
Object value = jsonObject3.get("word");
if (key.toString().equals("type")) {
String s = value.toString();
if (s.equals("肉牛")) {
value = 0;
} else if (s.equals("肉羊")) {
value = 1;
} else {
value = 2;
}
}
if (key.toString().equals("unit")) {
WordToNum wordToNum = new WordToNum();
Integer integer = wordToNum.ToNumber(value.toString());
value = integer;
}
map.put(key.toString(), value.toString());
}
return new Result(ResultCode.SUCCESS,map);
} else {
return new Result(10001, "图片无法识别信息,请手动输入!!", false);
}
}
public String daying(String filePath) throws Exception {
// iocr识别apiUrl
String recogniseUrl = "https://aip.baidubce.com/rest/2.0/solution/v1/iocr/recognise";
byte[] imgData = FileUtil.readFileByBytes(filePath);
String imgStr = Base64Util.encode(imgData);
// 请求模板参数
String recogniseParams = "templateSign=822d6966a38a49fff811f77cf6119687&image=" + URLEncoder.encode(imgStr, "UTF-8");
// 请求分类器参数
String classifierParams = "classifierId=your_classfier_id&url=" + URLEncoder.encode(imgStr, "UTF-8");
String accessToken = AccessTokenUtils.getAuth();
// 请求模板识别
String result = HttpUtil.post(recogniseUrl, accessToken, recogniseParams);
// 请求分类器识别
// String result = HttpUtil.post(recogniseUrl, accessToken, classifierParams);
System.out.println(result);
return result;
}
public static void download(String urlString, String filename,String savePath) throws Exception {
// 构造URL
URL url = new URL(urlString);
// 打开连接
URLConnection con = url.openConnection();
//设置请求超时为5s
con.setConnectTimeout(5*1000);
// 输入流
InputStream is = con.getInputStream();
// 1K的数据缓冲
byte[] bs = new byte[1024];
// 读取到的数据长度
int len;
// 输出的文件流
File sf=new File(savePath);
if(!sf.exists()){
sf.mkdirs();
}
// 获取图片的扩展名
String extensionName = filename.substring(filename.lastIndexOf(".") + 1);
// 新的图片文件名 = 编号 +"."图片扩展名
// String newFileName = "bbb"+ "." + extensionName;
OutputStream os = new FileOutputStream(/*sf.getPath()+"\\"*/savePath+filename);
// 开始读取
while ((len = is.read(bs)) != -1) {
os.write(bs, 0, len);
}
// 完毕,关闭所有链接
os.close();
is.close();
}
// public static void main(String[] args) throws Exception {
//// String aaa = "{\\\"data\\\":{\\\"ret\\\":[{\\\"probability\\\":{\\\"average\\\":0.9982159734,\\\"min\\\":0.9973089695,\\\"variance\\\":2.523568412E-7},\\\"location\\\":{\\\"top\\\":153,\\\"left\\\":1367,\\\"width\\\":229,\\\"height\\\":54},\\\"word_name\\\":\\\"number\\\",\\\"word\\\":\\\"6203664332\\\"},{\\\"probability\\\":{\\\"average\\\":0.9938939214,\\\"min\\\":0.9840265512,\\\"variance\\\":0.00004146178617},\\\"location\\\":{\\\"top\\\":401,\\\"left\\\":642,\\\"width\\\":163,\\\"height\\\":39},\\\"word_name\\\":\\\"unit\\\",\\\"word\\\":\\\"贰拾叁头\\\"},{\\\"probability\\\":{\\\"average\\\":0.9983806014,\\\"min\\\":0.9952685237,\\\"variance\\\":0.000001251832941},\\\"location\\\":{\\\"top\\\":281,\\\"left\\\":1171,\\\"width\\\":207,\\\"height\\\":36},\\\"word_name\\\":\\\"phone\\\",\\\"word\\\":\\\"18993224116\\\"},{\\\"probability\\\":{\\\"average\\\":0.999233,\\\"min\\\":0.993178,\\\"variance\\\":0.0000020},\\\"location\\\":{\\\"top\\\":663,\\\"left\\\":238,\\\"width\\\":297,\\\"height\\\":30},\\\"word_name\\\":\\\"earNum\\\",\\\"word\\\":\\\"262070202080845-867\\\"},{\\\"probability\\\":{\\\"average\\\":0.9994745255,\\\"min\\\":0.9987326264,\\\"variance\\\":1.896736848E-7},\\\"location\\\":{\\\"top\\\":506,\\\"left\\\":239,\\\"width\\\":229,\\\"height\\\":41},\\\"word_name\\\":\\\"startAddress\\\",\\\"word\\\":\\\"张掖市甘州区\\\"},{\\\"probability\\\":{\\\"average\\\":0.9997746348,\\\"min\\\":0.9987488985,\\\"variance\\\":1.789176167E-7},\\\"location\\\":{\\\"top\\\":955,\\\"left\\\":497,\\\"width\\\":168,\\\"height\\\":40},\\\"word_name\\\":\\\"carNum\\\",\\\"word\\\":\\\"甘G25786\\\"},{\\\"probability\\\":{\\\"average\\\":0.9998318553,\\\"min\\\":0.9996492863,\\\"variance\\\":1.672335692E-8},\\\"location\\\":{\\\"top\\\":309,\\\"left\\\":237,\\\"width\\\":114,\\\"height\\\":35},\\\"word_name\\\":\\\"userName\\\",\\\"word\\\":\\\"王金丽\\\"},{\\\"probability\\\":{\\\"average\\\":0.9999725819,\\\"min\\\":0.9999496937,\\\"variance\\\":5.238689482E-10},\\\"location\\\":{\\\"top\\\":404,\\\"left\\\":235,\\\"width\\\":83,\\\"height\\\":44},\\\"word_name\\\":\\\"type\\\",\\\"word\\\":\\\"肉牛\\\"},{\\\"probability\\\":{\\\"average\\\":0.999918282,\\\"min\\\":0.9998790026,\\\"variance\\\":1.542876049E-9},\\\"location\\\":{\\\"top\\\":379,\\\"left\\\":1305,\\\"width\\\":79,\\\"height\\\":47},\\\"word_name\\\":\\\"value\\\",\\\"word\\\":\\\"饲养\\\"},{\\\"probability\\\":{\\\"average\\\":0.9967396855,\\\"min\\\":0.9711526632,\\\"variance\\\":0.00004481409997},\\\"location\\\":{\\\"top\\\":598,\\\"left\\\":239,\\\"width\\\":646,\\\"height\\\":48},\\\"word_name\\\":\\\"endAddress\\\",\\\"word\\\":\\\"定西市通渭县金丽养殖农民专业合作社\\\"}],\\\"templateSign\\\":\\\"822d6966a38a49fff811f77cf6119687\\\",\\\"templateName\\\":\\\"动物检疫合格证明\\\",\\\"scores\\\":1.0,\\\"isStructured\\\":true,\\\"logId\\\":\\\"168506403112474\\\",\\\"templateMatchDegree\\\":0.9999999999999956,\\\"clockwiseAngle\\\":0.0},\\\"error_code\\\":0,\\\"error_msg\\\":\\\"\\\",\\\"log_id\\\":\\\"168506403112474\\\"}\"";
//// JSONObject jsonObject = new JSONObject(aaa);
//// System.out.println("yyyyy: " + jsonObject.toString());
// /*String s = "https://img.ifarmcloud.com/images/2023-05/f9ff6e91-1c05-4b03-b698-89b55075adeb.jpg";
// String[] split = s.split("/");
// System.out.println(split[5]);*/
//// BillLandingInspectionController billLandingInspectionController = new BillLandingInspectionController();
// String daying = "{\"data\":{\"ret\":[{\"probability\":{\"average\":0.9982159734,\"min\":0.9973089695,\"variance\":2.523568412E-7},\"location\":{\"top\":153,\"left\":1367,\"width\":229,\"height\":54},\"word_name\":\"number\",\"word\":\"6203664332\"},{\"probability\":{\"average\":0.9938939214,\"min\":0.9840265512,\"variance\":0.00004146178617},\"location\":{\"top\":401,\"left\":642,\"width\":163,\"height\":39},\"word_name\":\"unit\",\"word\":\"贰拾叁头\"},{\"probability\":{\"average\":0.9983806014,\"min\":0.9952685237,\"variance\":0.000001251832941},\"location\":{\"top\":281,\"left\":1171,\"width\":207,\"height\":36},\"word_name\":\"phone\",\"word\":\"18993224116\"},{\"probability\":{\"average\":0.999233,\"min\":0.993178,\"variance\":0.0000020},\"location\":{\"top\":663,\"left\":238,\"width\":297,\"height\":30},\"word_name\":\"earNum\",\"word\":\"262070202080845-867\"},{\"probability\":{\"average\":0.9994745255,\"min\":0.9987326264,\"variance\":1.896736848E-7},\"location\":{\"top\":506,\"left\":239,\"width\":229,\"height\":41},\"word_name\":\"startAddress\",\"word\":\"张掖市甘州区\"},{\"probability\":{\"average\":0.9997746348,\"min\":0.9987488985,\"variance\":1.789176167E-7},\"location\":{\"top\":955,\"left\":497,\"width\":168,\"height\":40},\"word_name\":\"carNum\",\"word\":\"甘G25786\"},{\"probability\":{\"average\":0.9998318553,\"min\":0.9996492863,\"variance\":1.672335692E-8},\"location\":{\"top\":309,\"left\":237,\"width\":114,\"height\":35},\"word_name\":\"userName\",\"word\":\"王金丽\"},{\"probability\":{\"average\":0.9999725819,\"min\":0.9999496937,\"variance\":5.238689482E-10},\"location\":{\"top\":404,\"left\":235,\"width\":83,\"height\":44},\"word_name\":\"type\",\"word\":\"肉牛\"},{\"probability\":{\"average\":0.999918282,\"min\":0.9998790026,\"variance\":1.542876049E-9},\"location\":{\"top\":379,\"left\":1305,\"width\":79,\"height\":47},\"word_name\":\"value\",\"word\":\"饲养\"},{\"probability\":{\"average\":0.9967396855,\"min\":0.9711526632,\"variance\":0.00004481409997},\"location\":{\"top\":598,\"left\":239,\"width\":646,\"height\":48},\"word_name\":\"endAddress\",\"word\":\"定西市通渭县金丽养殖农民专业合作社\"}],\"templateSign\":\"822d6966a38a49fff811f77cf6119687\",\"templateName\":\"动物检疫合格证明\",\"scores\":1.0,\"isStructured\":true,\"logId\":\"168506610976412\",\"templateMatchDegree\":0.9999999999999956,\"clockwiseAngle\":0.0},\"error_code\":0,\"error_msg\":\"\",\"log_id\":\"168506610976412\"}";
// System.out.println(daying);
// JSONObject jsonObject = JSON.parseObject(daying);
// Object action = jsonObject.get("data");
// System.out.println(action.toString());
// JSONObject jsonObject1 = JSON.parseObject(action.toString());
// Object action1 = jsonObject1.get("ret");
// System.out.println(action1);
// Map map = new HashMap<>();
// JSONArray jsonArray = JSON.parseArray(action1.toString());
// for (int i = 0; i < jsonArray.size(); i++) {
// JSONObject one = new JSONObject();
// Object action2 = jsonArray.get(i);
// JSONObject jsonObject2 = JSON.parseObject(action2.toString());
// Object key = jsonObject2.get("word_name");
// System.out.println(key);
// Object action3 = jsonArray.get(i);
// JSONObject jsonObject3 = JSON.parseObject(action3.toString());
// Object value = jsonObject3.get("word");
// System.out.println(value);
// map.put(key.toString(), value.toString());
// }
// System.out.println(map);
// }
//
// @RequestMapping("/test")
// public Result test() {
// String daying = "{\"data\":{\"ret\":[{\"probability\":{\"average\":0.9982159734,\"min\":0.9973089695,\"variance\":2.523568412E-7},\"location\":{\"top\":153,\"left\":1367,\"width\":229,\"height\":54},\"word_name\":\"number\",\"word\":\"6203664332\"},{\"probability\":{\"average\":0.9938939214,\"min\":0.9840265512,\"variance\":0.00004146178617},\"location\":{\"top\":401,\"left\":642,\"width\":163,\"height\":39},\"word_name\":\"unit\",\"word\":\"贰拾叁头\"},{\"probability\":{\"average\":0.9983806014,\"min\":0.9952685237,\"variance\":0.000001251832941},\"location\":{\"top\":281,\"left\":1171,\"width\":207,\"height\":36},\"word_name\":\"phone\",\"word\":\"18993224116\"},{\"probability\":{\"average\":0.999233,\"min\":0.993178,\"variance\":0.0000020},\"location\":{\"top\":663,\"left\":238,\"width\":297,\"height\":30},\"word_name\":\"earNum\",\"word\":\"262070202080845-867\"},{\"probability\":{\"average\":0.9994745255,\"min\":0.9987326264,\"variance\":1.896736848E-7},\"location\":{\"top\":506,\"left\":239,\"width\":229,\"height\":41},\"word_name\":\"startAddress\",\"word\":\"张掖市甘州区\"},{\"probability\":{\"average\":0.9997746348,\"min\":0.9987488985,\"variance\":1.789176167E-7},\"location\":{\"top\":955,\"left\":497,\"width\":168,\"height\":40},\"word_name\":\"carNum\",\"word\":\"甘G25786\"},{\"probability\":{\"average\":0.9998318553,\"min\":0.9996492863,\"variance\":1.672335692E-8},\"location\":{\"top\":309,\"left\":237,\"width\":114,\"height\":35},\"word_name\":\"userName\",\"word\":\"王金丽\"},{\"probability\":{\"average\":0.9999725819,\"min\":0.9999496937,\"variance\":5.238689482E-10},\"location\":{\"top\":404,\"left\":235,\"width\":83,\"height\":44},\"word_name\":\"type\",\"word\":\"肉牛\"},{\"probability\":{\"average\":0.999918282,\"min\":0.9998790026,\"variance\":1.542876049E-9},\"location\":{\"top\":379,\"left\":1305,\"width\":79,\"height\":47},\"word_name\":\"value\",\"word\":\"饲养\"},{\"probability\":{\"average\":0.9967396855,\"min\":0.9711526632,\"variance\":0.00004481409997},\"location\":{\"top\":598,\"left\":239,\"width\":646,\"height\":48},\"word_name\":\"endAddress\",\"word\":\"定西市通渭县金丽养殖农民专业合作社\"}],\"templateSign\":\"822d6966a38a49fff811f77cf6119687\",\"templateName\":\"动物检疫合格证明\",\"scores\":1.0,\"isStructured\":true,\"logId\":\"168506610976412\",\"templateMatchDegree\":0.9999999999999956,\"clockwiseAngle\":0.0},\"error_code\":0,\"error_msg\":\"\",\"log_id\":\"168506610976412\"}";
// System.out.println(daying);
// JSONObject jsonObject = JSON.parseObject(daying);
// Object action = jsonObject.get("data");
// System.out.println(action.toString());
// JSONObject jsonObject1 = JSON.parseObject(action.toString());
// Object action1 = jsonObject1.get("ret");
// System.out.println(action1);
// Map map = new HashMap<>();
// JSONArray jsonArray = JSON.parseArray(action1.toString());
// for (int i = 0; i < jsonArray.size(); i++) {
// Object action2 = jsonArray.get(i);
// JSONObject jsonObject2 = JSON.parseObject(action2.toString());
// Object key = jsonObject2.get("word_name");
// System.out.println(key);
// Object action3 = jsonArray.get(i);
// JSONObject jsonObject3 = JSON.parseObject(action3.toString());
// Object value = jsonObject3.get("word");
// if (key.toString().equals("type")) {
// String s = value.toString();
// if (s.equals("肉牛")) {
// value = 0;
// } else if (s.equals("肉羊")) {
// value = 1;
// } else {
// value = 2;
// }
// }
// if (key.toString().equals("unit")) {
// WordToNum wordToNum = new WordToNum();
// Integer integer = wordToNum.ToNumber(value.toString());
// value = integer;
// }
// System.out.println(value);
// map.put(key.toString(), value.toString());
// }
// System.out.println(map);
// return new Result(ResultCode.SUCCESS,map);
// }
}