src/main/java/org/springblade/modules/house/mapper/HouseholdMapper.xml
@@ -349,7 +349,7 @@ and jhs.district_code = #{household.aoiCode} </if> and jh.is_deleted = 0 order by jh.create_time desc order by jh.id desc </where> src/main/java/org/springblade/modules/house/service/impl/HouseholdServiceImpl.java
@@ -97,8 +97,6 @@ @Override public IPage<HouseholdVO> selectHouseholdPage(IPage<HouseholdVO> page, HouseholdVO household) { StopWatch stopWatch = new StopWatch(); stopWatch.start(); CommonParamSet commonParamSet = new CommonParamSet().invoke(HouseholdVO.class, household); // List<String> regionChildCodesList = SysCache.getRegionChildCodesByDeptId(AuthUtil.getDeptId()); @@ -107,10 +105,26 @@ if (Objects.nonNull(household.getLabelType())) { extracted(household); } StopWatch stopWatch = new StopWatch(); stopWatch.start(); List<HouseholdVO> householdVOS = baseMapper.selectHouseholdPage(page, household, commonParamSet.getIsAdministrator(), commonParamSet.getRegionChildCodesList(), commonParamSet.getGridCodeList()); stopWatch.stop(); // System.out.println("selectHouseholdPage:" + stopWatch.getTotalTimeMillis()); if (household.getRelationship() == 18) { householdVOS.forEach(item -> { HouseholdEntity householdEntity = getOne(Wrappers.<HouseholdEntity>lambdaQuery() .eq(HouseholdEntity::getHouseCode, item.getHouseCode()) .eq(HouseholdEntity::getRelationship, 1) .eq(HouseholdEntity::getIsDeleted, 0) .last("limit 1")); if (householdEntity != null) { item.setHouseName(householdEntity.getName()); item.setHousePhone(householdEntity.getPhoneNumber()); item.setHouseIdCard(householdEntity.getIdCard()); } }); } System.out.println("selectHouseholdPage:" + stopWatch.getTotalTimeMillis()); return page.setRecords(householdVOS); } @@ -341,7 +355,6 @@ * @param isCovered */ @Override @Transactional(rollbackFor = Exception.class) public String importUserHouseHold(List<ImportHouseholdExcel> data, Boolean isCovered, String isTenant) { IHouseService houseService = SpringUtils.getBean(IHouseService.class); int totalNum = data.size(); @@ -364,7 +377,7 @@ for (Future<Map<String, String>> future : futures) { try { Map<String, String> stringStringMap = future.get(); logger.info("结果:{}", stringStringMap); // logger.info("结果:{}", stringStringMap); String result = stringStringMap.get("restult"); switch (result) { case "1": @@ -385,7 +398,7 @@ break; } // 获取并打印每个任务的结果 } catch (InterruptedException | ExecutionException e) { } catch (Exception e) { errorNum++; logger.error("获取异常-----》", e); } @@ -411,11 +424,10 @@ return builder.toString(); } @Transactional(rollbackFor = Exception.class) public Map<String, String> importHouseHold(ImportHouseholdExcel houseHoldExcel, IHouseService houseService, Boolean isCovered, String isTenant) { Map<String, String> objectObjectHashMap = new HashMap<>(); try { HouseholdEntity householdEntity = Objects.requireNonNull(BeanUtil.copy(houseHoldExcel, HouseholdEntity.class)); HouseholdEntity householdEntity = Objects.requireNonNull(BeanUtil.copy(houseHoldExcel, HouseholdEntity.class)); // 判断姓名,手机号 if (Strings.isBlank(householdEntity.getName()) || Strings.isBlank(householdEntity.getHouseCode())) { objectObjectHashMap.put("row", householdEntity.getName() + ":" + householdEntity.getPhoneNumber()); @@ -552,13 +564,6 @@ objectObjectHashMap.put("restult", "2"); return objectObjectHashMap; } } catch (Exception e) { logger.error("异常导入------------》", e); // return "3"; // objectObjectHashMap.put("row", householdEntity.getName() + ":" + householdEntity.getPhoneNumber()); objectObjectHashMap.put("restult", "3"); return objectObjectHashMap; } } /** src/main/java/org/springblade/modules/house/vo/HouseholdVO.java
@@ -188,4 +188,13 @@ @ApiModelProperty(value = "小区id", example = "") private String districtIds; @ApiModelProperty(value = "房东名称", example = "") private String houseName; @ApiModelProperty(value = "房东电话", example = "") private String housePhone; @ApiModelProperty(value = "房东身份证号", example = "") private String houseIdCard; } src/main/java/org/springblade/modules/system/service/impl/UserServiceImpl.java
@@ -39,6 +39,7 @@ import org.springblade.core.mp.base.BaseServiceImpl; import org.springblade.core.mp.support.Condition; import org.springblade.core.mp.support.Query; import org.springblade.core.redis.cache.BladeRedis; import org.springblade.core.secure.utils.AuthUtil; import org.springblade.core.tenant.BladeTenantProperties; import org.springblade.core.tool.constant.BladeConstant; @@ -65,10 +66,15 @@ import org.springblade.modules.system.vo.UserDetailVO; import org.springblade.modules.system.vo.UserVO; import org.springblade.modules.system.wrapper.UserWrapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.connection.ReturnType; import org.springframework.data.redis.core.RedisCallback; import org.springframework.data.redis.core.ValueOperations; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.*; import java.util.concurrent.TimeUnit; import static org.springblade.common.constant.CommonConstant.DEFAULT_PARAM_PASSWORD; @@ -88,6 +94,10 @@ private final IDeptService deptService; private final BladeTenantProperties tenantProperties; private final IPoliceAffairsGridService policeAffairsGridService; @Autowired private BladeRedis redisTemplate; @Override @Transactional(rollbackFor = Exception.class) @@ -215,6 +225,42 @@ return b; } /** * 尝试获取锁 * @param timeout 超时时间(毫秒) * @return 是否成功获取锁 */ public boolean lock(long timeout,String lockKey) { long endTime = System.currentTimeMillis() + timeout; ValueOperations<String, Object> ops = redisTemplate.getValueOps(); while (System.currentTimeMillis() < endTime) { // 使用setIfAbsent命令尝试设置值,仅当key不存在时设置,类似于SETNX Boolean result = ops.setIfAbsent(lockKey, String.valueOf(System.currentTimeMillis() + 5000), 5, TimeUnit.SECONDS); if (result != null && result) { return true; } try { // 短暂休眠,防止CPU过度占用 Thread.sleep(10); } catch (InterruptedException e) { Thread.currentThread().interrupt(); throw new RuntimeException(e); } } return false; } /** * 释放锁 */ public void unlock(String lockKey) { // 使用lua脚本保证操作的原子性,避免删除非本客户端创建的锁 String script = "if redis.call('get', KEYS[1]) == ARGV[1] then return redis.call('del', KEYS[1]) else return 0 end"; redisTemplate.getRedisTemplate().execute((RedisCallback<Object>) (connection) -> connection.eval(script.getBytes(), ReturnType.INTEGER, 1, lockKey.getBytes(), String.valueOf(redisTemplate.getValueOps().get(lockKey)).getBytes())); } @Override public IPage<User> selectUserPage(IPage<User> page, User user, String deptId, String tenantId) { if (Strings.isBlank(deptId) && !AuthUtil.isAdministrator() && !AuthUtil.isAdmin()) {