package com.zy.asrs.openapi.controller; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.zy.asrs.common.openapi.entity.HostKey; import com.zy.asrs.common.openapi.entity.param.GenerateOrderPakInParam; import com.zy.asrs.common.openapi.service.HostKeyService; import com.zy.asrs.common.web.BaseController; import com.zy.asrs.framework.common.BaseRes; import com.zy.asrs.framework.common.Cools; import com.zy.asrs.framework.common.R; import com.zy.asrs.framework.exception.CoolException; import lombok.extern.slf4j.Slf4j; import org.apache.commons.codec.digest.DigestUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.util.Map; @Slf4j @RestController @RequestMapping("/api") public class ApiController extends BaseController { @Autowired private HostKeyService hostKeyService; @PostMapping("/generateOrderPakIn") public synchronized R pakinOrderCreate(@RequestHeader(required = false) String appkey, @RequestBody GenerateOrderPakInParam param) { auth(appkey, param); if (Cools.isEmpty(param)) { return R.parse(BaseRes.PARAM); } if (Cools.isEmpty(param.getOrderNo())) { return R.error("单据编号[orderNo]不能为空"); } if (Cools.isEmpty(param.getOrderType())) { return R.error("单据类型[orderType]不能为空"); } if (Cools.isEmpty(param.getOrderDetails())) { return R.error("单据明细[orderDetails]不能为空"); } // openService.pakinOrderCreate(param); return R.ok(); } private void auth(String appkey, Object obj) { if (Cools.isEmpty(appkey)) { throw new CoolException("认证失败,请确认appKey无误!"); } HostKey hostKey = hostKeyService.getOne(new LambdaQueryWrapper().eq(HostKey::getAppKey, appkey)); if (hostKey == null) { throw new CoolException("认证失败,请确认appKey无误!"); } if (hostKey.getSignStatus() == 1) { //需要进行签名校验 //创建自然排序map JSONObject param = new JSONObject(true); JSONObject jsonObject = JSON.parseObject(JSON.toJSONString(obj)); for (Map.Entry entry : jsonObject.entrySet()) { if (!entry.getKey().equals("sign")) {//剔除sign param.put(entry.getKey(), entry.getValue()); } } param.put("signKey", hostKey.getSignKey()); String md5Hex = DigestUtils.md5Hex(param.toJSONString()); if (!jsonObject.get("sign").toString().equals(md5Hex)) { throw new CoolException("签名校验失败"); } } } }