From 751d072226c4c64f5624f0c8bd2518043a861fc9 Mon Sep 17 00:00:00 2001
From: linwe <872216996@qq.com>
Date: Tue, 21 Nov 2023 11:26:56 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 src/main/java/org/springblade/modules/place/excel/PlaceAndRelImporter.java                           |   24 +
 src/main/java/org/springblade/common/excel/ExcelDictConverter.java                                   |   36 +
 src/main/java/org/springblade/modules/place/wrapper/PlaceRelWrapper.java                             |   50 ++
 src/main/java/org/springblade/modules/place/excel/PlaceImporter.java                                 |   24 +
 src/main/java/org/springblade/modules/place/mapper/PlaceMapper.java                                  |    8 
 src/main/java/org/springblade/modules/house/excel/HouseAndHoldExcel.java                             |  226 +++++++++
 src/main/java/org/springblade/modules/place/service/IPlaceService.java                               |   16 
 src/main/java/org/springblade/modules/house/service/impl/HouseServiceImpl.java                       |  132 +++++
 src/main/java/org/springblade/modules/place/controller/PlaceRelController.java                       |  126 +++++
 src/main/java/org/springblade/modules/place/excel/PlaceAndRelExcel.java                              |   81 +++
 src/main/java/org/springblade/modules/place/excel/PlaceExcel.java                                    |   55 ++
 src/main/java/org/springblade/modules/place/entity/PlaceRelEntity.java                               |  134 +++++
 src/main/java/org/springblade/modules/place/dto/PlaceRelDTO.java                                     |   34 +
 src/main/java/org/springblade/modules/place/service/IPlaceRelService.java                            |   42 +
 src/main/java/org/springblade/modules/place/service/impl/PlaceServiceImpl.java                       |  149 ++++++
 src/main/java/org/springblade/modules/house/service/IHouseService.java                               |    8 
 src/main/java/org/springblade/modules/place/controller/PlaceController.java                          |   28 +
 src/main/java/org/springblade/modules/house/controller/HouseController.java                          |   15 
 src/main/java/org/springblade/modules/place/mapper/PlaceRelMapper.xml                                |   29 +
 src/main/java/org/springblade/modules/place/service/impl/PlaceRelServiceImpl.java                    |   43 +
 src/main/java/org/springblade/modules/place/mapper/PlaceMapper.xml                                   |   23 
 src/main/java/org/springblade/modules/house/excel/HouseAndHoldImporter.java                          |   40 +
 src/main/java/org/springblade/modules/place/vo/PlaceRelVO.java                                       |   35 +
 src/main/java/org/springblade/modules/house/entity/HouseEntity.java                                  |    2 
 src/main/java/org/springblade/modules/place/mapper/PlaceRelMapper.java                               |   43 +
 src/main/java/org/springblade/modules/doorplateAddress/service/impl/DoorplateAddressServiceImpl.java |    2 
 26 files changed, 1,397 insertions(+), 8 deletions(-)

diff --git a/src/main/java/org/springblade/common/excel/ExcelDictConverter.java b/src/main/java/org/springblade/common/excel/ExcelDictConverter.java
index 6fe4f99..8a9dfaf 100644
--- a/src/main/java/org/springblade/common/excel/ExcelDictConverter.java
+++ b/src/main/java/org/springblade/common/excel/ExcelDictConverter.java
@@ -5,6 +5,8 @@
 import com.alibaba.excel.metadata.CellData;
 import com.alibaba.excel.metadata.GlobalConfiguration;
 import com.alibaba.excel.metadata.property.ExcelContentProperty;
+import com.github.xiaoymin.knife4j.core.util.StrUtil;
+import org.springblade.common.cache.DictBizCache;
 import org.springblade.common.utils.SpringUtils;
 import org.springblade.modules.system.entity.DictBiz;
 import org.springblade.modules.system.service.IDictBizService;
@@ -32,9 +34,37 @@
 		return CellDataTypeEnum.STRING;
 	}
 
+	/**
+	 * 导入excel 解析到java 对象
+	 * @param cellData
+	 * @param excelContentProperty
+	 * @param globalConfiguration
+	 * @return
+	 * @throws Exception
+	 */
 	@Override
 	public String convertToJavaData(CellData cellData, ExcelContentProperty excelContentProperty, GlobalConfiguration globalConfiguration) throws Exception {
-		return null;
+		// 获取字典类型
+		Field field = excelContentProperty.getField();
+		ExcelDictItemLabel excel = field.getAnnotation(ExcelDictItemLabel.class);
+		String dictType = excel.type();
+		// 为空返回
+		String dictLabel = cellData.getStringValue();
+		if (StrUtil.isBlank(dictLabel)) {
+			return dictLabel;
+		}
+		// 查询字典
+		List<DictBiz> list = DictBizCache.getList(dictType);
+		//解析返回
+		String key = "";
+		for (DictBiz dictBiz : list) {
+			if (dictBiz.getDictValue().equals(dictLabel)){
+				key = dictBiz.getDictKey();
+				break;
+			}
+		}
+		// 返回key
+		return key;
 	}
 
 	/**
@@ -51,13 +81,13 @@
 		Field field = excelContentProperty.getField();
 		ExcelDictItem excel = field.getAnnotation(ExcelDictItem.class);
 		String dictType = excel.type();
-		IDictBizService dictBizService = SpringUtils.getBean(IDictBizService.class);
-		List<DictBiz> list = dictBizService.getList(dictType);
+		List<DictBiz> list = DictBizCache.getList(dictType);
 		String value = "";
 		//解析返回
 		for (DictBiz dictBiz : list) {
 			if (dictBiz.getDictKey().equals(dictValue)){
 				value = dictBiz.getDictValue();
+				break;
 			}
 		}
 		return new CellData(value);
diff --git a/src/main/java/org/springblade/modules/doorplateAddress/service/impl/DoorplateAddressServiceImpl.java b/src/main/java/org/springblade/modules/doorplateAddress/service/impl/DoorplateAddressServiceImpl.java
index 32e3943..2f0a741 100644
--- a/src/main/java/org/springblade/modules/doorplateAddress/service/impl/DoorplateAddressServiceImpl.java
+++ b/src/main/java/org/springblade/modules/doorplateAddress/service/impl/DoorplateAddressServiceImpl.java
@@ -530,7 +530,7 @@
 				houseEntity.setDistrictCode(doorplateAddressEntity.getAoiCode());
 				houseEntity.setDistrictName(doorplateAddressEntity.getAoiName());
 				houseEntity.setHouseName(doorplateAddressEntity.getAddressName());
-				houseEntity.setFloor(Integer.parseInt(doorplateAddressEntity.getFloor()));
+				houseEntity.setFloor(doorplateAddressEntity.getFloor());
 				houseEntity.setBuilding(doorplateAddressEntity.getBuildingName());
 				houseEntity.setUnit(doorplateAddressEntity.getUnitName());
 				houseEntity.setRoom(doorplateAddressEntity.getHouseName());
diff --git a/src/main/java/org/springblade/modules/house/controller/HouseController.java b/src/main/java/org/springblade/modules/house/controller/HouseController.java
index be0e434..d9c7260 100644
--- a/src/main/java/org/springblade/modules/house/controller/HouseController.java
+++ b/src/main/java/org/springblade/modules/house/controller/HouseController.java
@@ -31,6 +31,8 @@
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.DateUtil;
 import org.springblade.core.tool.utils.Func;
+import org.springblade.modules.house.excel.HouseAndHoldExcel;
+import org.springblade.modules.house.excel.HouseAndHoldImporter;
 import org.springblade.modules.house.excel.HouseImporter;
 import org.springblade.modules.house.vo.HouseParam;
 import org.springblade.modules.house.excel.HouseExcel;
@@ -172,7 +174,7 @@
 	/**
 	 * 导入房屋
 	 */
-	@GetMapping("import-house")
+	@PostMapping("import-house")
 	public R importHouse(MultipartFile file, Integer isCovered) {
 		HouseImporter houseImporter = new HouseImporter(houseService, isCovered == 1);
 		ExcelUtil.save(file, houseImporter, HouseExcel.class);
@@ -190,4 +192,15 @@
 	}
 
 
+	/**
+	 * 导入房屋及住户/租户人员数据
+	 */
+	@PostMapping("import-houseAndHold")
+	public R importHouseAndHold(MultipartFile file, Integer isCovered) {
+		HouseAndHoldImporter houseImporter = new HouseAndHoldImporter(houseService, isCovered == 1);
+		ExcelUtil.save(file, houseImporter, HouseAndHoldExcel.class);
+		return R.success("操作成功");
+	}
+
+
 }
diff --git a/src/main/java/org/springblade/modules/house/entity/HouseEntity.java b/src/main/java/org/springblade/modules/house/entity/HouseEntity.java
index 6799987..bb8daf8 100644
--- a/src/main/java/org/springblade/modules/house/entity/HouseEntity.java
+++ b/src/main/java/org/springblade/modules/house/entity/HouseEntity.java
@@ -99,7 +99,7 @@
 	 * 楼层
 	 */
 	@ApiModelProperty(value = "楼层")
-	private Integer floor;
+	private String floor;
 	/**
 	 * 幢
 	 */
diff --git a/src/main/java/org/springblade/modules/house/excel/HouseAndHoldExcel.java b/src/main/java/org/springblade/modules/house/excel/HouseAndHoldExcel.java
new file mode 100644
index 0000000..1118e78
--- /dev/null
+++ b/src/main/java/org/springblade/modules/house/excel/HouseAndHoldExcel.java
@@ -0,0 +1,226 @@
+package org.springblade.modules.house.excel;
+
+import com.alibaba.excel.annotation.ExcelIgnore;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentRowHeight;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import org.springblade.common.excel.ExcelDictConverter;
+import org.springblade.common.excel.ExcelDictItem;
+import org.springblade.common.excel.ExcelDictItemLabel;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * HouseExcel
+ *
+ * @author Chill
+ */
+@Data
+@ColumnWidth(25)
+@HeadRowHeight(20)
+@ContentRowHeight(18)
+public class HouseAndHoldExcel implements Serializable {
+
+	private static final long serialVersionUID = 2L;
+
+	/** 门牌地址编码 */
+	@ExcelProperty( "门牌地址编码")
+	private String houseCode;
+
+	/** 街道名称 */
+	@ExcelProperty( "街道名称")
+	private String streetName;
+
+	/** 社区名称 */
+	@ExcelProperty( "社区名称")
+	private String communityName;
+
+	/** 所属网格 */
+	@ExcelProperty( "所属网格")
+	private String gridName;
+
+	/** 房屋名称 */
+	@ExcelProperty( "详细地址")
+	private String houseName;
+
+	/** 小区 */
+	@ExcelProperty( "小区")
+	private String districtName;
+
+	/** 幢 */
+	@ExcelProperty( "幢")
+	private String building;
+
+	/** 单元 */
+	@ExcelProperty( "单元")
+	private String unit;
+
+	/** 楼层 */
+	@ExcelProperty( "楼层")
+	private String floor;
+
+	/** 室 */
+	@ExcelProperty( "室")
+	private String room;
+
+
+	/** 面积 */
+	@ExcelProperty( "面积")
+	private BigDecimal area;
+
+	/** 物业单价 */
+	@ExcelProperty( "物业单价")
+	private BigDecimal propertyPrice;
+
+	/** 服务到期 */
+	@ExcelProperty( "服务到期")
+	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+	private Date serviceDue;
+
+	/** 备注 */
+	@ExcelProperty( "备注")
+	private String remark;
+
+	/** 姓名 */
+	@ColumnWidth(15)
+	@ExcelProperty( "姓名")
+	private String name;
+
+	/** 绑定用户--无用 */
+	@ColumnWidth(15)
+	@ExcelProperty( "绑定用户")
+	@ExcelIgnore
+	private String bingUser;
+
+	/** 手机号 */
+	@ColumnWidth(15)
+	@ExcelProperty( "手机号")
+	private String phoneNumber;
+
+	/** 角色  */
+	@ColumnWidth(15)
+	@ExcelProperty( value = "角色",converter = ExcelDictConverter.class)
+	@ExcelDictItemLabel(type = "roleType")
+	private String roleType;
+
+	/** 与角色关系(业主,父子,其他) */
+	@ColumnWidth(15)
+	@ExcelProperty( value = "与角色关系",converter = ExcelDictConverter.class)
+	@ExcelDictItemLabel(type = "roleRelation")
+	private String relationship;
+
+	/** 主要联系人 1:是  0:否 */
+	@ColumnWidth(15)
+	@ExcelProperty( value = "主要联系人",converter = ExcelDictConverter.class)
+	@ExcelDictItemLabel(type = "primaryContactType")
+	private String isPrimaryContact;
+
+	/** 居住状态 1: 是  0:否 */
+	@ColumnWidth(15)
+	@ExcelProperty( "居住状态")
+	@ExcelIgnore
+	private String residentialStatus;
+
+	/** 性别 */
+	@ColumnWidth(15)
+	@ExcelProperty( value = "性别",converter = ExcelDictConverter.class)
+	@ExcelDictItemLabel(type = "sex")
+	private String gender;
+
+	/** 身份证 */
+	@ColumnWidth(15)
+	@ExcelProperty( "身份证")
+	private String idCard;
+
+	/*-----------用户标签-----------*/
+//	/** 退役军人 */
+//	@ColumnWidth(15)
+//	@ExcelProperty( "退役军人")
+//	private String exServiceman;
+
+	/*-----------用户标签-----------*/
+
+
+	/** 是否党员  1:党员  2:群众 */
+	@ColumnWidth(15)
+	@ExcelProperty( value = "党员(是/否)",converter = ExcelDictConverter.class)
+	@ExcelDictItemLabel(type = "partyEmberType")
+	private String partyEmber;
+
+	/** 港澳台通行证 */
+	@ColumnWidth(15)
+	@ExcelProperty( "港澳台通行证")
+	private String hkmtPass;
+
+	/** 护照 */
+	@ColumnWidth(15)
+	@ExcelProperty( "护照")
+	private String passport;
+
+	/** 民族 */
+	@ColumnWidth(15)
+	@ExcelProperty( value = "民族",converter = ExcelDictConverter.class)
+	@ExcelDictItemLabel(type = "nationType")
+	private String ethnicity;
+
+	/** 学历 */
+	@ColumnWidth(15)
+	@ExcelProperty( value = "学历",converter = ExcelDictConverter.class)
+	@ExcelDictItemLabel(type = "educationType")
+	private String education;
+
+	/** 户籍登记地 */
+	@ColumnWidth(15)
+	@ExcelProperty( "户籍登记地")
+	private String hukouRegistration;
+
+	/** 工作状态 */
+	@ColumnWidth(15)
+	@ExcelProperty( value = "工作状态",converter = ExcelDictConverter.class)
+	@ExcelDictItemLabel(type = "workStatusType")
+	private String workStatus;
+
+	/** 工作单位 */
+	@ColumnWidth(15)
+	@ExcelProperty( "工作单位")
+	private String employer;
+
+	/** 婚姻状态 */
+	@ColumnWidth(15)
+	@ExcelProperty( value = "婚姻状态",converter = ExcelDictConverter.class)
+	@ExcelDictItemLabel(type = "marriageStatusType")
+	private String maritalStatus;
+
+	/** 车牌号 */
+	@ColumnWidth(15)
+	@ExcelProperty( "车牌号")
+	private String cardNumber;
+
+	/** 其他联系方式 */
+	@ColumnWidth(15)
+	@ExcelProperty( "其他联系方式")
+	private String otherContact;
+//
+//	/** 现居住地址 */
+//	@ColumnWidth(15)
+//	@ExcelProperty( "现居住地址")
+//	private String currentAddress;
+
+	/** 残疾证 */
+	@ColumnWidth(15)
+	@ExcelProperty( "残疾证")
+	private String disabilityCert;
+
+	/** 备注 */
+	@ColumnWidth(15)
+	@ExcelProperty( "备注")
+	private String remarks;
+
+
+}
+
diff --git a/src/main/java/org/springblade/modules/house/excel/HouseAndHoldImporter.java b/src/main/java/org/springblade/modules/house/excel/HouseAndHoldImporter.java
new file mode 100644
index 0000000..10846a3
--- /dev/null
+++ b/src/main/java/org/springblade/modules/house/excel/HouseAndHoldImporter.java
@@ -0,0 +1,40 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.modules.house.excel;
+
+import lombok.RequiredArgsConstructor;
+import org.springblade.core.excel.support.ExcelImporter;
+import org.springblade.modules.house.service.IHouseService;
+
+import java.util.List;
+
+/**
+ * 人房数据导入类
+ *
+ * @author Chill
+ */
+@RequiredArgsConstructor
+public class HouseAndHoldImporter implements ExcelImporter<HouseAndHoldExcel> {
+
+	private final IHouseService iHouseService;
+	private final Boolean isCovered;
+
+	@Override
+	public void save(List<HouseAndHoldExcel> data) {
+		iHouseService.importHouseAndHold(data, isCovered);
+	}
+}
diff --git a/src/main/java/org/springblade/modules/house/service/IHouseService.java b/src/main/java/org/springblade/modules/house/service/IHouseService.java
index 8eecfaa..6e21730 100644
--- a/src/main/java/org/springblade/modules/house/service/IHouseService.java
+++ b/src/main/java/org/springblade/modules/house/service/IHouseService.java
@@ -18,6 +18,7 @@
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import org.springblade.modules.house.entity.HouseEntity;
+import org.springblade.modules.house.excel.HouseAndHoldExcel;
 import org.springblade.modules.house.vo.HouseParam;
 import org.springblade.modules.house.vo.HouseTree;
 import org.springblade.modules.house.vo.HouseVO;
@@ -67,4 +68,11 @@
 	 * @return
 	 */
     List<HouseTree> getHouseTree(HouseParam houseParam);
+
+	/**
+	 * 人房数据导入
+	 * @param data
+	 * @param isCovered
+	 */
+	void importHouseAndHold(List<HouseAndHoldExcel> data, Boolean isCovered);
 }
diff --git a/src/main/java/org/springblade/modules/house/service/impl/HouseServiceImpl.java b/src/main/java/org/springblade/modules/house/service/impl/HouseServiceImpl.java
index 35e5bd4..b7a46aa 100644
--- a/src/main/java/org/springblade/modules/house/service/impl/HouseServiceImpl.java
+++ b/src/main/java/org/springblade/modules/house/service/impl/HouseServiceImpl.java
@@ -18,11 +18,15 @@
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.apache.logging.log4j.util.Strings;
 import org.springblade.common.utils.NodeTreeUtil;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.utils.BeanUtil;
 import org.springblade.modules.grid.service.IGridService;
 import org.springblade.modules.house.entity.HouseEntity;
+import org.springblade.modules.house.entity.HouseholdEntity;
+import org.springblade.modules.house.excel.HouseAndHoldExcel;
+import org.springblade.modules.house.service.IHouseholdService;
 import org.springblade.modules.house.vo.HouseParam;
 import org.springblade.modules.house.vo.HouseTree;
 import org.springblade.modules.house.vo.HouseVO;
@@ -32,8 +36,10 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
 import java.util.Objects;
 
@@ -49,6 +55,9 @@
 
 	@Autowired
 	private IGridService gridService;
+
+	@Autowired
+	private IHouseholdService householdService;
 
 	@Override
 	public IPage<HouseVO> selectHousePage(IPage<HouseVO> page, HouseVO house) {
@@ -132,4 +141,127 @@
 		}
 		return stringList;
 	}
+
+	/**
+	 * 人房数据导入
+	 * @param data
+	 * @param isCovered
+	 */
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public void importHouseAndHold(List<HouseAndHoldExcel> data, Boolean isCovered) {
+		for (HouseAndHoldExcel houseAndHoldExcel : data) {
+//			System.out.println("houseAndHoldExcel = " + houseAndHoldExcel);
+			// 保存房屋数据--一个一个插入,防止一个表格中存在多个地址编号相同的数据
+			saveHouseData(houseAndHoldExcel);
+			// 保存住户数据(包含标签)--一个一个插入,防止一个表格中存在多个地址编号相同的数据
+			saveHouseholdData(houseAndHoldExcel);
+			// 保存租户数据
+		}
+	}
+
+	/**
+	 * 保存房屋数据
+	 * @param houseAndHoldExcel
+	 */
+	@Transactional(rollbackFor = Exception.class)
+	public void saveHouseholdData(HouseAndHoldExcel houseAndHoldExcel) {
+		// 查询库中是否已存在
+		QueryWrapper<HouseEntity> wrapper = new QueryWrapper<>();
+		wrapper.eq("house_code",houseAndHoldExcel.getHouseCode())
+		.eq("is_deleted",0);
+		HouseEntity one = getOne(wrapper);
+		// 不存在则插入,存在则不操作
+		if (null == one){
+			HouseEntity houseEntity = new HouseEntity();
+			houseEntity.setHouseCode(houseAndHoldExcel.getHouseCode());
+			houseEntity.setHouseName(houseAndHoldExcel.getHouseName());
+			houseEntity.setDistrictName(houseAndHoldExcel.getDistrictName());
+			houseEntity.setUnit(houseAndHoldExcel.getUnit());
+			if (!Strings.isBlank(houseAndHoldExcel.getFloor())){
+				houseEntity.setFloor(houseAndHoldExcel.getFloor());
+			}
+			houseEntity.setRoom(houseAndHoldExcel.getRoom());
+			houseEntity.setBuilding(houseAndHoldExcel.getBuilding());
+			houseEntity.setArea(houseAndHoldExcel.getArea());
+			houseEntity.setPropertyPrice(houseAndHoldExcel.getPropertyPrice());
+			houseEntity.setServiceDue(houseAndHoldExcel.getServiceDue());
+			houseEntity.setRemark(houseAndHoldExcel.getRemark());
+			houseEntity.setCreateTime(new Date());
+			houseEntity.setCreateUser(AuthUtil.getUserId().toString());
+			houseEntity.setUpdateTime(new Date());
+			houseEntity.setUpdateUser(AuthUtil.getUserId().toString());
+			// 新增
+			save(houseEntity);
+		}
+	}
+
+	/**
+	 * 保存住户数据
+	 * @param houseAndHoldExcel
+	 */
+	@Transactional(rollbackFor = Exception.class)
+	public void saveHouseData(HouseAndHoldExcel houseAndHoldExcel) {
+		// 查询库中是否已存在
+		QueryWrapper<HouseholdEntity> wrapper = new QueryWrapper<>();
+		wrapper.eq("house_code",houseAndHoldExcel.getHouseCode())
+			.eq("is_deleted",0)
+			.eq("phone_number",houseAndHoldExcel.getPhoneNumber());
+		HouseholdEntity one = householdService.getOne(wrapper);
+		// 不存在则插入,存在则不操作
+		if (null == one){
+			HouseholdEntity householdEntity = new HouseholdEntity();
+			householdEntity.setHouseCode(houseAndHoldExcel.getHouseCode());
+			householdEntity.setName(houseAndHoldExcel.getName());
+			householdEntity.setPhoneNumber(houseAndHoldExcel.getPhoneNumber());
+			if (!Strings.isBlank(houseAndHoldExcel.getRoleType())){
+				householdEntity.setRoleType(Integer.parseInt(houseAndHoldExcel.getRoleType()));
+			}
+			if (!Strings.isBlank(houseAndHoldExcel.getRelationship())){
+				householdEntity.setRelationship(Integer.parseInt(houseAndHoldExcel.getRelationship()));
+			}
+			if (!Strings.isBlank(houseAndHoldExcel.getIsPrimaryContact())){
+				householdEntity.setIsPrimaryContact(Integer.parseInt(houseAndHoldExcel.getIsPrimaryContact()));
+			}
+			// 居住状态
+			if (!Strings.isBlank(houseAndHoldExcel.getResidentialStatus())){
+				householdEntity.setResidentialStatus(Integer.parseInt(houseAndHoldExcel.getResidentialStatus()));
+			}
+			// 性别
+			if (!Strings.isBlank(houseAndHoldExcel.getGender())){
+				householdEntity.setGender(Short.parseShort(houseAndHoldExcel.getGender()));
+			}
+			householdEntity.setIdCard(houseAndHoldExcel.getIdCard());
+			// 党员
+			if (!Strings.isBlank(houseAndHoldExcel.getPartyEmber())){
+				householdEntity.setPartyEmber(Integer.parseInt(houseAndHoldExcel.getPartyEmber()));
+			}
+			householdEntity.setHkmtPass(houseAndHoldExcel.getHkmtPass());
+			householdEntity.setPassport(houseAndHoldExcel.getPassport());
+			if (!Strings.isBlank(houseAndHoldExcel.getEthnicity())){
+				householdEntity.setEthnicity(Integer.parseInt(houseAndHoldExcel.getEthnicity()));
+			}
+			if (!Strings.isBlank(houseAndHoldExcel.getEducation())){
+				householdEntity.setEducation(Integer.parseInt(houseAndHoldExcel.getEducation()));
+			}
+			householdEntity.setHukouRegistration(houseAndHoldExcel.getHukouRegistration());
+			if (!Strings.isBlank(houseAndHoldExcel.getWorkStatus())){
+				householdEntity.setWorkStatus(Integer.parseInt(houseAndHoldExcel.getWorkStatus()));
+			}
+			householdEntity.setEmployer(houseAndHoldExcel.getEmployer());
+			if (!Strings.isBlank(houseAndHoldExcel.getMaritalStatus())){
+				householdEntity.setMaritalStatus(Integer.parseInt(houseAndHoldExcel.getMaritalStatus()));
+			}
+			householdEntity.setCardNumber(houseAndHoldExcel.getCardNumber());
+			householdEntity.setOtherContact(houseAndHoldExcel.getOtherContact());
+			householdEntity.setDisabilityCert(houseAndHoldExcel.getDisabilityCert());
+			householdEntity.setRemark(houseAndHoldExcel.getRemarks());
+			householdEntity.setCreateTime(new Date());
+			householdEntity.setCreateUser(AuthUtil.getUserId());
+			householdEntity.setUpdateTime(new Date());
+			householdEntity.setUpdateUser(AuthUtil.getUserId());
+			// 新增
+			householdService.save(householdEntity);
+		}
+	}
 }
diff --git a/src/main/java/org/springblade/modules/place/controller/PlaceController.java b/src/main/java/org/springblade/modules/place/controller/PlaceController.java
index 333aefe..c30d9a6 100644
--- a/src/main/java/org/springblade/modules/place/controller/PlaceController.java
+++ b/src/main/java/org/springblade/modules/place/controller/PlaceController.java
@@ -23,11 +23,18 @@
 import lombok.AllArgsConstructor;
 import javax.validation.Valid;
 
+import org.springblade.core.excel.util.ExcelUtil;
 import org.springblade.core.secure.BladeUser;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.Func;
+import org.springblade.modules.house.excel.HouseAndHoldExcel;
+import org.springblade.modules.house.excel.HouseAndHoldImporter;
+import org.springblade.modules.place.excel.PlaceAndRelExcel;
+import org.springblade.modules.place.excel.PlaceAndRelImporter;
+import org.springblade.modules.place.excel.PlaceExcel;
+import org.springblade.modules.place.excel.PlaceImporter;
 import org.springframework.web.bind.annotation.*;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.springblade.modules.place.entity.PlaceEntity;
@@ -35,6 +42,7 @@
 import org.springblade.modules.place.wrapper.PlaceWrapper;
 import org.springblade.modules.place.service.IPlaceService;
 import org.springblade.core.boot.ctrl.BladeController;
+import org.springframework.web.multipart.MultipartFile;
 
 /**
  * 场所表 控制器
@@ -158,4 +166,24 @@
 		return R.data(placeService.getDetail(place));
 	}
 
+
+	/**
+	 * 导入场所数据
+	 */
+	@PostMapping("/import-place")
+	public R importPlace(MultipartFile file, Integer isCovered) {
+		PlaceImporter placeImporter = new PlaceImporter(placeService, isCovered == 1);
+		ExcelUtil.save(file, placeImporter, PlaceExcel.class);
+		return R.success("操作成功");
+	}
+
+	/**
+	 * 导入场所(商超)数据
+	 */
+	@PostMapping("/import-placeAndRel")
+	public R importPlaceAndRel(MultipartFile file, Integer isCovered) {
+		PlaceAndRelImporter placeImporter = new PlaceAndRelImporter(placeService, isCovered == 1);
+		ExcelUtil.save(file, placeImporter, PlaceAndRelExcel.class);
+		return R.success("操作成功");
+	}
 }
diff --git a/src/main/java/org/springblade/modules/place/controller/PlaceRelController.java b/src/main/java/org/springblade/modules/place/controller/PlaceRelController.java
new file mode 100644
index 0000000..952d5af
--- /dev/null
+++ b/src/main/java/org/springblade/modules/place/controller/PlaceRelController.java
@@ -0,0 +1,126 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.modules.place.controller;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import lombok.AllArgsConstructor;
+import javax.validation.Valid;
+
+import org.springblade.core.secure.BladeUser;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.Func;
+import org.springframework.web.bind.annotation.*;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springblade.modules.place.entity.PlaceRelEntity;
+import org.springblade.modules.place.vo.PlaceRelVO;
+import org.springblade.modules.place.wrapper.PlaceRelWrapper;
+import org.springblade.modules.place.service.IPlaceRelService;
+import org.springblade.core.boot.ctrl.BladeController;
+
+/**
+ * 场所区域关联信息表(商超) 控制器
+ *
+ * @author BladeX
+ * @since 2023-11-20
+ */
+@RestController
+@AllArgsConstructor
+@RequestMapping("blade-placeRel/placeRel")
+@Api(value = "场所区域关联信息表(商超)", tags = "场所区域关联信息表(商超)接口")
+public class PlaceRelController {
+
+	private final IPlaceRelService placeRelService;
+
+	/**
+	 * 场所区域关联信息表(商超) 详情
+	 */
+	@GetMapping("/detail")
+	@ApiOperationSupport(order = 1)
+	@ApiOperation(value = "详情", notes = "传入placeRel")
+	public R<PlaceRelVO> detail(PlaceRelEntity placeRel) {
+		PlaceRelEntity detail = placeRelService.getOne(Condition.getQueryWrapper(placeRel));
+		return R.data(PlaceRelWrapper.build().entityVO(detail));
+	}
+	/**
+	 * 场所区域关联信息表(商超) 分页
+	 */
+	@GetMapping("/list")
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "分页", notes = "传入placeRel")
+	public R<IPage<PlaceRelVO>> list(PlaceRelEntity placeRel, Query query) {
+		IPage<PlaceRelEntity> pages = placeRelService.page(Condition.getPage(query), Condition.getQueryWrapper(placeRel));
+		return R.data(PlaceRelWrapper.build().pageVO(pages));
+	}
+
+	/**
+	 * 场所区域关联信息表(商超) 自定义分页
+	 */
+	@GetMapping("/page")
+	@ApiOperationSupport(order = 3)
+	@ApiOperation(value = "分页", notes = "传入placeRel")
+	public R<IPage<PlaceRelVO>> page(PlaceRelVO placeRel, Query query) {
+		IPage<PlaceRelVO> pages = placeRelService.selectPlaceRelPage(Condition.getPage(query), placeRel);
+		return R.data(pages);
+	}
+
+	/**
+	 * 场所区域关联信息表(商超) 新增
+	 */
+	@PostMapping("/save")
+	@ApiOperationSupport(order = 4)
+	@ApiOperation(value = "新增", notes = "传入placeRel")
+	public R save(@Valid @RequestBody PlaceRelEntity placeRel) {
+		return R.status(placeRelService.save(placeRel));
+	}
+
+	/**
+	 * 场所区域关联信息表(商超) 修改
+	 */
+	@PostMapping("/update")
+	@ApiOperationSupport(order = 5)
+	@ApiOperation(value = "修改", notes = "传入placeRel")
+	public R update(@Valid @RequestBody PlaceRelEntity placeRel) {
+		return R.status(placeRelService.updateById(placeRel));
+	}
+
+	/**
+	 * 场所区域关联信息表(商超) 新增或修改
+	 */
+	@PostMapping("/submit")
+	@ApiOperationSupport(order = 6)
+	@ApiOperation(value = "新增或修改", notes = "传入placeRel")
+	public R submit(@Valid @RequestBody PlaceRelEntity placeRel) {
+		return R.status(placeRelService.saveOrUpdate(placeRel));
+	}
+
+	/**
+	 * 场所区域关联信息表(商超) 删除
+	 */
+	@PostMapping("/remove")
+	@ApiOperationSupport(order = 7)
+	@ApiOperation(value = "逻辑删除", notes = "传入ids")
+	public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
+		return R.status(placeRelService.removeByIds(Func.toLongList(ids)));
+	}
+
+
+}
diff --git a/src/main/java/org/springblade/modules/place/dto/PlaceRelDTO.java b/src/main/java/org/springblade/modules/place/dto/PlaceRelDTO.java
new file mode 100644
index 0000000..26d6911
--- /dev/null
+++ b/src/main/java/org/springblade/modules/place/dto/PlaceRelDTO.java
@@ -0,0 +1,34 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.modules.place.dto;
+
+import org.springblade.modules.place.entity.PlaceRelEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 场所区域关联信息表(商超) 数据传输对象实体类
+ *
+ * @author BladeX
+ * @since 2023-11-20
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class PlaceRelDTO extends PlaceRelEntity {
+	private static final long serialVersionUID = 1L;
+
+}
diff --git a/src/main/java/org/springblade/modules/place/entity/PlaceRelEntity.java b/src/main/java/org/springblade/modules/place/entity/PlaceRelEntity.java
new file mode 100644
index 0000000..24af2e5
--- /dev/null
+++ b/src/main/java/org/springblade/modules/place/entity/PlaceRelEntity.java
@@ -0,0 +1,134 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.modules.place.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import lombok.Data;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+import java.util.Date;
+import lombok.EqualsAndHashCode;
+import org.springblade.core.tenant.mp.TenantEntity;
+import org.springframework.format.annotation.DateTimeFormat;
+
+/**
+ * 场所区域关联信息表(商超) 实体类
+ *
+ * @author BladeX
+ * @since 2023-11-20
+ */
+@Data
+@TableName("jczz_place_rel")
+@ApiModel(value = "PlaceRel对象", description = "场所区域关联信息表(商超)")
+public class PlaceRelEntity implements Serializable {
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 主键
+	 */
+	@JsonSerialize(using = ToStringSerializer.class)
+	@ApiModelProperty("主键id")
+	@TableId(value = "id", type = IdType.ASSIGN_ID)
+	private Long id;
+	/**
+	 * 场所id
+	 */
+	@ApiModelProperty(value = "场所id")
+	private Long placeId;
+	/**
+	 * 街道名称
+	 */
+	@ApiModelProperty(value = "街道名称")
+	private String streetName;
+	/**
+	 * 社区名称
+	 */
+	@ApiModelProperty(value = "社区名称")
+	private String communityName;
+	/**
+	 * 网格名称
+	 */
+	@ApiModelProperty(value = "网格名称")
+	private String gridName;
+	/**
+	 * 写字楼名称
+	 */
+	@ApiModelProperty(value = "写字楼名称")
+	private String buildingName;
+	/**
+	 * 门牌号
+	 */
+	@ApiModelProperty(value = "门牌号")
+	private String doorplateNum;
+	/**
+	 * 楼层
+	 */
+	@ApiModelProperty(value = "楼层")
+	private String floor;
+
+	/**
+	 * 创建人
+	 */
+	@JsonSerialize(using = ToStringSerializer.class)
+	@ApiModelProperty("创建人")
+	private Long createUser;
+
+	/**
+	 * 创建时间
+	 */
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@ApiModelProperty("创建时间")
+	private Date createTime;
+
+	/**
+	 * 更新人
+	 */
+	@JsonSerialize(using = ToStringSerializer.class)
+	@ApiModelProperty("更新人")
+	private Long updateUser;
+
+	/**
+	 * 更新时间
+	 */
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@ApiModelProperty("更新时间")
+	private Date updateTime;
+
+	/**
+	 * 备注
+	 */
+	@ApiModelProperty(value = "备注")
+	private String remark;
+
+	/**
+	 * 是否删除
+	 */
+	@TableLogic
+	@ApiModelProperty("是否已删除 0:否  1:是")
+	private Integer isDeleted;
+
+}
diff --git a/src/main/java/org/springblade/modules/place/excel/PlaceAndRelExcel.java b/src/main/java/org/springblade/modules/place/excel/PlaceAndRelExcel.java
new file mode 100644
index 0000000..a1f7c30
--- /dev/null
+++ b/src/main/java/org/springblade/modules/place/excel/PlaceAndRelExcel.java
@@ -0,0 +1,81 @@
+package org.springblade.modules.place.excel;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentRowHeight;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * HouseExcel
+ *
+ * @author Chill
+ */
+@Data
+@ColumnWidth(25)
+@HeadRowHeight(20)
+@ContentRowHeight(18)
+public class PlaceAndRelExcel implements Serializable {
+
+	private static final long serialVersionUID = 2L;
+
+	/** 序号 */
+	@ExcelProperty( "序号")
+	private String idx;
+
+	/** 街道名称 */
+	@ExcelProperty( "街道名称")
+	private String streetName;
+
+	/** 社区名称 */
+	@ExcelProperty( "社区名称")
+	private String communityName;
+
+	/** 所属网格 */
+	@ExcelProperty( "网格名称")
+	private String gridName;
+
+	/** 写字楼名称 */
+	@ExcelProperty( "写字楼名称")
+	private String buildingName;
+
+	/** 门牌号 */
+	@ExcelProperty( "门牌号")
+	private String doorplateNum;
+
+	/** 楼层 */
+	@ExcelProperty( "楼层")
+	private String floor;
+
+	/** 经营者 */
+	@ColumnWidth(15)
+	@ExcelProperty( "经营者")
+	private String name;
+
+	/** 联系电话 */
+	@ColumnWidth(15)
+	@ExcelProperty( "联系电话")
+	private String phoneNumber;
+
+	/** 企业(店铺)名称 */
+	@ColumnWidth(25)
+	@ExcelProperty( "企业(店铺)名称")
+	private String placeName;
+
+	/** 经营地址 */
+	@ExcelProperty( "经营地址")
+	private String address;
+
+	/** 标签分类代码 */
+	@ExcelProperty( "标签分类代码")
+	private String labelCode;
+
+	/** 备注 */
+	@ExcelProperty( "备注")
+	private String remark;
+
+
+}
+
diff --git a/src/main/java/org/springblade/modules/place/excel/PlaceAndRelImporter.java b/src/main/java/org/springblade/modules/place/excel/PlaceAndRelImporter.java
new file mode 100644
index 0000000..add5b38
--- /dev/null
+++ b/src/main/java/org/springblade/modules/place/excel/PlaceAndRelImporter.java
@@ -0,0 +1,24 @@
+package org.springblade.modules.place.excel;
+
+import lombok.RequiredArgsConstructor;
+import org.springblade.core.excel.support.ExcelImporter;
+import org.springblade.modules.place.service.IPlaceService;
+
+import java.util.List;
+
+/**
+ * 场所(商超)导入类
+ *
+ * @author Chill
+ */
+@RequiredArgsConstructor
+public class PlaceAndRelImporter implements ExcelImporter<PlaceAndRelExcel> {
+
+	private final IPlaceService placeService;
+	private final Boolean isCovered;
+
+	@Override
+	public void save(List<PlaceAndRelExcel> data) {
+		placeService.importAndRelPlace(data, isCovered);
+	}
+}
diff --git a/src/main/java/org/springblade/modules/place/excel/PlaceExcel.java b/src/main/java/org/springblade/modules/place/excel/PlaceExcel.java
new file mode 100644
index 0000000..a1b6961
--- /dev/null
+++ b/src/main/java/org/springblade/modules/place/excel/PlaceExcel.java
@@ -0,0 +1,55 @@
+package org.springblade.modules.place.excel;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentRowHeight;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * HouseExcel
+ *
+ * @author Chill
+ */
+@Data
+@ColumnWidth(25)
+@HeadRowHeight(20)
+@ContentRowHeight(18)
+public class PlaceExcel implements Serializable {
+
+	private static final long serialVersionUID = 2L;
+
+	/** 门牌地址编码 */
+	@ExcelProperty( "门牌地址编码")
+	private String houseCode;
+
+	/** 街道名称 */
+	@ExcelProperty( "街道名称")
+	private String streetName;
+
+	/** 社区名称 */
+	@ExcelProperty( "社区名称")
+	private String communityName;
+
+	/** 所属网格 */
+	@ExcelProperty( "所属网格")
+	private String gridName;
+
+	/** 房屋名称 */
+	@ExcelProperty( "详细地址")
+	private String houseName;
+
+	/** 姓名 */
+	@ColumnWidth(15)
+	@ExcelProperty( "姓名")
+	private String name;
+
+	/** 手机号 */
+	@ColumnWidth(15)
+	@ExcelProperty( "手机号")
+	private String phoneNumber;
+
+}
+
diff --git a/src/main/java/org/springblade/modules/place/excel/PlaceImporter.java b/src/main/java/org/springblade/modules/place/excel/PlaceImporter.java
new file mode 100644
index 0000000..a59cc2b
--- /dev/null
+++ b/src/main/java/org/springblade/modules/place/excel/PlaceImporter.java
@@ -0,0 +1,24 @@
+package org.springblade.modules.place.excel;
+
+import lombok.RequiredArgsConstructor;
+import org.springblade.core.excel.support.ExcelImporter;
+import org.springblade.modules.place.service.IPlaceService;
+
+import java.util.List;
+
+/**
+ * 场所导入类
+ *
+ * @author Chill
+ */
+@RequiredArgsConstructor
+public class PlaceImporter implements ExcelImporter<PlaceExcel> {
+
+	private final IPlaceService placeService;
+	private final Boolean isCovered;
+
+	@Override
+	public void save(List<PlaceExcel> data) {
+		placeService.importPlace(data, isCovered);
+	}
+}
diff --git a/src/main/java/org/springblade/modules/place/mapper/PlaceMapper.java b/src/main/java/org/springblade/modules/place/mapper/PlaceMapper.java
index 5bd5b18..fa1eef2 100644
--- a/src/main/java/org/springblade/modules/place/mapper/PlaceMapper.java
+++ b/src/main/java/org/springblade/modules/place/mapper/PlaceMapper.java
@@ -19,6 +19,7 @@
 import org.apache.ibatis.annotations.Param;
 import org.springblade.common.node.TreeNode;
 import org.springblade.modules.place.entity.PlaceEntity;
+import org.springblade.modules.place.excel.PlaceAndRelExcel;
 import org.springblade.modules.place.vo.PlaceVO;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -82,4 +83,11 @@
 	 * @return
 	 */
 	PlaceVO getDetail(@Param("place") PlaceEntity place);
+
+	/**
+	 * 判断商超是否导入
+	 * @param placeExcel
+	 * @return
+	 */
+	PlaceEntity getPlaceAndRelInfo(@Param("place") PlaceAndRelExcel placeExcel);
 }
diff --git a/src/main/java/org/springblade/modules/place/mapper/PlaceMapper.xml b/src/main/java/org/springblade/modules/place/mapper/PlaceMapper.xml
index bf9745a..68ecfb1 100644
--- a/src/main/java/org/springblade/modules/place/mapper/PlaceMapper.xml
+++ b/src/main/java/org/springblade/modules/place/mapper/PlaceMapper.xml
@@ -87,8 +87,8 @@
 
     <!--插入用户标签-->
     <insert id="saveUserLabel">
-        insert into jczz_user_label(user_id,label_id,create_time,update_time)
-        values(#{userId},#{labelId},now(),now())
+        insert into jczz_user_house_label(user_id,label_id,lable_type)
+        values(#{userId},#{labelId},1)
     </insert>
 
     <!--查询所有的场所(手机号不为空)-->
@@ -126,4 +126,23 @@
             and jp.id = #{place.id}
         </if>
     </select>
+
+    <!--判断商超是否导入-->
+    <select id="getPlaceAndRelInfo" resultType="org.springblade.modules.place.entity.PlaceEntity">
+        select
+        jp.*
+        from jczz_place jp
+        left join jczz_place_rel jpr on jpr.place_id = jp.id and jpr.is_deleted = 0
+        where jp.is_deleted = 0
+        <if test="place.buildingName!=null and place.buildingName!=''">
+            and jpr.building_name = #{place.buildingName}
+        </if>
+        <if test="place.doorplateNum!=null and place.doorplateNum!=''">
+            and jpr.doorplate_num = #{place.doorplateNum}
+        </if>
+        <if test="place.placeName!=null and place.placeName!=''">
+            and jp.place_name = #{place.placeName}
+        </if>
+        limit 1
+    </select>
 </mapper>
diff --git a/src/main/java/org/springblade/modules/place/mapper/PlaceRelMapper.java b/src/main/java/org/springblade/modules/place/mapper/PlaceRelMapper.java
new file mode 100644
index 0000000..8011ea4
--- /dev/null
+++ b/src/main/java/org/springblade/modules/place/mapper/PlaceRelMapper.java
@@ -0,0 +1,43 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.modules.place.mapper;
+
+import org.springblade.modules.place.entity.PlaceRelEntity;
+import org.springblade.modules.place.vo.PlaceRelVO;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import java.util.List;
+
+/**
+ * 场所区域关联信息表(商超) Mapper 接口
+ *
+ * @author BladeX
+ * @since 2023-11-20
+ */
+public interface PlaceRelMapper extends BaseMapper<PlaceRelEntity> {
+
+	/**
+	 * 自定义分页
+	 *
+	 * @param page
+	 * @param placeRel
+	 * @return
+	 */
+	List<PlaceRelVO> selectPlaceRelPage(IPage page, PlaceRelVO placeRel);
+
+
+}
diff --git a/src/main/java/org/springblade/modules/place/mapper/PlaceRelMapper.xml b/src/main/java/org/springblade/modules/place/mapper/PlaceRelMapper.xml
new file mode 100644
index 0000000..5903b7c
--- /dev/null
+++ b/src/main/java/org/springblade/modules/place/mapper/PlaceRelMapper.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.springblade.modules.place.mapper.PlaceRelMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="placeRelResultMap" type="org.springblade.modules.place.entity.PlaceRelEntity">
+        <result column="id" property="id"/>
+        <result column="place_id" property="placeId"/>
+        <result column="street_name" property="streetName"/>
+        <result column="community_name" property="communityName"/>
+        <result column="grid_name" property="gridName"/>
+        <result column="building_name" property="buildingName"/>
+        <result column="doorplate_num" property="doorplateNum"/>
+        <result column="floor" property="floor"/>
+        <result column="create_user" property="createUser"/>
+        <result column="create_time" property="createTime"/>
+        <result column="update_user" property="updateUser"/>
+        <result column="update_time" property="updateTime"/>
+        <result column="remark" property="remark"/>
+        <result column="is_deleted" property="isDeleted"/>
+    </resultMap>
+
+
+    <select id="selectPlaceRelPage" resultMap="placeRelResultMap">
+        select * from jczz_place_rel where is_deleted = 0
+    </select>
+
+
+</mapper>
diff --git a/src/main/java/org/springblade/modules/place/service/IPlaceRelService.java b/src/main/java/org/springblade/modules/place/service/IPlaceRelService.java
new file mode 100644
index 0000000..a3aae8b
--- /dev/null
+++ b/src/main/java/org/springblade/modules/place/service/IPlaceRelService.java
@@ -0,0 +1,42 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.modules.place.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.springblade.modules.place.entity.PlaceRelEntity;
+import org.springblade.modules.place.vo.PlaceRelVO;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+
+/**
+ * 场所区域关联信息表(商超) 服务类
+ *
+ * @author BladeX
+ * @since 2023-11-20
+ */
+public interface IPlaceRelService extends IService<PlaceRelEntity> {
+
+	/**
+	 * 自定义分页
+	 *
+	 * @param page
+	 * @param placeRel
+	 * @return
+	 */
+	IPage<PlaceRelVO> selectPlaceRelPage(IPage<PlaceRelVO> page, PlaceRelVO placeRel);
+
+
+}
diff --git a/src/main/java/org/springblade/modules/place/service/IPlaceService.java b/src/main/java/org/springblade/modules/place/service/IPlaceService.java
index efb1b15..9db4a3f 100644
--- a/src/main/java/org/springblade/modules/place/service/IPlaceService.java
+++ b/src/main/java/org/springblade/modules/place/service/IPlaceService.java
@@ -19,6 +19,8 @@
 import com.baomidou.mybatisplus.extension.service.IService;
 import org.springblade.common.node.TreeNode;
 import org.springblade.modules.place.entity.PlaceEntity;
+import org.springblade.modules.place.excel.PlaceAndRelExcel;
+import org.springblade.modules.place.excel.PlaceExcel;
 import org.springblade.modules.place.vo.PlaceVO;
 import org.springblade.core.mp.base.BaseService;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -76,4 +78,18 @@
 	 * @return
 	 */
 	PlaceVO getDetail(PlaceEntity place);
+
+	/**
+	 * 场所数据到导入
+	 * @param data
+	 * @param isCovered
+	 */
+    void importPlace(List<PlaceExcel> data, Boolean isCovered);
+
+	/**
+	 * 场所(商超)导入
+	 * @param data
+	 * @param isCovered
+	 */
+	void importAndRelPlace(List<PlaceAndRelExcel> data, Boolean isCovered);
 }
diff --git a/src/main/java/org/springblade/modules/place/service/impl/PlaceRelServiceImpl.java b/src/main/java/org/springblade/modules/place/service/impl/PlaceRelServiceImpl.java
new file mode 100644
index 0000000..f8363d6
--- /dev/null
+++ b/src/main/java/org/springblade/modules/place/service/impl/PlaceRelServiceImpl.java
@@ -0,0 +1,43 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.modules.place.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springblade.modules.place.entity.PlaceRelEntity;
+import org.springblade.modules.place.vo.PlaceRelVO;
+import org.springblade.modules.place.mapper.PlaceRelMapper;
+import org.springblade.modules.place.service.IPlaceRelService;
+import org.springblade.core.mp.base.BaseServiceImpl;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+
+/**
+ * 场所区域关联信息表(商超) 服务实现类
+ *
+ * @author BladeX
+ * @since 2023-11-20
+ */
+@Service
+public class PlaceRelServiceImpl extends ServiceImpl<PlaceRelMapper, PlaceRelEntity> implements IPlaceRelService {
+
+	@Override
+	public IPage<PlaceRelVO> selectPlaceRelPage(IPage<PlaceRelVO> page, PlaceRelVO placeRel) {
+		return page.setRecords(baseMapper.selectPlaceRelPage(page, placeRel));
+	}
+
+
+}
diff --git a/src/main/java/org/springblade/modules/place/service/impl/PlaceServiceImpl.java b/src/main/java/org/springblade/modules/place/service/impl/PlaceServiceImpl.java
index ea3f411..6a3cf71 100644
--- a/src/main/java/org/springblade/modules/place/service/impl/PlaceServiceImpl.java
+++ b/src/main/java/org/springblade/modules/place/service/impl/PlaceServiceImpl.java
@@ -19,6 +19,7 @@
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import lombok.AllArgsConstructor;
+import org.apache.logging.log4j.util.Strings;
 import org.springblade.common.node.TreeNode;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.secure.utils.AuthUtil;
@@ -28,8 +29,12 @@
 import org.springblade.modules.place.entity.PlaceEntity;
 import org.springblade.modules.place.entity.PlaceExtEntity;
 import org.springblade.modules.place.entity.PlacePoiLabel;
+import org.springblade.modules.place.entity.PlaceRelEntity;
+import org.springblade.modules.place.excel.PlaceAndRelExcel;
+import org.springblade.modules.place.excel.PlaceExcel;
 import org.springblade.modules.place.service.IPlaceExtService;
 import org.springblade.modules.place.service.IPlacePoiLabelService;
+import org.springblade.modules.place.service.IPlaceRelService;
 import org.springblade.modules.place.vo.PlaceVO;
 import org.springblade.modules.place.mapper.PlaceMapper;
 import org.springblade.modules.place.service.IPlaceService;
@@ -61,6 +66,9 @@
 
 	@Autowired
 	private IPlaceExtService placeExtService;
+
+	@Autowired
+	private IPlaceRelService placeRelService;
 
 	@Autowired
 	private IDoorplateAddressService doorplateAddressService;
@@ -154,6 +162,7 @@
 			if (user != null) {
 				//如果用户存在,则该用户id绑定场所
 				placeVO.setPrincipalUserId(user.getId());
+				newUser = user;
 			} else {
 				//如果用户不存在,则新增一个用户
 				newUser.setAccount(placeVO.getPhone());
@@ -270,4 +279,144 @@
 		// 返回
 		return placeVO;
 	}
+
+	/**
+	 * 场所数据到导入
+	 * @param data
+	 * @param isCovered
+	 */
+	@Override
+	public void importPlace(List<PlaceExcel> data, Boolean isCovered) {
+		for (PlaceExcel placeExcel : data) {
+			// 判断是否存在,不存在则插入,否则不操作
+			QueryWrapper<PlaceEntity> wrapper = new QueryWrapper<>();
+			wrapper.eq("is_deleted",0)
+				.eq("house_code",placeExcel.getHouseCode());
+			PlaceEntity one = getOne(wrapper);
+			if (null == one){
+				Long userId = updateUser(placeExcel);
+				// 插入场所
+				PlaceEntity placeEntity = new PlaceEntity();
+				placeEntity.setHouseCode(placeExcel.getHouseCode());
+				placeEntity.setPrincipalUserId(userId);
+				placeEntity.setCreateTime(new Date());
+				placeEntity.setCreateUser(AuthUtil.getUserId());
+				placeEntity.setUpdateTime(new Date());
+				placeEntity.setUpdateUser(AuthUtil.getUserId());
+				//一个一个插入,防止同一个表中有相同的数据
+				save(placeEntity);
+			}
+		}
+	}
+
+	/**
+	 * 更新用户信息
+	 * @param placeExcel
+	 * @return
+	 */
+	public Long updateUser(PlaceExcel placeExcel) {
+		if (!Strings.isBlank(placeExcel.getPhoneNumber()) &&
+			!Strings.isBlank(placeExcel.getName())) {
+			PlaceVO placeVO = new PlaceVO();
+			placeVO.setPhone(placeExcel.getPhoneNumber());
+			placeVO.setUsername(placeExcel.getName());
+			// 更新场所负责人
+			User user = bindUserHandle(placeVO);
+			// 返回
+			return user.getId();
+		}
+		return null;
+	}
+
+	/**
+	 * 更新用户信息
+	 * @param placeExcel
+	 * @return
+	 */
+	public Long updateUser(PlaceAndRelExcel placeExcel) {
+		if (!Strings.isBlank(placeExcel.getPhoneNumber()) &&
+			!Strings.isBlank(placeExcel.getName())) {
+			PlaceVO placeVO = new PlaceVO();
+			placeVO.setPhone(placeExcel.getPhoneNumber());
+			placeVO.setUsername(placeExcel.getName());
+			// 更新场所负责人
+			User user = bindUserHandle(placeVO);
+			// 返回
+			return user.getId();
+		}
+		return null;
+	}
+
+	/**
+	 * 场所(商超)导入
+	 * @param data
+	 * @param isCovered
+	 */
+	@Override
+	public void importAndRelPlace(List<PlaceAndRelExcel> data, Boolean isCovered) {
+		for (PlaceAndRelExcel placeExcel : data) {
+			// 判断是否存在,不存在则插入,否则不操作
+			PlaceEntity one = baseMapper.getPlaceAndRelInfo(placeExcel);
+			if (null == one){
+				Long userId = updateUser(placeExcel);
+				// 插入场所
+				PlaceEntity placeEntity = new PlaceEntity();
+				placeEntity.setPlaceName(placeExcel.getPlaceName());
+				placeEntity.setLocaltion(placeExcel.getAddress());
+				placeEntity.setPrincipalUserId(userId);
+				placeEntity.setCreateTime(new Date());
+				placeEntity.setCreateUser(AuthUtil.getUserId());
+				placeEntity.setUpdateTime(new Date());
+				placeEntity.setUpdateUser(AuthUtil.getUserId());
+				//一个一个插入,防止同一个表中有相同的数据
+				save(placeEntity);
+				// 插入标签关系表
+				savPlaceLabelBind(placeExcel,placeEntity);
+				// 插入关联数据表
+				PlaceRelEntity placeRelEntity = new PlaceRelEntity();
+				placeRelEntity.setPlaceId(placeEntity.getId());
+				placeRelEntity.setStreetName(placeExcel.getStreetName());
+				placeRelEntity.setCommunityName(placeExcel.getCommunityName());
+				placeRelEntity.setGridName(placeExcel.getGridName());
+				placeRelEntity.setBuildingName(placeExcel.getBuildingName());
+				placeRelEntity.setDoorplateNum(placeExcel.getDoorplateNum());
+				placeRelEntity.setFloor(placeExcel.getFloor());
+				placeRelEntity.setCreateTime(new Date());
+				placeRelEntity.setCreateUser(AuthUtil.getUserId());
+				placeRelEntity.setUpdateTime(new Date());
+				placeRelEntity.setUpdateUser(AuthUtil.getUserId());
+				// 新增
+				placeRelService.save(placeRelEntity);
+			}else {
+				// 只更新商铺信息
+				Long userId = updateUser(placeExcel);
+				// 插入场所
+				PlaceEntity placeEntity = new PlaceEntity();
+				placeEntity.setId(one.getId());
+				placeEntity.setPlaceName(placeExcel.getPlaceName());
+				placeEntity.setLocaltion(placeExcel.getAddress());
+				placeEntity.setPrincipalUserId(userId);
+				placeEntity.setCreateTime(new Date());
+				placeEntity.setCreateUser(AuthUtil.getUserId());
+				placeEntity.setUpdateTime(new Date());
+				placeEntity.setUpdateUser(AuthUtil.getUserId());
+				//一个一个插入,防止同一个表中有相同的数据
+				updateById(placeEntity);
+			}
+		}
+	}
+
+	/**
+	 * 插入标签关系表
+	 * @param placeExcel
+	 */
+	public void savPlaceLabelBind(PlaceAndRelExcel placeExcel,PlaceEntity placeEntity) {
+		if (!Strings.isBlank(placeExcel.getLabelCode())){
+			PlaceVO placeVO = new PlaceVO();
+			placeVO.setId(placeEntity.getId());
+			placeVO.setLabel(placeExcel.getLabelCode());
+			// 插入标签
+			placeLabelBind(placeVO);
+		}
+	}
 }
diff --git a/src/main/java/org/springblade/modules/place/vo/PlaceRelVO.java b/src/main/java/org/springblade/modules/place/vo/PlaceRelVO.java
new file mode 100644
index 0000000..2080487
--- /dev/null
+++ b/src/main/java/org/springblade/modules/place/vo/PlaceRelVO.java
@@ -0,0 +1,35 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.modules.place.vo;
+
+import org.springblade.modules.place.entity.PlaceRelEntity;
+import org.springblade.core.tool.node.INode;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 场所区域关联信息表(商超) 视图实体类
+ *
+ * @author BladeX
+ * @since 2023-11-20
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class PlaceRelVO extends PlaceRelEntity {
+	private static final long serialVersionUID = 1L;
+
+}
diff --git a/src/main/java/org/springblade/modules/place/wrapper/PlaceRelWrapper.java b/src/main/java/org/springblade/modules/place/wrapper/PlaceRelWrapper.java
new file mode 100644
index 0000000..4b73ec0
--- /dev/null
+++ b/src/main/java/org/springblade/modules/place/wrapper/PlaceRelWrapper.java
@@ -0,0 +1,50 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.modules.place.wrapper;
+
+import org.springblade.core.mp.support.BaseEntityWrapper;
+import org.springblade.core.tool.utils.BeanUtil;
+import org.springblade.modules.place.entity.PlaceRelEntity;
+import org.springblade.modules.place.vo.PlaceRelVO;
+import java.util.Objects;
+
+/**
+ * 场所区域关联信息表(商超) 包装类,返回视图层所需的字段
+ *
+ * @author BladeX
+ * @since 2023-11-20
+ */
+public class PlaceRelWrapper extends BaseEntityWrapper<PlaceRelEntity, PlaceRelVO>  {
+
+	public static PlaceRelWrapper build() {
+		return new PlaceRelWrapper();
+ 	}
+
+	@Override
+	public PlaceRelVO entityVO(PlaceRelEntity placeRel) {
+		PlaceRelVO placeRelVO = Objects.requireNonNull(BeanUtil.copy(placeRel, PlaceRelVO.class));
+
+		//User createUser = UserCache.getUser(placeRel.getCreateUser());
+		//User updateUser = UserCache.getUser(placeRel.getUpdateUser());
+		//placeRelVO.setCreateUserName(createUser.getName());
+		//placeRelVO.setUpdateUserName(updateUser.getName());
+
+		return placeRelVO;
+	}
+
+
+}

--
Gitblit v1.9.3