| | |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import liquibase.repackaged.org.apache.commons.lang3.StringUtils; |
| | | import org.apache.logging.log4j.util.Strings; |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | import org.springblade.common.constant.CommonConstant; |
| | | import org.springblade.common.node.TreeIntegerNode; |
| | | import org.springblade.common.node.TreeStringNode; |
| | | import org.springblade.common.param.CommonParamSet; |
| | | import org.springblade.common.utils.NodeTreeUtil; |
| | | import org.springblade.common.utils.SpringUtils; |
| | | import org.springblade.common.utils.ThreadPoolUtil; |
| | | import org.springblade.core.secure.utils.AuthUtil; |
| | | import org.springblade.core.tool.utils.BeanUtil; |
| | | import org.springblade.core.tool.utils.Func; |
| | |
| | | import org.springblade.modules.system.service.IUserService; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Propagation; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.springframework.util.StopWatch; |
| | | |
| | | import java.text.ParseException; |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.*; |
| | | import java.util.concurrent.Future; |
| | | import java.util.concurrent.atomic.AtomicBoolean; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | |
| | | */ |
| | | @Service |
| | | public class HouseholdServiceImpl extends ServiceImpl<HouseholdMapper, HouseholdEntity> implements IHouseholdService { |
| | | |
| | | private static Logger logger = LoggerFactory.getLogger(HouseholdServiceImpl.class); |
| | | |
| | | @Autowired |
| | | private IUserHouseLabelService userHouseLabelService; |
| | |
| | | private IHouseRentalService iHouseRentalService; |
| | | |
| | | |
| | | @Autowired |
| | | private ThreadPoolUtil threadPoolUtil; |
| | | |
| | | |
| | | @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()); |
| | |
| | | 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() != null && 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); |
| | | } |
| | | |
| | |
| | | * @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(); |
| | | int importNum = 0; |
| | | int updateNum = 0; |
| | | int errorNum = 0; |
| | | int runErrorNum = 0; |
| | | // 创建Future列表来保存每个任务的结果 |
| | | List<Future<Map<String, String>>> futures = new ArrayList<>(); |
| | | for (ImportHouseholdExcel houseHoldExcel : data) { |
| | | HouseholdEntity householdEntity = Objects.requireNonNull(BeanUtil.copy(houseHoldExcel, HouseholdEntity.class)); |
| | | // 提交任务 |
| | | futures.add(threadPoolUtil.submit(() -> { |
| | | // 这里执行你的异步任务 |
| | | return importHouseHold(houseHoldExcel, houseService, isCovered, isTenant); |
| | | })); |
| | | } |
| | | // 收集并打印结果 |
| | | for (Future<Map<String, String>> future : futures) { |
| | | try { |
| | | Map<String, String> stringStringMap = future.get(); |
| | | // logger.info("结果:{}", stringStringMap); |
| | | String result = stringStringMap.get("restult"); |
| | | switch (result) { |
| | | case "1": |
| | | importNum++; |
| | | break; |
| | | case "2": |
| | | updateNum++; |
| | | break; |
| | | case "3": |
| | | errorNum++; |
| | | break; |
| | | case "4": |
| | | importNum++; |
| | | updateNum++; |
| | | break; |
| | | default: |
| | | errorNum++; |
| | | break; |
| | | } |
| | | // 获取并打印每个任务的结果 |
| | | } catch (Exception e) { |
| | | runErrorNum++; |
| | | logger.error("获取异常-----》", e); |
| | | } |
| | | } |
| | | StringBuilder builder = new StringBuilder("导入完成!"); |
| | | builder.append("其中本次表格共有 ").append(totalNum).append(" 条数据,") |
| | | .append("成功导入 ").append(importNum).append(" 条数据。"); |
| | | if (updateNum > 0) { |
| | | builder.append("其中有 ").append(updateNum).append(" 条数据已存在。"); |
| | | } |
| | | if (errorNum > 0) { |
| | | builder.append("共有 ").append(errorNum).append(" 条数据由于无姓名或门牌地址编码信息未导入!"); |
| | | } |
| | | if (runErrorNum > 0) { |
| | | builder.append("共有 ").append(runErrorNum).append(" 条数据由于数据其他信息异常未导入!"); |
| | | } |
| | | return builder.toString(); |
| | | } |
| | | |
| | | @Transactional(propagation = Propagation.REQUIRES_NEW) |
| | | public Map<String, String> importHouseHold(ImportHouseholdExcel houseHoldExcel, IHouseService houseService, Boolean isCovered, String isTenant) { |
| | | Map<String, String> objectObjectHashMap = new HashMap<>(); |
| | | HouseholdEntity householdEntity = Objects.requireNonNull(BeanUtil.copy(houseHoldExcel, HouseholdEntity.class)); |
| | | // 判断姓名,手机号 |
| | | if (Strings.isBlank(householdEntity.getName()) |
| | | || Strings.isBlank(householdEntity.getHouseCode()) |
| | | ) { |
| | | errorNum++; |
| | | continue; |
| | | if (Strings.isBlank(householdEntity.getName()) || Strings.isBlank(householdEntity.getHouseCode())) { |
| | | objectObjectHashMap.put("row", householdEntity.getName() + ":" + householdEntity.getPhoneNumber()); |
| | | objectObjectHashMap.put("restult", "3"); |
| | | return objectObjectHashMap; |
| | | } |
| | | // 去除手机号中间空格 |
| | | if (StringUtils.isNotBlank(householdEntity.getPhoneNumber())) { |
| | | householdEntity.setPhoneNumber(householdEntity.getPhoneNumber().replaceAll(" ", "")); |
| | | } |
| | | // 查询库中是否已存在 |
| | | QueryWrapper<HouseholdEntity> wrapper = new QueryWrapper<>(); |
| | | wrapper.eq("house_code", householdEntity.getHouseCode()) |
| | | .eq("is_deleted", 0) |
| | | .eq("name", householdEntity.getName()); |
| | | HouseholdEntity one = this.getOne(wrapper); |
| | | // 判断是否租客 |
| | | if (StringUtils.isNotBlank(isTenant)) { |
| | | wrapper.eq("relationship", 18); |
| | | } |
| | | List<HouseholdEntity> list = this.list(wrapper); |
| | | // 与角色关系 |
| | | if (!Strings.isBlank(houseHoldExcel.getRelationship())) { |
| | | householdEntity.setRelationship(Integer.parseInt(houseHoldExcel.getRelationship())); |
| | |
| | | } |
| | | } |
| | | // 判断是否租户导入 |
| | | if (StringUtils.isNotBlank(isTenant)) { |
| | | householdEntity.setRelationship(18); |
| | | HouseRentalEntity houseRentalEntity = iHouseRentalService.getOne(Wrappers.<HouseRentalEntity>lambdaQuery() |
| | | .eq(HouseRentalEntity::getHouseCode, householdEntity.getHouseCode())); |
| | | if (houseRentalEntity != null) { |
| | | householdEntity.setHousingRentalId(houseRentalEntity.getId()); |
| | | } else { |
| | | // 新建出租屋 |
| | | HouseRentalEntity houseRentalEntity1 = new HouseRentalEntity(); |
| | | houseRentalEntity1.setHouseCode(householdEntity.getHouseCode()); |
| | | houseRentalEntity1.setHouseStatus(1); |
| | | houseRentalEntity1.setAuditStatus(0); |
| | | houseRentalEntity1.setRentalUse(4); |
| | | houseRentalEntity1.setTenantRelationship(1); |
| | | houseRentalEntity1.setRentalTime(new Date()); |
| | | houseRentalEntity1.setDueTime(new Date()); |
| | | houseRentalEntity1.setTerminationTime(new Date()); |
| | | iHouseRentalService.save(houseRentalEntity1); |
| | | householdEntity.setHousingRentalId(houseRentalEntity1.getId()); |
| | | // errorNum++; |
| | | // continue; |
| | | } |
| | | if (StringUtils.isNotBlank(isTenant) || (householdEntity.getRelationship() != null && householdEntity.getRelationship() == 18)) { |
| | | householdEntity.setRelationship(18); |
| | | HouseRentalEntity houseRentalEntity = iHouseRentalService.getOne(Wrappers.<HouseRentalEntity>lambdaQuery() |
| | | .eq(HouseRentalEntity::getHouseCode, householdEntity.getHouseCode()).last("limit 1")); |
| | | if (houseRentalEntity != null) { |
| | | householdEntity.setHousingRentalId(houseRentalEntity.getId()); |
| | | } else { |
| | | // 新建出租屋 |
| | | HouseRentalEntity rentalEntity = new HouseRentalEntity(); |
| | | rentalEntity.setHouseCode(householdEntity.getHouseCode()); |
| | | rentalEntity.setHouseStatus(1); |
| | | rentalEntity.setAuditStatus(0); |
| | | rentalEntity.setRentalUse(4); |
| | | rentalEntity.setTenantRelationship(1); |
| | | rentalEntity.setRentalTime(new Date()); |
| | | rentalEntity.setDueTime(new Date()); |
| | | rentalEntity.setTerminationTime(new Date()); |
| | | iHouseRentalService.save(rentalEntity); |
| | | householdEntity.setHousingRentalId(rentalEntity.getId()); |
| | | } |
| | | // 设置出租房 |
| | | setRentalPropertyLabels(householdEntity); |
| | | } |
| | | /// 是否主要联系人 |
| | | if (!Strings.isBlank(houseHoldExcel.getIsPrimaryContact())) { |
| | | householdEntity.setIsPrimaryContact(Integer.parseInt(houseHoldExcel.getIsPrimaryContact())); |
| | |
| | | householdEntity.setMaritalStatus(Integer.parseInt(houseHoldExcel.getMaritalStatus())); |
| | | } |
| | | |
| | | if (one==null){ |
| | | if (list.size() == 0) { |
| | | // 新增 |
| | | this.save(householdEntity); |
| | | importNum++; |
| | | // importNum++; |
| | | // 处理标签 |
| | | handleLabel(householdEntity,houseHoldExcel); |
| | | }else { |
| | | updateNum++; |
| | | if (isCovered){ |
| | | // 覆盖更新 |
| | | householdEntity.setId(one.getId()); |
| | | // 更新 |
| | | updateById(householdEntity); |
| | | importNum++; |
| | | // 处理标签 |
| | | handleLabel(householdEntity,houseHoldExcel); |
| | | handleLabel(householdEntity, houseHoldExcel); |
| | | // return "1"; |
| | | objectObjectHashMap.put("row", householdEntity.getName() + ":" + householdEntity.getPhoneNumber()); |
| | | objectObjectHashMap.put("restult", "1"); |
| | | return objectObjectHashMap; |
| | | } else { |
| | | // updateNum++; |
| | | if (isCovered) { |
| | | for (HouseholdEntity one : list) { |
| | | // 覆盖更新 |
| | | householdEntity.setId(one.getId()); |
| | | // 更新 |
| | | updateById(householdEntity); |
| | | // 处理标签 |
| | | handleLabel(householdEntity, houseHoldExcel); |
| | | } |
| | | // importNum++; |
| | | // return "4"; |
| | | objectObjectHashMap.put("row", householdEntity.getName() + ":" + householdEntity.getPhoneNumber()); |
| | | objectObjectHashMap.put("restult", "4"); |
| | | return objectObjectHashMap; |
| | | } |
| | | // return "2"; |
| | | objectObjectHashMap.put("row", householdEntity.getName() + ":" + householdEntity.getPhoneNumber()); |
| | | objectObjectHashMap.put("restult", "2"); |
| | | return objectObjectHashMap; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * @param householdEntity |
| | | */ |
| | | private void setRentalPropertyLabels(HouseholdEntity householdEntity) { |
| | | // 设置房屋标签未出租 |
| | | IUserHouseLabelService householdLabelService = SpringUtils.getBean(IUserHouseLabelService.class); |
| | | long count = householdLabelService.count(Wrappers.<UserHouseLabelEntity>lambdaQuery() |
| | | .eq(UserHouseLabelEntity::getHouseCode, householdEntity.getHouseCode()) |
| | | .eq(UserHouseLabelEntity::getLableType, 2)); |
| | | if (count == 0) { |
| | | UserHouseLabelEntity userHouseLabelEntity = new UserHouseLabelEntity(); |
| | | userHouseLabelEntity.setHouseCode(householdEntity.getHouseCode()); |
| | | userHouseLabelEntity.setLableType(2); |
| | | userHouseLabelEntity.setLabelName("出租"); |
| | | userHouseLabelEntity.setLabelId(1039L); |
| | | userHouseLabelEntity.setColor("yellow"); |
| | | householdLabelService.saveOrUpdateHouseLabel(userHouseLabelEntity); |
| | | } |
| | | StringBuilder builder = new StringBuilder("导入完成!"); |
| | | builder.append("其中本次表格共有 ").append(totalNum).append(" 条数据,") |
| | | .append("成功导入 ").append(importNum).append(" 条数据。"); |
| | | if (updateNum>0) { |
| | | builder.append("其中有 ").append(updateNum).append(" 条数据已存在。"); |
| | | } |
| | | if (errorNum>0){ |
| | | builder.append("共有 ").append(errorNum).append(" 条数据由于无姓名或门牌地址编码信息未导入!"); |
| | | } |
| | | return builder.toString(); |
| | | } |
| | | |
| | | /** |
| | | * 标签处理 |
| | | * |
| | | * @param householdEntity |
| | | * @param houseHoldExcel |
| | | */ |
| | | public void handleLabel(HouseholdEntity householdEntity, ImportHouseholdExcel houseHoldExcel) { |
| | | if (!Strings.isBlank(houseHoldExcel.getLabelName())){ |
| | | if (!Strings.isBlank(houseHoldExcel.getLabelName())) { |
| | | // 查询对应的label集合信息 |
| | | List<UserHouseLabelEntity> userHouseLabelList = userHouseLabelService.getLabelList(houseHoldExcel.getLabelName()); |
| | | if (userHouseLabelList.size()>0){ |
| | |
| | | HouseholdVO householdVO = new HouseholdVO(); |
| | | householdVO.setConfirmFlag(confirmFlag); |
| | | householdVO.setCommunityCode(neiCode); |
| | | householdVO.setUserId(AuthUtil.getUserId()); |
| | | CommonParamSet commonParamSet = new CommonParamSet().invoke(HouseholdVO.class, householdVO); |
| | | |
| | | return baseMapper.statistics(householdVO, commonParamSet.getIsAdministrator(), |
| | | commonParamSet.getRegionChildCodesList(), commonParamSet.getGridCodeList()); |
| | | } |
| | |
| | | @Override |
| | | public Object getHouseHoldStatistics(String code, String roleType) { |
| | | Map<String, Object> objectObjectHashMap = new HashMap<>(); |
| | | List<String> communityCodeList = Func.toStrList(code); |
| | | if (roleType.equals("2")) { |
| | | List<Map<String, Object>> result = baseMapper.getHouseHoldStatistics(code, null, roleType); |
| | | List<Map<String, Object>> result1 = baseMapper.getHouseHoldStatisticsAge(code, null, roleType); |
| | | List<Map<String, Object>> result = baseMapper.getHouseHoldStatistics(communityCodeList, null, roleType); |
| | | List<Map<String, Object>> result1 = baseMapper.getHouseHoldStatisticsAge(communityCodeList, null, roleType); |
| | | objectObjectHashMap.put("gender", result); |
| | | objectObjectHashMap.put("age", result1); |
| | | return objectObjectHashMap; |
| | | } else { |
| | | List<Map<String, Object>> result = baseMapper.getHouseHoldStatistics(code, AuthUtil.getUserId(), roleType); |
| | | List<Map<String, Object>> result1 = baseMapper.getHouseHoldStatisticsAge(code, AuthUtil.getUserId(), roleType); |
| | | List<Map<String, Object>> result = baseMapper.getHouseHoldStatistics(communityCodeList, AuthUtil.getUserId(), roleType); |
| | | List<Map<String, Object>> result1 = baseMapper.getHouseHoldStatisticsAge(communityCodeList, AuthUtil.getUserId(), roleType); |
| | | objectObjectHashMap.put("gender", result); |
| | | objectObjectHashMap.put("age", result1); |
| | | return objectObjectHashMap; |
| | |
| | | for (Long id : idList) { |
| | | HouseholdEntity householdEntity = getById(id); |
| | | // 如果是业主 |
| | | if (null!= householdEntity.getRelationship() && householdEntity.getRelationship() == 1) { |
| | | if (null != householdEntity && null != householdEntity.getRelationship() && householdEntity.getRelationship() == 1) { |
| | | // 查询对应的用户 |
| | | User user = userService.getById(householdEntity.getAssociatedUserId()); |
| | | // 判断是否还绑定其他的房屋,如果有,则不操作用户 |
| | |
| | | */ |
| | | @Override |
| | | public List<HouseholdVO> selectHouseholdList(HouseholdVO household) { |
| | | if (household.getLimit() == null) { |
| | | household.setLimit(20); |
| | | } |
| | | List<HouseholdVO> householdVOS = baseMapper.selectHouseholdList(household); |
| | | // 遍历 |
| | | for (HouseholdVO householdVO : householdVOS) { |
| | | if (householdVO.getHouseholdLabelList().size() > 0) { |
| | | List<String> labelNameList = householdVO.getHouseholdLabelList().stream().map(householdLabelVO -> householdLabelVO.getLabelName()) |
| | | .collect(Collectors.toList()); |
| | | householdVO.setLabelName(String.join(",", labelNameList)); |
| | | List<HouseholdLabelVO> householdLabelList = householdVO.getHouseholdLabelList(); |
| | | if (!householdLabelList.isEmpty()) { |
| | | String labelName = householdLabelList.stream() |
| | | .map(HouseholdLabelVO::getLabelName) |
| | | .collect(Collectors.joining(",")); |
| | | householdVO.setLabelName(labelName); |
| | | } |
| | | } |
| | | // 返回 |
| | |
| | | ); |
| | | return houseTenantExcels; |
| | | } |
| | | |
| | | @Override |
| | | public boolean saveOrUpdateHouseholdBatch(List<HouseholdVO> householdVOList) { |
| | | if (householdVOList.size() == 0) { |
| | | return false; |
| | | } |
| | | AtomicBoolean restult = new AtomicBoolean(false); |
| | | householdVOList.forEach(item -> { |
| | | restult.set(saveOrUpdateHousehold(item)); |
| | | }); |
| | | return restult.get(); |
| | | } |
| | | } |