소스 검색

feat: 对接erp

xdd 2 일 전
부모
커밋
e8678ed6de

+ 0 - 1
fs-admin/src/main/java/com/fs/store/controller/FsStoreOrderController.java

@@ -525,7 +525,6 @@ public class FsStoreOrderController extends BaseController {
             ErpContextHolder.setErpType(erp);
         }
 
-
         ErpOrderQueryResponse response = erpOrderService.getOrder(request);
         return R.ok().put("data",response);
     }

+ 40 - 2
fs-service-system/src/main/java/com/fs/erp/http/JstErpHttpServiceImpl.java

@@ -53,15 +53,16 @@ public class JstErpHttpServiceImpl implements JstErpHttpService {
         Map<String, Object> formParams = BeanUtil.beanToMap(dto);
         log.info("请求初始化token - URL: {}, 参数: {}", GET_INIT_TOKEN_URL, JSON.toJSONString(formParams));
 
-        HttpResponse response = executeJsonPost(GET_INIT_TOKEN_URL, formParams);
+        HttpResponse response = executeFormPost(GET_INIT_TOKEN_URL, formParams);
         return parseResponse(response, new TypeReference<CommonResponse<GetInitTokenResponseDTO>>() {});
     }
 
     @Override
     public GetInitTokenResponseDTO refreshToken(RefreshTokenRequestDTO dto) {
         log.info("刷新token - URL: {}, 请求体: {}", REFRESH_TOKEN_URL, JSON.toJSONString(dto));
+        Map<String, Object> formParams = BeanUtil.beanToMap(dto);
 
-        HttpResponse response = executeJsonPost(REFRESH_TOKEN_URL, dto);
+        HttpResponse response = executeFormPost(REFRESH_TOKEN_URL, formParams);
         return parseResponse(response, new TypeReference<CommonResponse<GetInitTokenResponseDTO>>() {});
     }
 
@@ -110,6 +111,43 @@ public class JstErpHttpServiceImpl implements JstErpHttpService {
         // 这里直接返回CommonResponse类型
         return parseCommonResponse(response);
     }
+    /**
+     * 执行JSON格式的POST请求
+     *
+     * @param url 请求URL
+     * @param dto 请求对象
+     * @param needToken 是否需要添加access_token(认证相关请求不需要)
+     * @return HttpResponse响应
+     */
+    private HttpResponse executeJsonPost(String url, Object dto, boolean needToken) {
+        SerializeConfig serializeConfig = new SerializeConfig();
+        serializeConfig.propertyNamingStrategy = PropertyNamingStrategy.SnakeCase;
+        String jsonBody = JSON.toJSONString(dto, serializeConfig);
+        Map<String, Object> map = new HashMap<>();
+
+        // 只有在需要token的请求中才添加access_token
+        if (needToken) {
+            String accessToken = jstTokenService.getAccessToken();
+            map.put("access_token", accessToken);
+        }
+
+        map.put("app_key", appKey);
+        map.put("timestamp", System.currentTimeMillis() / 1000);
+        map.put("version", "2");
+        map.put("charset", "utf-8");
+        map.put("biz", jsonBody);
+        map.put("sign", SignUtil.getSignNew(appSecret, map));
+        Map<String, String> headers = MapUtil.builder(new HashMap<String, String>())
+                .put("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8")
+                .build();
+        log.debug("发送JSON请求 - URL: {}, Headers: {}, Body: {}", url, headers, JSON.toJSONString(map));
+        HttpResponse response = HttpRequest.post(url)
+                .headerMap(headers, true)
+                .form(map)
+                .execute();
+        logResponse(response);
+        return response;
+    }
 
     /**
      * 执行JSON格式的POST请求

+ 14 - 30
fs-service-system/src/main/java/com/fs/erp/service/impl/JSTErpOrderServiceImpl.java

@@ -6,8 +6,10 @@ import com.fs.erp.dto.*;
 import com.fs.erp.http.JstErpHttpService;
 import com.fs.erp.service.IErpOrderService;
 import com.fs.erp.utils.SignUtil;
+import com.fs.store.domain.FsStoreOrder;
 import com.fs.store.service.IFsStoreOrderService;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.http.util.Asserts;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.annotation.Primary;
@@ -129,7 +131,6 @@ public class JSTErpOrderServiceImpl implements IErpOrderService {
         requestDTO.setOIds(Collections.singletonList(Long.valueOf(param.getCode())));
 
 
-
         // 2. 调用ERP服务查询订单
         OrderQueryResponseDTO query = jstErpHttpService.query(requestDTO);
 
@@ -161,6 +162,9 @@ public class JSTErpOrderServiceImpl implements IErpOrderService {
     private ErpOrderQuery convertToErpOrderQuery(OrderQueryResponseDTO.Order order) {
         ErpOrderQuery erpOrder = new ErpOrderQuery();
 
+        FsStoreOrder fsStoreOrder = fsStoreOrderService.selectFsStoreOrderByOrderCode(order.getSoId());
+        Asserts.notNull(fsStoreOrder,"该订单号没有找到!");
+
         // 设置基本订单信息
         erpOrder.setCode(order.getSoId());
 
@@ -200,36 +204,12 @@ public class JSTErpOrderServiceImpl implements IErpOrderService {
         erpOrder.setExpress_code(order.getLId());
 
         // 设置收件人信息
-        erpOrder.setReceiver_name(order.getReceiverName());
-        erpOrder.setReceiver_phone(order.getReceiverPhone());
-        erpOrder.setReceiver_mobile(order.getReceiverMobile());
+        erpOrder.setReceiver_name(fsStoreOrder.getRealName());
+        erpOrder.setReceiver_phone(fsStoreOrder.getUserPhone());
+        erpOrder.setReceiver_mobile(fsStoreOrder.getUserPhone());
 
         // 构建完整地址
-        StringBuilder addressBuilder = new StringBuilder();
-        if (StringUtils.hasText(order.getReceiverAddress())) {
-            addressBuilder.append(order.getReceiverAddress());
-        }
-        if (StringUtils.hasText(order.getReceiverDistrict())) {
-            if (addressBuilder.length() > 0) addressBuilder.append(", ");
-            addressBuilder.append(order.getReceiverDistrict());
-        }
-        if (StringUtils.hasText(order.getReceiverCity())) {
-            if (addressBuilder.length() > 0) addressBuilder.append(", ");
-            addressBuilder.append(order.getReceiverCity());
-        }
-        if (StringUtils.hasText(order.getReceiverState())) {
-            if (addressBuilder.length() > 0) addressBuilder.append(", ");
-            addressBuilder.append(order.getReceiverState());
-        }
-        if (StringUtils.hasText(order.getReceiverCountry())) {
-            if (addressBuilder.length() > 0) addressBuilder.append(", ");
-            addressBuilder.append(order.getReceiverCountry());
-        }
-        if (StringUtils.hasText(order.getReceiverZip())) {
-            if (addressBuilder.length() > 0) addressBuilder.append(" ");
-            addressBuilder.append(order.getReceiverZip());
-        }
-        erpOrder.setReceiver_address(addressBuilder.toString());
+        erpOrder.setReceiver_address(fsStoreOrder.getUserAddress());
 
         // 处理发货相关信息
         if (order.getShipment() != null && StringUtils.hasText(order.getShipment())) {
@@ -256,8 +236,12 @@ public class JSTErpOrderServiceImpl implements IErpOrderService {
 
     @Override
     public BaseResponse refundUpdate(ErpRefundUpdateRequest param) {
+
+        FsStoreOrder fsStoreOrder = fsStoreOrderService.selectFsStoreOrderByOrderCode(param.getTid());
+        // 如果是发货前退款,直接走取消订单流程
+        // 如果是发货后退款,走售后流程
         OrderCancelRequestDTO requestDTO = new OrderCancelRequestDTO();
-        requestDTO.setOIds(Collections.singletonList(Integer.valueOf(param.getTid())));
+        requestDTO.setOIds(Collections.singletonList(Integer.valueOf(fsStoreOrder.getExtendOrderId())));
         requestDTO.setCancelType("用户退款");
         requestDTO.setRemark("用户退款");
 

+ 15 - 8
fs-service-system/src/main/java/com/fs/store/service/impl/FsStoreOrderServiceImpl.java

@@ -45,6 +45,7 @@ import com.fs.company.mapper.CompanyMoneyLogsMapper;
 import com.fs.company.service.ICompanyDeptService;
 import com.fs.company.service.ICompanyService;
 import com.fs.company.service.ICompanyUserService;
+import com.fs.erp.constant.ErpTypeConstant;
 import com.fs.erp.domain.*;
 import com.fs.erp.dto.*;
 import com.fs.erp.service.IErpOrderService;
@@ -238,6 +239,9 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
     @Value("${fsConfig.omsCode}")
     private String deliverOmsCode;
 
+    @Value("${jst.shop_code}")
+    private String jstShopCode;
+
     @Autowired
     private IFsShippingTemplatesService fsShippingTemplatesService;
 
@@ -1890,19 +1894,13 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
         }
         ErpOrder erpOrder=new ErpOrder();
         erpOrder.setBuyer_account(String.valueOf(order.getUserId()));
+        erpOrder.setPlatform_code(order.getOrderCode());
         if (order.getCompanyId()!=null){
             erpOrder.setVip_code(order.getUserId().toString()+order.getCompanyId().toString());
         }else {
             erpOrder.setVip_code(order.getUserId().toString());
         }
-        erpOrder.setPlatform_code(order.getOrderCode());
-        erpOrder.setShop_code("18461733");
-//        if(order.getStoreHouseCode().equals("YDSP001")){
-//            erpOrder.setShop_code("RunDayWuHan");
-//        }
-//        else{
-//            erpOrder.setShop_code(sysConfig.getErpShopCode());
-//        }
+
         erpOrder.setSeller_memo(order.getMark());
         List<ErpOrderPayment> payments=new ArrayList<>();
         ErpOrderPayment payment=new ErpOrderPayment();
@@ -2212,6 +2210,15 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
             ErpContextHolder.setErpType(erp);
         }
 
+
+        // 设置erp shopCode
+        String erpType = ErpContextHolder.getErpType();
+        if(ErpTypeConstant.GY_ERP.equals(erpType)){
+            erpOrder.setShop_code(sysConfig.getErpShopCode());
+        } else {
+            erpOrder.setShop_code(jstShopCode);
+        }
+
         ErpOrderResponse response= erpOrderService.addOrder(erpOrder);
         //写入日志
         logger.info("ErpCreate:{} {}",order.getOrderCode(),JSONUtil.toJsonStr(response));