feat(wms): 添加钢卷关联订单信息查询功能

- 在WmsCoilContractRelMapper中新增selectOrdersByCoilId和selectOrdersByCoilIds方法
- 在WmsCoilContractRelMapper.xml中实现钢卷与订单关联查询的SQL映射
- 扩展WmsCoilContractRelVo类添加订单相关字段和@JsonFormat注解
- 在WmsMaterialCoilServiceImpl中注入coilContractRelMapper并实现填充订单信息逻辑
- 在WmsMaterialCoilVo中添加orderList字段存储关联订单列表
- 实现根据钢卷ID查询完整订单信息的JOIN查询功能
This commit is contained in:
2026-04-18 11:49:10 +08:00
parent e1cc0fda34
commit 67cf5aa7cb
5 changed files with 269 additions and 31 deletions

View File

@@ -2,13 +2,15 @@ package com.klp.domain.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import com.klp.common.annotation.ExcelDictFormat;
import com.klp.common.convert.ExcelDictConvert;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
/**
* 钢卷与合同关联关系视图对象 wms_coil_contract_rel
* 钢卷与合同(订单)关联关系视图对象 wms_coil_contract_rel + crm_order JOIN
*
* @author klp
* @date 2026-04-18
@@ -19,29 +21,118 @@ public class WmsCoilContractRelVo {
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@ExcelProperty(value = "主键ID")
private Long relId;
// ========== 中间表自身字段 ==========
/**
* 钢卷ID
*/
/** 主键ID */
private Long relId;
/** 钢卷ID */
@ExcelProperty(value = "钢卷ID")
private Long coilId;
/**
* 合同ID
*/
@ExcelProperty(value = "合同ID")
/** 合同/订单ID */
@ExcelProperty(value = "合同/订单ID")
private Long contractId;
/**
* 备注
*/
/** 备注 */
@ExcelProperty(value = "备注")
private String remark;
// ========== 关联订单信息JOIN crm_order==========
/** 订单ID主键 */
private Long orderId;
/** 订单编号 */
private String orderCode;
/** 订单类型pre-预订单formal-正式订单 */
private Long orderType;
/** 关联客户ID */
private String customerId;
/** 订单总金额 */
private BigDecimal orderAmount;
/** 销售员 */
private String salesman;
/** 交货日期 */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date deliveryDate;
/** 预订单状态 */
private Long preOrderStatus;
/** 审核人 */
private String auditUser;
/** 审核时间 */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date auditTime;
/** 订单状态 */
private Long orderStatus;
/** 财务状态 */
private Long financeStatus;
/** 未结款数额 */
private BigDecimal unpaidAmount;
/** 备注 */
private String orderRemark;
/** 合同号 */
private String contractCode;
/** 合同名称 */
private String contractName;
/** 供方 */
private String supplier;
/** 需方 */
private String customer;
/** 签订时间 */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date signTime;
/** 签订地点 */
private String signLocation;
/** 产品内容 */
private String productContent;
/** 合同内容 */
private String contractContent;
/** 供方地址 */
private String supplierAddress;
/** 供方电话 */
private String supplierPhone;
/** 供方开户行 */
private String supplierBank;
/** 供方账号 */
private String supplierAccount;
/** 供方税号 */
private String supplierTaxNo;
/** 需方地址 */
private String customerAddress;
/** 需方电话 */
private String customerPhone;
/** 需方开户行 */
private String customerBank;
/** 需方账号 */
private String customerAccount;
/** 需方税号 */
private String customerTaxNo;
/** 技术附件 */
private String techAnnex;
/** 商务附件 */
private String businessAnnex;
/** 排产函 */
private String productionSchedule;
/** 算单价备注 */
private String unitPriceRemark;
/** 应付定金(万元) */
private BigDecimal depositPayable;
/** 已付定金(万元) */
private BigDecimal depositPaid;
/** 定金比例(% */
private BigDecimal depositRatio;
/** 合同状态 0=草稿 1=生效 2=作废 3=已完成 */
private Long status;
/** 关联合同ID */
private Long orderIdInOrder; // crm_order.contract_id与contractId可能不同
/** 附件 */
private String annexFiles;
/** 创建人 */
private String createBy;
/** 创建时间 */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
/** 更新人 */
private String updateBy;
/** 更新时间 */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date updateTime;
}

View File

@@ -329,5 +329,10 @@ public class WmsMaterialCoilVo extends BaseEntity {
* 调拨类型
*/
private String transferType;
/**
* 关联的订单列表通过wms_coil_contract_rel中间表JOIN crm_order
*/
private List<com.klp.domain.vo.WmsCoilContractRelVo> orderList;
}

View File

@@ -3,6 +3,9 @@ package com.klp.mapper;
import com.klp.domain.WmsCoilContractRel;
import com.klp.domain.vo.WmsCoilContractRelVo;
import com.klp.common.core.mapper.BaseMapperPlus;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* 钢卷与合同关联关系Mapper接口
@@ -12,4 +15,13 @@ import com.klp.common.core.mapper.BaseMapperPlus;
*/
public interface WmsCoilContractRelMapper extends BaseMapperPlus<WmsCoilContractRelMapper, WmsCoilContractRel, WmsCoilContractRelVo> {
/**
* 根据钢卷ID查询关联的订单完整信息JOIN crm_order表
*/
List<WmsCoilContractRelVo> selectOrdersByCoilId(@Param("coilId") Long coilId);
/**
* 批量根据钢卷ID列表查询关联的订单完整信息
*/
List<WmsCoilContractRelVo> selectOrdersByCoilIds(@Param("coilIds") List<Long> coilIds);
}

View File

@@ -26,6 +26,7 @@ import com.klp.domain.vo.dashboard.CategoryWidthRawVo;
import com.klp.domain.WmsCoilPendingAction;
import com.klp.domain.bo.WmsCoilPendingActionBo;
import com.klp.mapper.*;
import com.klp.service.*;
import com.klp.system.service.ISysUserService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@@ -33,16 +34,6 @@ import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.klp.service.IWmsMaterialCoilService;
import com.klp.service.IWmsStockService;
import com.klp.service.IWmsGenerateRecordService;
import com.klp.service.IWmsWarehouseService;
import com.klp.service.IWmsActualWarehouseService;
import com.klp.service.IWmsRawMaterialService;
import com.klp.service.IWmsBomItemService;
import com.klp.service.IWmsCoilPendingActionService;
import com.klp.service.IWmsProductService;
import com.klp.service.IWmsCoilAbnormalService;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.*;
@@ -80,6 +71,7 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
private final WmsDeliveryWaybillDetailMapper deliveryWaybillDetailMapper;
private final WmsCoilWarehouseOperationLogMapper wmsCoilWarehouseOperationLogMapper;
private final IWmsCoilAbnormalService coilAbnormalService;
private final WmsCoilContractRelMapper coilContractRelMapper;
/**
* 查询钢卷物料表
@@ -94,6 +86,9 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
// 查询关联对象
fillRelatedObjects(vo);
// 查询钢卷关联的订单信息
fillOrderListForSingle(coilId, vo);
return vo;
}
@@ -304,6 +299,21 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
}
}
}
// 查询合同信息通过中间表拿到合同id然后查询出合同信息
}
/**
* 填充单个钢卷的关联订单列表完整WmsCoilContractRelVo含JOIN订单信息
*/
private void fillOrderListForSingle(Long coilId, WmsMaterialCoilVo vo) {
try {
List<com.klp.domain.vo.WmsCoilContractRelVo> orders = coilContractRelMapper.selectOrdersByCoilId(coilId);
if (orders != null && !orders.isEmpty()) {
vo.setOrderList(orders);
}
} catch (Exception e) {
log.warn("查询钢卷关联订单信息失败, coilId: {}", coilId, e);
}
}
/**

View File

@@ -16,5 +16,125 @@
<result property="delFlag" column="del_flag"/>
</resultMap>
<!-- 根据钢卷ID查询关联的订单完整信息JOIN crm_order返回WmsCoilContractRelVo全量字段 -->
<select id="selectOrdersByCoilId" resultType="com.klp.domain.vo.WmsCoilContractRelVo">
SELECT
rel.rel_id AS relId,
rel.coil_id AS coilId,
rel.contract_id AS contractId,
rel.remark,
-- 订单信息
co.order_id AS orderId,
co.order_code AS orderCode,
co.order_type AS orderType,
co.customer_id AS customerId,
co.order_amount AS orderAmount,
co.salesman AS salesman,
co.delivery_date AS deliveryDate,
co.pre_order_status AS preOrderStatus,
co.audit_user AS auditUser,
co.audit_time AS auditTime,
co.order_status AS orderStatus,
co.finance_status AS financeStatus,
co.unpaid_amount AS unpaidAmount,
co.remark AS orderRemark,
co.contract_code AS contractCode,
co.contract_name AS contractName,
co.supplier AS supplier,
co.customer AS customer,
co.sign_time AS signTime,
co.sign_location AS signLocation,
co.product_content AS productContent,
co.contract_content AS contractContent,
co.supplier_address AS supplierAddress,
co.supplier_phone AS supplierPhone,
co.supplier_bank AS supplierBank,
co.supplier_account AS supplierAccount,
co.supplier_tax_no AS supplierTaxNo,
co.customer_address AS customerAddress,
co.customer_phone AS customerPhone,
co.customer_bank AS customerBank,
co.customer_account AS customerAccount,
co.customer_tax_no AS customerTaxNo,
co.tech_annex AS techAnnex,
co.business_annex AS businessAnnex,
co.production_schedule AS productionSchedule,
co.unit_price_remark AS unitPriceRemark,
co.deposit_payable AS depositPayable,
co.deposit_paid AS depositPaid,
co.deposit_ratio AS depositRatio,
co.status,
co.contract_id AS orderIdInOrder,
co.annex_files AS annexFiles,
co.create_by AS createBy,
co.create_time AS createTime,
co.update_by AS updateBy,
co.update_time AS updateTime
FROM wms_coil_contract_rel rel
INNER JOIN crm_order co ON rel.contract_id = co.order_id AND co.del_flag = 0
WHERE rel.coil_id = #{coilId} AND rel.del_flag = 0
</select>
</mapper>
<!-- 批量根据钢卷ID列表查询关联的订单完整信息 -->
<select id="selectOrdersByCoilIds" resultType="com.klp.domain.vo.WmsCoilContractRelVo">
SELECT
rel.rel_id AS relId,
rel.coil_id AS coilId,
rel.contract_id AS contractId,
rel.remark,
co.order_id AS orderId,
co.order_code AS orderCode,
co.order_type AS orderType,
co.customer_id AS customerId,
co.order_amount AS orderAmount,
co.salesman AS salesman,
co.delivery_date AS deliveryDate,
co.pre_order_status AS preOrderStatus,
co.audit_user AS auditUser,
co.audit_time AS auditTime,
co.order_status AS orderStatus,
co.finance_status AS financeStatus,
co.unpaid_amount AS unpaidAmount,
co.remark AS orderRemark,
co.contract_code AS contractCode,
co.contract_name AS contractName,
co.supplier AS supplier,
co.customer AS customer,
co.sign_time AS signTime,
co.sign_location AS signLocation,
co.product_content AS productContent,
co.contract_content AS contractContent,
co.supplier_address AS supplierAddress,
co.supplier_phone AS supplierPhone,
co.supplier_bank AS supplierBank,
co.supplier_account AS supplierAccount,
co.supplier_tax_no AS supplierTaxNo,
co.customer_address AS customerAddress,
co.customer_phone AS customerPhone,
co.customer_bank AS customerBank,
co.customer_account AS customerAccount,
co.customer_tax_no AS customerTaxNo,
co.tech_annex AS techAnnex,
co.business_annex AS businessAnnex,
co.production_schedule AS productionSchedule,
co.unit_price_remark AS unitPriceRemark,
co.deposit_payable AS depositPayable,
co.deposit_paid AS depositPaid,
co.deposit_ratio AS depositRatio,
co.status,
co.contract_id AS orderIdInOrder,
co.annex_files AS annexFiles,
co.create_by AS createBy,
co.create_time AS createTime,
co.update_by AS updateBy,
co.update_time AS updateTime
FROM wms_coil_contract_rel rel
INNER JOIN crm_order co ON rel.contract_id = co.order_id AND co.del_flag = 0
WHERE rel.coil_id IN
<foreach collection="coilIds" item="id" open="(" separator="," close=")">
#{id}
</foreach>
AND rel.del_flag = 0
</select>
</mapper>