feat(order): 订单销售员变更时同步更新关联钢卷业务员

- 在订单更新逻辑中增加销售员变更检测功能
- 新增数据库方法批量更新关联钢卷的业务员名称
- 实现订单销售员变更时自动同步到相关钢卷记录
- 添加钢卷与合同关联时的业务员同步机制
- 增加修改关联关系时的业务员信息同步处理
- 完善数据一致性保障机制
This commit is contained in:
2026-06-21 10:40:07 +08:00
parent 6910278ba7
commit b4fba79838
4 changed files with 62 additions and 2 deletions

View File

@@ -285,9 +285,27 @@ public class CrmOrderServiceImpl implements ICrmOrderService {
*/
@Override
public Boolean updateByBo(CrmOrderBo bo) {
// 查询旧订单获取原销售员,用于判断是否需要同步钢卷
CrmOrder oldOrder = null;
String oldSalesman = null;
if (bo.getOrderId() != null) {
oldOrder = baseMapper.selectById(bo.getOrderId());
oldSalesman = oldOrder != null ? oldOrder.getSalesman() : null;
}
CrmOrder update = BeanUtil.toBean(bo, CrmOrder.class);
validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0;
boolean result = baseMapper.updateById(update) > 0;
// 如果销售员变更,同步更新所有关联钢卷的业务员名称
if (result && oldOrder != null) {
String newSalesman = update.getSalesman();
if (!Objects.equals(oldSalesman, newSalesman) && StringUtils.isNotBlank(newSalesman)) {
coilContractRelMapper.updateCoilSaleNameByOrderId(bo.getOrderId(), newSalesman);
}
}
return result;
}
/**

View File

@@ -29,4 +29,9 @@ public interface WmsCoilContractRelMapper extends BaseMapperPlus<WmsCoilContract
* 根据订单ID查询销售员业务员姓名
*/
String selectSalesmanByOrderId(@Param("orderId") Long orderId);
/**
* 批量更新关联钢卷的业务员名称(当订单销售员变更时同步)
*/
int updateCoilSaleNameByOrderId(@Param("orderId") Long orderId, @Param("saleName") String saleName);
}

View File

@@ -5,13 +5,17 @@ import com.klp.common.core.page.TableDataInfo;
import com.klp.common.core.domain.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.klp.common.utils.StringUtils;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import com.klp.domain.bo.WmsCoilContractRelBo;
import com.klp.domain.vo.WmsCoilContractRelVo;
import com.klp.domain.WmsCoilContractRel;
import com.klp.domain.WmsMaterialCoil;
import com.klp.mapper.WmsCoilContractRelMapper;
import com.klp.mapper.WmsMaterialCoilMapper;
import com.klp.service.IWmsCoilContractRelService;
import java.util.List;
@@ -30,6 +34,8 @@ public class WmsCoilContractRelServiceImpl implements IWmsCoilContractRelService
private final WmsCoilContractRelMapper baseMapper;
private final WmsMaterialCoilMapper coilMapper;
/**
* 查询钢卷与合同关联关系
*/
@@ -75,10 +81,28 @@ public class WmsCoilContractRelServiceImpl implements IWmsCoilContractRelService
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setRelId(add.getRelId());
// 同步钢卷业务员根据合同ID查询销售员并更新到关联钢卷
syncCoilSaleName(bo.getCoilId(), bo.getContractId());
}
return flag;
}
/**
* 同步钢卷的业务员名称根据合同ID查询销售员并更新到钢卷
*/
private void syncCoilSaleName(Long coilId, Long contractId) {
if (coilId == null || contractId == null) {
return;
}
String saleName = baseMapper.selectSalesmanByOrderId(contractId);
if (StringUtils.isNotBlank(saleName)) {
LambdaUpdateWrapper<WmsMaterialCoil> updateWrapper = Wrappers.lambdaUpdate();
updateWrapper.set(WmsMaterialCoil::getSaleName, saleName)
.eq(WmsMaterialCoil::getCoilId, coilId);
coilMapper.update(null, updateWrapper);
}
}
/**
* 修改钢卷与合同关联关系
*/
@@ -86,7 +110,12 @@ public class WmsCoilContractRelServiceImpl implements IWmsCoilContractRelService
public Boolean updateByBo(WmsCoilContractRelBo bo) {
WmsCoilContractRel update = BeanUtil.toBean(bo, WmsCoilContractRel.class);
validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0;
boolean result = baseMapper.updateById(update) > 0;
if (result) {
// 合同变更时同步钢卷业务员
syncCoilSaleName(bo.getCoilId(), bo.getContractId());
}
return result;
}
/**

View File

@@ -145,4 +145,12 @@
LIMIT 1
</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>