批量按部门修改代理商的寄卖状态,用户状态

This commit is contained in:
2026-09-08 01:15:22 +08:00
parent 5b5c3bdb41
commit 1b8294ae65
9 changed files with 905 additions and 2 deletions

View File

@@ -17,11 +17,13 @@ import com.rj.entity.LbDailyUserTradeReport;
import com.rj.entity.LbOrderRow;
import com.rj.entity.LbPurchaseApply;
import com.rj.entity.LbUser;
import com.rj.entity.MemberInfo;
import com.rj.util.IsoWorkdayUtils;
import com.rj.mapper.LbDailyUserTradeReportMapper;
import com.rj.mapper.LbOrderRowMapper;
import com.rj.mapper.LbPurchaseApplyMapper;
import com.rj.mapper.LbUserMapper;
import com.rj.mapper.MemberInfoMapper;
import com.rj.service.HxrAdminUserService;
import com.rj.service.ILbPurchaseApplyService;
import com.rj.service.ILbThirdIntegrationConfigService;
@@ -74,6 +76,9 @@ public class LbPurchaseApplyServiceImpl
@Autowired
private LbUserMapper lbUserMapper;
@Autowired
private MemberInfoMapper memberInfoMapper;
@Autowired
private LbOrderRowMapper lbOrderRowMapper;
@@ -978,6 +983,208 @@ public class LbPurchaseApplyServiceImpl
}
}
@Override
public Map<String, Object> updateHxrAdminUserResellStatusByUserIds(
String tenantId, List<Long> userIds,
Boolean isResellEnabled, Integer isResell,
Boolean statusEnabled, Integer status) {
Map<String, Object> result = new HashMap<>();
try {
if (tenantId == null || tenantId.trim().isEmpty()) {
result.put("success", false);
result.put("message", "租户id不能为空");
return result;
}
if (userIds == null || userIds.isEmpty()) {
result.put("success", false);
result.put("message", "用户id列表不能为空");
return result;
}
String validationError = validateResellStatusParams(isResellEnabled, isResell, statusEnabled, status);
if (validationError != null) {
result.put("success", false);
result.put("message", validationError);
return result;
}
String tid = tenantId.trim();
Optional<HxrAdminUserApiContext> apiContextOpt =
lbThirdIntegrationConfigService.resolveAdminUserApiContext(tid);
if (apiContextOpt.isEmpty()) {
return buildApiContextMissingResult(tid, userIds.size());
}
List<String> ids = new ArrayList<>(userIds.size());
for (Long userId : userIds) {
ids.add(userId == null ? null : String.valueOf(userId));
}
return doUpdateHxrAdminUserResellStatus(tid, ids, apiContextOpt.get(),
Boolean.TRUE.equals(isResellEnabled), isResell,
Boolean.TRUE.equals(statusEnabled), status);
} catch (Exception e) {
result.put("success", false);
result.put("message", "处理异常:" + e.getMessage());
return result;
}
}
@Override
public Map<String, Object> updateHxrAdminUserResellStatusForAllMembers(
String tenantId,
Boolean isResellEnabled, Integer isResell,
Boolean statusEnabled, Integer status) {
Map<String, Object> result = new HashMap<>();
try {
if (tenantId == null || tenantId.trim().isEmpty()) {
result.put("success", false);
result.put("message", "租户id不能为空");
return result;
}
String validationError = validateResellStatusParams(isResellEnabled, isResell, statusEnabled, status);
if (validationError != null) {
result.put("success", false);
result.put("message", validationError);
return result;
}
// 读取 member_info 全部用户(该表为第三方库镜像,无 tenant_id,已在租户拦截器忽略名单中)
// 过滤掉昵称中包含 "**" 的记录(脱敏/无效数据)
LambdaQueryWrapper<MemberInfo> memberQuery = new LambdaQueryWrapper<>();
memberQuery.and(w -> w.isNull(MemberInfo::getNickname)
.or().notLike(MemberInfo::getNickname, "**"));
List<MemberInfo> members = memberInfoMapper.selectList(memberQuery);
if (members == null || members.isEmpty()) {
result.put("success", false);
result.put("message", "member_info 表无用户数据");
return result;
}
List<String> userIds = new ArrayList<>(members.size());
for (MemberInfo member : members) {
userIds.add(member == null ? null : member.getId());
}
String tid = tenantId.trim();
Optional<HxrAdminUserApiContext> apiContextOpt =
lbThirdIntegrationConfigService.resolveAdminUserApiContext(tid);
if (apiContextOpt.isEmpty()) {
return buildApiContextMissingResult(tid, userIds.size());
}
return doUpdateHxrAdminUserResellStatus(tid, userIds, apiContextOpt.get(),
Boolean.TRUE.equals(isResellEnabled), isResell,
Boolean.TRUE.equals(statusEnabled), status);
} catch (Exception e) {
result.put("success", false);
result.put("message", "处理异常:" + e.getMessage());
return result;
}
}
/** 校验寄卖/状态参数:至少一项生效,生效字段的值必须为 0 或 1;返回 null 表示校验通过。 */
private static String validateResellStatusParams(
Boolean isResellEnabled, Integer isResell,
Boolean statusEnabled, Integer status) {
boolean resellEffect = Boolean.TRUE.equals(isResellEnabled);
boolean statusEffect = Boolean.TRUE.equals(statusEnabled);
if (!resellEffect && !statusEffect) {
return "isResellEnabled 与 statusEnabled 至少一项需为 true";
}
if (resellEffect && (isResell == null || (isResell != 0 && isResell != 1))) {
return "isResell 生效时其值必须为 0 或 1";
}
if (statusEffect && (status == null || (status != 0 && status != 1))) {
return "status 生效时其值必须为 0 或 1";
}
return null;
}
/** 组装「未找到租户第三方集成配置」的失败结果。 */
private static Map<String, Object> buildApiContextMissingResult(String tid, int total) {
Map<String, Object> result = new HashMap<>();
result.put("success", false);
result.put("message",
"未找到该租户的第三方集成配置,或配置未启用、URL/凭证不完整(请检查 lb_third_integration_config)");
result.put("totalRecords", total);
result.put("successCount", 0);
result.put("failCount", total);
result.put("details", List.of());
result.put("tenantId", tid);
return result;
}
/**
* 逐个用户调用 hxrd user/update(v1 后台接口)修改 is_resell/status;
* 未生效字段传 null,第三方提交时不携带、保持原值。
*/
private Map<String, Object> doUpdateHxrAdminUserResellStatus(
String tid,
List<String> userIds,
HxrAdminUserApiContext apiContext,
boolean resellEffect, Integer isResell,
boolean statusEffect, Integer status) {
Map<String, Object> result = new HashMap<>();
Integer isResellForApi = resellEffect ? isResell : null;
Integer statusForApi = statusEffect ? status : null;
List<Map<String, Object>> details = new ArrayList<>();
int ok = 0;
int fail = 0;
for (String userId : userIds) {
Map<String, Object> one = new HashMap<>();
one.put("userId", userId);
if (resellEffect) {
one.put("isResell", isResellForApi);
}
if (statusEffect) {
one.put("status", statusForApi);
}
if (userId == null || userId.trim().isEmpty()) {
one.put("success", false);
one.put("message", "用户id为空,跳过");
fail++;
details.add(one);
continue;
}
try {
boolean updated =
hxrAdminUserService.updateUserResellStatusFields(
userId, isResellForApi, statusForApi, apiContext);
if (updated) {
one.put("success", true);
one.put("message", "user/update 成功");
ok++;
} else {
one.put("success", false);
one.put("message", "user/update 失败");
fail++;
}
} catch (Exception ex) {
one.put("success", false);
one.put("message", "调用异常:" + ex.getMessage());
fail++;
}
details.add(one);
}
result.put("success", fail == 0);
result.put("message", fail == 0 ? "全部处理成功" : "部分或全部失败,见 details");
result.put("totalRecords", userIds.size());
result.put("successCount", ok);
result.put("failCount", fail);
result.put("isResellEnabled", resellEffect);
if (resellEffect) {
result.put("isResell", isResellForApi);
}
result.put("statusEnabled", statusEffect);
if (statusEffect) {
result.put("status", statusForApi);
}
result.put("details", details);
result.put("tenantId", tid);
return result;
}
@Override
public Map<String, Object> syncHxrAdminColleagueVipByApplyDateRange(
LocalDate applyDateStart, LocalDate applyDateEnd, String tenantId) {