From fe33646ee6e2d1e57f2b51812e94983a0e9efb04 Mon Sep 17 00:00:00 2001
From: wlzboy <66905212@qq.com>
Date: 星期日, 14 十二月 2025 16:51:28 +0800
Subject: [PATCH] feat: 修复统计
---
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/DepartmentSyncServiceImpl.java | 200 ++++++++++++++++++++++++++++++++++++++++++++++++--
1 files changed, 192 insertions(+), 8 deletions(-)
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/DepartmentSyncServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/DepartmentSyncServiceImpl.java
index 30d4f18..5e1cf76 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/DepartmentSyncServiceImpl.java
+++ b/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;
@@ -10,9 +11,11 @@
import com.ruoyi.common.core.domain.entity.SysDept;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.system.domain.DepartmentSyncDTO;
+import com.ruoyi.system.domain.OrderClassDTO;
import com.ruoyi.system.mapper.SysDeptMapper;
import com.ruoyi.system.service.IDepartmentSyncService;
import com.ruoyi.system.service.IDepartmentSyncDataService;
+import com.ruoyi.system.service.IOrderClassDataService;
/**
* 閮ㄩ棬鍚屾Service涓氬姟灞傚鐞�
@@ -30,10 +33,11 @@
{
private static final Logger log = LoggerFactory.getLogger(DepartmentSyncServiceImpl.class);
-
-
@Autowired
private SysDeptMapper sysDeptMapper;
+
+ @Autowired
+ private IOrderClassDataService orderClassDataService;
@@ -49,7 +53,7 @@
*/
@Override
@Transactional
- public AjaxResult syncBranchDepartments(List<DepartmentSyncDTO> branchDepts)
+ public AjaxResult syncBranchDepartments(List<DepartmentSyncDTO> branchDepts,List<OrderClassDTO> serviceOrderList,List<OrderClassDTO> dispatchOrderList,List<Map<String, Object>> addressList)
{
try
{
@@ -59,6 +63,9 @@
}
log.info("寮�濮嬪悓姝� {} 鏉″垎鍏徃鏁版嵁鍒� MySQL 鏁版嵁搴�...", branchDepts.size());
+
+ // 涓�娆℃�т粠SQL Server鏌ヨ鎵�鏈夌紪鐮佹暟鎹紝閬垮厤鍦ㄥ惊鐜腑閲嶅鏌ヨ
+
// 浣跨敤Map鏉ヨ窡韪凡鍒涘缓鐨勫垎鍏徃锛宬ey涓哄垎鍏徃鍚嶇О锛寁alue涓洪儴闂↖D
Map<String, Long> branchMap = new HashMap<>();
@@ -81,11 +88,32 @@
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);
@@ -95,10 +123,16 @@
SysDept existingBranch = sysDeptMapper.checkDeptNameUnique(branchName, 100L);
if (existingBranch != null)
{
- // 鍒嗗叕鍙稿凡瀛樺湪锛屾洿鏂癲epartment_id
+ // 鍒嗗叕鍙稿凡瀛樺湪锛屾洿鏂扮紪鐮�
branchDeptId = existingBranch.getDeptId();
branchMap.put(branchName, branchDeptId);
- log.info("鍒嗗叕鍙稿凡瀛樺湪: {}, ID: {}", branchName, branchDeptId);
+
+ // 妫�鏌ュ苟鏇存柊缂栫爜
+ syncOrderClassCodes(existingBranch, cityName, serviceOrderList, dispatchOrderList,addressList);
+// existingBranch.setDepartmentId(dto.getDepartmentId());
+ sysDeptMapper.updateDept(existingBranch);
+ log.info("鏇存柊鍒嗗叕鍙哥紪鐮�: {}, 鏈嶅姟鍗曠紪鐮�: {}, 璋冨害鍗曠紪鐮�: {}",
+ branchName, existingBranch.getServiceOrderClass(), existingBranch.getDispatchOrderClass());
}
else
{
@@ -110,12 +144,17 @@
newBranch.setOrderNum(branchMap.size() + 1); // 鎺掑簭
newBranch.setStatus("0"); // 姝e父鐘舵��
newBranch.setCreateBy("sync");
+// newBranch.setDepartmentId(dto.getDepartmentId());
+
+ // 鑷姩鍖归厤骞惰缃湇鍔″崟鍜岃皟搴﹀崟缂栫爜
+ syncOrderClassCodes(newBranch, cityName, serviceOrderList, dispatchOrderList,addressList);
sysDeptMapper.insertDept(newBranch);
branchDeptId = newBranch.getDeptId();
branchMap.put(branchName, branchDeptId);
createdBranch++;
- log.info("鍒涘缓鏂板垎鍏徃: {}, ID: {}", branchName, branchDeptId);
+ log.info("鍒涘缓鏂板垎鍏徃: {}, ID: {}, 鏈嶅姟鍗曠紪鐮�: {}, 璋冨害鍗曠紪鐮�: {}",
+ branchName, branchDeptId, newBranch.getServiceOrderClass(), newBranch.getDispatchOrderClass());
}
}
@@ -129,6 +168,7 @@
// 閮ㄩ棬宸插瓨鍦紝鏇存柊淇℃伅
existingDept.setDeptName(deptName);
existingDept.setUpdateBy("sync");
+// existingDept.setDepartmentId(dto.getDepartmentId());
sysDeptMapper.updateDept(existingDept);
updatedDept++;
log.info("鏇存柊閮ㄩ棬: {} -> {}", branchName, deptName);
@@ -186,6 +226,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);
+ }
+
+ }
/**
* 鍚屾杞繍閮ㄥ拰瀛愰儴闂ㄦ暟鎹紙浣跨敤澶栭儴浼犲叆鐨勬暟鎹簮锛�
@@ -200,7 +258,7 @@
*/
@Override
@Transactional
- public AjaxResult syncTransportDepartments(List<DepartmentSyncDTO> transportDepts)
+ public AjaxResult syncTransportDepartments(List<DepartmentSyncDTO> transportDepts, List<Map<String, Object>> addressList)
{
try
{
@@ -270,6 +328,7 @@
// 閮ㄩ棬宸插瓨鍦紝鏇存柊淇℃伅
existingDept.setDeptName(deptName);
existingDept.setUpdateBy("sync");
+ existingDept.setDepartmentId(dto.getDepartmentId());
sysDeptMapper.updateDept(existingDept);
updatedDept++;
log.info("鏇存柊杞繍閮ㄥ瓙閮ㄩ棬: {}", deptName);
@@ -327,4 +386,129 @@
return AjaxResult.error("鍚屾澶辫触: " + e.getMessage());
}
}
+
+ 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());
+ }
+
+ /**
+ * 鍚屾璁㈠崟缂栫爜锛堟湇鍔″崟鍜岃皟搴﹀崟缂栫爜锛�
+ *
+ * 鏍规嵁鍒嗗叕鍙稿悕绉颁腑鐨勫湴鍚嶏紝鑷姩鍖归厤SQL Server涓殑缂栫爜骞舵洿鏂板埌閮ㄩ棬瀵硅薄
+ *
+ * @param dept 閮ㄩ棬瀵硅薄锛堝垎鍏徃锛�
+ * @param cityName 鍩庡競鍚嶇О锛堝锛氫腑灞便�佸箍宸炪�佹箾姹燂級
+ * @param serviceOrderList 鏈嶅姟鍗曠紪鐮佸垪琛紙浠嶴QL Server鏌ヨ锛�
+ * @param dispatchOrderList 璋冨害鍗曠紪鐮佸垪琛紙浠嶴QL Server鏌ヨ锛�
+ */
+ private void syncOrderClassCodes(SysDept dept, String cityName,
+ List<OrderClassDTO> serviceOrderList,
+ List<OrderClassDTO> dispatchOrderList, List<Map<String, Object>> addressList)
+ {
+ if (serviceOrderList == null || dispatchOrderList == null)
+ {
+ log.warn("缂栫爜鍒楄〃涓虹┖锛岃烦杩囩紪鐮佸悓姝� - 鍩庡競: {}", cityName);
+ return;
+ }
+
+ try
+ {
+ // 鍖归厤鏈嶅姟鍗曠紪鐮�
+ 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);
+ }
+ else
+ {
+ log.warn("鏈壘鍒板尮閰嶇殑鏈嶅姟鍗曠紪鐮� - 鍩庡競: {}", cityName);
+ }
+
+ // 鍖归厤璋冨害鍗曠紪鐮�
+ String dispatchOrderClass = matchCityNameToCode(cityName, dispatchOrderList);
+ if (dispatchOrderClass != null)
+ {
+ dept.setDispatchOrderClass(dispatchOrderClass);
+ log.info("鍖归厤鍒拌皟搴﹀崟缂栫爜 - 鍩庡競: {}, 缂栫爜: {}", cityName, dispatchOrderClass);
+ }
+ else
+ {
+ log.warn("鏈壘鍒板尮閰嶇殑璋冨害鍗曠紪鐮� - 鍩庡競: {}", cityName);
+ }
+ }
+ catch (Exception e)
+ {
+ log.error("鍚屾璁㈠崟缂栫爜澶辫触 - 鍩庡競: {}", cityName, e);
+ }
+ }
+
+ /**
+ * 鏍规嵁鍩庡競鍚嶇О鍖归厤缂栫爜
+ *
+ * 鍖归厤瑙勫垯锛氬鏋渧text涓寘鍚煄甯傚悕绉帮紝鍒欒繑鍥炲搴旂殑vOrder2缂栫爜
+ * 渚嬪锛歝ityName="涓北", vtext="涓北鏈嶅姟鍗�", vOrder2="JA" -> 杩斿洖"JA"
+ *
+ * @param cityName 鍩庡競鍚嶇О锛堝锛氫腑灞便�佸箍宸烇級
+ * @param orderClassList 缂栫爜鍒楄〃
+ * @return 鍖归厤鐨勭紪鐮佸�硷紙vOrder2锛夛紝鏈尮閰嶈繑鍥瀗ull
+ */
+ private String matchCityNameToCode(String cityName, List<OrderClassDTO> orderClassList)
+ {
+ if (StringUtils.isEmpty(cityName) || orderClassList == null || orderClassList.isEmpty())
+ {
+ return null;
+ }
+
+ // 閬嶅巻缂栫爜鍒楄〃锛屾煡鎵惧寘鍚煄甯傚悕绉扮殑椤�
+ for (OrderClassDTO dto : orderClassList)
+ {
+ //鏈変簺鍔犱簡鏂� TODO
+ if (dto.getVtext() != null && dto.getVtext().contains(cityName))
+ {
+ log.debug("鍩庡競鍚嶇О鍖归厤鎴愬姛 - 鍩庡競: {}, vtext: {}, vOrder2: {}",
+ cityName, dto.getVtext(), dto.getVOrder2());
+ return dto.getVOrder2();
+ }
+ }
+
+ return null;
+ }
}
--
Gitblit v1.9.1