批量按部门修改代理商的寄卖状态,用户状态
This commit is contained in:
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user