package com.doumee.api.business;
|
|
import com.alibaba.fastjson.JSONArray;
|
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.TypeReference;
|
import com.doumee.api.BaseController;
|
import com.doumee.biz.system.SystemDictDataBiz;
|
import com.doumee.config.annotation.LoginNoRequired;
|
import com.doumee.core.annotation.pr.PreventRepeat;
|
import com.doumee.core.annotation.trace.Trace;
|
import com.doumee.core.constants.ResponseStatus;
|
import com.doumee.core.exception.BusinessException;
|
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.jiandaoyun.model.request.BasePushRequest;
|
import com.doumee.core.jiandaoyun.model.request.MemberPushData;
|
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.core.wms.model.response.WmsBaseDataResponse;
|
import com.doumee.core.wms.model.response.WmsBaseResponse;
|
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.MemberService;
|
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 = "【简道云】业务接口")
|
@RestController
|
@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/web/jiandaoyun")
|
@Slf4j
|
public class JiandaoyunCloudController extends BaseController {
|
@Autowired
|
private SystemDictDataBiz systemDictDataBiz;
|
|
@Autowired
|
private MemberService memberService;
|
|
public static final String SECRET ="yKSKuO0LoFf06jWGrwwuGudK";
|
|
@LoginNoRequired
|
@ApiOperation("简道云推送用户信息")
|
@PostMapping("/pushMemberData")
|
@PreventRepeat
|
public ApiResponse pushMemberData (HttpServletRequest request, HttpServletResponse response) {
|
BasePushRequest<MemberPushData> o = checkParamterValid(request,response,new TypeReference<BasePushRequest<MemberPushData>>(){});
|
if(o == null || o.getData() ==null){
|
return ApiResponse.failed(401,"error");
|
}
|
int status =0;
|
String info ="同步成功";
|
try {
|
memberService.dealJdyMemberInfo(o.getData());//处理简道云信息
|
}catch (BusinessException e){
|
status =1;
|
info =e.getMessage();
|
return ApiResponse.failed(e.getCode(),e.getMessage());
|
}catch (Exception e){
|
e.printStackTrace();
|
status =1;
|
info="同步发送异常";
|
return ApiResponse.failed(ResponseStatus.SERVER_ERROR.getCode(),e.getMessage());
|
}finally {
|
memberService.sendMemberInfoResult(o.getData().getUsername(),info,status);
|
}
|
|
return ApiResponse.success("success");
|
}
|
|
private <T> BasePushRequest<T> checkParamterValid(HttpServletRequest request, HttpServletResponse response,TypeReference<BasePushRequest<T>> typeReference) {
|
|
log.error("【简道云】 用车申请 =========getRequestURI:{}",request.getRequestURI());
|
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 = json.toString();
|
Map<String, String> parameterMap = parseParameter(request.getQueryString());
|
String nonce = parameterMap.get("nonce");
|
String timestamp = parameterMap.get("timestamp");
|
String signature = getSignature(nonce, payload, systemDictDataBiz.queryByCode(Constants.JDY_CONFIG,Constants.JDY_SECRET).getCode(), timestamp);
|
log.error("【简道云】数据推送 =========getRequestURI:{}\n,queryParam:{}\n,payload:{}\n,签名:{}\n,正确签名:{}\n",request.getRequestURI(),request.getQueryString(),payload,jdy,signature);
|
if (!signature.equals(jdy)) {
|
return null;
|
}
|
BasePushRequest<T> t = JSONObject.parseObject(payload, typeReference.getType());
|
return t;
|
}catch (Exception e){
|
e.printStackTrace();
|
log.error("【简道云】 用车申请 =========异常:{}",e.getMessage());
|
}
|
return null;
|
}
|
|
|
@ApiOperation("简道云提交钥匙借还信息")
|
@PostMapping("/submitKeyRecord")
|
public ApiResponse<JkCabinetLog> 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<String, String> parseParameter(String query) {
|
Map<String, String> paramMap = new HashMap<String, String>();
|
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/6909d0fbdb93695219faa27eb068192dc4a9532972993159";
|
JSONObject object = new JSONObject();
|
object.put("status",0);
|
object.put("username","20251104160000" );
|
object.put("info", "这是备注");
|
String result = HttpsUtil.postJson(url,JSONObject.toJSONString(object));
|
System.out.println(result);
|
}
|
}
|