LongcheerController.java 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. package com.uas.eis.longcheer.controller;
  2. import com.uas.eis.longcheer.config.LongcheerConfig;
  3. import com.uas.eis.longcheer.dto.LongcheerResponse;
  4. import com.uas.eis.longcheer.entity.PoPushRequest;
  5. import com.uas.eis.longcheer.service.LongcheerService;
  6. import org.slf4j.Logger;
  7. import org.slf4j.LoggerFactory;
  8. import org.springframework.web.bind.annotation.*;
  9. import javax.annotation.Resource;
  10. /**
  11. * 龙旗接口对接控制器
  12. *
  13. * @author ZXL
  14. * @date 2026-06-26
  15. */
  16. @RestController
  17. @RequestMapping("/api/longcheer")
  18. public class LongcheerController {
  19. private static final Logger logger = LoggerFactory.getLogger(LongcheerController.class);
  20. @Resource
  21. private LongcheerService longcheerService;
  22. @Resource
  23. private LongcheerConfig longcheerConfig;
  24. /**
  25. * 接口01:供应商库存同步接口
  26. * 供应商 → 龙旗(本系统为推送方)
  27. *
  28. * @param master 账套标识
  29. * @param id 库存记录ID
  30. * @return 统一响应
  31. */
  32. @PostMapping("/inventory/push")
  33. public LongcheerResponse pushInventory(@RequestBody String master, Integer id) {
  34. try {
  35. LongcheerResponse response = longcheerService.pushInventory(master, id);
  36. logger.info("[龙旗接口]库存同步响应,code={},message={}", response.getCode(), response.getMessage());
  37. return response;
  38. } catch (Exception e) {
  39. logger.error("[龙旗接口]库存同步异常", e);
  40. return new LongcheerResponse(500, "库存同步失败:" + e.getMessage(), false);
  41. }
  42. }
  43. /**
  44. * 接口02:供应商采购订单同步接口
  45. * 龙旗 → 供应商(本系统为接收方)
  46. * 龙旗通过 x-app-key / x-app-secret 鉴权后推送采购订单数据到本接口
  47. *
  48. * @param appKey 请求头 x-app-key
  49. * @param appSecret 请求头 x-app-secret
  50. * @param request 龙旗推送的采购订单数据
  51. * @return 统一响应
  52. */
  53. @PostMapping("/po/push")
  54. public LongcheerResponse receivePo(
  55. @RequestHeader(value = "x-app-key", required = false) String appKey,
  56. @RequestHeader(value = "x-app-secret", required = false) String appSecret,
  57. @RequestBody PoPushRequest request) {
  58. // 鉴权验证:根据 elsAccount 动态获取配置的 appKey/appSecret
  59. String configAppKey = longcheerConfig.getPo().getAppKey();
  60. String configAppSecret = longcheerConfig.getPo().getAppSecret();
  61. java.util.Map<String, LongcheerConfig.Credential> poCredentials =
  62. longcheerConfig.getPo().getCredentials();
  63. if (poCredentials != null && request != null && !isBlank(request.getElsAccount())) {
  64. LongcheerConfig.Credential cred = poCredentials.get(request.getElsAccount().trim());
  65. if (cred != null) {
  66. configAppKey = cred.getAppKey();
  67. configAppSecret = cred.getAppSecret();
  68. logger.info("[龙旗接口]采购订单鉴权使用elsAccount={}对应凭证,appKey={}",
  69. request.getElsAccount().trim(), configAppKey);
  70. }
  71. }
  72. if (isBlank(appKey) || isBlank(appSecret)
  73. || !appKey.equals(configAppKey) || !appSecret.equals(configAppSecret)) {
  74. logger.warn("[龙旗接口]采购订单接收鉴权失败,appKey={},elsAccount={}", appKey,
  75. request == null ? null : request.getElsAccount());
  76. return new LongcheerResponse(401, "鉴权失败:x-app-key或x-app-secret不正确", false);
  77. }
  78. try {
  79. LongcheerResponse response = longcheerService.receivePo(request);
  80. logger.info("[龙旗接口]采购订单接收响应,erpOrderNumber={},code={},message={}",
  81. request == null ? null : request.getErpOrderNumber(), response.getCode(), response.getMessage());
  82. return response;
  83. } catch (Exception e) {
  84. logger.error("[龙旗接口]采购订单接收异常,erpOrderNumber={}",
  85. request == null ? null : request.getErpOrderNumber(), e);
  86. return new LongcheerResponse(500, "采购订单接收失败:" + e.getMessage(), false);
  87. }
  88. }
  89. /**
  90. * 判断字符串是否为空
  91. *
  92. * @param str 字符串
  93. * @return true 表示为空
  94. */
  95. private boolean isBlank(String str) {
  96. return str == null || str.trim().isEmpty();
  97. }
  98. }