fix (farm): 首页,基地/地块
- 首页加载地块信息慢bug,使用redis缓存解决 - 地块户主信息,增加租赁费字段 ,包含导出/入
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
package cn.iocoder.yudao.module.farm.controller.admin.managementcenter.baseinfo;
|
package cn.iocoder.yudao.module.farm.controller.admin.managementcenter.baseinfo;
|
||||||
|
|
||||||
import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.baseinfo.vo.*;
|
import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.baseinfo.vo.*;
|
||||||
|
import cn.iocoder.yudao.module.farm.service.plotinfo.PlotLesseeService;
|
||||||
import io.swagger.v3.oas.annotations.Parameters;
|
import io.swagger.v3.oas.annotations.Parameters;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
import jakarta.validation.Valid;
|
import jakarta.validation.Valid;
|
||||||
@@ -24,7 +25,6 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
|||||||
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
||||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||||
|
|
||||||
import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.IMPORT;
|
|
||||||
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
||||||
import static cn.iocoder.yudao.module.farm.enums.CommonConstants.PLOT_TYPE_NAME_MAP;
|
import static cn.iocoder.yudao.module.farm.enums.CommonConstants.PLOT_TYPE_NAME_MAP;
|
||||||
|
|
||||||
@@ -44,6 +44,8 @@ public class PlotInfoController {
|
|||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private PlotInfoService plotInfoService;
|
private PlotInfoService plotInfoService;
|
||||||
|
@Resource
|
||||||
|
private PlotLesseeService plotLesseeService;
|
||||||
|
|
||||||
@PostMapping("/create")
|
@PostMapping("/create")
|
||||||
@Operation(summary = "创建地块")
|
@Operation(summary = "创建地块")
|
||||||
@@ -78,8 +80,8 @@ public class PlotInfoController {
|
|||||||
@Operation(summary = "获得地块")
|
@Operation(summary = "获得地块")
|
||||||
@Parameter(name = "id", description = "编号", required = true)
|
@Parameter(name = "id", description = "编号", required = true)
|
||||||
public CommonResult<PlotLesseeInfoRespVO> getPlotInfo(@RequestParam("id") String id) {
|
public CommonResult<PlotLesseeInfoRespVO> getPlotInfo(@RequestParam("id") String id) {
|
||||||
PlotLesseeInfoRespVO plotInfo = plotInfoService.getPlotLesseeInfo(id);
|
PlotInfoDO plotInfo = plotInfoService.getPlotInfo(id);
|
||||||
return success(plotInfo);
|
return success(plotLesseeService.exportPlotLesseeInfoExcel(id,plotInfo));
|
||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping("/page")
|
@GetMapping("/page")
|
||||||
@@ -101,7 +103,6 @@ public class PlotInfoController {
|
|||||||
HttpServletResponse response) throws IOException {
|
HttpServletResponse response) throws IOException {
|
||||||
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
|
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
|
||||||
List<PlotInfoDO> list = plotInfoService.getPlotInfoPage(pageReqVO).getList();
|
List<PlotInfoDO> list = plotInfoService.getPlotInfoPage(pageReqVO).getList();
|
||||||
// 导出 Excel
|
|
||||||
ExcelUtils.write(response, "地块.xls", "数据", PlotInfoRespVO.class,
|
ExcelUtils.write(response, "地块.xls", "数据", PlotInfoRespVO.class,
|
||||||
BeanUtils.toBean(list, PlotInfoRespVO.class));
|
BeanUtils.toBean(list, PlotInfoRespVO.class));
|
||||||
}
|
}
|
||||||
@@ -110,8 +111,7 @@ public class PlotInfoController {
|
|||||||
@Operation(summary = "导出户主 Excel")
|
@Operation(summary = "导出户主 Excel")
|
||||||
@ApiAccessLog(operateType = EXPORT)
|
@ApiAccessLog(operateType = EXPORT)
|
||||||
public void exportPlotLesseeInfoExcel(HttpServletResponse response) throws IOException {
|
public void exportPlotLesseeInfoExcel(HttpServletResponse response) throws IOException {
|
||||||
List<PlotLesseeForExportExcelRespVO> list = plotInfoService.getPlotLesseeInfo();
|
List<PlotLesseeForExportExcelRespVO> list = plotLesseeService.exportPlotLesseeInfoExcel();
|
||||||
// 导出 Excel
|
|
||||||
ExcelUtils.write(response, "户主.xls", "数据", PlotLesseeForExportExcelRespVO.class, list);
|
ExcelUtils.write(response, "户主.xls", "数据", PlotLesseeForExportExcelRespVO.class, list);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -122,7 +122,7 @@ public class PlotInfoController {
|
|||||||
})
|
})
|
||||||
public CommonResult<PlotLesseeImportRespVO> importPlotLesseeInfoExcel(@RequestParam("file") MultipartFile file) throws IOException {
|
public CommonResult<PlotLesseeImportRespVO> importPlotLesseeInfoExcel(@RequestParam("file") MultipartFile file) throws IOException {
|
||||||
List<PlotLesseeForImportExcelRespVO> list = ExcelUtils.read(file, PlotLesseeForImportExcelRespVO.class);
|
List<PlotLesseeForImportExcelRespVO> list = ExcelUtils.read(file, PlotLesseeForImportExcelRespVO.class);
|
||||||
PlotLesseeImportRespVO res = plotInfoService.setPlotLesseeInfo(list);
|
PlotLesseeImportRespVO res = plotLesseeService.importPlotLesseeInfoExcel(list);
|
||||||
return success(res);
|
return success(res);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -28,6 +28,7 @@ import cn.iocoder.yudao.module.farm.service.companyinfo.CompanyInfoService;
|
|||||||
import cn.iocoder.yudao.module.farm.service.deviceinfo.DeviceInfoService;
|
import cn.iocoder.yudao.module.farm.service.deviceinfo.DeviceInfoService;
|
||||||
import cn.iocoder.yudao.module.farm.service.personnelmanagement.PersonnelManagementService;
|
import cn.iocoder.yudao.module.farm.service.personnelmanagement.PersonnelManagementService;
|
||||||
import cn.iocoder.yudao.module.farm.service.plotinfo.PlotInfoService;
|
import cn.iocoder.yudao.module.farm.service.plotinfo.PlotInfoService;
|
||||||
|
import cn.iocoder.yudao.module.farm.service.plotinfo.PlotLesseeService;
|
||||||
import cn.iocoder.yudao.module.farm.service.productionplan.ProductionPlanService;
|
import cn.iocoder.yudao.module.farm.service.productionplan.ProductionPlanService;
|
||||||
import cn.iocoder.yudao.module.farm.service.specieslibrary.SpeciesLibraryService;
|
import cn.iocoder.yudao.module.farm.service.specieslibrary.SpeciesLibraryService;
|
||||||
import cn.iocoder.yudao.module.farm.utils.BigDecimalUtil;
|
import cn.iocoder.yudao.module.farm.utils.BigDecimalUtil;
|
||||||
@@ -79,6 +80,8 @@ public class BaseInfoServiceImpl implements BaseInfoService {
|
|||||||
private CompanyInfoService companyInfoService;
|
private CompanyInfoService companyInfoService;
|
||||||
@Resource
|
@Resource
|
||||||
private DeviceInfoService deviceInfoService;
|
private DeviceInfoService deviceInfoService;
|
||||||
|
@Resource
|
||||||
|
private PlotLesseeService plotLesseeService;
|
||||||
|
|
||||||
@SneakyThrows
|
@SneakyThrows
|
||||||
@Override
|
@Override
|
||||||
@@ -319,7 +322,7 @@ public class BaseInfoServiceImpl implements BaseInfoService {
|
|||||||
// 网箱
|
// 网箱
|
||||||
List<ProductionPlanGridRespVO> gridInfos = this.packageGridInfo(aDo.getPlotId());
|
List<ProductionPlanGridRespVO> gridInfos = this.packageGridInfo(aDo.getPlotId());
|
||||||
// 户主
|
// 户主
|
||||||
List<PlotLesseeDetailsRespVO> lesseeList = plotInfoService.getPlotLesseeList2(aDo.getId());
|
List<PlotLesseeDetailsRespVO> lesseeList = plotLesseeService.getPlotLesseeList(aDo.getId());
|
||||||
String plotManager = employeeMap.getOrDefault(aDo.getEmployeeId(), "系统");
|
String plotManager = employeeMap.getOrDefault(aDo.getEmployeeId(), "系统");
|
||||||
// String typeName = PLOT_TYPE_NAME_MAP.get(Integer.valueOf(aDo.getType()));
|
// String typeName = PLOT_TYPE_NAME_MAP.get(Integer.valueOf(aDo.getType()));
|
||||||
BaseInfoRespVO.PlotInfo target = new BaseInfoRespVO.PlotInfo(
|
BaseInfoRespVO.PlotInfo target = new BaseInfoRespVO.PlotInfo(
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ import cn.iocoder.yudao.module.farm.service.farmingrecord.FarmingRecordService;
|
|||||||
import cn.iocoder.yudao.module.farm.service.modelmanagement.ModelManagementService;
|
import cn.iocoder.yudao.module.farm.service.modelmanagement.ModelManagementService;
|
||||||
import cn.iocoder.yudao.module.farm.service.personnelmanagement.PersonnelManagementService;
|
import cn.iocoder.yudao.module.farm.service.personnelmanagement.PersonnelManagementService;
|
||||||
import cn.iocoder.yudao.module.farm.service.plotinfo.PlotInfoService;
|
import cn.iocoder.yudao.module.farm.service.plotinfo.PlotInfoService;
|
||||||
|
import cn.iocoder.yudao.module.farm.service.plotinfo.PlotLesseeService;
|
||||||
import cn.iocoder.yudao.module.farm.service.productionplan.ProductionPlanService;
|
import cn.iocoder.yudao.module.farm.service.productionplan.ProductionPlanService;
|
||||||
import cn.iocoder.yudao.module.farm.service.specieslibrary.SpeciesLibraryService;
|
import cn.iocoder.yudao.module.farm.service.specieslibrary.SpeciesLibraryService;
|
||||||
import cn.iocoder.yudao.module.farm.utils.BigDecimalUtil;
|
import cn.iocoder.yudao.module.farm.utils.BigDecimalUtil;
|
||||||
@@ -53,8 +54,9 @@ public class HomeServiceImpl implements HomeService {
|
|||||||
private final SpeciesLibraryService speciesLibraryService;
|
private final SpeciesLibraryService speciesLibraryService;
|
||||||
private final FarmingRecordService farmingRecordService;
|
private final FarmingRecordService farmingRecordService;
|
||||||
private final DeviceInfoService deviceService;
|
private final DeviceInfoService deviceService;
|
||||||
|
private final PlotLesseeService plotLesseeService;
|
||||||
|
|
||||||
public HomeServiceImpl(BaseInfoService baseInfoService, PlotInfoService plotInfoService, ProductionPlanService productionPlanService, CropFarmingCenterService cropFarmingCenterService, PersonnelManagementService personnelManagementService, ModelManagementService modelManagementService, SpeciesLibraryService speciesLibraryService, FarmingRecordService farmingRecordService, DeviceInfoService deviceService) {
|
public HomeServiceImpl(BaseInfoService baseInfoService, PlotInfoService plotInfoService, ProductionPlanService productionPlanService, CropFarmingCenterService cropFarmingCenterService, PersonnelManagementService personnelManagementService, ModelManagementService modelManagementService, SpeciesLibraryService speciesLibraryService, FarmingRecordService farmingRecordService, DeviceInfoService deviceService, PlotLesseeService plotLesseeService) {
|
||||||
this.baseInfoService = baseInfoService;
|
this.baseInfoService = baseInfoService;
|
||||||
this.plotInfoService = plotInfoService;
|
this.plotInfoService = plotInfoService;
|
||||||
this.productionPlanService = productionPlanService;
|
this.productionPlanService = productionPlanService;
|
||||||
@@ -64,6 +66,7 @@ public class HomeServiceImpl implements HomeService {
|
|||||||
this.speciesLibraryService = speciesLibraryService;
|
this.speciesLibraryService = speciesLibraryService;
|
||||||
this.farmingRecordService = farmingRecordService;
|
this.farmingRecordService = farmingRecordService;
|
||||||
this.deviceService = deviceService;
|
this.deviceService = deviceService;
|
||||||
|
this.plotLesseeService = plotLesseeService;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -194,7 +197,7 @@ public class HomeServiceImpl implements HomeService {
|
|||||||
// 地块浮框信息
|
// 地块浮框信息
|
||||||
List<PlotPopupFrame> plotPopupFrame = this.getPlotPopupFrame(e.getId(), employeeNameMap);
|
List<PlotPopupFrame> plotPopupFrame = this.getPlotPopupFrame(e.getId(), employeeNameMap);
|
||||||
// 户主流转信息
|
// 户主流转信息
|
||||||
List<PlotLesseeDetailsRespVO> lesseeList = plotInfoService.getPlotLesseeList(e.getId());
|
List<PlotLesseeDetailsRespVO> lesseeList = plotLesseeService.getPlotLesseeHistoryList(e.getId());
|
||||||
|
|
||||||
PlotInfo t = new PlotInfo();
|
PlotInfo t = new PlotInfo();
|
||||||
t.setBaseId(e.getBaseId());
|
t.setBaseId(e.getBaseId());
|
||||||
@@ -387,14 +390,12 @@ public class HomeServiceImpl implements HomeService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private List<PlotLesseeDetailsRespVO> getLs(String plotId) {
|
private List<PlotLesseeDetailsRespVO> getLs(String plotId) {
|
||||||
List<PlotLesseeDetailsRespVO> res = plotInfoService.getPlotLesseeList(plotId);
|
return plotLesseeService.getPlotLesseeHistoryList(plotId);
|
||||||
return res;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<DeviceMonitorDataRespVO> getDs(String plotId,String tenantId) {
|
private List<DeviceMonitorDataRespVO> getDs(String plotId,String tenantId) {
|
||||||
List<DeviceMonitorDataRespVO> res = deviceService.deviceList(plotId,tenantId);
|
return deviceService.deviceList(plotId,tenantId);
|
||||||
return res;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private BaseOverviewInfo getCompanyInfo() {
|
private BaseOverviewInfo getCompanyInfo() {
|
||||||
|
|||||||
@@ -49,21 +49,6 @@ public interface PlotInfoService {
|
|||||||
*/
|
*/
|
||||||
PlotInfoDO getPlotInfo(String id);
|
PlotInfoDO getPlotInfo(String id);
|
||||||
|
|
||||||
/**
|
|
||||||
* 地块&租户信息
|
|
||||||
* @param id
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
PlotLesseeInfoRespVO getPlotLesseeInfo(String id);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 导出户主信息
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
List<PlotLesseeForExportExcelRespVO> getPlotLesseeInfo();
|
|
||||||
|
|
||||||
PlotLesseeImportRespVO setPlotLesseeInfo(List<PlotLesseeForImportExcelRespVO> req);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 通过基地ID获取地块集合
|
* 通过基地ID获取地块集合
|
||||||
* @param baseId
|
* @param baseId
|
||||||
@@ -120,12 +105,4 @@ public interface PlotInfoService {
|
|||||||
|
|
||||||
Long countPlotByTenantId(String tenantId);
|
Long countPlotByTenantId(String tenantId);
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取地块下 有多户主信息
|
|
||||||
* @param plotId
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
List<PlotLesseeDetailsRespVO> getPlotLesseeList(String plotId);
|
|
||||||
|
|
||||||
List<PlotLesseeDetailsRespVO> getPlotLesseeList2(String plotId);
|
|
||||||
}
|
}
|
||||||
@@ -46,20 +46,15 @@ public class PlotInfoServiceImpl implements PlotInfoService {
|
|||||||
|
|
||||||
private final BaseInfoMapper baseInfoMapper;
|
private final BaseInfoMapper baseInfoMapper;
|
||||||
private final PlotInfoMapper plotInfoMapper;
|
private final PlotInfoMapper plotInfoMapper;
|
||||||
private final PlotLesseeMapper plotLesseeMapper;
|
private final PlotLesseeService plotLesseeService;
|
||||||
private final ProductionPlanService productionPlanService;
|
private final ProductionPlanService productionPlanService;
|
||||||
private final PersonnelManagementService personnelManagementService;
|
private final PersonnelManagementService personnelManagementService;
|
||||||
private final PlotInfoCacheService pCatchService;
|
private final PlotInfoCacheService pCatchService;
|
||||||
|
|
||||||
public PlotInfoServiceImpl(
|
public PlotInfoServiceImpl(BaseInfoMapper baseInfoMapper, PlotInfoMapper plotInfoMapper, PlotLesseeService plotLesseeService, ProductionPlanService productionPlanService, PersonnelManagementService personnelManagementService, PlotInfoCacheService pCatchService) {
|
||||||
BaseInfoMapper baseInfoMapper,
|
|
||||||
PlotInfoMapper plotInfoMapper,
|
|
||||||
PlotLesseeMapper plotLesseeMapper,
|
|
||||||
ProductionPlanService productionPlanService,
|
|
||||||
PersonnelManagementService personnelManagementService, PlotInfoCacheService pCatchService) {
|
|
||||||
this.baseInfoMapper = baseInfoMapper;
|
this.baseInfoMapper = baseInfoMapper;
|
||||||
this.plotInfoMapper = plotInfoMapper;
|
this.plotInfoMapper = plotInfoMapper;
|
||||||
this.plotLesseeMapper = plotLesseeMapper;
|
this.plotLesseeService = plotLesseeService;
|
||||||
this.productionPlanService = productionPlanService;
|
this.productionPlanService = productionPlanService;
|
||||||
this.personnelManagementService = personnelManagementService;
|
this.personnelManagementService = personnelManagementService;
|
||||||
this.pCatchService = pCatchService;
|
this.pCatchService = pCatchService;
|
||||||
@@ -69,8 +64,10 @@ public class PlotInfoServiceImpl implements PlotInfoService {
|
|||||||
@Override
|
@Override
|
||||||
public String createPlotInfo(PlotInfoSaveReqVO createReqVO) {
|
public String createPlotInfo(PlotInfoSaveReqVO createReqVO) {
|
||||||
LoginUser user = getLoginUser();
|
LoginUser user = getLoginUser();
|
||||||
|
|
||||||
// 校验地块面积
|
// 校验地块面积
|
||||||
validatePlotArea(createReqVO.getBaseId(),null,createReqVO.getPlotArea());
|
validatePlotArea(createReqVO.getBaseId(),null,createReqVO.getPlotArea());
|
||||||
|
|
||||||
// 插入
|
// 插入
|
||||||
PlotInfoDO plotInfo = BeanUtils.toBean(createReqVO, PlotInfoDO.class);
|
PlotInfoDO plotInfo = BeanUtils.toBean(createReqVO, PlotInfoDO.class);
|
||||||
plotInfo.setId(IdUtil.fastUUID());
|
plotInfo.setId(IdUtil.fastUUID());
|
||||||
@@ -78,11 +75,8 @@ public class PlotInfoServiceImpl implements PlotInfoService {
|
|||||||
plotInfo.setTenantId(String.valueOf(user.getTenantId()));
|
plotInfo.setTenantId(String.valueOf(user.getTenantId()));
|
||||||
plotInfoMapper.insert(plotInfo);
|
plotInfoMapper.insert(plotInfo);
|
||||||
|
|
||||||
if (createReqVO.getPlotLeaseStatus() == 1) {
|
// 插入户主信息
|
||||||
PlotLesseeSaveReqVO plotLesseeSaveReqVO = createReqVO.getPlotLessee();
|
plotLesseeService.insertPlotLessee(createReqVO, createReqVO.getBaseId(), plotInfo.getId(), plotInfo.getPlotName());
|
||||||
PlotLesseeDO plotLesseeDO = BeanUtils.toBean(plotLesseeSaveReqVO, PlotLesseeDO.class);
|
|
||||||
insertLessee(plotLesseeDO, createReqVO.getBaseId(), plotInfo.getId(), plotInfo.getPlotName());
|
|
||||||
}
|
|
||||||
|
|
||||||
// 缓存处理
|
// 缓存处理
|
||||||
pCatchService.createOrUpdatePlotInfo(plotInfo);
|
pCatchService.createOrUpdatePlotInfo(plotInfo);
|
||||||
@@ -91,51 +85,22 @@ public class PlotInfoServiceImpl implements PlotInfoService {
|
|||||||
return plotInfo.getId();
|
return plotInfo.getId();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void insertLessee(PlotLesseeDO plotLesseeDO,String baseId,String plotId,String plotName) {
|
|
||||||
LoginUser user = getLoginUser();
|
|
||||||
|
|
||||||
plotLesseeDO.setId(IdUtil.fastUUID());
|
|
||||||
plotLesseeDO.setTenantId(String.valueOf(user.getTenantId()));
|
|
||||||
plotLesseeDO.setLeaseStatus(CommonConstants.YES_CODE);
|
|
||||||
plotLesseeDO.setBaseId(baseId);
|
|
||||||
plotLesseeDO.setPlotId(plotId);
|
|
||||||
plotLesseeDO.setPlotName(plotName);
|
|
||||||
plotLesseeMapper.insert(plotLesseeDO);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
@Override
|
@Override
|
||||||
public void updatePlotInfo(PlotInfoSaveReqVO updateReqVO) {
|
public void updatePlotInfo(PlotInfoSaveReqVO updateReqVO) {
|
||||||
updateReqVO.setPlotId(updateReqVO.getCode());
|
updateReqVO.setPlotId(updateReqVO.getCode());
|
||||||
// 校验存在
|
// 校验存在
|
||||||
validatePlotInfoExists(updateReqVO.getId());
|
validatePlotInfoExists(updateReqVO.getId());
|
||||||
|
|
||||||
// 校验地块面积
|
// 校验地块面积
|
||||||
validatePlotArea(updateReqVO.getBaseId(), updateReqVO.getId(), updateReqVO.getPlotArea());
|
validatePlotArea(updateReqVO.getBaseId(), updateReqVO.getId(), updateReqVO.getPlotArea());
|
||||||
|
|
||||||
// 更新
|
// 更新
|
||||||
PlotInfoDO plotInfo = BeanUtils.toBean(updateReqVO, PlotInfoDO.class);
|
PlotInfoDO plotInfo = BeanUtils.toBean(updateReqVO, PlotInfoDO.class);
|
||||||
plotInfoMapper.updateById(plotInfo);
|
plotInfoMapper.updateById(plotInfo);
|
||||||
|
|
||||||
if (updateReqVO.getPlotLeaseStatus() == 0) {
|
// 更新租户信息
|
||||||
return;
|
plotLesseeService.updatePlotLessee(updateReqVO);
|
||||||
}
|
|
||||||
|
|
||||||
// 重置所有租赁状态为: 未租
|
|
||||||
List<PlotLesseeDO> doList = plotLesseeMapper.selectList("plot_id", updateReqVO.getId());
|
|
||||||
doList.forEach(e -> e.setLeaseStatus(CommonConstants.NO_CODE));
|
|
||||||
plotLesseeMapper.updateBatch(doList);
|
|
||||||
Set<String> collect = doList.stream().map(e-> e.getLeaseIdCard()).collect(Collectors.toSet());
|
|
||||||
|
|
||||||
// 指定当前的租户状态为: 已租
|
|
||||||
PlotLesseeSaveReqVO plotLesseeSaveReqVO = updateReqVO.getPlotLessee();
|
|
||||||
String idCard = plotLesseeSaveReqVO.getLeaseIdCard();
|
|
||||||
PlotLesseeDO plotLesseeDO = BeanUtils.toBean(plotLesseeSaveReqVO, PlotLesseeDO.class);
|
|
||||||
if (collect.contains(idCard)) {
|
|
||||||
plotLesseeDO.setLeaseStatus(CommonConstants.YES_CODE);
|
|
||||||
plotLesseeMapper.updateById(plotLesseeDO);
|
|
||||||
} else {
|
|
||||||
insertLessee(plotLesseeDO, updateReqVO.getBaseId(), plotInfo.getId(), plotInfo.getPlotName());
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -185,181 +150,6 @@ public class PlotInfoServiceImpl implements PlotInfoService {
|
|||||||
return plotInfoDO;
|
return plotInfoDO;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public PlotLesseeInfoRespVO getPlotLesseeInfo(String id) {
|
|
||||||
LambdaQueryWrapperX<PlotLesseeDO> x = new LambdaQueryWrapperX<>();
|
|
||||||
x.eq(PlotLesseeDO::getTenantId, getLoginUser().getTenantId().toString());
|
|
||||||
x.eq(PlotLesseeDO::getDeleted, CommonConstants.NO_CODE);
|
|
||||||
x.eq(PlotLesseeDO::getLeaseStatus, CommonConstants.YES_CODE);
|
|
||||||
x.eq(PlotLesseeDO::getPlotId, id);
|
|
||||||
PlotLesseeDO plotLesseeDO = plotLesseeMapper.selectOne(x);
|
|
||||||
|
|
||||||
PlotLesseeDetailsRespVO subLesseeInfo = new PlotLesseeDetailsRespVO();
|
|
||||||
if (ObjectUtils.isNotEmpty(plotLesseeDO)) {
|
|
||||||
subLesseeInfo = BeanUtils.toBean(plotLesseeDO, PlotLesseeDetailsRespVO.class);
|
|
||||||
}
|
|
||||||
|
|
||||||
PlotInfoDO plotInfoDO = this.getPlotInfo(id);
|
|
||||||
PlotLesseeInfoRespVO plotLesseeDetailsRespVO = BeanUtils.toBean(plotInfoDO, PlotLesseeInfoRespVO.class);
|
|
||||||
plotLesseeDetailsRespVO.setTypeName(PLOT_TYPE_NAME_MAP.get(plotLesseeDetailsRespVO.getType()));
|
|
||||||
plotLesseeDetailsRespVO.setPlotLessee(subLesseeInfo);
|
|
||||||
plotLesseeDetailsRespVO.setPlotLeaseStatusName(LEASE_STATUS_MAP.get(plotLesseeDetailsRespVO.getPlotLeaseStatus()));
|
|
||||||
plotLesseeDetailsRespVO.setCode(plotInfoDO.getPlotId());
|
|
||||||
plotLesseeDetailsRespVO.setUpdateStateForCode(NO_CODE);
|
|
||||||
return plotLesseeDetailsRespVO;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<PlotLesseeForExportExcelRespVO> getPlotLesseeInfo() {
|
|
||||||
|
|
||||||
List<BaseInfoDO> bList = baseInfoMapper.selectList();
|
|
||||||
Map<String, String> baseNameMap = bList.stream().collect(Collectors.toMap(BaseInfoDO::getId, BaseInfoDO::getName, (v1, v2) -> v1));
|
|
||||||
Map<String, String> baseCodeMap = bList.stream().collect(Collectors.toMap(BaseInfoDO::getId, BaseInfoDO::getCode, (v1, v2) -> v1));
|
|
||||||
|
|
||||||
List<PlotInfoDO> pList = plotInfoMapper.selectList();
|
|
||||||
Map<String, String> plotCodeMap = pList.stream().collect(Collectors.toMap(PlotInfoDO::getId, PlotInfoDO::getPlotId, (v1, v2) -> v1));
|
|
||||||
|
|
||||||
LambdaQueryWrapperX<PlotLesseeDO> x = new LambdaQueryWrapperX<>();
|
|
||||||
x.eq(PlotLesseeDO::getLeaseStatus, YES_CODE);
|
|
||||||
List<PlotLesseeDO> lList = plotLesseeMapper.selectList(x);
|
|
||||||
Map<String, PlotLesseeDO> lesObjMap = lList.stream().collect(Collectors.toMap(PlotLesseeDO::getPlotId, e -> e, (v1, v2) -> v1));
|
|
||||||
|
|
||||||
List<PlotInfoDO> plotInfoDOS = plotInfoMapper.selectList();
|
|
||||||
return plotInfoDOS.stream().map(p -> {
|
|
||||||
PlotLesseeForExportExcelRespVO target = new PlotLesseeForExportExcelRespVO(
|
|
||||||
baseCodeMap.get(p.getBaseId()), baseNameMap.get(p.getBaseId()),
|
|
||||||
plotCodeMap.get(p.getId()), p.getPlotName(), NO_NAME);
|
|
||||||
|
|
||||||
if (p.getPlotLeaseStatus() == 1 && lesObjMap.containsKey(p.getId())) {
|
|
||||||
// 已租状态,计算租赁剩余天数
|
|
||||||
PlotLesseeDO l = lesObjMap.get(p.getId());
|
|
||||||
target.setLeaseName(l.getLeaseName());
|
|
||||||
target.setLeaseIdCard(l.getLeaseIdCard());
|
|
||||||
target.setLeasePhone(l.getLeasePhone());
|
|
||||||
target.setLeaseStartDate(l.getLeaseStartDate());
|
|
||||||
target.setLeaseEndDate(l.getLeaseEndDate());
|
|
||||||
target.setLeaseRental(l.getLeaseRental().setScale(2, RoundingMode.HALF_UP));
|
|
||||||
target.setExpirationDays(getDaysUntilLeaseEnd(l.getLeaseEndDate()));
|
|
||||||
}
|
|
||||||
return target;
|
|
||||||
}).toList();
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public long getDaysUntilLeaseEnd(LocalDate leaseEndDate) {
|
|
||||||
LocalDate today = LocalDate.now();
|
|
||||||
return ChronoUnit.DAYS.between(today, leaseEndDate);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public PlotLesseeImportRespVO setPlotLesseeInfo(List<PlotLesseeForImportExcelRespVO> req) {
|
|
||||||
|
|
||||||
Map<String, String> baseNameMap = baseInfoMapper.selectList().stream().collect(Collectors.toMap(BaseInfoDO::getId, BaseInfoDO::getName, (v1, v2) -> v1));
|
|
||||||
Map<String, String> plotNameMap = plotInfoMapper.selectList().stream().collect(Collectors.toMap(PlotInfoDO::getPlotName, PlotInfoDO::getId, (v1, v2) -> v1));
|
|
||||||
|
|
||||||
PlotLesseeImportRespVO res = new PlotLesseeImportRespVO();
|
|
||||||
res.setTotal(req.size());
|
|
||||||
|
|
||||||
List<PlotLesseeForImportExcelRespVO> targetList = req.stream().filter(vo -> YES_NAME.equals(vo.getIsModified())).collect(Collectors.toList());
|
|
||||||
|
|
||||||
int successCount = 0;
|
|
||||||
int failuresCount = 0;
|
|
||||||
int unmodifiedCount = req.size() - targetList.size();
|
|
||||||
List<PlotLesseeImportRespVO.Row> row = new ArrayList<>();
|
|
||||||
for (PlotLesseeForImportExcelRespVO pl : targetList) {
|
|
||||||
|
|
||||||
PlotInfoDO p = plotInfoMapper.selectOne(PlotInfoDO::getPlotName, pl.getPlotName());
|
|
||||||
if (ObjectUtils.isEmpty(p)) {
|
|
||||||
failuresCount++;
|
|
||||||
row.add(new PlotLesseeImportRespVO.Row(pl.getPlotCode(), pl.getPlotName()));
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
PlotLesseeDO sourcePObj = plotLesseeMapper.selectOne(
|
|
||||||
PlotLesseeDO::getPlotName, pl.getPlotName(),
|
|
||||||
PlotLesseeDO::getLeaseStatus, YES_CODE);
|
|
||||||
|
|
||||||
if (ObjectUtils.isEmpty(sourcePObj)) {
|
|
||||||
// 首次添加租户信息, 说明从未添加过户主信息, 直接录入即可
|
|
||||||
this.pInsert(p,pl,baseNameMap);
|
|
||||||
successCount++;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.isEmpty(pl)) {
|
|
||||||
p.setPlotLeaseStatus(NO_CODE);
|
|
||||||
plotInfoMapper.updateById(p);
|
|
||||||
|
|
||||||
sourcePObj.setLeaseStatus(NO_CODE);
|
|
||||||
plotLesseeMapper.updateById(sourcePObj);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.compareObj(sourcePObj,pl)) {
|
|
||||||
// 1. 更新原地块户主信息
|
|
||||||
sourcePObj.setLeaseStatus(NO_CODE);
|
|
||||||
plotLesseeMapper.updateById(sourcePObj);
|
|
||||||
|
|
||||||
this.pInsert(p,pl,baseNameMap);
|
|
||||||
successCount++;
|
|
||||||
}else{
|
|
||||||
unmodifiedCount++;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
res.setSuccessCount(successCount);
|
|
||||||
res.setFailuresCount(failuresCount);
|
|
||||||
res.setUnmodifiedCount(unmodifiedCount);
|
|
||||||
res.setFailuresList(row);
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void pInsert(PlotInfoDO p,PlotLesseeForImportExcelRespVO pl,Map<String, String> baseNameMap) {
|
|
||||||
PlotLesseeDO target = new PlotLesseeDO();
|
|
||||||
target.setLeaseName(pl.getLeaseName());
|
|
||||||
target.setLeaseIdCard(pl.getLeaseIdCard());
|
|
||||||
target.setLeasePhone(pl.getLeasePhone());
|
|
||||||
target.setLeaseStartDate(pl.getLeaseStartDate());
|
|
||||||
target.setLeaseEndDate(pl.getLeaseEndDate());
|
|
||||||
|
|
||||||
target.setId(IdUtil.fastUUID());
|
|
||||||
target.setTenantId(String.valueOf(getLoginUser().getTenantId()));
|
|
||||||
target.setLeaseStatus(CommonConstants.YES_CODE);
|
|
||||||
|
|
||||||
target.setBaseId(p.getBaseId());
|
|
||||||
target.setBaseName(baseNameMap.get(p.getBaseId()));
|
|
||||||
target.setPlotId(p.getId());
|
|
||||||
target.setPlotName(p.getPlotName());
|
|
||||||
plotLesseeMapper.insert(target);
|
|
||||||
|
|
||||||
p.setPlotLeaseStatus(YES_CODE);
|
|
||||||
plotInfoMapper.updateById(p);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 对比结果不一致返回: true (至少有一个字段不同)
|
|
||||||
* 对比结果一致返回: false (所有字段都相同)
|
|
||||||
* @param s
|
|
||||||
* @param t
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
private boolean compareObj(PlotLesseeDO s, PlotLesseeForImportExcelRespVO t) {
|
|
||||||
return ObjectUtils.notEqual(s.getLeaseName(), t.getLeaseName()) ||
|
|
||||||
ObjectUtils.notEqual(s.getLeaseIdCard(), t.getLeaseIdCard()) ||
|
|
||||||
ObjectUtils.notEqual(s.getLeasePhone(), t.getLeasePhone()) ||
|
|
||||||
!s.getLeaseStartDate().isEqual(t.getLeaseStartDate()) ||
|
|
||||||
!s.getLeaseEndDate().isEqual(t.getLeaseEndDate());
|
|
||||||
}
|
|
||||||
|
|
||||||
private boolean isEmpty(PlotLesseeForImportExcelRespVO t) {
|
|
||||||
return Objects.equals(t.getLeaseName(), null) ||
|
|
||||||
Objects.equals(t.getLeaseIdCard(), null) ||
|
|
||||||
Objects.equals(t.getLeasePhone(), null) ||
|
|
||||||
Objects.equals(t.getLeaseStartDate(), null) ||
|
|
||||||
Objects.equals(t.getLeaseEndDate(), null);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<PlotInfoDO> getPlotInfos(String baseId) {
|
public List<PlotInfoDO> getPlotInfos(String baseId) {
|
||||||
// 员工集合 <id,name>
|
// 员工集合 <id,name>
|
||||||
@@ -491,25 +281,4 @@ public class PlotInfoServiceImpl implements PlotInfoService {
|
|||||||
return plotInfoMapper.selectCount(wrapperX);
|
return plotInfoMapper.selectCount(wrapperX);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<PlotLesseeDetailsRespVO> getPlotLesseeList(String plotId) {
|
|
||||||
LambdaQueryWrapperX<PlotLesseeDO> x = new LambdaQueryWrapperX<>();
|
|
||||||
x.eq(PlotLesseeDO::getDeleted, CommonConstants.NO_CODE);
|
|
||||||
x.eq(PlotLesseeDO::getLeaseStatus, CommonConstants.NO_CODE);
|
|
||||||
x.eq(PlotLesseeDO::getPlotId, plotId);
|
|
||||||
List<PlotLesseeDO> list = plotLesseeMapper.selectList(x);
|
|
||||||
|
|
||||||
return BeanUtils.toBean(list, PlotLesseeDetailsRespVO.class);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<PlotLesseeDetailsRespVO> getPlotLesseeList2(String plotId) {
|
|
||||||
LambdaQueryWrapperX<PlotLesseeDO> x = new LambdaQueryWrapperX<>();
|
|
||||||
x.eq(PlotLesseeDO::getDeleted, CommonConstants.NO_CODE);
|
|
||||||
x.eq(PlotLesseeDO::getLeaseStatus, YES_CODE);
|
|
||||||
x.eq(PlotLesseeDO::getPlotId, plotId);
|
|
||||||
List<PlotLesseeDO> list = plotLesseeMapper.selectList(x);
|
|
||||||
|
|
||||||
return BeanUtils.toBean(list, PlotLesseeDetailsRespVO.class);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
@@ -1,9 +1,54 @@
|
|||||||
package cn.iocoder.yudao.module.farm.service.plotinfo;
|
package cn.iocoder.yudao.module.farm.service.plotinfo;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.baseinfo.vo.*;
|
||||||
|
import cn.iocoder.yudao.module.farm.dal.dataobject.plotinfo.PlotInfoDO;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @description: 租赁信息
|
* @description: 租赁信息
|
||||||
* @author: binda
|
* @author: binda
|
||||||
* @data: 2025/10/15 13:57
|
* @data: 2025/10/15 13:57
|
||||||
*/
|
*/
|
||||||
public interface PlotLesseeService {
|
public interface PlotLesseeService {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 插入数据
|
||||||
|
*
|
||||||
|
* @param createReqVO
|
||||||
|
*/
|
||||||
|
void insertPlotLessee(PlotInfoSaveReqVO createReqVO, String baseId, String plotId, String plotName);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改数据
|
||||||
|
*/
|
||||||
|
void updatePlotLessee(PlotInfoSaveReqVO updateReqVO);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 导入
|
||||||
|
* @param req
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
PlotLesseeImportRespVO importPlotLesseeInfoExcel(List<PlotLesseeForImportExcelRespVO> req);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 导出
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
List<PlotLesseeForExportExcelRespVO> exportPlotLesseeInfoExcel();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取租户集合
|
||||||
|
* @param plotId
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
List<PlotLesseeDetailsRespVO> getPlotLesseeList(String plotId);
|
||||||
|
List<PlotLesseeDetailsRespVO> getPlotLesseeHistoryList(String plotId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 地块&租户信息
|
||||||
|
* @param id
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
PlotLesseeInfoRespVO exportPlotLesseeInfoExcel(String id, PlotInfoDO plotInfo);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,9 +1,30 @@
|
|||||||
package cn.iocoder.yudao.module.farm.service.plotinfo;
|
package cn.iocoder.yudao.module.farm.service.plotinfo;
|
||||||
|
|
||||||
|
import cn.hutool.core.util.IdUtil;
|
||||||
|
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||||
|
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||||
|
import cn.iocoder.yudao.framework.security.core.LoginUser;
|
||||||
|
import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.baseinfo.vo.*;
|
||||||
|
import cn.iocoder.yudao.module.farm.dal.dataobject.baseinfo.BaseInfoDO;
|
||||||
|
import cn.iocoder.yudao.module.farm.dal.dataobject.plotinfo.PlotInfoDO;
|
||||||
|
import cn.iocoder.yudao.module.farm.dal.dataobject.plotinfo.PlotLesseeDO;
|
||||||
|
import cn.iocoder.yudao.module.farm.dal.mysql.baseinfo.BaseInfoMapper;
|
||||||
|
import cn.iocoder.yudao.module.farm.dal.mysql.plotinfo.PlotInfoMapper;
|
||||||
import cn.iocoder.yudao.module.farm.dal.mysql.plotinfo.PlotLesseeMapper;
|
import cn.iocoder.yudao.module.farm.dal.mysql.plotinfo.PlotLesseeMapper;
|
||||||
import jakarta.annotation.Resource;
|
import cn.iocoder.yudao.module.farm.enums.CommonConstants;
|
||||||
|
import org.apache.commons.lang3.ObjectUtils;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.math.RoundingMode;
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import java.time.temporal.ChronoUnit;
|
||||||
|
import java.util.*;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUser;
|
||||||
|
import static cn.iocoder.yudao.module.farm.enums.CommonConstants.*;
|
||||||
|
import static cn.iocoder.yudao.module.farm.enums.CommonConstants.NO_CODE;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @description: 租赁信息
|
* @description: 租赁信息
|
||||||
* @author: binda
|
* @author: binda
|
||||||
@@ -12,9 +33,271 @@ import org.springframework.stereotype.Service;
|
|||||||
@Service
|
@Service
|
||||||
public class PlotLesseeServiceImpl implements PlotLesseeService {
|
public class PlotLesseeServiceImpl implements PlotLesseeService {
|
||||||
|
|
||||||
@Resource
|
private final BaseInfoMapper baseInfoMapper;
|
||||||
private PlotLesseeMapper plotLesseeMaper;
|
private final PlotInfoMapper plotInfoMapper;
|
||||||
|
private final PlotLesseeMapper plotLesseeMapper;
|
||||||
|
|
||||||
|
public PlotLesseeServiceImpl(BaseInfoMapper baseInfoMapper, PlotInfoMapper plotInfoMapper, PlotLesseeMapper plotLesseeMapper) {
|
||||||
|
this.baseInfoMapper = baseInfoMapper;
|
||||||
|
this.plotInfoMapper = plotInfoMapper;
|
||||||
|
this.plotLesseeMapper = plotLesseeMapper;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void insertPlotLessee(PlotInfoSaveReqVO createReqVO,String baseId,String plotId,String plotName) {
|
||||||
|
|
||||||
|
if (createReqVO.getPlotLeaseStatus() != 1) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
PlotLesseeSaveReqVO plotLesseeSaveReqVO = createReqVO.getPlotLessee();
|
||||||
|
PlotLesseeDO plotLesseeDO = BeanUtils.toBean(plotLesseeSaveReqVO, PlotLesseeDO.class);
|
||||||
|
|
||||||
|
this.insertPlotLessee(plotLesseeDO,baseId,plotId,plotName);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void updatePlotLessee(PlotInfoSaveReqVO updateReqVO) {
|
||||||
|
|
||||||
|
if (updateReqVO.getPlotLeaseStatus() == 0) {
|
||||||
|
// 修改为 未租, 清空户主信息
|
||||||
|
|
||||||
|
List<PlotLesseeDO> doList = plotLesseeMapper.selectList("plot_id", updateReqVO.getId());
|
||||||
|
if (ObjectUtils.isNotEmpty(doList)) {
|
||||||
|
doList.forEach(e -> e.setLeaseStatus(CommonConstants.NO_CODE));
|
||||||
|
plotLesseeMapper.updateBatch(doList);
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
// 修改为 已租
|
||||||
|
|
||||||
|
// 2. 设置 历史户主信息的状态 leaseStatus = 0
|
||||||
|
List<PlotLesseeDO> doList = plotLesseeMapper.selectList("plot_id", updateReqVO.getId());
|
||||||
|
if (ObjectUtils.isNotEmpty(doList)) {
|
||||||
|
doList.forEach(e -> e.setLeaseStatus(CommonConstants.NO_CODE));
|
||||||
|
plotLesseeMapper.updateBatch(doList);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 1. 设置 当前户主信息的状态 leaseStatus = 1
|
||||||
|
PlotLesseeSaveReqVO plotLesseeSaveReqVO = updateReqVO.getPlotLessee();
|
||||||
|
PlotLesseeDO plotLesseeDO = BeanUtils.toBean(plotLesseeSaveReqVO, PlotLesseeDO.class);
|
||||||
|
PlotInfoDO plotInfo = BeanUtils.toBean(updateReqVO, PlotInfoDO.class);
|
||||||
|
this.insertPlotLessee(plotLesseeDO, updateReqVO.getBaseId(), plotInfo.getId(), plotInfo.getPlotName());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public PlotLesseeImportRespVO importPlotLesseeInfoExcel(List<PlotLesseeForImportExcelRespVO> req) {
|
||||||
|
Map<String, String> baseNameMap = baseInfoMapper.selectList().stream().collect(Collectors.toMap(BaseInfoDO::getId, BaseInfoDO::getName, (v1, v2) -> v1));
|
||||||
|
Map<String, String> plotNameMap = plotInfoMapper.selectList().stream().collect(Collectors.toMap(PlotInfoDO::getPlotName, PlotInfoDO::getId, (v1, v2) -> v1));
|
||||||
|
|
||||||
|
PlotLesseeImportRespVO res = new PlotLesseeImportRespVO();
|
||||||
|
res.setTotal(req.size());
|
||||||
|
|
||||||
|
List<PlotLesseeForImportExcelRespVO> targetList = req.stream().filter(vo -> YES_NAME.equals(vo.getIsModified())).collect(Collectors.toList());
|
||||||
|
|
||||||
|
int successCount = 0;
|
||||||
|
int failuresCount = 0;
|
||||||
|
int unmodifiedCount = req.size() - targetList.size();
|
||||||
|
List<PlotLesseeImportRespVO.Row> row = new ArrayList<>();
|
||||||
|
for (PlotLesseeForImportExcelRespVO pl : targetList) {
|
||||||
|
PlotInfoDO p = plotInfoMapper.selectOne(PlotInfoDO::getPlotName, pl.getPlotName());
|
||||||
|
if (ObjectUtils.isEmpty(p)) {
|
||||||
|
failuresCount++;
|
||||||
|
row.add(new PlotLesseeImportRespVO.Row(pl.getPlotCode(), pl.getPlotName()));
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
PlotLesseeDO sourcePObj = plotLesseeMapper.selectOne(
|
||||||
|
PlotLesseeDO::getPlotName, pl.getPlotName(),
|
||||||
|
PlotLesseeDO::getLeaseStatus, YES_CODE);
|
||||||
|
|
||||||
|
if (ObjectUtils.isEmpty(sourcePObj)) {
|
||||||
|
// 首次添加租户信息, 说明从未添加过户主信息, 直接录入即可
|
||||||
|
this.pInsert(p,pl,baseNameMap);
|
||||||
|
successCount++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.isEmpty(pl)) {
|
||||||
|
p.setPlotLeaseStatus(NO_CODE);
|
||||||
|
plotInfoMapper.updateById(p);
|
||||||
|
|
||||||
|
sourcePObj.setLeaseStatus(NO_CODE);
|
||||||
|
plotLesseeMapper.updateById(sourcePObj);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.compareObj(sourcePObj,pl)) {
|
||||||
|
// 1. 更新原地块户主信息
|
||||||
|
sourcePObj.setLeaseStatus(NO_CODE);
|
||||||
|
plotLesseeMapper.updateById(sourcePObj);
|
||||||
|
|
||||||
|
this.pInsert(p,pl,baseNameMap);
|
||||||
|
successCount++;
|
||||||
|
}else{
|
||||||
|
unmodifiedCount++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
res.setSuccessCount(successCount);
|
||||||
|
res.setFailuresCount(failuresCount);
|
||||||
|
res.setUnmodifiedCount(unmodifiedCount);
|
||||||
|
res.setFailuresList(row);
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<PlotLesseeForExportExcelRespVO> exportPlotLesseeInfoExcel() {
|
||||||
|
List<BaseInfoDO> bList = baseInfoMapper.selectList();
|
||||||
|
Map<String, String> baseNameMap = bList.stream().collect(Collectors.toMap(BaseInfoDO::getId, BaseInfoDO::getName, (v1, v2) -> v1));
|
||||||
|
Map<String, String> baseCodeMap = bList.stream().collect(Collectors.toMap(BaseInfoDO::getId, BaseInfoDO::getCode, (v1, v2) -> v1));
|
||||||
|
|
||||||
|
List<PlotInfoDO> pList = plotInfoMapper.selectList();
|
||||||
|
Map<String, String> plotCodeMap = pList.stream().collect(Collectors.toMap(PlotInfoDO::getId, PlotInfoDO::getPlotId, (v1, v2) -> v1));
|
||||||
|
|
||||||
|
LambdaQueryWrapperX<PlotLesseeDO> x = new LambdaQueryWrapperX<>();
|
||||||
|
x.eq(PlotLesseeDO::getLeaseStatus, YES_CODE);
|
||||||
|
List<PlotLesseeDO> lList = plotLesseeMapper.selectList(x);
|
||||||
|
Map<String, PlotLesseeDO> lesObjMap = lList.stream().collect(Collectors.toMap(PlotLesseeDO::getPlotId, e -> e, (v1, v2) -> v1));
|
||||||
|
|
||||||
|
List<PlotInfoDO> plotInfoDOS = plotInfoMapper.selectList();
|
||||||
|
|
||||||
|
|
||||||
|
return plotInfoDOS.stream().map(p -> {
|
||||||
|
PlotLesseeForExportExcelRespVO target = new PlotLesseeForExportExcelRespVO(
|
||||||
|
baseCodeMap.get(p.getBaseId()), baseNameMap.get(p.getBaseId()),
|
||||||
|
plotCodeMap.get(p.getId()), p.getPlotName(), NO_NAME);
|
||||||
|
|
||||||
|
if (p.getPlotLeaseStatus() == 1 && lesObjMap.containsKey(p.getId())) {
|
||||||
|
// 已租状态,计算租赁剩余天数
|
||||||
|
PlotLesseeDO l = lesObjMap.get(p.getId());
|
||||||
|
target.setLeaseName(l.getLeaseName());
|
||||||
|
target.setLeaseIdCard(l.getLeaseIdCard());
|
||||||
|
target.setLeasePhone(l.getLeasePhone());
|
||||||
|
target.setLeaseStartDate(l.getLeaseStartDate());
|
||||||
|
target.setLeaseEndDate(l.getLeaseEndDate());
|
||||||
|
target.setLeaseRental(l.getLeaseRental().setScale(2, RoundingMode.HALF_UP));
|
||||||
|
target.setExpirationDays(getDaysUntilLeaseEnd(l.getLeaseEndDate()));
|
||||||
|
}
|
||||||
|
return target;
|
||||||
|
}).toList();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<PlotLesseeDetailsRespVO> getPlotLesseeList(String plotId) {
|
||||||
|
LambdaQueryWrapperX<PlotLesseeDO> x = new LambdaQueryWrapperX<>();
|
||||||
|
x.eq(PlotLesseeDO::getDeleted, NO_CODE);
|
||||||
|
x.eq(PlotLesseeDO::getLeaseStatus, YES_CODE);
|
||||||
|
x.eq(PlotLesseeDO::getPlotId, plotId);
|
||||||
|
List<PlotLesseeDO> list = plotLesseeMapper.selectList(x);
|
||||||
|
|
||||||
|
return BeanUtils.toBean(list, PlotLesseeDetailsRespVO.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<PlotLesseeDetailsRespVO> getPlotLesseeHistoryList(String plotId) {
|
||||||
|
LambdaQueryWrapperX<PlotLesseeDO> x = new LambdaQueryWrapperX<>();
|
||||||
|
x.eq(PlotLesseeDO::getDeleted, NO_CODE);
|
||||||
|
x.eq(PlotLesseeDO::getLeaseStatus, NO_CODE);
|
||||||
|
x.eq(PlotLesseeDO::getPlotId, plotId);
|
||||||
|
List<PlotLesseeDO> list = plotLesseeMapper.selectList(x);
|
||||||
|
|
||||||
|
return BeanUtils.toBean(list, PlotLesseeDetailsRespVO.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public PlotLesseeInfoRespVO exportPlotLesseeInfoExcel(String id, PlotInfoDO plotInfo) {
|
||||||
|
LambdaQueryWrapperX<PlotLesseeDO> x = new LambdaQueryWrapperX<>();
|
||||||
|
x.eq(PlotLesseeDO::getTenantId, getLoginUser().getTenantId().toString());
|
||||||
|
x.eq(PlotLesseeDO::getDeleted, CommonConstants.NO_CODE);
|
||||||
|
x.eq(PlotLesseeDO::getLeaseStatus, CommonConstants.YES_CODE);
|
||||||
|
x.eq(PlotLesseeDO::getPlotId, id);
|
||||||
|
PlotLesseeDO plotLesseeDO = plotLesseeMapper.selectOne(x);
|
||||||
|
|
||||||
|
PlotLesseeDetailsRespVO subLesseeInfo = new PlotLesseeDetailsRespVO();
|
||||||
|
if (ObjectUtils.isNotEmpty(plotLesseeDO)) {
|
||||||
|
subLesseeInfo = BeanUtils.toBean(plotLesseeDO, PlotLesseeDetailsRespVO.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
PlotLesseeInfoRespVO plotLesseeDetailsRespVO = BeanUtils.toBean(plotInfo, PlotLesseeInfoRespVO.class);
|
||||||
|
plotLesseeDetailsRespVO.setTypeName(PLOT_TYPE_NAME_MAP.get(plotLesseeDetailsRespVO.getType()));
|
||||||
|
plotLesseeDetailsRespVO.setPlotLessee(subLesseeInfo);
|
||||||
|
plotLesseeDetailsRespVO.setPlotLeaseStatusName(LEASE_STATUS_MAP.get(plotLesseeDetailsRespVO.getPlotLeaseStatus()));
|
||||||
|
plotLesseeDetailsRespVO.setCode(plotInfo.getPlotId());
|
||||||
|
plotLesseeDetailsRespVO.setUpdateStateForCode(NO_CODE);
|
||||||
|
return plotLesseeDetailsRespVO;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// ==================== 私有方法 ====================
|
||||||
|
|
||||||
|
private void insertPlotLessee(PlotLesseeDO plotLesseeDO,String baseId,String plotId,String plotName) {
|
||||||
|
LoginUser user = getLoginUser();
|
||||||
|
|
||||||
|
plotLesseeDO.setId(IdUtil.fastUUID());
|
||||||
|
plotLesseeDO.setTenantId(String.valueOf(user.getTenantId()));
|
||||||
|
plotLesseeDO.setLeaseStatus(CommonConstants.YES_CODE);
|
||||||
|
plotLesseeDO.setBaseId(baseId);
|
||||||
|
plotLesseeDO.setPlotId(plotId);
|
||||||
|
plotLesseeDO.setPlotName(plotName);
|
||||||
|
plotLesseeMapper.insert(plotLesseeDO);
|
||||||
|
}
|
||||||
|
|
||||||
|
private long getDaysUntilLeaseEnd(LocalDate leaseEndDate) {
|
||||||
|
LocalDate today = LocalDate.now();
|
||||||
|
return ChronoUnit.DAYS.between(today, leaseEndDate);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void pInsert(PlotInfoDO p, PlotLesseeForImportExcelRespVO pl, Map<String, String> baseNameMap) {
|
||||||
|
PlotLesseeDO target = new PlotLesseeDO();
|
||||||
|
target.setLeaseName(pl.getLeaseName());
|
||||||
|
target.setLeaseIdCard(pl.getLeaseIdCard());
|
||||||
|
target.setLeasePhone(pl.getLeasePhone());
|
||||||
|
target.setLeaseStartDate(pl.getLeaseStartDate());
|
||||||
|
target.setLeaseEndDate(pl.getLeaseEndDate());
|
||||||
|
|
||||||
|
target.setId(IdUtil.fastUUID());
|
||||||
|
target.setTenantId(String.valueOf(getLoginUser().getTenantId()));
|
||||||
|
target.setLeaseStatus(CommonConstants.YES_CODE);
|
||||||
|
|
||||||
|
target.setBaseId(p.getBaseId());
|
||||||
|
target.setBaseName(baseNameMap.get(p.getBaseId()));
|
||||||
|
target.setPlotId(p.getId());
|
||||||
|
target.setPlotName(p.getPlotName());
|
||||||
|
plotLesseeMapper.insert(target);
|
||||||
|
|
||||||
|
p.setPlotLeaseStatus(YES_CODE);
|
||||||
|
plotInfoMapper.updateById(p);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 对比结果不一致返回: true (至少有一个字段不同)
|
||||||
|
* 对比结果一致返回: false (所有字段都相同)
|
||||||
|
* @param s
|
||||||
|
* @param t
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private boolean compareObj(PlotLesseeDO s, PlotLesseeForImportExcelRespVO t) {
|
||||||
|
return ObjectUtils.notEqual(s.getLeaseName(), t.getLeaseName()) ||
|
||||||
|
ObjectUtils.notEqual(s.getLeaseIdCard(), t.getLeaseIdCard()) ||
|
||||||
|
ObjectUtils.notEqual(s.getLeasePhone(), t.getLeasePhone()) ||
|
||||||
|
ObjectUtils.notEqual(s.getLeaseRental(), t.getLeaseRental()) ||
|
||||||
|
!s.getLeaseStartDate().isEqual(t.getLeaseStartDate()) ||
|
||||||
|
!s.getLeaseEndDate().isEqual(t.getLeaseEndDate());
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean isEmpty(PlotLesseeForImportExcelRespVO t) {
|
||||||
|
return Objects.equals(t.getLeaseName(), null) ||
|
||||||
|
Objects.equals(t.getLeaseIdCard(), null) ||
|
||||||
|
Objects.equals(t.getLeasePhone(), null) ||
|
||||||
|
Objects.equals(t.getLeaseRental(), null) ||
|
||||||
|
Objects.equals(t.getLeaseStartDate(), null) ||
|
||||||
|
Objects.equals(t.getLeaseEndDate(), null);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user