feat(order): 订单变更时同步更新钢卷的业务员和合同编号
- 在 CrmOrderServiceImpl 中查询旧订单时同时获取原合同编号 - 当销售员或合同编号变更时同步更新关联钢卷的业务员名称和合同编号 - 在 WmsCoilContractRelMapper 中新增批量更新钢卷业务员和合同编号的方法 - 为钢卷相关实体类添加 contractNo 字段支持 - 修改数据库表结构为 wms_material_coil 表添加 contract_no 字段 - 更新钢卷导出功能以包含合同编号字段 - 实现根据合同ID查询业务员和合同编号信息的功能
This commit is contained in:
@@ -285,23 +285,33 @@ public class CrmOrderServiceImpl implements ICrmOrderService {
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public Boolean updateByBo(CrmOrderBo bo) {
|
public Boolean updateByBo(CrmOrderBo bo) {
|
||||||
// 查询旧订单获取原销售员,用于判断是否需要同步钢卷
|
// 查询旧订单获取原销售员和原合同编号,用于判断是否需要同步钢卷
|
||||||
CrmOrder oldOrder = null;
|
CrmOrder oldOrder = null;
|
||||||
String oldSalesman = null;
|
String oldSalesman = null;
|
||||||
|
String oldContractCode = null;
|
||||||
if (bo.getOrderId() != null) {
|
if (bo.getOrderId() != null) {
|
||||||
oldOrder = baseMapper.selectById(bo.getOrderId());
|
oldOrder = baseMapper.selectById(bo.getOrderId());
|
||||||
oldSalesman = oldOrder != null ? oldOrder.getSalesman() : null;
|
if (oldOrder != null) {
|
||||||
|
oldSalesman = oldOrder.getSalesman();
|
||||||
|
oldContractCode = oldOrder.getContractCode();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
CrmOrder update = BeanUtil.toBean(bo, CrmOrder.class);
|
CrmOrder update = BeanUtil.toBean(bo, CrmOrder.class);
|
||||||
validEntityBeforeSave(update);
|
validEntityBeforeSave(update);
|
||||||
boolean result = baseMapper.updateById(update) > 0;
|
boolean result = baseMapper.updateById(update) > 0;
|
||||||
|
|
||||||
// 如果销售员变更,同步更新所有关联钢卷的业务员名称
|
// 如果销售员或合同编号变更,同步更新所有关联钢卷
|
||||||
if (result && oldOrder != null) {
|
if (result && oldOrder != null) {
|
||||||
String newSalesman = update.getSalesman();
|
String newSalesman = update.getSalesman();
|
||||||
if (!Objects.equals(oldSalesman, newSalesman) && StringUtils.isNotBlank(newSalesman)) {
|
String newContractCode = update.getContractCode();
|
||||||
coilContractRelMapper.updateCoilSaleNameByOrderId(bo.getOrderId(), newSalesman);
|
boolean salesmanChanged = !Objects.equals(oldSalesman, newSalesman);
|
||||||
|
boolean contractCodeChanged = !Objects.equals(oldContractCode, newContractCode);
|
||||||
|
if (salesmanChanged || contractCodeChanged) {
|
||||||
|
coilContractRelMapper.updateCoilSaleNameByOrderId(
|
||||||
|
bo.getOrderId(),
|
||||||
|
StringUtils.isNotBlank(newSalesman) ? newSalesman : oldSalesman,
|
||||||
|
StringUtils.isNotBlank(newContractCode) ? newContractCode : oldContractCode);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -233,5 +233,10 @@ public class WmsMaterialCoil extends BaseEntity {
|
|||||||
* 镀铬卷号
|
* 镀铬卷号
|
||||||
*/
|
*/
|
||||||
private String chromePlateCoilNo;
|
private String chromePlateCoilNo;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 合同编号
|
||||||
|
*/
|
||||||
|
private String contractNo;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -412,6 +412,11 @@ public class WmsMaterialCoilBo extends BaseEntity {
|
|||||||
*/
|
*/
|
||||||
private String chromePlateCoilNo;
|
private String chromePlateCoilNo;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 合同编号
|
||||||
|
*/
|
||||||
|
private String contractNo;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 是否按计划创建时间倒序排序(已绑定钢卷列表无planId时,按计划新旧排列)
|
* 是否按计划创建时间倒序排序(已绑定钢卷列表无planId时,按计划新旧排列)
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -215,4 +215,10 @@ public class WmsMaterialCoilAllExportVo {
|
|||||||
*/
|
*/
|
||||||
@ExcelProperty(value = "调拨类型")
|
@ExcelProperty(value = "调拨类型")
|
||||||
private String transferType;
|
private String transferType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 合同编号
|
||||||
|
*/
|
||||||
|
@ExcelProperty(value = "合同编号")
|
||||||
|
private String contractNo;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -233,4 +233,10 @@ public class WmsMaterialCoilExportVo {
|
|||||||
*/
|
*/
|
||||||
@ExcelProperty(value = "镀铬卷号")
|
@ExcelProperty(value = "镀铬卷号")
|
||||||
private String chromePlateCoilNo;
|
private String chromePlateCoilNo;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 合同编号
|
||||||
|
*/
|
||||||
|
@ExcelProperty(value = "合同编号")
|
||||||
|
private String contractNo;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -359,5 +359,10 @@ public class WmsMaterialCoilVo extends BaseEntity {
|
|||||||
* 镀铬卷号
|
* 镀铬卷号
|
||||||
*/
|
*/
|
||||||
private String chromePlateCoilNo;
|
private String chromePlateCoilNo;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 合同编号
|
||||||
|
*/
|
||||||
|
private String contractNo;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -26,12 +26,12 @@ public interface WmsCoilContractRelMapper extends BaseMapperPlus<WmsCoilContract
|
|||||||
List<WmsCoilContractRelVo> selectOrdersByCoilIds(@Param("coilIds") List<Long> coilIds);
|
List<WmsCoilContractRelVo> selectOrdersByCoilIds(@Param("coilIds") List<Long> coilIds);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 根据订单ID查询销售员(业务员)姓名
|
* 批量更新关联钢卷的业务员名称和合同编号(当订单变更时同步)
|
||||||
*/
|
*/
|
||||||
String selectSalesmanByOrderId(@Param("orderId") Long orderId);
|
int updateCoilSaleNameByOrderId(@Param("orderId") Long orderId, @Param("saleName") String saleName, @Param("contractCode") String contractCode);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 批量更新关联钢卷的业务员名称(当订单销售员变更时同步)
|
* 根据订单ID查询合同信息(业务员姓名 + 合同编号)
|
||||||
*/
|
*/
|
||||||
int updateCoilSaleNameByOrderId(@Param("orderId") Long orderId, @Param("saleName") String saleName);
|
java.util.Map<String, String> selectContractInfoByOrderId(@Param("orderId") Long orderId);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -88,18 +88,30 @@ public class WmsCoilContractRelServiceImpl implements IWmsCoilContractRelService
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 同步钢卷的业务员名称:根据合同ID查询销售员并更新到钢卷
|
* 同步钢卷的业务员名称和合同编号:根据合同ID查询并更新到钢卷
|
||||||
*/
|
*/
|
||||||
private void syncCoilSaleName(Long coilId, Long contractId) {
|
private void syncCoilSaleName(Long coilId, Long contractId) {
|
||||||
if (coilId == null || contractId == null) {
|
if (coilId == null || contractId == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
String saleName = baseMapper.selectSalesmanByOrderId(contractId);
|
java.util.Map<String, String> contractInfo = baseMapper.selectContractInfoByOrderId(contractId);
|
||||||
if (StringUtils.isNotBlank(saleName)) {
|
if (contractInfo != null) {
|
||||||
|
String saleName = contractInfo.get("salesman");
|
||||||
|
String contractCode = contractInfo.get("contractCode");
|
||||||
LambdaUpdateWrapper<WmsMaterialCoil> updateWrapper = Wrappers.lambdaUpdate();
|
LambdaUpdateWrapper<WmsMaterialCoil> updateWrapper = Wrappers.lambdaUpdate();
|
||||||
updateWrapper.set(WmsMaterialCoil::getSaleName, saleName)
|
boolean needUpdate = false;
|
||||||
.eq(WmsMaterialCoil::getCoilId, coilId);
|
if (StringUtils.isNotBlank(saleName)) {
|
||||||
coilMapper.update(null, updateWrapper);
|
updateWrapper.set(WmsMaterialCoil::getSaleName, saleName);
|
||||||
|
needUpdate = true;
|
||||||
|
}
|
||||||
|
if (StringUtils.isNotBlank(contractCode)) {
|
||||||
|
updateWrapper.set(WmsMaterialCoil::getContractNo, contractCode);
|
||||||
|
needUpdate = true;
|
||||||
|
}
|
||||||
|
if (needUpdate) {
|
||||||
|
updateWrapper.eq(WmsMaterialCoil::getCoilId, coilId);
|
||||||
|
coilMapper.update(null, updateWrapper);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -901,6 +901,8 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
|
|||||||
qw.eq(bo.getIsRelatedToOrder() != null, "mc.is_related_to_order", bo.getIsRelatedToOrder());
|
qw.eq(bo.getIsRelatedToOrder() != null, "mc.is_related_to_order", bo.getIsRelatedToOrder());
|
||||||
// 加上remark的模糊匹配
|
// 加上remark的模糊匹配
|
||||||
qw.like(StringUtils.isNotBlank(bo.getRemark()), "mc.remark", bo.getRemark());
|
qw.like(StringUtils.isNotBlank(bo.getRemark()), "mc.remark", bo.getRemark());
|
||||||
|
// 合同号的模糊查询
|
||||||
|
qw.like(StringUtils.isNotBlank(bo.getContractNo()), "mc.contract_no", bo.getContractNo());
|
||||||
//逻辑删除
|
//逻辑删除
|
||||||
qw.eq("mc.del_flag", 0);
|
qw.eq("mc.del_flag", 0);
|
||||||
// 统一处理 warehouseId 与 warehouseIds:
|
// 统一处理 warehouseId 与 warehouseIds:
|
||||||
@@ -3079,13 +3081,20 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 根据合同ID从订单中获取业务员姓名并设置到钢卷实体
|
* 根据合同ID从订单中获取业务员姓名和合同编号并设置到钢卷实体
|
||||||
*/
|
*/
|
||||||
private void setSaleNameFromContract(WmsMaterialCoil coil, Long contractId) {
|
private void setSaleNameFromContract(WmsMaterialCoil coil, Long contractId) {
|
||||||
if (contractId != null) {
|
if (contractId != null) {
|
||||||
String saleName = coilContractRelMapper.selectSalesmanByOrderId(contractId);
|
java.util.Map<String, String> contractInfo = coilContractRelMapper.selectContractInfoByOrderId(contractId);
|
||||||
if (StringUtils.isNotBlank(saleName)) {
|
if (contractInfo != null) {
|
||||||
coil.setSaleName(saleName);
|
String saleName = contractInfo.get("salesman");
|
||||||
|
String contractCode = contractInfo.get("contractCode");
|
||||||
|
if (StringUtils.isNotBlank(saleName)) {
|
||||||
|
coil.setSaleName(saleName);
|
||||||
|
}
|
||||||
|
if (StringUtils.isNotBlank(contractCode)) {
|
||||||
|
coil.setContractNo(contractCode);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -137,20 +137,21 @@
|
|||||||
AND rel.del_flag = 0
|
AND rel.del_flag = 0
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<!-- 根据订单ID查询销售员(业务员)姓名 -->
|
<!-- 批量更新关联钢卷的业务员名称和合同编号(当订单变更时同步) -->
|
||||||
<select id="selectSalesmanByOrderId" resultType="String">
|
<update id="updateCoilSaleNameByOrderId">
|
||||||
SELECT co.salesman
|
UPDATE wms_material_coil mc
|
||||||
|
INNER JOIN wms_coil_contract_rel rel ON mc.coil_id = rel.coil_id AND rel.del_flag = 0
|
||||||
|
SET mc.sale_name = #{saleName},
|
||||||
|
mc.contract_no = #{contractCode}
|
||||||
|
WHERE rel.contract_id = #{orderId} AND mc.del_flag = 0
|
||||||
|
</update>
|
||||||
|
|
||||||
|
<!-- 根据订单ID查询合同信息(业务员 + 合同编号) -->
|
||||||
|
<select id="selectContractInfoByOrderId" resultType="java.util.Map">
|
||||||
|
SELECT co.salesman, co.contract_code AS contractCode
|
||||||
FROM crm_order co
|
FROM crm_order co
|
||||||
WHERE co.order_id = #{orderId} AND co.del_flag = 0
|
WHERE co.order_id = #{orderId} AND co.del_flag = 0
|
||||||
LIMIT 1
|
LIMIT 1
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<!-- 批量更新关联钢卷的业务员名称(当订单销售员变更时同步) -->
|
|
||||||
<update id="updateCoilSaleNameByOrderId">
|
|
||||||
UPDATE wms_material_coil mc
|
|
||||||
INNER JOIN wms_coil_contract_rel rel ON mc.coil_id = rel.coil_id AND rel.del_flag = 0
|
|
||||||
SET mc.sale_name = #{saleName}
|
|
||||||
WHERE rel.contract_id = #{orderId} AND mc.del_flag = 0
|
|
||||||
</update>
|
|
||||||
|
|
||||||
</mapper>
|
</mapper>
|
||||||
@@ -46,6 +46,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||||||
<result property="scheduleThickness" column="schedule_thickness"/>
|
<result property="scheduleThickness" column="schedule_thickness"/>
|
||||||
<result property="theoreticalLength" column="theoretical_length"/>
|
<result property="theoreticalLength" column="theoretical_length"/>
|
||||||
<result property="chromePlateCoilNo" column="chrome_plate_coil_no"/>
|
<result property="chromePlateCoilNo" column="chrome_plate_coil_no"/>
|
||||||
|
<result property="contractNo" column="contract_no"/>
|
||||||
|
|
||||||
</resultMap>
|
</resultMap>
|
||||||
|
|
||||||
@@ -136,6 +137,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||||||
mc.theoretical_length,
|
mc.theoretical_length,
|
||||||
mc.chrome_plate_coil_no,
|
mc.chrome_plate_coil_no,
|
||||||
mc.sale_name AS saleName,
|
mc.sale_name AS saleName,
|
||||||
|
mc.contract_no AS contractNo,
|
||||||
w.warehouse_name AS warehouseName,
|
w.warehouse_name AS warehouseName,
|
||||||
nw.warehouse_name AS nextWarehouseName,
|
nw.warehouse_name AS nextWarehouseName,
|
||||||
aw.actual_warehouse_name AS actualWarehouseName,
|
aw.actual_warehouse_name AS actualWarehouseName,
|
||||||
@@ -505,6 +507,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||||||
mc.packing_status AS packingStatus,
|
mc.packing_status AS packingStatus,
|
||||||
-- 销售
|
-- 销售
|
||||||
mc.sale_name AS saleName,
|
mc.sale_name AS saleName,
|
||||||
|
-- 合同
|
||||||
|
mc.contract_no AS contractNo,
|
||||||
-- 调拨类型
|
-- 调拨类型
|
||||||
mc.transfer_type AS transferType,
|
mc.transfer_type AS transferType,
|
||||||
-- 理论厚度
|
-- 理论厚度
|
||||||
@@ -601,6 +605,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||||||
mc.quality_status AS qualityStatus,
|
mc.quality_status AS qualityStatus,
|
||||||
mc.packing_status AS packingStatus,
|
mc.packing_status AS packingStatus,
|
||||||
mc.sale_name AS saleName,
|
mc.sale_name AS saleName,
|
||||||
|
mc.contract_no AS contractNo,
|
||||||
mc.transfer_type AS transferType,
|
mc.transfer_type AS transferType,
|
||||||
mc.theoretical_thickness AS theoreticalThickness,
|
mc.theoretical_thickness AS theoreticalThickness,
|
||||||
mc.schedule_thickness AS scheduleThickness,
|
mc.schedule_thickness AS scheduleThickness,
|
||||||
|
|||||||
@@ -4220,6 +4220,7 @@ CREATE TABLE `wms_material_coil` (
|
|||||||
`reserved_width` decimal(10, 3) NULL DEFAULT NULL COMMENT '预留宽度(单位:毫米)',
|
`reserved_width` decimal(10, 3) NULL DEFAULT NULL COMMENT '预留宽度(单位:毫米)',
|
||||||
`coil_surface_treatment` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '钢卷表面处理',
|
`coil_surface_treatment` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '钢卷表面处理',
|
||||||
`transfer_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '调拨类型',
|
`transfer_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '调拨类型',
|
||||||
|
`contract_no` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '合同编号',
|
||||||
PRIMARY KEY (`coil_id`) USING BTREE,
|
PRIMARY KEY (`coil_id`) USING BTREE,
|
||||||
INDEX `fk_coil_next_warehouse`(`next_warehouse_id` ASC) USING BTREE,
|
INDEX `fk_coil_next_warehouse`(`next_warehouse_id` ASC) USING BTREE,
|
||||||
INDEX `fk_coil_qrcode`(`qrcode_record_id` ASC) USING BTREE,
|
INDEX `fk_coil_qrcode`(`qrcode_record_id` ASC) USING BTREE,
|
||||||
|
|||||||
Reference in New Issue
Block a user