W进口仓单推送关务开发;

This commit is contained in:
王奎兴
2026-06-10 17:22:48 +08:00
parent 42c08ca6f9
commit 97720dd3eb
7 changed files with 168 additions and 19 deletions
@@ -0,0 +1,64 @@
package com.mhd.system.api.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
import java.util.Date;
@Data
public class GwLogW implements Serializable {
private static final long serialVersionUID = 1L;
@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;
// @ApiModelProperty("推送人姓名")
// private String pushByName;
}
@@ -283,6 +283,12 @@ public class ReservationStockInOrderApplicationService {
* @return Boolean
*/
public Boolean auditState(ReservationStockInOrderDO stockInOrderDO){
Integer issueStatus = stockInOrderDO.getIssueStatus();
if (issueStatus == 2) {
List<Long> idList = new ArrayList();
idList.add(stockInOrderDO.getInOrderId());
batchPush(idList);
}
return stockInOrderDomainService.auditState(stockInOrderDO);
}
@@ -19,6 +19,7 @@ import com.mhd.common.security.utils.SecurityUtils;
import com.mhd.system.api.BmsServiceFeign;
import com.mhd.system.api.SystemServiceFeign;
import com.mhd.system.api.UserServiceFeign;
import com.mhd.system.api.domain.GwLogW;
import com.mhd.system.api.domain.SysDictData;
import com.mhd.system.api.domain.WarehouseFeignPO;
import com.mhd.system.api.domain.cache.AssociationWarehouseCacheDO;
@@ -27,6 +28,7 @@ import com.mhd.system.api.model.LoginUser;
import com.mhd.wms.domain.handoverTaskOrder.entity.HandoverTaskOrder;
import com.mhd.wms.domain.handoverTaskOrder.repository.facade.IHandoverTaskOrderService;
import com.mhd.wms.domain.inMaterialDetail.entity.InMaterialDetail;
import com.mhd.wms.domain.inMaterialDetail.repository.facade.IInMaterialDetailService;
import com.mhd.wms.domain.inMaterialDetail.repository.po.InMaterialDetailPO;
import com.mhd.wms.domain.inMaterialDetail.repository.todo.InMaterialDetailDO;
import com.mhd.wms.domain.materialBaseInfo.entity.MaterialBaseInfo;
@@ -50,6 +52,12 @@ import com.mhd.wms.domain.stockReceiptOrder.repository.facade.IStockReceiptOrder
import com.mhd.wms.domain.stockReceiptOrder.repository.todo.StockReceiptOrderDO;
import com.mhd.wms.interfaces.dto.stockInOrder.StockInOrderImportRowDTO;
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.apache.poi.ss.usermodel.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -57,14 +65,12 @@ import org.springframework.util.CollectionUtils;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import java.io.IOException;
import java.io.InputStream;
import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.stream.Collectors;
/**
@@ -96,6 +102,11 @@ public class StockInOrderApplicationService {
private IStockOutOrderService stockOutOrderService;
@Autowired
private IHandoverTaskOrderService handoverTaskOrderService;
@Autowired
private IInMaterialDetailService inMaterialDetailService;
private static final String PUSH_API_URL = "http://10.33.0.100/nagu-erp-api/transfer/pushData";
private static final String API_NAME = "save_order_i";
private static final String VERIFY = "ESLuxAmB6VXCgbqP1eFzxTPVRagkQ62BUkfhElrgQ6XmE/g2reHVflY/SiCSU7JD";
/**
@@ -3,6 +3,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.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.mhd.common.core.constant.SnowFlakeConstants;
import com.mhd.common.core.domain.po.UserConfigSwitchPo;
import com.mhd.common.core.domain.po.UserPo;
@@ -21,6 +22,7 @@ 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;
import com.mhd.wms.domain.inMaterialDetail.repository.facade.IInMaterialDetailService;
import com.mhd.wms.domain.inventoryAdjustmentRecord.entity.InventoryAdjustmentRecord;
import com.mhd.wms.domain.receiptMaterialDetail.repository.po.ReceiptMaterialDetailPO;
import com.mhd.wms.domain.receiptMaterialDetail.repository.todo.ReceiptMaterialDetailDO;
@@ -43,6 +45,8 @@ import com.mhd.wms.domain.inMaterialDetail.repository.po.InMaterialDetailPO;
import com.mhd.wms.domain.inMaterialDetail.repository.todo.InMaterialDetailDO;
import com.mhd.wms.domain.inMaterialDetail.service.InMaterialDetailDomainService;
import com.mhd.wms.domain.shelfMaterialDetail.entity.ShelfMaterialDetail;
import com.mhd.wms.domain.shelfMaterialDetail.repository.facade.IShelfMaterialDetailService;
import com.mhd.wms.domain.shelfMaterialDetail.repository.persistence.ShelfMaterialDetailImpl;
import com.mhd.wms.domain.shelfMaterialDetail.repository.po.ShelfMaterialDetailPO;
import com.mhd.wms.domain.shelfMaterialDetail.repository.todo.ShelfMaterialDetailDO;
import com.mhd.wms.domain.shelfMaterialDetail.service.ShelfMaterialDetailDomainService;
@@ -50,6 +54,7 @@ import com.mhd.wms.domain.shiftMaterialDetail.repository.todo.ShiftMaterialDetai
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.facade.IStockShelfOrderService;
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;
@@ -93,11 +98,11 @@ public class StockShelfOrderApplicationService {
private InMaterialDetailDomainService inMaterialDetailDomainService;
@Autowired
private ReceiptMaterialDetailDomainService receiptMaterialDetailDomainService;
@Autowired
@Resource
private UserServiceFeign userServiceFeign;
@Autowired
@Resource
private SystemServiceFeign systemServiceFeign;
@Autowired
@Resource
private OmsServiceFeign omsServiceFeign;
@Autowired
private ICustomsDeclarationDetailService customsDeclarationDetailService;
@@ -115,13 +120,16 @@ public class StockShelfOrderApplicationService {
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 = "ESLuxAmB6VXCgbqP1eFzxTPVRagkQ62BUkfhElrgQ6XmE/g2reHVflY/SiCSU7JD";
@Autowired
private StockInOrderMapper stockInOrderMapper;
private IInMaterialDetailService inMaterialDetailService;
@Autowired
private IShelfMaterialDetailService shelfMaterialDetailService;
@Autowired
private IStockShelfOrderService stockShelfOrderService;
private static final String PUSH_API_URL = "http://10.33.0.100/nagu-erp-api/transfer/pushData";
private static final String API_NAME = "save_order_i";
private static final String VERIFY = "ESLuxAmB6VXCgbqP1eFzxTPVRagkQ62BUkfhElrgQ6XmE/g2reHVflY/SiCSU7JD";
/**
* 分页查询上架单列表
@@ -1067,7 +1075,7 @@ public class StockShelfOrderApplicationService {
/**
* PDA/PC 详情未完成行将 total* 覆盖为待上架重量/体积= 计划 累计已上架
* 与收货 {@link com.mhd.wms.application.service.stockReceiptOrder.StockReceiptOrderApplicationService#fillPlanAndPendingMetricsRecursively} 一致
* 与收货 {@code StockReceiptOrderApplicationService#fillPlanAndPendingMetricsRecursively} 一致
* level=2 子行计算时用<strong>计划主行level=1上已汇总的 alreadyShelves*</strong>不能用子行本行累计
* 否则计划是整张卡的计划已减却只有子行一批待上架会偏大
*/
@@ -2666,7 +2674,7 @@ public class StockShelfOrderApplicationService {
String mtpckEndprdTypecd = "E";
if (materialBaseInfoId != null) {
MaterialBaseInfo materialBaseIn = materialBaseInfoMapper.selectById(materialBaseInfoId);
if (materialBaseIn.getGoodsType() != null) {
if (materialBaseIn != null && materialBaseIn.getGoodsType() != null) {
Integer goodsType = materialBaseIn.getGoodsType();
if (goodsType == 0) {
mtpckEndprdTypecd = "M";
@@ -2740,15 +2748,69 @@ public class StockShelfOrderApplicationService {
Date inputTime = new Date();
Map<String, Object> item = new HashMap<>();
item.put("etpsPreentNo", stockShelfOrder.getInOrderNumber());
item.put("etpsPreentNo", stockShelfOrder.getShelfOrderNumber());
item.put("inputTime", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));//或者是前段传时间 或者是加时间字段然后查询拿到这里
item.put("stockTypecd", "I");
item.put("mtpckEndprdTypecd", mtpckEndprdTypecd);
List<Map<String, Object>> detailItems = new ArrayList<>();
for (ShelfMaterialDetailPO shelfMaterialDetail : shelfMaterialDetails) {
Map<String, Object> detailItem = new HashMap<>();
//入库单号
detailItem.put("etpsPreentNo", stockShelfOrder.getShelfOrderNumber());
//序号
String lotNumber = shelfMaterialDetail.getLotNumber();
if (lotNumber != null) {
String[] split = lotNumber.split("-");
if (split.length == 2) {
detailItem.put("gNo", split[1]);
}
}
MaterialBaseInfo materialBaseIn = materialBaseInfoMapper.selectById(materialBaseInfoId);
if (materialBaseIn != null) {
//料号
detailItem.put("gdsMtno", materialBaseIn.getMaterialCode());
//申报单价
detailItem.put("dclUprcAmt", materialBaseIn.getUnitPrice());
BigDecimal shelvesQuantity = shelfMaterialDetail.getShelvesQuantity();
if (shelvesQuantity != null) {
if (materialBaseIn.getUnitPrice() != null) {
BigDecimal totalAmount = shelvesQuantity.multiply(materialBaseIn.getUnitPrice());
//申报总价
detailItem.put("dclTotalAmt", totalAmount);
}
//申报数量
detailItem.put("dclQty", shelvesQuantity);
//申报币制
com.mhd.wms.domain.inMaterialDetail.entity.InMaterialDetail inMaterialDetail = inMaterialDetailService.getOne(new LambdaQueryWrapper<com.mhd.wms.domain.inMaterialDetail.entity.InMaterialDetail>().eq(com.mhd.wms.domain.inMaterialDetail.entity.InMaterialDetail::getMaterialBaseInfoId, materialBaseIn.getMaterialBaseInfoId()).eq(com.mhd.wms.domain.inMaterialDetail.entity.InMaterialDetail::getInOrderNumber, stockShelfOrder.getInOrderNumber()));
detailItem.put("dclCurrcd", inMaterialDetail.getCurrency());
}
}
//入仓订单号
detailItem.put("orderNo", stockShelfOrder.getInOrderNumber());
//入仓订单行号
if (lotNumber != null) {
String[] split = lotNumber.split("-");
if (split.length == 2) {
detailItem.put("orderRow", split[1]);
}
}
//进口核注清单号
detailItem.put("bondInvtNo", materialBaseInfoId);
//进口核注清行号
detailItem.put("invtRow", materialBaseInfoId);
//仓库
detailItem.put("whNo", shelfMaterialDetail.getWarehouseCode());
//库位
detailItem.put("seatNo", shelfMaterialDetail.getStorageLocationCode());
detailItems.add(detailItem);
}
item.put("qnBillList", detailItems);
List<Map<String,Object>> bodyList = new ArrayList<>();
bodyList.add(item);
//构建推送数据
GwLogDTO gwLogDTO = new GwLogDTO();
gwLogDTO.setType("保税仓-进口仓单");
gwLogDTO.setBusinessId(id);
@@ -35,4 +35,6 @@ public interface StockShelfOrderMapper extends BaseMapper<StockShelfOrder>
void updateOmsInventoryQuantity(@Param("quantity") BigDecimal quantity, @Param("lotNumber")String lotNumber, @Param("inOrderNumber")String inOrderNumber);
void updateOmsInventorySynchronization(@Param("checkQuantity") BigDecimal checkQuantity, @Param("lotNo") String lotNo, @Param("inOrderNumber") String inOrderNumber);
public String getUserNcCode(@Param("id") Long id);
}
@@ -147,7 +147,7 @@ public class StockShelfOrderDomainService {
private MaterialBaseInfoMapper materialBaseInfoMapper;
@Autowired
private ICopyCodeReferenceService copyCodeReferenceService;
@Autowired
@Resource
private OmsServiceFeign omsServiceFeign;
/**
@@ -174,4 +174,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
ALLOCATION_QUANTITY= ALLOCATION_QUANTITY - #{checkQuantity}
where IN_ORDER_NUMBER = #{inOrderNumber} and LOT_NUMBER = #{lotNo}
</update>
<select id="getUserNcCode" parameterType="java.lang.Long" resultType="java.lang.String">
select CUSTOMER_NC_CODE from "NGWL_TEST_USER".USER_SHIPPER where 1 = 1 and DEL_FLAG = 1 and USER_ID = #{id} limit 1
</select>
</mapper>