From 54d943ea10aa646b71ce7295ef71018484021dee Mon Sep 17 00:00:00 2001 From: zhaoqing <1670883518@qq.com> Date: Thu, 28 May 2026 13:57:56 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BF=9B=E5=8F=A3=E4=BB=93=E5=8D=95=E6=8E=A8?= =?UTF-8?q?=E9=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/mhd/system/api/domain/GwLogDTO.java | 56 ++++++ .../gwLog/GwLogApplicationService.java | 29 +++ .../oms/interfaces/facade/gwLog/GwLogApi.java | 13 ++ .../StockShelfOrderApplicationService.java | 172 ++++++++++++++++-- .../repository/mapper/StockInOrderMapper.java | 3 + .../stockShelfOrder/StockShelfOrderApi.java | 9 +- .../stockInOrder/StockInOrderMapper.xml | 8 + 7 files changed, 275 insertions(+), 15 deletions(-) create mode 100644 mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/domain/GwLogDTO.java diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/domain/GwLogDTO.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/domain/GwLogDTO.java new file mode 100644 index 000000000..893a222ca --- /dev/null +++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/domain/GwLogDTO.java @@ -0,0 +1,56 @@ +package com.mhd.system.api.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.util.Date; + +@Data +public class GwLogDTO { + + @ApiModelProperty("日志id") + private Long logId; + + @ApiModelProperty("类型") + private String type; + + @ApiModelProperty("业务ID") + private Long 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/application/service/gwLog/GwLogApplicationService.java b/mhd_oms/src/main/java/com/mhd/oms/application/service/gwLog/GwLogApplicationService.java index e6f558de1..a7438a62b 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/application/service/gwLog/GwLogApplicationService.java +++ b/mhd_oms/src/main/java/com/mhd/oms/application/service/gwLog/GwLogApplicationService.java @@ -15,7 +15,9 @@ import com.mhd.system.api.model.LoginUser; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import java.util.HashMap; import java.util.List; +import java.util.Map; @Service @Slf4j @@ -56,4 +58,31 @@ public class GwLogApplicationService { GwLogPO po = po1.get(0); return po; } + + public AjaxResult insertGwLog(GwLogDTO gwLogDTO) { + if(gwLogDTO == null){ + return AjaxResult.error("参数不能为空"); + } + GwLog gwLog = new GwLog(); + BeanUtils.copyProperties(gwLogDTO,gwLog); + gwLogMapper.insert(gwLog); + + + //返回id,供查询推送更新GwLog时使用 + Map result = new HashMap<>(); + result.put("id",gwLog.getLogId()); + return AjaxResult.success("保存成功",result); + } + + public AjaxResult updateGwLog(GwLogDTO gwLogDTO) { + if(gwLogDTO == null){ + return AjaxResult.error("参数不能为空"); + } + GwLog gwLog = new GwLog(); + BeanUtils.copyProperties(gwLogDTO,gwLog); + gwLogMapper.updateById(gwLog); + return AjaxResult.success("修改成功"); + + } + } diff --git a/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/gwLog/GwLogApi.java b/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/gwLog/GwLogApi.java index 7e3893ffe..17003465e 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/gwLog/GwLogApi.java +++ b/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/gwLog/GwLogApi.java @@ -1,11 +1,13 @@ package com.mhd.oms.interfaces.facade.gwLog; +import com.mhd.common.core.utils.bean.BeanUtils; import com.mhd.common.core.web.controller.BaseController; import com.mhd.common.core.web.domain.AjaxResult; import com.mhd.common.core.web.page.TableDataInfo; import com.mhd.oms.application.service.gwLog.GwLogApplicationService; import com.mhd.oms.domain.gwLog.entity.GwLog; +import com.mhd.oms.domain.gwLog.repository.mapper.GwLogMapper; import com.mhd.oms.domain.gwLog.repository.po.GwLogPO; import com.mhd.oms.interfaces.dto.gwLog.GwLogDTO; import io.swagger.annotations.Api; @@ -48,5 +50,16 @@ public class GwLogApi extends BaseController { } + @ApiOperation("查询GW日志") + @PostMapping("/saveGwLog") + public AjaxResult saveGwLog(GwLogDTO gwLogDTO){ + return gwLogApplicationService.insertGwLog(gwLogDTO); + } + + @ApiOperation("查询GW日志") + @PostMapping("/updateGwLog") + public AjaxResult updateGwLog(GwLogDTO gwLogDTO){ + return gwLogApplicationService.updateGwLog(gwLogDTO); + } } diff --git a/mhd_wms/src/main/java/com/mhd/wms/application/service/stockShelfOrder/StockShelfOrderApplicationService.java b/mhd_wms/src/main/java/com/mhd/wms/application/service/stockShelfOrder/StockShelfOrderApplicationService.java index 3b470da07..8c559f18c 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/application/service/stockShelfOrder/StockShelfOrderApplicationService.java +++ b/mhd_wms/src/main/java/com/mhd/wms/application/service/stockShelfOrder/StockShelfOrderApplicationService.java @@ -2,6 +2,7 @@ package com.mhd.wms.application.service.stockShelfOrder; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson2.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.mhd.common.core.constant.SnowFlakeConstants; import com.mhd.common.core.domain.po.UserConfigSwitchPo; import com.mhd.common.core.domain.po.UserPo; @@ -12,10 +13,10 @@ import com.mhd.common.core.utils.bean.BeanUtils; import com.mhd.common.core.utils.uuid.IdGenerator; import com.mhd.common.core.web.domain.AjaxResult; import com.mhd.common.security.utils.SecurityUtils; +import com.mhd.system.api.OmsServiceFeign; import com.mhd.system.api.SystemServiceFeign; import com.mhd.system.api.UserServiceFeign; -import com.mhd.system.api.domain.ContainerFeignPO; -import com.mhd.system.api.domain.StorageLocationFeignPO; +import com.mhd.system.api.domain.*; import com.mhd.system.api.domain.cache.AssociationWarehouseCacheDO; import com.mhd.system.api.domain.cache.SystemServiceCacheUtil; import com.mhd.system.api.model.LoginUser; @@ -29,7 +30,6 @@ import com.mhd.wms.domain.materialBaseInfo.entity.MaterialBaseInfo; import com.mhd.wms.domain.materialBaseInfo.repository.facade.IMaterialBaseInfoService; import com.mhd.wms.domain.materialBaseInfo.repository.mapper.MaterialBaseInfoMapper; import com.mhd.wms.domain.materialBaseInfo.repository.po.MaterialBaseInfoPO; -import com.mhd.system.api.domain.PackDetailFeignPO; import com.mhd.wms.domain.materialGoodsRule.repository.facade.IMaterialGoodsRuleService; import com.mhd.wms.domain.materialGoodsRule.repository.po.BatchDetailPO; import com.mhd.wms.domain.materialGoodsRule.repository.po.BatchPO; @@ -37,7 +37,6 @@ import com.mhd.wms.domain.materialGoodsRule.repository.po.MaterialGoodsRulePO; import com.mhd.wms.domain.materialInventory.entity.MaterialInventory; import com.mhd.wms.domain.materialInventory.repository.mapper.MaterialInventoryMapper; import com.mhd.wms.domain.materialInventory.repository.po.MaterialInventoryPO; -import com.mhd.system.api.domain.BatchDetailFeignPO; import com.mhd.wms.domain.materialMoreDetail.repository.po.MaterialMoreDetailPO; import com.mhd.wms.domain.inMaterialDetail.repository.po.InMaterialDetailPO; import com.mhd.wms.domain.inMaterialDetail.repository.todo.InMaterialDetailDO; @@ -46,27 +45,30 @@ import com.mhd.wms.domain.shelfMaterialDetail.repository.po.ShelfMaterialDetailP import com.mhd.wms.domain.shelfMaterialDetail.repository.todo.ShelfMaterialDetailDO; import com.mhd.wms.domain.shelfMaterialDetail.service.ShelfMaterialDetailDomainService; import com.mhd.wms.domain.shiftMaterialDetail.repository.todo.ShiftMaterialDetailDO; +import com.mhd.wms.domain.stockInOrder.repository.mapper.StockInOrderMapper; +import com.mhd.wms.domain.stockInOrder.repository.po.StockInOrderPO; +import com.mhd.wms.domain.stockShelfOrder.entity.StockShelfOrder; +import com.mhd.wms.domain.stockShelfOrder.repository.mapper.StockShelfOrderMapper; import com.mhd.wms.domain.stockShelfOrder.repository.po.StockShelfOrderPO; import com.mhd.wms.domain.stockShelfOrder.repository.todo.StockShelfOrderDO; import com.mhd.wms.domain.stockShelfOrder.service.StockShelfOrderDomainService; import com.mhd.wms.util.ReceiptBatchDetailFilter; 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.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; +import javax.annotation.Resource; +import java.io.IOException; import java.lang.reflect.Field; import java.math.BigDecimal; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Date; -import java.util.HashMap; -import java.util.HashSet; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.Set; +import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; @@ -92,6 +94,8 @@ public class StockShelfOrderApplicationService { @Autowired private SystemServiceFeign systemServiceFeign; @Autowired + private OmsServiceFeign omsServiceFeign; + @Autowired private IdGenerator idGenerator; @Autowired private MaterialBaseInfoMapper materialBaseInfoMapper; @@ -103,8 +107,15 @@ public class StockShelfOrderApplicationService { private IMaterialBaseInfoService materialBaseInfoService; @Autowired private IMaterialBarCodeService materialBarCodeService; + @Resource + private StockShelfOrderMapper stockShelfOrderMapper; + private static final String PUSH_API_URL = "http://10.33.0.100/nagu-erp-api/transfer/pushData"; + private static final String API_NAME = "save_qnBill_i"; + private static final String VERIFY = "tjPZMT9fwhZRnv+eTXKF75QXmXzCn7phPagmoUQsvsh2ZTWDjuRxHAgcP0GZENHP"; + @Autowired + private StockInOrderMapper stockInOrderMapper; /** * 分页查询上架单列表 @@ -2609,4 +2620,137 @@ public class StockShelfOrderApplicationService { } return sb.toString(); } + + + + public AjaxResult batchPush(List idList) { + if (idList == null || idList.isEmpty()) { + return AjaxResult.error("没有数据需要推送"); + } + + LoginUser loginUser = SecurityUtils.getLoginUser(); + Long pushBy = loginUser != null ? loginUser.getUserid() : null; + String pushByName = loginUser != null ? loginUser.getUsername() : 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(Long id : idList){ + + StockShelfOrder stockShelfOrder = stockShelfOrderMapper.selectById(id); +// StockInOrderPO stockInOrderPO = stockInOrderMapper.selectByInOrderNumber(stockShelfOrder.getInOrderNumber()); +// if(stockInOrderPO == null){ +// throw new ServiceException("该订单还未入库"); +// } + + System.out.println(stockShelfOrder); + String etpsPreentNo = stockShelfOrder.getInOrderNumber();//入库单号 + //如果是上架的时候推送,name就是现在的时间 ,没有找到上架完成时间 + Date inputTime = new Date();//录入时间-现在时间 + + //Date inputTime = stockInOrderPO.getWarehouseDate();//录入时间-入仓时间 + char mtpckEndprdTypecd = 'E'; + + Map item = new HashMap<>(); + item.put("etpsPreentNo", stockShelfOrder.getInOrderNumber()); + item.put("inputTime", new Date());//或者是前段传时间 或者是加时间字段然后查询拿到这里 + item.put("mtpckEndprdTypecd", 'E'); + List> bodyList = new ArrayList<>(); + bodyList.add(item); + + //构建推送数据 + + + + + + + GwLogDTO gwLogDTO = new GwLogDTO(); + gwLogDTO.setType("出口订单"); + gwLogDTO.setBusinessId(id); + gwLogDTO.setRequestBody(com.alibaba.fastjson.JSONObject.toJSONString(bodyList)); + gwLogDTO.setResponseBody(""); + gwLogDTO.setStatus(1); + gwLogDTO.setSendTime(new Date()); + gwLogDTO.setOrganizationId(organizationId); + gwLogDTO.setTopOrganizationId(topOrganizationId); + gwLogDTO.setOrganizationName(organizationName); + gwLogDTO.setCreateBy(pushBy); + gwLogDTO.setCreateTime(new Date()); + gwLogDTO.setDelFlag(1); + //gwLogMapper.insert(gwLogDTO); + + updatePushStatus(id, 2, new Date(), pushBy,pushByName); + + CloseableHttpClient httpClient = HttpClients.createDefault(); + HttpPost httpPost = new HttpPost(PUSH_API_URL); + StringEntity postingString = new StringEntity(com.alibaba.fastjson.JSONObject.toJSONString(bodyList), "UTF-8"); + httpPost.setEntity(postingString); + httpPost.setHeader("Content-type", "application/json"); + httpPost.setHeader("apiName", API_NAME); + httpPost.setHeader("verify", VERIFY); + + try { + CloseableHttpResponse response = httpClient.execute(httpPost); + String responseString = EntityUtils.toString(response.getEntity()); + gwLogDTO.setResponseBody(responseString); + + if (response.getStatusLine().getStatusCode() == 200) { + gwLogDTO.setStatus(2); + updatePushStatus(id, 3, new Date(), pushBy,pushByName); + successCount++; + } else { + gwLogDTO.setStatus(3); + gwLogDTO.setErrorMsg(responseString); + updatePushStatus(id, 4, new Date(), pushBy,pushByName); + failCount++; + failMsg.append("id:").append(id).append("失败;"); + } +// gwLogMapper.updateById(gwLog); + response.close(); + } catch (IOException e) { + gwLogDTO.setStatus(3); + gwLogDTO.setErrorMsg(e.getMessage()); + gwLogDTO.setResponseBody("请求异常:" + e.getMessage()); +// gwLogMapper.updateById(gwLog); + updatePushStatus(id, 4, new Date(), pushBy,pushByName); + failCount++; + failMsg.append("id:").append(id).append("异常:").append(e.getMessage()).append(";"); + log.error("保税仓推送异常: id={}, error={}", id, 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 id, Integer pushStatus, Date pushTime, Long pushBy,String pushByName) { + StockShelfOrder entity = new StockShelfOrder(); + entity.setShelfOrderId(id); + entity.setPushStatus(pushStatus); + if (pushTime != null) { + entity.setPushTime(pushTime); + } + if (pushBy != null) { + entity.setPushBy(pushBy); + } + if (pushByName != null) { + entity.setPushByName(pushByName); + } + stockShelfOrderMapper.updateById(entity); + } + } \ No newline at end of file diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/stockInOrder/repository/mapper/StockInOrderMapper.java b/mhd_wms/src/main/java/com/mhd/wms/domain/stockInOrder/repository/mapper/StockInOrderMapper.java index fe6809884..7e447d800 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/domain/stockInOrder/repository/mapper/StockInOrderMapper.java +++ b/mhd_wms/src/main/java/com/mhd/wms/domain/stockInOrder/repository/mapper/StockInOrderMapper.java @@ -6,6 +6,7 @@ import com.mhd.wms.domain.stockInOrder.entity.StockInOrder; import com.mhd.wms.domain.stockInOrder.repository.po.StockInOrderPO; import com.mhd.wms.domain.stockInOrder.repository.todo.StockInOrderDO; import com.mhd.wms.interfaces.dto.stockInOrder.StockInOrderDTO; +import org.apache.ibatis.annotations.Param; import java.util.List; @@ -27,4 +28,6 @@ public interface StockInOrderMapper extends BaseMapper List queryNoticePrint(StockInOrderDO stockInOrderDO); List queryNoticePrintDetail(StockInOrderDO stockInOrderDO); + + StockInOrderPO selectByInOrderNumber(@Param("inOrderNumber") String inOrderNumber); } diff --git a/mhd_wms/src/main/java/com/mhd/wms/interfaces/facadeApi/stockShelfOrder/StockShelfOrderApi.java b/mhd_wms/src/main/java/com/mhd/wms/interfaces/facadeApi/stockShelfOrder/StockShelfOrderApi.java index 3ca941c78..100d97050 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/interfaces/facadeApi/stockShelfOrder/StockShelfOrderApi.java +++ b/mhd_wms/src/main/java/com/mhd/wms/interfaces/facadeApi/stockShelfOrder/StockShelfOrderApi.java @@ -88,7 +88,14 @@ public class StockShelfOrderApi extends BaseController { } - + @ApiOperation("推送") + @PostMapping("/batchPush") + public AjaxResult batchPush(@RequestBody List idList){ + if(idList == null || idList.isEmpty()){ + return AjaxResult.error("没有数据需要推送"); + } + return stockShelfOrderApplicationService.batchPush(idList); + } } diff --git a/mhd_wms/src/main/resources/mapper/stockInOrder/StockInOrderMapper.xml b/mhd_wms/src/main/resources/mapper/stockInOrder/StockInOrderMapper.xml index 0f8274b2b..234081d08 100644 --- a/mhd_wms/src/main/resources/mapper/stockInOrder/StockInOrderMapper.xml +++ b/mhd_wms/src/main/resources/mapper/stockInOrder/StockInOrderMapper.xml @@ -542,4 +542,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + \ No newline at end of file