wlzboy
2025-11-29 364adbc9a93a396b74e154f910c2a0a72bfb1a0f
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/DepartmentSyncServiceImpl.java
@@ -1,5 +1,6 @@
package com.ruoyi.system.service.impl;
import java.math.BigDecimal;
import java.util.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -52,7 +53,7 @@
     */
    @Override
    @Transactional
    public AjaxResult syncBranchDepartments(List<DepartmentSyncDTO> branchDepts,List<OrderClassDTO> serviceOrderList,List<OrderClassDTO> dispatchOrderList)
    public AjaxResult syncBranchDepartments(List<DepartmentSyncDTO> branchDepts,List<OrderClassDTO> serviceOrderList,List<OrderClassDTO> dispatchOrderList,List<Map<String, Object>> addressList)
    {
        try
        {
@@ -106,7 +107,7 @@
                        branchMap.put(branchName, branchDeptId);
                        
                        // 检查并更新编码
                        syncOrderClassCodes(existingBranch, parts[0].trim(), serviceOrderList, dispatchOrderList);
                        syncOrderClassCodes(existingBranch, parts[0].trim(), serviceOrderList, dispatchOrderList,addressList);
//                        existingBranch.setDepartmentId(dto.getDepartmentId());
                        sysDeptMapper.updateDept(existingBranch);
                        log.info("更新分公司编码: {}, 服务单编码: {}, 调度单编码: {}", 
@@ -125,7 +126,7 @@
//                        newBranch.setDepartmentId(dto.getDepartmentId());
                        // 自动匹配并设置服务单和调度单编码
                        syncOrderClassCodes(newBranch, parts[0].trim(), serviceOrderList, dispatchOrderList);
                        syncOrderClassCodes(newBranch, parts[0].trim(), serviceOrderList, dispatchOrderList,addressList);
                        sysDeptMapper.insertDept(newBranch);
                        branchDeptId = newBranch.getDeptId();
@@ -204,6 +205,24 @@
            return AjaxResult.error("同步失败: " + e.getMessage());
        }
    }
    /**
     * 同步分公司的地址数据
     * @param departAddress
     */
    public void syncDeptAddress(List<Map<String,Object>> departAddress){
        List<SysDept> depts =sysDeptMapper.selectDeptListByParentId(100L);
        for(SysDept dept:depts){
            Map<String,Object> addressInfo = getDeptAddressInfo(departAddress,dept.getServiceOrderClass());
            if(addressInfo != null){
                dept.setDepartureAddress(getAddress(addressInfo));
                dept.setDepartureLongitude(getLongitude(addressInfo));
                dept.setDepartureLatitude(getLatitude(addressInfo));
            }
            sysDeptMapper.updateDept(dept);
        }
    }
    
    /**
     * 同步转运部和子部门数据(使用外部传入的数据源)
@@ -218,7 +237,7 @@
     */
    @Override
    @Transactional
    public AjaxResult syncTransportDepartments(List<DepartmentSyncDTO> transportDepts)
    public AjaxResult syncTransportDepartments(List<DepartmentSyncDTO> transportDepts, List<Map<String, Object>> addressList)
    {
        try
        {
@@ -347,6 +366,34 @@
        }
    }
    private Map<String,Object> getDeptAddressInfo(List<Map<String,Object>> departAddress,String ServiceBranch){
        return departAddress.stream()
            .filter(map -> map.get("ServiceBranch").equals(ServiceBranch))
            .findFirst()
            .orElse(null);
    }
    private String getAddress(Map<String, Object> addressInfo){
        if(addressInfo == null){
            return null;
        }
        return addressInfo.get("ServiceAddress").toString();
    }
    private BigDecimal getLongitude(Map<String, Object> addressInfo){
        if(addressInfo == null){
            return null;
        }
        return new BigDecimal(addressInfo.get("ServiceAddress_lng").toString());
    }
    private BigDecimal getLatitude(Map<String, Object> addressInfo){
        if(addressInfo == null){
            return null;
        }
        return new BigDecimal(addressInfo.get("ServiceAddress_lat").toString());
    }
    /**
     * 同步订单编码(服务单和调度单编码)
     * 
@@ -359,7 +406,7 @@
     */
    private void syncOrderClassCodes(SysDept dept, String cityName, 
                                    List<OrderClassDTO> serviceOrderList,
                                    List<OrderClassDTO> dispatchOrderList)
                                    List<OrderClassDTO> dispatchOrderList, List<Map<String, Object>> addressList)
    {
        if (serviceOrderList == null || dispatchOrderList == null)
        {
@@ -373,6 +420,19 @@
            String serviceOrderClass = matchCityNameToCode(cityName, serviceOrderList);
            if (serviceOrderClass != null)
            {
                Map<String, Object> addressInfo = this.getDeptAddressInfo(addressList, serviceOrderClass);
                String address=this.getAddress(addressInfo);
                if(address!=null){
                    dept.setDepartureAddress(address);
                }
                BigDecimal lon = this.getLongitude(addressInfo);
                if(lon!=null){
                    dept.setDepartureLongitude(lon);
                }
                BigDecimal lat = this.getLatitude(addressInfo);
                if(lat!=null){
                    dept.setDepartureLatitude(lat);
                }
                dept.setServiceOrderClass(serviceOrderClass);
                log.info("匹配到服务单编码 - 城市: {}, 编码: {}", cityName, serviceOrderClass);
            }