linwe
2024-05-29 c10d6358b9f014375a13821465bc978d0c0da22e
src/main/java/org/springblade/modules/house/service/impl/HouseholdServiceImpl.java
@@ -16,6 +16,7 @@
 */
package org.springblade.modules.house.service.impl;
import cn.hutool.core.util.IdcardUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -28,14 +29,18 @@
import org.springblade.common.param.CommonParamSet;
import org.springblade.common.utils.NodeTreeUtil;
import org.springblade.common.utils.SpringUtils;
import org.springblade.core.mp.support.Condition;
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.house.entity.HouseRentalEntity;
import org.springblade.modules.house.entity.HouseholdEntity;
import org.springblade.modules.house.entity.UserHouseLabelEntity;
import org.springblade.modules.house.excel.HouseHoldExcel;
import org.springblade.modules.house.excel.ExportHouseholdExcel;
import org.springblade.modules.house.excel.HouseTenantExcel;
import org.springblade.modules.house.excel.ImportHouseholdExcel;
import org.springblade.modules.house.mapper.HouseholdMapper;
import org.springblade.modules.house.service.IHouseRentalService;
import org.springblade.modules.house.service.IHouseService;
import org.springblade.modules.house.service.IHouseholdService;
import org.springblade.modules.house.service.IUserHouseLabelService;
import org.springblade.modules.house.vo.HouseholdLabelVO;
@@ -43,7 +48,6 @@
import org.springblade.modules.house.vo.HouseholdVO;
import org.springblade.modules.label.entity.LabelEntity;
import org.springblade.modules.label.service.ILabelService;
import org.springblade.modules.label.vo.LabelVO;
import org.springblade.modules.place.entity.PlaceEntity;
import org.springblade.modules.place.service.IPlaceService;
import org.springblade.modules.system.entity.DictBiz;
@@ -55,6 +59,8 @@
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.stream.Collectors;
@@ -78,6 +84,10 @@
   @Autowired
   private IPlaceService placeService;
   @Autowired
   private IHouseRentalService iHouseRentalService;
   @Override
   public IPage<HouseholdVO> selectHouseholdPage(IPage<HouseholdVO> page, HouseholdVO household) {
@@ -248,16 +258,9 @@
      User newUser = new User();
      if (null != householdEntity.getPhoneNumber() && !householdEntity.getPhoneNumber().equals("")) {
         //根据手机号查询库里的数据
         User userParams = new User();
         userParams.setPhone(householdEntity.getPhoneNumber());
         User user = userService.getOne(Condition.getQueryWrapper(userParams));
         if (null == user) {
            User userParams1 = new User();
            userParams1.setAccount(householdEntity.getPhoneNumber());
            userParams1.setIsDeleted(0);
            user = userService.getOne(Condition.getQueryWrapper(userParams1));
         }
         if (null != user) {
         List<User> list = userService.getUserListByPhoneOrAccount(householdEntity.getPhoneNumber());
         if (list.size()>0) {
            User user = list.get(0);
            //如果用户存在,则该用户id绑定场所
            householdEntity.setAssociatedUserId(user.getId());
            //更新住户信息
@@ -304,20 +307,194 @@
      return baseMapper.getHouseholdListById(household);
   }
   /**
    * 导出住户信息
    * @param household
    * @return
    */
   @Override
   public List<HouseHoldExcel> export(HouseholdVO household) {
      List<HouseHoldExcel> userHouseHoldExcels = baseMapper.export(household);
   public List<ExportHouseholdExcel> export(HouseholdVO household) {
      CommonParamSet commonParamSet = new CommonParamSet().invoke(HouseholdVO.class, household);
      // 重点人员与关注人员
      if (Objects.nonNull(household.getLabelType())) {
         extracted(household);
      }
      List<ExportHouseholdExcel> userHouseHoldExcels = baseMapper.export(household,
         commonParamSet.getIsAdministrator(),
         commonParamSet.getRegionChildCodesList(),
         commonParamSet.getGridCodeList()
      );
      return userHouseHoldExcels;
   }
   /**
    * 导入住户数据
    *
    * @param data
    * @param isCovered
    */
   @Override
   @Transactional(rollbackFor = Exception.class)
   public void importUserHouseHold(List<HouseHoldExcel> data, Boolean isCovered) {
      data.forEach(houseHoldExcel -> {
         HouseholdEntity houseHoldEntity = Objects.requireNonNull(BeanUtil.copy(houseHoldExcel, HouseholdEntity.class));
         this.save(houseHoldEntity);
      });
   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;
      for (ImportHouseholdExcel houseHoldExcel : data) {
         HouseholdEntity householdEntity = Objects.requireNonNull(BeanUtil.copy(houseHoldExcel, HouseholdEntity.class));
         // 判断姓名,手机号
         if (Strings.isBlank(householdEntity.getName())
            || Strings.isBlank(householdEntity.getHouseCode())
         ) {
            errorNum++;
            continue;
         }
         // 查询库中是否已存在
         QueryWrapper<HouseholdEntity> wrapper = new QueryWrapper<>();
         wrapper.eq("house_code", householdEntity.getHouseCode())
            .eq("is_deleted", 0)
            .eq("name", householdEntity.getName());
         List<HouseholdEntity> list = this.list(wrapper);
         // 与角色关系
         if (!Strings.isBlank(houseHoldExcel.getRelationship())) {
            householdEntity.setRelationship(Integer.parseInt(houseHoldExcel.getRelationship()));
            // 如果是业主,则需要往用户表插入用户
            if (householdEntity.getRelationship() == 1) {
               houseService.saveOrUpdateUser(householdEntity);
            }
         }
         // 判断是否租户导入
         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 (!Strings.isBlank(houseHoldExcel.getIsPrimaryContact())) {
            householdEntity.setIsPrimaryContact(Integer.parseInt(houseHoldExcel.getIsPrimaryContact()));
         }
         // 居住状态
         if (!Strings.isBlank(houseHoldExcel.getResidentialStatus())) {
            householdEntity.setResidentialStatus(Integer.parseInt(houseHoldExcel.getResidentialStatus()));
         }
         // 性别
         if (!Strings.isBlank(houseHoldExcel.getGender())) {
            householdEntity.setGender(Short.parseShort(houseHoldExcel.getGender()));
         }
         // 居民身份证
         if (!Strings.isBlank(houseHoldExcel.getIdCard())) {
            if (IdcardUtil.isValidCard(houseHoldExcel.getIdCard())) {
               // 身份证类型为居民身份证
               householdEntity.setCardType(111);
            }
         }
         // 党员
         if (!Strings.isBlank(houseHoldExcel.getPartyEmber())) {
            householdEntity.setPartyEmber(Integer.parseInt(houseHoldExcel.getPartyEmber()));
         }
         // 民族
         if (!Strings.isBlank(houseHoldExcel.getEthnicity())) {
            householdEntity.setEthnicity(Integer.parseInt(houseHoldExcel.getEthnicity()));
         }
         // 学历
         if (!Strings.isBlank(houseHoldExcel.getEducation())) {
            householdEntity.setEducation(Integer.parseInt(houseHoldExcel.getEducation()));
         }
         // 健康状况
         if (!Strings.isBlank(houseHoldExcel.getHealthStatus())) {
            householdEntity.setHealthStatus(Integer.parseInt(houseHoldExcel.getHealthStatus()));
         }
         // 工作状态
         if (!Strings.isBlank(houseHoldExcel.getWorkStatus())) {
            householdEntity.setWorkStatus(Integer.parseInt(houseHoldExcel.getWorkStatus()));
         }
         // 外出时间
         if (!Strings.isBlank(houseHoldExcel.getGoOutTime())) {
            try {
               Date date = new SimpleDateFormat("yyyy-MM-dd").parse(houseHoldExcel.getGoOutTime());
               householdEntity.setGoOutTime(date);
            } catch (ParseException e) {
               e.printStackTrace();
            }
         }
         // 婚姻状态
         if (!Strings.isBlank(houseHoldExcel.getMaritalStatus())) {
            householdEntity.setMaritalStatus(Integer.parseInt(houseHoldExcel.getMaritalStatus()));
         }
         if (list.size()==0){
            // 新增
            this.save(householdEntity);
            importNum++;
            // 处理标签
            handleLabel(householdEntity,houseHoldExcel);
         }else {
            updateNum++;
            if (isCovered){
               for (HouseholdEntity one : list) {
                  // 覆盖更新
                  householdEntity.setId(one.getId());
                  // 更新
                  updateById(householdEntity);
                  // 处理标签
                  handleLabel(householdEntity,houseHoldExcel);
               }
               importNum++;
            }
         }
      }
      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())){
         // 查询对应的label集合信息
         List<UserHouseLabelEntity> userHouseLabelList = userHouseLabelService.getLabelList(houseHoldExcel.getLabelName());
         if (userHouseLabelList.size()>0){
            for (UserHouseLabelEntity userHouseLabelEntity : userHouseLabelList) {
               userHouseLabelEntity.setHouseCode(householdEntity.getHouseCode());
               userHouseLabelEntity.setHouseholdId(householdEntity.getId());
               userHouseLabelEntity.setUserId(householdEntity.getAssociatedUserId());
               userHouseLabelEntity.setLableType(1);
               userHouseLabelEntity.setColor("green");
               userHouseLabelService.saveOrUpdateHouseholdLabel(userHouseLabelEntity);
            }
         }
      }
   }
   /**
@@ -330,7 +507,7 @@
   public Integer statistics(Long userId, String neiCode, Integer confirmFlag) {
      HouseholdVO householdVO = new HouseholdVO();
      householdVO.setConfirmFlag(confirmFlag);
      householdVO.setNeiCode(neiCode);
      householdVO.setCommunityCode(neiCode);
      CommonParamSet commonParamSet = new CommonParamSet().invoke(HouseholdVO.class, householdVO);
      return baseMapper.statistics(householdVO, commonParamSet.getIsAdministrator(),
@@ -581,4 +758,59 @@
         node.setChildren(null);
      }
   }
   /**
    * 通过小区id查询用户
    * @param householdVO
    * @param page
    * @return
    */
   @Override
   public IPage<HouseholdVO> getUserInfoByDistrictIds(HouseholdVO householdVO, IPage<HouseholdVO> page) {
      List<String> list = Func.toStrList(householdVO.getDistrictIds());
      List<HouseholdVO> userInfoByDistrictIds = baseMapper.getUserInfoByDistrictIds(list, householdVO, page);
      return page.setRecords(userInfoByDistrictIds);
   }
   /**
    * 查询住户对应的社区编号
    * @param id
    * @return
    */
   @Override
   public String getCommunityCode(Long id) {
      return baseMapper.getCommunityCode(id);
   }
   /**
    * 查询所有住户总数
    * @return
    */
   @Override
   public int getAllListTotal() {
      return baseMapper.getAllListTotal();
   }
   /**
    * 查询对应的住户集合
    *
    * @param i
    * @param size
    * @return
    */
   @Override
   public List<HouseholdVO> getAllList(int i, int size) {
      return baseMapper.getAllList(i, size);
   }
   @Override
   public List<HouseTenantExcel> exportTenant(HouseholdVO household) {
      CommonParamSet commonParamSet = new CommonParamSet().invoke(HouseholdVO.class, household);
      List<HouseTenantExcel> houseTenantExcels = baseMapper.exportTenant(household,
         commonParamSet.getIsAdministrator(),
         commonParamSet.getRegionChildCodesList(),
         commonParamSet.getGridCodeList()
      );
      return houseTenantExcels;
   }
}