增加部门树形+接口
This commit is contained in:
@@ -21,7 +21,8 @@ public interface ILbDepartmentUserService extends IService<LbDepartmentUser> {
|
||||
String parentId,
|
||||
String name,
|
||||
String phone,
|
||||
String industry);
|
||||
String industry,
|
||||
Integer isActive);
|
||||
|
||||
Map<String, Object> bindParentUser(String parentUserId,
|
||||
String parentUserName,
|
||||
@@ -39,5 +40,5 @@ public interface ILbDepartmentUserService extends IService<LbDepartmentUser> {
|
||||
/**
|
||||
* 按租户查询部门用户并构建父子树(parent_id 对应 lb_user.pid)。
|
||||
*/
|
||||
Map<String, Object> getDepartmentUserTree(String tenantId);
|
||||
Map<String, Object> getDepartmentUserTree(String tenantId, Integer isActive, LocalDate joinDate);
|
||||
}
|
||||
|
||||
@@ -16,6 +16,7 @@ import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Comparator;
|
||||
import java.util.HashSet;
|
||||
@@ -67,6 +68,9 @@ public class LbDepartmentUserServiceImpl extends ServiceImpl<LbDepartmentUserMap
|
||||
LocalDateTime now = LocalDateTime.now();
|
||||
entity.setCreateTime(now);
|
||||
entity.setUpdateTime(now);
|
||||
if (entity.getIsActive() == null) {
|
||||
entity.setIsActive(1);
|
||||
}
|
||||
|
||||
boolean ok = this.save(entity);
|
||||
result.put("success", ok);
|
||||
@@ -129,7 +133,8 @@ public class LbDepartmentUserServiceImpl extends ServiceImpl<LbDepartmentUserMap
|
||||
String parentId,
|
||||
String name,
|
||||
String phone,
|
||||
String industry) {
|
||||
String industry,
|
||||
Integer isActive) {
|
||||
Map<String, Object> result = new HashMap<>();
|
||||
try {
|
||||
if (current == null || current < 1) {
|
||||
@@ -158,6 +163,9 @@ public class LbDepartmentUserServiceImpl extends ServiceImpl<LbDepartmentUserMap
|
||||
if (industry != null && !industry.trim().isEmpty()) {
|
||||
queryWrapper.like(LbDepartmentUser::getIndustry, industry.trim());
|
||||
}
|
||||
if (isActive != null) {
|
||||
queryWrapper.eq(LbDepartmentUser::getIsActive, isActive);
|
||||
}
|
||||
queryWrapper.orderByDesc(LbDepartmentUser::getUpdateTime)
|
||||
.orderByDesc(LbDepartmentUser::getCreateTime);
|
||||
|
||||
@@ -303,8 +311,10 @@ public class LbDepartmentUserServiceImpl extends ServiceImpl<LbDepartmentUserMap
|
||||
continue;
|
||||
}
|
||||
candidateNicknameSet.add(nickname);
|
||||
// tradeList 已按更新时间倒序,首次写入即最新数据
|
||||
latestTradeByNickname.putIfAbsent(nickname, trade);
|
||||
LbDailyUserTrade prev = latestTradeByNickname.get(nickname);
|
||||
if (prev == null || isTradeReportDateNewer(trade, prev)) {
|
||||
latestTradeByNickname.put(nickname, trade);
|
||||
}
|
||||
}
|
||||
|
||||
Map<String, LbPurchaseApply> phoneMap = buildPurchaseApplyPhoneMap(candidateNicknameSet);
|
||||
@@ -317,6 +327,7 @@ public class LbDepartmentUserServiceImpl extends ServiceImpl<LbDepartmentUserMap
|
||||
entity = new LbDepartmentUser();
|
||||
entity.setId(UUID.randomUUID().toString());
|
||||
entity.setCreateTime(now);
|
||||
entity.setIsActive(1);
|
||||
isInsert = true;
|
||||
}
|
||||
entity.setTenantId(trade.getTenantId());
|
||||
@@ -331,6 +342,7 @@ public class LbDepartmentUserServiceImpl extends ServiceImpl<LbDepartmentUserMap
|
||||
entity.setPhone(phone.isEmpty() ? null : phone);
|
||||
entity.setJoinDate(purchaseApply.getApplyDate());
|
||||
}
|
||||
applyLatestTradeFields(entity, trade);
|
||||
entity.setUpdateTime(now);
|
||||
if (isInsert) {
|
||||
toInsert.add(entity);
|
||||
@@ -445,6 +457,33 @@ public class LbDepartmentUserServiceImpl extends ServiceImpl<LbDepartmentUserMap
|
||||
}
|
||||
}
|
||||
|
||||
Set<String> tradeActiveUserIds = new HashSet<>();
|
||||
Map<String, LbDailyUserTrade> latestTradeByUserId = new HashMap<>();
|
||||
List<LbDailyUserTrade> tradeUserRows = lbDailyUserTradeMapper.selectList(
|
||||
new LambdaQueryWrapper<LbDailyUserTrade>()
|
||||
.eq(LbDailyUserTrade::getTenantId, tenantIdTrim)
|
||||
.isNotNull(LbDailyUserTrade::getUserId)
|
||||
.select(LbDailyUserTrade::getUserId,
|
||||
LbDailyUserTrade::getReportDate,
|
||||
LbDailyUserTrade::getDailyBuyAmt));
|
||||
if (tradeUserRows != null) {
|
||||
for (LbDailyUserTrade row : tradeUserRows) {
|
||||
String tradeUserId = trimToNull(row.getUserId());
|
||||
if (tradeUserId == null) {
|
||||
continue;
|
||||
}
|
||||
tradeActiveUserIds.add(tradeUserId);
|
||||
if (row.getReportDate() != null
|
||||
&& row.getDailyBuyAmt() != null
|
||||
&& row.getDailyBuyAmt().compareTo(BigDecimal.ONE) >= 0) {
|
||||
LbDailyUserTrade prev = latestTradeByUserId.get(tradeUserId);
|
||||
if (prev == null || isTradeReportDateNewer(row, prev)) {
|
||||
latestTradeByUserId.put(tradeUserId, row);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
List<LbDepartmentUser> toInsert = new ArrayList<>();
|
||||
List<LbDepartmentUser> toUpdate = new ArrayList<>();
|
||||
LocalDateTime now = LocalDateTime.now();
|
||||
@@ -485,7 +524,16 @@ public class LbDepartmentUserServiceImpl extends ServiceImpl<LbDepartmentUserMap
|
||||
}
|
||||
|
||||
entity.setOrgChain(buildOrgChain(lbUser.getId(), userById));
|
||||
LbDailyUserTrade latestTrade = latestTradeByUserId.get(userId);
|
||||
if (latestTrade != null) {
|
||||
entity.setLastTradeDate(latestTrade.getReportDate());
|
||||
entity.setLastBuyAmt(latestTrade.getDailyBuyAmt());
|
||||
} else {
|
||||
entity.setLastTradeDate(null);
|
||||
entity.setLastBuyAmt(null);
|
||||
}
|
||||
entity.setUpdateTime(now);
|
||||
entity.setIsActive(tradeActiveUserIds.contains(userId) ? 1 : 0);
|
||||
|
||||
if (isInsert) {
|
||||
toInsert.add(entity);
|
||||
@@ -493,7 +541,6 @@ public class LbDepartmentUserServiceImpl extends ServiceImpl<LbDepartmentUserMap
|
||||
toUpdate.add(entity);
|
||||
}
|
||||
}
|
||||
|
||||
if (!toInsert.isEmpty()) {
|
||||
this.saveBatch(toInsert);
|
||||
}
|
||||
@@ -586,7 +633,7 @@ public class LbDepartmentUserServiceImpl extends ServiceImpl<LbDepartmentUserMap
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, Object> getDepartmentUserTree(String tenantId) {
|
||||
public Map<String, Object> getDepartmentUserTree(String tenantId, Integer isActive, LocalDate joinDate) {
|
||||
Map<String, Object> result = new HashMap<>();
|
||||
try {
|
||||
if (tenantId == null || tenantId.trim().isEmpty()) {
|
||||
@@ -596,9 +643,15 @@ public class LbDepartmentUserServiceImpl extends ServiceImpl<LbDepartmentUserMap
|
||||
}
|
||||
String tenantIdTrim = tenantId.trim();
|
||||
|
||||
List<LbDepartmentUser> deptUsers = this.list(
|
||||
new LambdaQueryWrapper<LbDepartmentUser>()
|
||||
.eq(LbDepartmentUser::getTenantId, tenantIdTrim));
|
||||
LambdaQueryWrapper<LbDepartmentUser> queryWrapper = new LambdaQueryWrapper<LbDepartmentUser>()
|
||||
.eq(LbDepartmentUser::getTenantId, tenantIdTrim);
|
||||
if (isActive != null) {
|
||||
queryWrapper.eq(LbDepartmentUser::getIsActive, isActive);
|
||||
}
|
||||
if (joinDate != null) {
|
||||
queryWrapper.gt(LbDepartmentUser::getJoinDate, joinDate);
|
||||
}
|
||||
List<LbDepartmentUser> deptUsers = this.list(queryWrapper);
|
||||
if (deptUsers == null || deptUsers.isEmpty()) {
|
||||
result.put("success", true);
|
||||
result.put("message", "查询成功");
|
||||
@@ -695,6 +748,9 @@ public class LbDepartmentUserServiceImpl extends ServiceImpl<LbDepartmentUserMap
|
||||
node.put("name", trimToNull(row.getName()));
|
||||
node.put("phone", trimToNull(row.getPhone()));
|
||||
node.put("joinDate", row.getJoinDate());
|
||||
node.put("lastTradeDate", row.getLastTradeDate());
|
||||
node.put("lastBuyAmt", row.getLastBuyAmt());
|
||||
node.put("isActive", row.getIsActive());
|
||||
node.put("children", new ArrayList<Map<String, Object>>());
|
||||
return node;
|
||||
}
|
||||
@@ -733,4 +789,32 @@ public class LbDepartmentUserServiceImpl extends ServiceImpl<LbDepartmentUserMap
|
||||
String trimmed = value.trim();
|
||||
return trimmed.isEmpty() ? null : trimmed;
|
||||
}
|
||||
|
||||
private static boolean isTradeReportDateNewer(LbDailyUserTrade trade, LbDailyUserTrade prev) {
|
||||
LocalDate reportDate = trade.getReportDate();
|
||||
LocalDate prevReportDate = prev.getReportDate();
|
||||
if (reportDate == null) {
|
||||
return false;
|
||||
}
|
||||
if (prevReportDate == null) {
|
||||
return true;
|
||||
}
|
||||
return reportDate.isAfter(prevReportDate);
|
||||
}
|
||||
|
||||
/**
|
||||
* 按最近交易日写入 last_trade_date、last_buy_amt;若新交易日更晚则覆盖,否则保留原值。
|
||||
*/
|
||||
private static void applyLatestTradeFields(LbDepartmentUser entity, LbDailyUserTrade trade) {
|
||||
LocalDate reportDate = trade.getReportDate();
|
||||
LocalDate existingDate = entity.getLastTradeDate();
|
||||
if (existingDate == null || (reportDate != null && reportDate.isAfter(existingDate))) {
|
||||
entity.setLastTradeDate(reportDate);
|
||||
entity.setLastBuyAmt(trade.getDailyBuyAmt());
|
||||
return;
|
||||
}
|
||||
if (reportDate != null && reportDate.equals(existingDate)) {
|
||||
entity.setLastBuyAmt(trade.getDailyBuyAmt());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user