推送时报关回写到报关明细表 推送时使用该数据

This commit is contained in:
zhaoqing
2026-06-04 15:48:09 +08:00
parent 88e6993dd6
commit 1b1a026adc
8 changed files with 472 additions and 0 deletions
@@ -9,6 +9,7 @@ import com.mhd.common.core.domain.po.UserPo;
import com.mhd.common.core.exception.ServiceException; import com.mhd.common.core.exception.ServiceException;
import com.mhd.common.core.utils.IgnoreNullUtil; import com.mhd.common.core.utils.IgnoreNullUtil;
import com.mhd.common.core.utils.StringUtils; import com.mhd.common.core.utils.StringUtils;
import java.text.SimpleDateFormat;
import com.mhd.common.core.utils.bean.BeanUtils; import com.mhd.common.core.utils.bean.BeanUtils;
import com.mhd.common.core.utils.uuid.IdGenerator; import com.mhd.common.core.utils.uuid.IdGenerator;
import com.mhd.common.core.web.domain.AjaxResult; import com.mhd.common.core.web.domain.AjaxResult;
@@ -53,6 +54,8 @@ import com.mhd.wms.domain.stockShelfOrder.repository.mapper.StockShelfOrderMappe
import com.mhd.wms.domain.stockShelfOrder.repository.po.StockShelfOrderPO; import com.mhd.wms.domain.stockShelfOrder.repository.po.StockShelfOrderPO;
import com.mhd.wms.domain.stockShelfOrder.repository.todo.StockShelfOrderDO; import com.mhd.wms.domain.stockShelfOrder.repository.todo.StockShelfOrderDO;
import com.mhd.wms.domain.stockShelfOrder.service.StockShelfOrderDomainService; import com.mhd.wms.domain.stockShelfOrder.service.StockShelfOrderDomainService;
import com.mhd.wms.domain.customsDeclarationDetail.repository.facade.ICustomsDeclarationDetailService;
import com.mhd.wms.domain.customsDeclarationDetail.repository.todo.CustomsDeclarationDetailDO;
import com.mhd.wms.util.ReceiptBatchDetailFilter; import com.mhd.wms.util.ReceiptBatchDetailFilter;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.CloseableHttpResponse;
@@ -97,6 +100,8 @@ public class StockShelfOrderApplicationService {
@Autowired @Autowired
private OmsServiceFeign omsServiceFeign; private OmsServiceFeign omsServiceFeign;
@Autowired @Autowired
private ICustomsDeclarationDetailService customsDeclarationDetailService;
@Autowired
private IdGenerator idGenerator; private IdGenerator idGenerator;
@Autowired @Autowired
private MaterialBaseInfoMapper materialBaseInfoMapper; private MaterialBaseInfoMapper materialBaseInfoMapper;
@@ -2675,6 +2680,61 @@ public class StockShelfOrderApplicationService {
} }
} }
// ========== 调用报关回写接口获取核注清单号和行号 ==========
String bondInvtNo = "";
Integer invtRow = null;
try {
Map<String, Object> customsParam = new HashMap<>();
customsParam.put("beginDate", "2020-01-01");
customsParam.put("endDate", new SimpleDateFormat("yyyy-MM-dd").format(new Date()));
customsParam.put("erpBillNo", stockShelfOrder.getShelfOrderNumber());
customsParam.put("pageIndex", 1);
customsParam.put("pageSize", 100);
List<Map<String, Object>> customsBodyList = new ArrayList<>();
customsBodyList.add(customsParam);
CloseableHttpClient customsHttpClient = HttpClients.createDefault();
HttpPost customsHttpPost = new HttpPost(PUSH_API_URL);
StringEntity customsPostingString = new StringEntity(com.alibaba.fastjson.JSONObject.toJSONString(customsBodyList), "UTF-8");
customsHttpPost.setEntity(customsPostingString);
customsHttpPost.setHeader("Content-type", "application/json");
customsHttpPost.setHeader("apiName", "sendDec");
customsHttpPost.setHeader("verify", VERIFY);
CloseableHttpResponse customsResponse = customsHttpClient.execute(customsHttpPost);
String customsResponseString = EntityUtils.toString(customsResponse.getEntity());
if (customsResponse.getStatusLine().getStatusCode() == 200) {
com.alibaba.fastjson.JSONObject customsJson = com.alibaba.fastjson.JSONObject.parseObject(customsResponseString);
com.alibaba.fastjson.JSONArray customsData = customsJson.getJSONArray("data");
if (customsData != null && customsData.size() > 0) {
com.alibaba.fastjson.JSONObject customsItem = customsData.getJSONObject(0);
bondInvtNo = customsItem.getString("entry_id");
Object erpGNoObj = customsItem.get("erp_g_no");
if (erpGNoObj != null) {
invtRow = (erpGNoObj instanceof Number) ? ((Number) erpGNoObj).intValue() : Integer.parseInt(erpGNoObj.toString());
}
}
}
customsResponse.close();
customsHttpClient.close();
} catch (Exception e) {
log.error("调用报关回写接口失败: shelfOrderNumber={}", stockShelfOrder.getShelfOrderNumber(), e);
}
// ========== 写入报关明细表 ==========
if (StringUtils.isNotBlank(bondInvtNo)) {
CustomsDeclarationDetailDO detailDO = new CustomsDeclarationDetailDO();
detailDO.setDocumentNumber(stockShelfOrder.getShelfOrderNumber());
detailDO.setBondInvtNo(bondInvtNo);
detailDO.setInvtRow(invtRow);
detailDO.setOrganizationId(stockShelfOrder.getOrganizationId());
detailDO.setOrganizationName(stockShelfOrder.getOrganizationName());
detailDO.setTopOrganizationId(stockShelfOrder.getTopOrganizationId());
customsDeclarationDetailService.insert(detailDO);
}
String etpsPreentNo = stockShelfOrder.getInOrderNumber(); String etpsPreentNo = stockShelfOrder.getInOrderNumber();
Date inputTime = new Date(); Date inputTime = new Date();
@@ -2682,6 +2742,8 @@ public class StockShelfOrderApplicationService {
item.put("etpsPreentNo", stockShelfOrder.getInOrderNumber()); item.put("etpsPreentNo", stockShelfOrder.getInOrderNumber());
item.put("inputTime", new Date());//或者是前段传时间 或者是加时间字段然后查询拿到这里 item.put("inputTime", new Date());//或者是前段传时间 或者是加时间字段然后查询拿到这里
item.put("mtpckEndprdTypecd", mtpckEndprdTypecd); item.put("mtpckEndprdTypecd", mtpckEndprdTypecd);
item.put("bondInvtNo", bondInvtNo);
item.put("invtRow", invtRow);
List<Map<String,Object>> bodyList = new ArrayList<>(); List<Map<String,Object>> bodyList = new ArrayList<>();
bodyList.add(item); bodyList.add(item);
@@ -0,0 +1,63 @@
package com.mhd.wms.domain.customsDeclarationDetail.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.mhd.common.core.annotation.Excel;
import com.mhd.common.core.web.domain.BaseVOEntity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* 报关明细对象 customs_declaration_detail
*
* @author gen
* @date 2024-06-04
*/
@Data
public class CustomsDeclarationDetail extends BaseVOEntity {
private static final long serialVersionUID = 1L;
@ApiModelProperty("主键")
@TableId(type = IdType.AUTO)
private Long id;
@ApiModelProperty("组织表ID")
@Excel(name = "组织表ID")
private Long organizationId;
@ApiModelProperty("组织名称")
@Excel(name = "组织名称")
private String organizationName;
@ApiModelProperty("一级组织表ID")
@Excel(name = "一级组织表ID")
private Long topOrganizationId;
@ApiModelProperty("单据编号")
@Excel(name = "单据编号")
private String documentNumber;
@ApiModelProperty("物料基础信息id")
@Excel(name = "物料基础信息id")
private Long materialBaseInfoId;
@ApiModelProperty("物料编码")
@Excel(name = "物料编码")
private String materialCode;
@ApiModelProperty("物料名称")
@Excel(name = "物料名称")
private String materialName;
@ApiModelProperty("进口核注清单号")
@Excel(name = "进口核注清单号")
private String bondInvtNo;
@ApiModelProperty("行号")
@Excel(name = "行号")
private Integer invtRow;
}
@@ -0,0 +1,43 @@
package com.mhd.wms.domain.customsDeclarationDetail.repository.facade;
import com.baomidou.mybatisplus.extension.service.IService;
import com.mhd.wms.domain.customsDeclarationDetail.entity.CustomsDeclarationDetail;
import com.mhd.wms.domain.customsDeclarationDetail.repository.po.CustomsDeclarationDetailPO;
import com.mhd.wms.domain.customsDeclarationDetail.repository.todo.CustomsDeclarationDetailDO;
import java.util.List;
/**
* 报关明细Service接口
*
* @author gen
* @date 2024-06-04
*/
public interface ICustomsDeclarationDetailService extends IService<CustomsDeclarationDetail>
{
/**
* 分页查询报关明细列表
*/
public List<CustomsDeclarationDetailPO> queryList(CustomsDeclarationDetailDO customsDeclarationDetailDO);
/**
* 新增报关明细
*/
public Boolean insert(CustomsDeclarationDetailDO customsDeclarationDetailDO);
/**
* 修改报关明细
*/
public Boolean update(CustomsDeclarationDetailDO customsDeclarationDetailDO);
/**
* 批量删除报关明细
*/
public Boolean delete(Long[] ids);
/**
* 查询报关明细
*/
public CustomsDeclarationDetailPO getInfo(Long id);
}
@@ -0,0 +1,23 @@
package com.mhd.wms.domain.customsDeclarationDetail.repository.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.mhd.wms.domain.customsDeclarationDetail.entity.CustomsDeclarationDetail;
import com.mhd.wms.domain.customsDeclarationDetail.repository.po.CustomsDeclarationDetailPO;
import com.mhd.wms.domain.customsDeclarationDetail.repository.todo.CustomsDeclarationDetailDO;
import java.util.List;
/**
* 报关明细Mapper接口
*
* @author gen
* @date 2024-06-04
*/
public interface CustomsDeclarationDetailMapper extends BaseMapper<CustomsDeclarationDetail>
{
/**
* 查询报关明细列表
*/
public List<CustomsDeclarationDetailPO> queryList(CustomsDeclarationDetailDO customsDeclarationDetailDO);
}
@@ -0,0 +1,81 @@
package com.mhd.wms.domain.customsDeclarationDetail.repository.persistence;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.mhd.wms.domain.customsDeclarationDetail.entity.CustomsDeclarationDetail;
import com.mhd.wms.domain.customsDeclarationDetail.repository.facade.ICustomsDeclarationDetailService;
import com.mhd.wms.domain.customsDeclarationDetail.repository.mapper.CustomsDeclarationDetailMapper;
import com.mhd.wms.domain.customsDeclarationDetail.repository.po.CustomsDeclarationDetailPO;
import com.mhd.wms.domain.customsDeclarationDetail.repository.todo.CustomsDeclarationDetailDO;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
/**
* 报关明细Service业务层处理
*
* @author gen
* @date 2024-06-04
*/
@Service
public class CustomsDeclarationDetailImpl extends ServiceImpl<CustomsDeclarationDetailMapper, CustomsDeclarationDetail> implements ICustomsDeclarationDetailService {
@Autowired
private CustomsDeclarationDetailMapper customsDeclarationDetailMapper;
/**
* 查询报关明细列表
*/
@Override
public List<CustomsDeclarationDetailPO> queryList(CustomsDeclarationDetailDO customsDeclarationDetailDO)
{
return customsDeclarationDetailMapper.queryList(customsDeclarationDetailDO);
}
/**
* 新增报关明细
*/
@Override
public Boolean insert(CustomsDeclarationDetailDO customsDeclarationDetailDO) {
CustomsDeclarationDetail customsDeclarationDetail = new CustomsDeclarationDetail();
BeanUtils.copyProperties(customsDeclarationDetailDO,customsDeclarationDetail);
return this.save(customsDeclarationDetail);
}
/**
* 修改报关明细
*/
@Override
public Boolean update(CustomsDeclarationDetailDO customsDeclarationDetailDO) {
CustomsDeclarationDetail customsDeclarationDetail = new CustomsDeclarationDetail();
BeanUtils.copyProperties(customsDeclarationDetailDO,customsDeclarationDetail);
return this.updateById(customsDeclarationDetail);
}
/**
* 批量删除报关明细
*/
@Override
public Boolean delete(Long[] ids ) {
List<CustomsDeclarationDetail> list = new ArrayList<>();
for (Long id : ids) {
CustomsDeclarationDetail customsDeclarationDetail = new CustomsDeclarationDetail();
customsDeclarationDetail.setId(id);
customsDeclarationDetail.setDelFlag(2);
list.add(customsDeclarationDetail);
}
return this.updateBatchById(list);
}
/**
* 获取报关明细详细信息
*/
@Override
public CustomsDeclarationDetailPO getInfo(Long id) {
CustomsDeclarationDetail customsDeclarationDetail = this.getById(id);
CustomsDeclarationDetailPO customsDeclarationDetailPO = new CustomsDeclarationDetailPO();
BeanUtils.copyProperties(customsDeclarationDetail,customsDeclarationDetailPO);
return customsDeclarationDetailPO;
}
}
@@ -0,0 +1,62 @@
package com.mhd.wms.domain.customsDeclarationDetail.repository.po;
import com.mhd.common.core.annotation.Excel;
import com.mhd.common.core.web.domain.BaseVOEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* 报关明细对象 customs_declaration_detail
*
* @author gen
* @date 2024-06-04
*/
@Data
@ApiModel(value = "报关明细对象", description = "报关明细响应对象")
public class CustomsDeclarationDetailPO extends BaseVOEntity {
private static final long serialVersionUID = 1L;
@ApiModelProperty("主键")
private Long id;
@ApiModelProperty("组织表ID")
@Excel(name = "组织表ID")
private Long organizationId;
@ApiModelProperty("组织名称")
@Excel(name = "组织名称")
private String organizationName;
@ApiModelProperty("一级组织表ID")
@Excel(name = "一级组织表ID")
private Long topOrganizationId;
@ApiModelProperty("单据编号")
@Excel(name = "单据编号")
private String documentNumber;
@ApiModelProperty("物料基础信息id")
@Excel(name = "物料基础信息id")
private Long materialBaseInfoId;
@ApiModelProperty("物料编码")
@Excel(name = "物料编码")
private String materialCode;
@ApiModelProperty("物料名称")
@Excel(name = "物料名称")
private String materialName;
@ApiModelProperty("进口核注清单号")
@Excel(name = "进口核注清单号")
private String bondInvtNo;
@ApiModelProperty("行号")
@Excel(name = "行号")
private Integer invtRow;
}
@@ -0,0 +1,66 @@
package com.mhd.wms.domain.customsDeclarationDetail.repository.todo;
import com.mhd.common.core.annotation.Excel;
import com.mhd.common.core.web.domain.BaseVOEntity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
* 报关明细对象 customs_declaration_detail
*
* @author gen
* @date 2024-06-04
*/
@Data
public class CustomsDeclarationDetailDO extends BaseVOEntity {
private static final long serialVersionUID = 1L;
@ApiModelProperty("主键")
private Long id;
@ApiModelProperty("组织表ID")
@Excel(name = "组织表ID")
private Long organizationId;
@ApiModelProperty("组织名称")
@Excel(name = "组织名称")
private String organizationName;
@ApiModelProperty("一级组织表ID")
@Excel(name = "一级组织表ID")
private Long topOrganizationId;
@ApiModelProperty("单据编号")
@Excel(name = "单据编号")
private String documentNumber;
@ApiModelProperty("物料基础信息id")
@Excel(name = "物料基础信息id")
private Long materialBaseInfoId;
@ApiModelProperty("物料编码")
@Excel(name = "物料编码")
private String materialCode;
@ApiModelProperty("物料名称")
@Excel(name = "物料名称")
private String materialName;
@ApiModelProperty("进口核注清单号")
@Excel(name = "进口核注清单号")
private String bondInvtNo;
@ApiModelProperty("行号")
@Excel(name = "行号")
private Integer invtRow;
@ApiModelProperty(name = "组织ID集合")
private List<Long> organizationIdList;
@ApiModelProperty(name = "单据编号集合")
private List<String> documentNumberList;
}
@@ -0,0 +1,72 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mhd.wms.domain.customsDeclarationDetail.repository.mapper.CustomsDeclarationDetailMapper">
<resultMap type="com.mhd.wms.domain.customsDeclarationDetail.repository.po.CustomsDeclarationDetailPO" id="CustomsDeclarationDetailResult">
<result property="id" column="id" />
<result property="organizationId" column="organization_id" />
<result property="organizationName" column="organization_name" />
<result property="topOrganizationId" column="top_organization_id" />
<result property="documentNumber" column="document_number" />
<result property="materialBaseInfoId" column="material_base_info_id" />
<result property="materialCode" column="material_code" />
<result property="materialName" column="material_name" />
<result property="bondInvtNo" column="bond_invt_no" />
<result property="invtRow" column="invt_row" />
<result property="createTime" column="create_time" />
<result property="createBy" column="create_by" />
<result property="createByName" column="create_by_name" />
<result property="updateTime" column="update_time" />
<result property="updateBy" column="update_by" />
<result property="updateByName" column="update_by_name" />
<result property="delFlag" column="del_flag" />
</resultMap>
<sql id="selectCustomsDeclarationDetailPo">
select id, organization_id, organization_name, top_organization_id, document_number, material_base_info_id, material_code, material_name, bond_invt_no, invt_row, create_time, create_by, create_by_name, update_time, update_by, update_by_name, del_flag from customs_declaration_detail
</sql>
<sql id="selectCustomsDeclarationDetailPo1">
<where>
<if test="documentNumber != null and documentNumber != ''">
and document_number = #{documentNumber}
</if>
<if test="organizationId != null ">
and organization_id = #{organizationId}
</if>
<if test="organizationName != null and organizationName != ''">
and organization_name like concat('%', #{organizationName}, '%')
</if>
<if test="topOrganizationId != null ">
and top_organization_id = #{topOrganizationId}
</if>
<if test="materialBaseInfoId != null ">
and material_base_info_id = #{materialBaseInfoId}
</if>
<if test="materialCode != null and materialCode != ''">
and material_code = #{materialCode}
</if>
<if test="materialName != null and materialName != ''">
and material_name like concat('%', #{materialName}, '%')
</if>
<if test="documentNumberList != null and documentNumberList.size > 0">
and document_number in
<foreach collection="documentNumberList" item="item" index="index" open="(" close=")" separator=",">
#{item}
</foreach>
</if>
<choose>
<when test="delFlag != null"> and del_flag = #{delFlag} </when>
<otherwise> and del_flag = 1 </otherwise>
</choose>
</where>
</sql>
<select id="queryList" parameterType="com.mhd.wms.domain.customsDeclarationDetail.repository.todo.CustomsDeclarationDetailDO" resultMap="CustomsDeclarationDetailResult">
<include refid="selectCustomsDeclarationDetailPo"/>
<include refid="selectCustomsDeclarationDetailPo1"/>
</select>
</mapper>