| | |
| | | package com.ruoyi.system.service.impl; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.util.*; |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | |
| | | */ |
| | | @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 |
| | | { |
| | |
| | | if (parts.length != 2) |
| | | { |
| | | log.warn("部门名称格式不正确,跳过: {}", fullName); |
| | | continue; |
| | | parts= fullName.split("-"); |
| | | if(parts.length != 2) { |
| | | continue; |
| | | } |
| | | } |
| | | String part=""; |
| | | //只要发现有(新)或(新)就在branchName中加个新 字 |
| | | if(fullName.contains("(新)") || fullName.contains("(新)")) { |
| | | part="(新)"; |
| | | } |
| | | |
| | | String branchName = parts[0].trim() + "分公司"; // 湛江 -> 湛江分公司 |
| | | String deptName = parts[1].trim(); // 护士 |
| | | String cityName=parts[0].trim(); |
| | | String namePart=parts[0].trim(); |
| | | if(namePart.contains("(新)") || namePart.contains("(新)")) { |
| | | branchName=namePart+"分公司"; |
| | | cityName=namePart; |
| | | deptName=parts[1].trim(); |
| | | } |
| | | else{ |
| | | branchName=namePart+part+"分公司"; |
| | | cityName=namePart+ part; |
| | | deptName=parts[1].trim(); |
| | | } |
| | | |
| | | |
| | | // 获取或创建分公司 |
| | | Long branchDeptId = branchMap.get(branchName); |
| | |
| | | branchMap.put(branchName, branchDeptId); |
| | | |
| | | // 检查并更新编码 |
| | | syncOrderClassCodes(existingBranch, parts[0].trim(), serviceOrderList, dispatchOrderList); |
| | | syncOrderClassCodes(existingBranch, cityName, serviceOrderList, dispatchOrderList,addressList); |
| | | // existingBranch.setDepartmentId(dto.getDepartmentId()); |
| | | sysDeptMapper.updateDept(existingBranch); |
| | | log.info("更新分公司编码: {}, 服务单编码: {}, 调度单编码: {}", |
| | |
| | | // newBranch.setDepartmentId(dto.getDepartmentId()); |
| | | |
| | | // 自动匹配并设置服务单和调度单编码 |
| | | syncOrderClassCodes(newBranch, parts[0].trim(), serviceOrderList, dispatchOrderList); |
| | | syncOrderClassCodes(newBranch, cityName, serviceOrderList, dispatchOrderList,addressList); |
| | | |
| | | sysDeptMapper.insertDept(newBranch); |
| | | branchDeptId = newBranch.getDeptId(); |
| | |
| | | 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); |
| | | } |
| | | |
| | | } |
| | | |
| | | /** |
| | | * 同步转运部和子部门数据(使用外部传入的数据源) |
| | |
| | | */ |
| | | @Override |
| | | @Transactional |
| | | public AjaxResult syncTransportDepartments(List<DepartmentSyncDTO> transportDepts) |
| | | public AjaxResult syncTransportDepartments(List<DepartmentSyncDTO> transportDepts, List<Map<String, Object>> addressList) |
| | | { |
| | | try |
| | | { |
| | |
| | | } |
| | | } |
| | | |
| | | 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()); |
| | | } |
| | | |
| | | /** |
| | | * 同步订单编码(服务单和调度单编码) |
| | | * |
| | |
| | | */ |
| | | 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) |
| | | { |
| | |
| | | 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); |
| | | } |
| | |
| | | // 遍历编码列表,查找包含城市名称的项 |
| | | for (OrderClassDTO dto : orderClassList) |
| | | { |
| | | //有些加了新 TODO |
| | | if (dto.getVtext() != null && dto.getVtext().contains(cityName)) |
| | | { |
| | | log.debug("城市名称匹配成功 - 城市: {}, vtext: {}, vOrder2: {}", |