package com.doumee.cloud.web; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.doumee.api.BaseController; import com.doumee.biz.system.SystemDictDataBiz; import com.doumee.config.annotation.LoginNoRequired; import com.doumee.core.annotation.trace.Trace; import com.doumee.core.haikang.model.HKConstants; import com.doumee.core.haikang.model.param.BaseResponse; import com.doumee.core.haikang.model.param.request.FacePictureCheckRequest; import com.doumee.core.haikang.model.param.respose.FacePictureCheckResponse; import com.doumee.core.haikang.service.HKService; import com.doumee.core.utils.Constants; import com.doumee.core.utils.DateUtil; import com.doumee.core.utils.FtpUtil; import com.doumee.core.utils.HttpsUtil; import com.doumee.core.utils.aliyun.ALiYunUtil; import com.doumee.dao.business.model.CarUseBook; import com.doumee.dao.business.model.Cars; import com.doumee.dao.business.model.JkCabinetLog; import com.doumee.dao.web.reqeust.VisitRecordDTO; import com.doumee.dao.web.response.VisitRecordVO; import com.doumee.service.business.CarUseBookService; import com.doumee.service.business.CarsService; import com.doumee.service.business.third.model.ApiResponse; import com.doumee.service.business.third.model.PageData; import com.doumee.service.business.third.model.PageWrap; import com.sun.net.httpserver.HttpExchange; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.apache.commons.codec.digest.DigestUtils; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartHttpServletRequest; import org.springframework.web.multipart.commons.CommonsMultipartResolver; import javax.imageio.ImageIO; import javax.imageio.stream.ImageOutputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.awt.*; import java.awt.image.BufferedImage; import java.io.*; import java.net.URI; import java.util.*; /** * @author Eva.Caesar Liu * @date 2023/02/14 11:14 */ @Api(tags = "【简道云】业务接口") @Trace(exclude = true) @RestController @LoginNoRequired @RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/web/jiandaoyun") @Slf4j public class JiandaoyunCloudController extends BaseController { @Autowired private SystemDictDataBiz systemDictDataBiz; @Autowired private CarUseBookService carUseBookService; @Autowired private CarsService carsService; public static final String SECRET ="yKSKuO0LoFf06jWGrwwuGudK"; public static final String LOCAl_SECRET ="tSoMiqC3GY6tItXY48tSTwY6"; public static final String LLCAL_CARINFO_SECRET = "4J1GMIAG3m6O2jkkaxTu5EOe"; @LoginNoRequired @ApiOperation("简道云推送用车申请") @PostMapping("/pushCarApply") public void pushCarApply (HttpServletRequest request, HttpServletResponse response) { log.error("【简道云】 用车申请 =========getRequestURI:"+request.getRequestURI()); log.error("【简道云】 用车申请 =========getRequestURL:"+request.getRequestURL()); //新建{"data":{"_id":"6912f6d47b4a80933348df31","addr":"豆米科技","appId":"6909d0fbdb93b068192dc4a9","car_category":"专卖管理","car_group":"当涂县局车队","car_no":"皖EU2866","car_statue":"出车","company":{"_id":"6909b792fa9388e2242f497d","dept_no":483166139,"name":"开发部","type":0},"createTime":"2025-11-11T08:41:56.152Z","create_date":"2025-11-10T16:00:00.000Z","creator":{"_id":"6909b792324dc197821895e7","name":"任康","status":1,"type":0,"username":"1568490244651036"},"deleteTime":null,"deleter":null,"driver":{"_id":"6909b792324dc197821895e5","name":"郭际文武","status":1,"type":0,"username":"0115666322451143077815"},"driver_status":"空闲","end_date":"2025-11-11T09:41:00.000Z","entryId":"690ab9085ebd91d2308e595b","flowState":0,"formName":"派车申请","holiday":"否","key_back_date":null,"key_info":"待领取","key_use_date":null,"no":"20251111100004","reason":"测试申请","scope":"市内","start_date":"2025-11-11T08:41:00.000Z","updateTime":"2025-11-11T08:41:56.155Z","updater":{"_id":"6909b792324dc197821895e7","name":"任康","status":1,"type":0,"username":"1568490244651036"},"users":[{"_id":"6909b792324dc197821895e5","name":"郭际文武","status":1,"type":0,"username":"0115666322451143077815"}]},"op":"data_create","opTime":1762850516152} //修改{"data":{"_id":"6912f6d47b4a80933348df31","addr":"豆米科技","appId":"6909d0fbdb93b068192dc4a9","car_category":"专卖管理","car_group":"当涂县局车队","car_no":"皖EU2866","car_statue":"出车","company":{"_id":"6909b792fa9388e2242f497d","dept_no":483166139,"name":"开发部","type":0},"createTime":"2025-11-11T08:41:56.152Z","create_date":"2025-11-10T16:00:00.000Z","creator":{"_id":"6909b792324dc197821895e7","name":"任康","status":1,"type":0,"username":"1568490244651036"},"deleteTime":null,"deleter":null,"driver":{"_id":"6909b792324dc197821895e5","name":"郭际文武","status":1,"type":0,"username":"0115666322451143077815"},"driver_status":"空闲","end_date":"2025-11-11T09:41:00.000Z","entryId":"690ab9085ebd91d2308e595b","flowState":0,"formName":"派车申请","holiday":"否","key_back_date":null,"key_info":"待领取","key_use_date":null,"no":"20251111100004","reason":"测试申请","scope":"市内","start_date":"2025-11-11T08:41:00.000Z","updateTime":"2025-11-11T08:43:06.436Z","updater":{"_id":"6909b792324dc197821895e7","name":"任康","status":1,"type":0,"username":"1568490244651036"},"users":[{"_id":"6909b792324dc197821895e5","name":"郭际文武","status":1,"type":0,"username":"0115666322451143077815"}]},"op":"data_update","opTime":1762850586436} //修改{"data":{"_id":"6912f6d47b4a80933348df31","addr":"豆米科技","appId":"6909d0fbdb93b068192dc4a9","car_category":"专卖管理","car_group":"当涂县局车队","car_no":"皖EU2866","car_statue":"出车","company":{"_id":"6909b792fa9388e2242f497d","dept_no":483166139,"name":"开发部","type":0},"createTime":"2025-11-11T08:41:56.152Z","create_date":"2025-11-10T16:00:00.000Z","creator":{"_id":"6909b792324dc197821895e7","name":"任康","status":1,"type":0,"username":"1568490244651036"},"deleteTime":null,"deleter":null,"driver":{"_id":"6909b792324dc197821895e5","name":"郭际文武","status":1,"type":0,"username":"0115666322451143077815"},"driver_status":"空闲","end_date":"2025-11-11T09:41:00.000Z","entryId":"690ab9085ebd91d2308e595b","flowState":1,"formName":"派车申请","holiday":"否","key_back_date":null,"key_info":"待领取","key_use_date":null,"no":"20251111100004","reason":"测试申请","scope":"市内","start_date":"2025-11-11T08:41:00.000Z","updateTime":"2025-11-11T08:45:01.231Z","updater":{"_id":"6909b792324dc197821895e4","name":"江萍","status":1,"type":0,"username":"0458340612772735"},"users":[{"_id":"6909b792324dc197821895e5","name":"郭际文武","status":1,"type":0,"username":"0115666322451143077815"}]},"op":"data_update","opTime":1762850701231} try { String jdy = request.getHeader("x-jdy-signature"); StringBuilder json = new StringBuilder(); String line; BufferedReader reader = new BufferedReader(new InputStreamReader(request.getInputStream())); while ((line = reader.readLine()) != null) { json.append(line); } // String payload = IOUtils.toString(request.getInputStream(), "utf-8"); String payload = json.toString(); String uri = request.getRequestURI(); Map parameterMap = parseParameter(request.getQueryString()); String nonce = parameterMap.get("nonce"); String timestamp = parameterMap.get("timestamp"); String signature = getSignature(nonce, payload, LOCAl_SECRET, timestamp); log.error("【简道云】 用车申请 =========nonce:"+nonce); log.error("【简道云】 用车申请 =========timestamp:"+timestamp); log.error("【简道云】 用车申请 =========payload:"+payload); log.error("【简道云】 用车申请 =========签名:"+jdy); log.error("【简道云】 用车申请 =========签名(正确):"+signature); if (!signature.equals(jdy)) { response.setStatus(401); response.getWriter().write("fail"); response.getWriter().close();; return ; } carUseBookService.jdyPushCarUseBook(payload); response.setStatus(200); response.getWriter().write("success"); response.getWriter().close(); }catch (Exception e){ e.printStackTrace(); log.error("【简道云】 用车申请 =========异常:"+e.getMessage()); } } @LoginNoRequired @ApiOperation("简道云推送车辆信息") @PostMapping("/pushCarInfo") public void pushCarInfo (HttpServletRequest request, HttpServletResponse response) { log.error("【简道云】 车辆信息 =========getRequestURI:"+request.getRequestURI()); log.error("【简道云】 车辆信息=========getRequestURL:"+request.getRequestURL()); //新建{"data":{"_id":"6912f6d47b4a80933348df31","addr":"豆米科技","appId":"6909d0fbdb93b068192dc4a9","car_category":"专卖管理","car_group":"当涂县局车队","car_no":"皖EU2866","car_statue":"出车","company":{"_id":"6909b792fa9388e2242f497d","dept_no":483166139,"name":"开发部","type":0},"createTime":"2025-11-11T08:41:56.152Z","create_date":"2025-11-10T16:00:00.000Z","creator":{"_id":"6909b792324dc197821895e7","name":"任康","status":1,"type":0,"username":"1568490244651036"},"deleteTime":null,"deleter":null,"driver":{"_id":"6909b792324dc197821895e5","name":"郭际文武","status":1,"type":0,"username":"0115666322451143077815"},"driver_status":"空闲","end_date":"2025-11-11T09:41:00.000Z","entryId":"690ab9085ebd91d2308e595b","flowState":0,"formName":"派车申请","holiday":"否","key_back_date":null,"key_info":"待领取","key_use_date":null,"no":"20251111100004","reason":"测试申请","scope":"市内","start_date":"2025-11-11T08:41:00.000Z","updateTime":"2025-11-11T08:41:56.155Z","updater":{"_id":"6909b792324dc197821895e7","name":"任康","status":1,"type":0,"username":"1568490244651036"},"users":[{"_id":"6909b792324dc197821895e5","name":"郭际文武","status":1,"type":0,"username":"0115666322451143077815"}]},"op":"data_create","opTime":1762850516152} //修改{"data":{"data":{"_id":"6909d2ac6bf3636d0dbcc953","_widget_1762251302690":"皖AFJ6557","_widget_1762251302691":"一般公务","_widget_1762251302692":"","_widget_1762251302693":"市局本级车队","_widget_1762251302694":{"_id":"6909b792324dc197821895e8","name":"李怀英","status":1,"type":0,"username":"045831294126209983"},"_widget_1762251302695":{"_id":"6909b792fa9388e2242f497d","dept_no":483166139,"name":"开发部","type":0},"_widget_1762251302696":"可用","_widget_1762251302697":null,"_widget_1762251302698":10000,"_widget_1762251302699":null,"_widget_1762251302700":null,"_widget_1762251302701":null,"_widget_1762251302702":null,"_widget_1762251302703":"否","appId":"6909d0fbdb93b068192dc4a9","createTime":"2025-11-04T10:17:17.015Z","creator":{"_id":"6909b792324dc197821895e8","name":"李怀英","status":1,"type":0,"username":"045831294126209983"},"deleteTime":null,"deleter":null,"entryId":"6909d226b9a675ac4224aa6d","formName":"车辆信息","updateTime":"2025-11-13T09:20:05.253Z","updater":{"_id":"6909b792324dc197821895e7","name":"任康","status":1,"type":0,"username":"1568490244651036"}},"op":"data_update","opTime":1763025605253} //修改{"data":{"_id":"6912f6d47b4a80933348df31","addr":"豆米科技","appId":"6909d0fbdb93b068192dc4a9","car_category":"专卖管理","car_group":"当涂县局车队","car_no":"皖EU2866","car_statue":"出车","company":{"_id":"6909b792fa9388e2242f497d","dept_no":483166139,"name":"开发部","type":0},"createTime":"2025-11-11T08:41:56.152Z","create_date":"2025-11-10T16:00:00.000Z","creator":{"_id":"6909b792324dc197821895e7","name":"任康","status":1,"type":0,"username":"1568490244651036"},"deleteTime":null,"deleter":null,"driver":{"_id":"6909b792324dc197821895e5","name":"郭际文武","status":1,"type":0,"username":"0115666322451143077815"},"driver_status":"空闲","end_date":"2025-11-11T09:41:00.000Z","entryId":"690ab9085ebd91d2308e595b","flowState":1,"formName":"派车申请","holiday":"否","key_back_date":null,"key_info":"待领取","key_use_date":null,"no":"20251111100004","reason":"测试申请","scope":"市内","start_date":"2025-11-11T08:41:00.000Z","updateTime":"2025-11-11T08:45:01.231Z","updater":{"_id":"6909b792324dc197821895e4","name":"江萍","status":1,"type":0,"username":"0458340612772735"},"users":[{"_id":"6909b792324dc197821895e5","name":"郭际文武","status":1,"type":0,"username":"0115666322451143077815"}]},"op":"data_update","opTime":1762850701231} try { String jdy = request.getHeader("x-jdy-signature"); StringBuilder json = new StringBuilder(); String line; BufferedReader reader = new BufferedReader(new InputStreamReader(request.getInputStream())); while ((line = reader.readLine()) != null) { json.append(line); } // String payload = IOUtils.toString(request.getInputStream(), "utf-8"); String payload = json.toString(); String uri = request.getRequestURI(); Map parameterMap = parseParameter(request.getQueryString()); String nonce = parameterMap.get("nonce"); String timestamp = parameterMap.get("timestamp"); String signature = getSignature(nonce, payload, LLCAL_CARINFO_SECRET, timestamp); log.error("【简道云】 车辆信息=========nonce:"+nonce); log.error("【简道云】 车辆信息=========timestamp:"+timestamp); log.error("【简道云】 车辆信息=========payload:"+payload); log.error("【简道云】 车辆信息=========签名:"+jdy); log.error("【简道云】 车辆信息=========签名(正确):"+signature); if (!signature.equals(jdy)) { response.setStatus(401); response.getWriter().write("fail"); response.getWriter().close();; return ; } carsService.jdyPushCarInfo(payload); response.setStatus(200); response.getWriter().write("success"); response.getWriter().close(); }catch (Exception e){ e.printStackTrace(); log.error("简道云=========异常:"+e.getMessage()); } } @ApiOperation("简道云提交钥匙借还信息") @PostMapping("/submitKeyRecord") public ApiResponse submitKeyRecord (HttpServletRequest request, HttpServletResponse response) { JkCabinetLog log = new JkCabinetLog(); log.setKeyId(1); log.setCreateDate(new Date()); log.setMemberName("张三"); return ApiResponse.success(log); } private static String getSignature(String nonce, String payload, String secret, String timestamp) { return DigestUtils.sha1Hex(nonce + ":" + payload + ":" + secret + ":" + timestamp); } private static Map parseParameter(String query) { Map paramMap = new HashMap(); String[] params = query.split("&"); for (String param : params) { String[] keyValue = param.split("="); paramMap.put(keyValue[0], keyValue[1]); } return paramMap; } public static void main(String[] args) { String url = "https://api.jiandaoyun.com/api/v1/automation/tenant/6909b792324dc197821895d1/hooks/6909d0fbdb93690b128a0d56b068192dc4a9c9722dbac428"; // String url = "https://api.jiandaoyun.com/api/v1/automation/tenant/6909b792324dc197821895d1/hooks/6909d0fbdb93690af97e41d1b068192dc4a9705aca3321e2"; JSONObject object = new JSONObject(); object.put("create_date","20251104160000"); object.put("start_date",System.currentTimeMillis() ); object.put("end_date", System.currentTimeMillis() + 24*3600*1000); object.put("id","10000020251105");// object.put("type",1);//0=领用;1=归还 String result = HttpsUtil.postJson(url,JSONObject.toJSONString(object)); System.out.println(result); } }