From b62fc345b04fe31eca11d2465b332d3cc5a4773a Mon Sep 17 00:00:00 2001 From: zhaoqing <1670883518@qq.com> Date: Wed, 6 May 2026 11:20:41 +0800 Subject: [PATCH] =?UTF-8?q?OMS-GW=E6=8E=A8=E9=80=81-=E5=95=86=E4=B8=9A?= =?UTF-8?q?=E5=90=88=E4=BD=9C=E4=BC=99=E4=BC=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/mhd/system/api/UserServiceFeign.java | 8 ++ .../RemoteUserFeignFallbackFactory.java | 6 + .../BusinessPartnerApplicationService.java | 133 ++++++++++++++++++ .../mhd/oms/domain/gwLog/entity/GwLog.java | 64 +++++++++ .../gwLog/repository/mapper/GwLogMapper.java | 10 ++ .../businessPartner/BusinessPartnerDTO.java | 7 + .../businessPartner/BusinessPartnerApi.java | 11 +- 7 files changed, 236 insertions(+), 3 deletions(-) create mode 100644 mhd_oms/src/main/java/com/mhd/oms/domain/gwLog/entity/GwLog.java create mode 100644 mhd_oms/src/main/java/com/mhd/oms/domain/gwLog/repository/mapper/GwLogMapper.java diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/UserServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/UserServiceFeign.java index e4e2aa9b2..93264d5e9 100644 --- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/UserServiceFeign.java +++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/UserServiceFeign.java @@ -18,6 +18,7 @@ import io.swagger.annotations.ApiOperation; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.*; +import java.util.Date; import java.util.List; import java.util.Map; @@ -208,4 +209,11 @@ public interface UserServiceFeign { @RequestParam(value = "updateTimeFrom", required = false) String updateTimeFrom, @RequestParam(value = "updateTimeTo", required = false) String updateTimeTo, @RequestParam(value = "shipperType", required = false) Integer shipperType); + + @ApiOperation("商业合作伙伴-更新推送") + @PostMapping("/userShipperApi/updatePushStatus") + void updatePushStatus(@RequestParam(value = "shipperId") Long shipperId, + @RequestParam(value = "pushStatus") Integer pushStatus, + @RequestParam(value = "pushTime") Date pushTime, + @RequestParam(value = "pushBy") Long pushBy); } \ No newline at end of file diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/factory/RemoteUserFeignFallbackFactory.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/factory/RemoteUserFeignFallbackFactory.java index f2c96baf3..dbbf0623b 100644 --- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/factory/RemoteUserFeignFallbackFactory.java +++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/factory/RemoteUserFeignFallbackFactory.java @@ -19,6 +19,7 @@ import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestParam; +import java.util.Date; import java.util.List; import java.util.Map; @@ -186,6 +187,11 @@ public class RemoteUserFeignFallbackFactory implements FallbackFactory userShipperList(Integer pageNum, Integer pageSize, String userAccount, String shipperEnterpriseName, Long organizationId, String organizationName, String createTimeFrom, String createTimeTo, String updateTimeFrom, String updateTimeTo, Integer shipperType) { return AjaxResult.error("查询失败" + throwable.getMessage()); } + + @Override + public void updatePushStatus(Long shipperId, Integer pushStatus, Date pushTime, Long pushBy) { + log.error("更新失败" + throwable.getMessage()); + } }; } } \ No newline at end of file diff --git a/mhd_oms/src/main/java/com/mhd/oms/application/service/businessPartner/BusinessPartnerApplicationService.java b/mhd_oms/src/main/java/com/mhd/oms/application/service/businessPartner/BusinessPartnerApplicationService.java index ea6a50c8e..b922182b4 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/application/service/businessPartner/BusinessPartnerApplicationService.java +++ b/mhd_oms/src/main/java/com/mhd/oms/application/service/businessPartner/BusinessPartnerApplicationService.java @@ -1,23 +1,49 @@ package com.mhd.oms.application.service.businessPartner; +import cn.hutool.core.date.DateUtil; +import com.alibaba.fastjson.JSONObject; import com.mhd.common.core.web.domain.AjaxResult; import com.mhd.common.core.web.page.TableDataInfo; +import com.mhd.common.security.utils.SecurityUtils; +import com.mhd.oms.domain.gwLog.entity.GwLog; +import com.mhd.oms.domain.gwLog.repository.mapper.GwLogMapper; import com.mhd.oms.interfaces.dto.businessPartner.BusinessPartnerDTO; import com.mhd.system.api.UserServiceFeign; +import com.mhd.system.api.model.LoginUser; import lombok.extern.slf4j.Slf4j; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.util.EntityUtils; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.io.IOException; +import java.util.Date; +import java.util.HashMap; import java.util.List; +import java.util.Map; @Service @Slf4j public class BusinessPartnerApplicationService { + private static final String PUSH_API_URL = "http://10.33.0.100/ktms-erp-api/transfer/pushData"; + private static final String API_NAME = "saveCorporation"; + + @Resource private UserServiceFeign userServiceFeign; + @Resource + private GwLogMapper gwLogMapper; + + + + public TableDataInfo queryShipperPage(BusinessPartnerDTO businessPartnerDTO) { @@ -48,4 +74,111 @@ public class BusinessPartnerApplicationService { } + public AjaxResult batchPush(List businessPartnerDTOList) { + if(businessPartnerDTOList == null || businessPartnerDTOList.isEmpty()){ + return AjaxResult.error("没有数据需要推送"); + } + + LoginUser loginUser = SecurityUtils.getLoginUser(); + Long pushBy = loginUser != null ? loginUser.getUserid() : null; + Long organizationId = loginUser != null ? loginUser.getUserPo().getOrganizationId() : null; + Long topOrganizationId = loginUser != null ? loginUser.getUserPo().getTopOrganizationId() : null; + String organizationName = loginUser != null ? loginUser.getUserPo().getOrganizationName() : null; + + int successCount = 0; + int failCount = 0; + StringBuilder failMsg = new StringBuilder(); + + for (BusinessPartnerDTO businessPartnerDTO :businessPartnerDTOList){ + + Map body = new HashMap<>(); + body.put("copyCode",businessPartnerDTO.getCorpCode()); + body.put("copyName",businessPartnerDTO.getCorpName()); + + GwLog gwLog = new GwLog(); + gwLog.setType("商业合作伙伴"); + gwLog.setBusinessId(businessPartnerDTO.getShipperId()); + gwLog.setRequestBody(JSONObject.toJSONString(body)); + gwLog.setResponseBody(""); + gwLog.setStatus(1); + gwLog.setSendTime(new Date()); + gwLog.setOrganizationId(organizationId); + gwLog.setTopOrganizationId(topOrganizationId); + gwLog.setOrganizationName(organizationName); + gwLog.setCreateBy(pushBy); + gwLog.setCreateTime(new Date()); + gwLog.setDelFlag(1); + gwLogMapper.insert(gwLog); + + updatePushStatus(Long.valueOf(businessPartnerDTO.getShipperId()),2,null,pushBy); + + CloseableHttpClient httpClient = HttpClients.createDefault(); + HttpPost httpPost = new HttpPost(PUSH_API_URL); + StringEntity postingString = new StringEntity(JSONObject.toJSONString(body),"UTF-8"); + httpPost.setEntity(postingString); + httpPost.setHeader("Content-type", "application/json"); + httpPost.setHeader("apiName", API_NAME); + + try{ + CloseableHttpResponse response = httpClient.execute(httpPost); + String responseString = EntityUtils.toString(response.getEntity()); + gwLog.setResponseBody(responseString); + + if(response.getStatusLine().getStatusCode() == 200){ + gwLog.setStatus(2); + updatePushStatus(Long.valueOf(businessPartnerDTO.getShipperId()),3, new Date(), pushBy); + successCount++; + }else{ + gwLog.setStatus(3); + gwLog.setErrorMsg(responseString); + updatePushStatus(Long.valueOf(businessPartnerDTO.getShipperId()),4, new Date(), pushBy); + failCount++; + failMsg.append("CorpCode:").append(businessPartnerDTO.getCorpCode()).append("失败:"); + } + gwLogMapper.updateById(gwLog); + response.close(); + + + + } catch (IOException e) { + gwLog.setStatus(3); + gwLog.setErrorMsg(e.getMessage()); + gwLogMapper.updateById(gwLog); + updatePushStatus(Long.valueOf(businessPartnerDTO.getShipperId()),4, new Date(), pushBy); + failCount++; + failMsg.append("CorpCode:").append(businessPartnerDTO.getCorpCode()).append("异常:").append(e.getMessage()).append(":"); + log.error("GW推送异常:shipperId={}, error={}",businessPartnerDTO.getShipperId(),e.getMessage()); + + } finally { + try{ + httpClient.close(); + }catch (Exception e){ + log.error("关闭httpClient异常:{}" + e.getMessage()); + } + + } + + } + + String resultMsg = "推送完成:成功" + successCount + "条,失败" + failCount +"条"; + if(failCount > 0){ + resultMsg += "[" + failMsg.toString() + "]"; + } + + return AjaxResult.success(resultMsg); + } + + + + private void updatePushStatus(Long shipperId, Integer pushStatus, Date pushTime, Long pushBy) { + try { + // 调用user-center的Feign接口,更新货主的推送状态 + userServiceFeign.updatePushStatus(shipperId, pushStatus, pushTime, pushBy); + } catch (Exception e) { + // 如果更新失败,记录错误日志,但不阻断主流程 + log.info("更新推送状态失败: shipperId={}, error={}", shipperId, e.getMessage()); + } + } + + } diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/gwLog/entity/GwLog.java b/mhd_oms/src/main/java/com/mhd/oms/domain/gwLog/entity/GwLog.java new file mode 100644 index 000000000..de8e44b30 --- /dev/null +++ b/mhd_oms/src/main/java/com/mhd/oms/domain/gwLog/entity/GwLog.java @@ -0,0 +1,64 @@ +package com.mhd.oms.domain.gwLog.entity; + + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModelProperty; +import io.swagger.annotations.ApiOperation; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; +import java.util.Date; + +@Data +@TableName("gw_log") +public class GwLog implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("日志id") + @TableId(type = IdType.AUTO) + private Long logId; + + @ApiModelProperty("类型") + private String type; + + @ApiModelProperty("业务ID") + private String businessId; + + @ApiModelProperty("请求报文") + private String requestBody; + + @ApiModelProperty("响应报文") + private String responseBody; + + @ApiModelProperty("状态(1-初始,2-成功,3-失败)") + private Integer status; + + @ApiModelProperty("错误信息") + private String errorMsg; + + @ApiModelProperty("推送时间") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date sendTime; + + @ApiModelProperty("组织ID") + private Long organizationId; + + @ApiModelProperty("一级组织ID") + private Long topOrganizationId; + + @ApiModelProperty("组织名称") + private String organizationName; + + @ApiModelProperty("创建人") + private Long createBy; + + @ApiModelProperty("创建时间") + private Date createTime; + + @ApiModelProperty("删除标记:1-正常,0-删除") + private Integer delFlag; +} diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/gwLog/repository/mapper/GwLogMapper.java b/mhd_oms/src/main/java/com/mhd/oms/domain/gwLog/repository/mapper/GwLogMapper.java new file mode 100644 index 000000000..65484ad4b --- /dev/null +++ b/mhd_oms/src/main/java/com/mhd/oms/domain/gwLog/repository/mapper/GwLogMapper.java @@ -0,0 +1,10 @@ +package com.mhd.oms.domain.gwLog.repository.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.mhd.oms.domain.gwLog.entity.GwLog; +import org.apache.ibatis.annotations.Mapper; + + +@Mapper +public interface GwLogMapper extends BaseMapper { +} diff --git a/mhd_oms/src/main/java/com/mhd/oms/interfaces/dto/businessPartner/BusinessPartnerDTO.java b/mhd_oms/src/main/java/com/mhd/oms/interfaces/dto/businessPartner/BusinessPartnerDTO.java index af8ba281f..acd43a1ec 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/interfaces/dto/businessPartner/BusinessPartnerDTO.java +++ b/mhd_oms/src/main/java/com/mhd/oms/interfaces/dto/businessPartner/BusinessPartnerDTO.java @@ -48,5 +48,12 @@ public class BusinessPartnerDTO { @ApiModelProperty(value = "每页数量") private Integer pageSize = 10; + @ApiModelProperty(value = "合作伙伴代码") + private String corpCode; + @ApiModelProperty(value = "公司中文名称") + private String corpName; + + @ApiModelProperty(value = "货主id") + private String shipperId; } \ No newline at end of file diff --git a/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/businessPartner/BusinessPartnerApi.java b/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/businessPartner/BusinessPartnerApi.java index 27de7d862..f7c504bc7 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/businessPartner/BusinessPartnerApi.java +++ b/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/businessPartner/BusinessPartnerApi.java @@ -1,15 +1,15 @@ package com.mhd.oms.interfaces.facade.businessPartner; +import com.mhd.common.core.web.domain.AjaxResult; import com.mhd.common.core.web.page.TableDataInfo; import com.mhd.oms.application.service.businessPartner.BusinessPartnerApplicationService; import com.mhd.oms.interfaces.dto.businessPartner.BusinessPartnerDTO; import io.swagger.annotations.ApiOperation; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; +import java.util.List; @RestController @@ -26,5 +26,10 @@ public class BusinessPartnerApi { } + @ApiOperation("商业合作伙伴-批量推送") + @PostMapping("/batchPush") + public AjaxResult batchPush(@RequestBody List businessPartnerDTOList){ + return businessPartnerApplicationService.batchPush(businessPartnerDTOList); + } }