package com.uas.eis.longcheer.controller; import com.uas.eis.longcheer.config.LongcheerConfig; import com.uas.eis.longcheer.dto.LongcheerResponse; import com.uas.eis.longcheer.entity.PoPushRequest; import com.uas.eis.longcheer.service.LongcheerService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; /** * 龙旗接口对接控制器 * * @author ZXL * @date 2026-06-26 */ @RestController @RequestMapping("/api/longcheer") public class LongcheerController { private static final Logger logger = LoggerFactory.getLogger(LongcheerController.class); @Resource private LongcheerService longcheerService; @Resource private LongcheerConfig longcheerConfig; /** * 接口01:供应商库存同步接口 * 供应商 → 龙旗(本系统为推送方) * * @param master 账套标识 * @param id 库存记录ID * @return 统一响应 */ @PostMapping("/inventory/push") public LongcheerResponse pushInventory(@RequestBody String master, Integer id) { try { LongcheerResponse response = longcheerService.pushInventory(master, id); logger.info("[龙旗接口]库存同步响应,code={},message={}", response.getCode(), response.getMessage()); return response; } catch (Exception e) { logger.error("[龙旗接口]库存同步异常", e); return new LongcheerResponse(500, "库存同步失败:" + e.getMessage(), false); } } /** * 接口02:供应商采购订单同步接口 * 龙旗 → 供应商(本系统为接收方) * 龙旗通过 x-app-key / x-app-secret 鉴权后推送采购订单数据到本接口 * * @param appKey 请求头 x-app-key * @param appSecret 请求头 x-app-secret * @param request 龙旗推送的采购订单数据 * @return 统一响应 */ @PostMapping("/po/push") public LongcheerResponse receivePo( @RequestHeader(value = "x-app-key", required = false) String appKey, @RequestHeader(value = "x-app-secret", required = false) String appSecret, @RequestBody PoPushRequest request) { // 鉴权验证:根据 elsAccount 动态获取配置的 appKey/appSecret String configAppKey = longcheerConfig.getPo().getAppKey(); String configAppSecret = longcheerConfig.getPo().getAppSecret(); java.util.Map poCredentials = longcheerConfig.getPo().getCredentials(); if (poCredentials != null && request != null && !isBlank(request.getElsAccount())) { LongcheerConfig.Credential cred = poCredentials.get(request.getElsAccount().trim()); if (cred != null) { configAppKey = cred.getAppKey(); configAppSecret = cred.getAppSecret(); logger.info("[龙旗接口]采购订单鉴权使用elsAccount={}对应凭证,appKey={}", request.getElsAccount().trim(), configAppKey); } } if (isBlank(appKey) || isBlank(appSecret) || !appKey.equals(configAppKey) || !appSecret.equals(configAppSecret)) { logger.warn("[龙旗接口]采购订单接收鉴权失败,appKey={},elsAccount={}", appKey, request == null ? null : request.getElsAccount()); return new LongcheerResponse(401, "鉴权失败:x-app-key或x-app-secret不正确", false); } try { LongcheerResponse response = longcheerService.receivePo(request); logger.info("[龙旗接口]采购订单接收响应,erpOrderNumber={},code={},message={}", request == null ? null : request.getErpOrderNumber(), response.getCode(), response.getMessage()); return response; } catch (Exception e) { logger.error("[龙旗接口]采购订单接收异常,erpOrderNumber={}", request == null ? null : request.getErpOrderNumber(), e); return new LongcheerResponse(500, "采购订单接收失败:" + e.getMessage(), false); } } /** * 判断字符串是否为空 * * @param str 字符串 * @return true 表示为空 */ private boolean isBlank(String str) { return str == null || str.trim().isEmpty(); } }