/* * 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.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springblade.core.secure.utils.AuthUtil; import org.springblade.modules.grid.service.IGridService; import org.springblade.modules.house.entity.HouseTenantEntity; import org.springblade.modules.house.vo.HouseTenantVO; import org.springblade.modules.place.entity.PlaceEntity; import org.springblade.modules.place.entity.PlaceExtEntity; import org.springblade.modules.place.entity.PlacePractitionerEntity; import org.springblade.modules.place.service.IPlacePractitionerService; import org.springblade.modules.place.service.IPlaceService; import org.springblade.modules.place.vo.PlaceExtVO; import org.springblade.modules.place.mapper.PlaceExtMapper; import org.springblade.modules.place.service.IPlaceExtService; import org.springblade.core.mp.base.BaseServiceImpl; import org.springblade.modules.task.entity.TaskEntity; import org.springblade.modules.task.service.ITaskService; 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.stream.Collectors; /** * 场所详情表 服务实现类 * * @author BladeX * @since 2023-10-28 */ @Service public class PlaceExtServiceImpl extends ServiceImpl implements IPlaceExtService { @Autowired private ITaskService taskService; @Autowired private IPlaceService placeService; @Autowired private IPlacePractitionerService placePractitionerService; @Autowired private IGridService gridService; /** * 自定义查询 * @param page * @param placeExt * @return */ @Override public IPage selectPlaceExtPage(IPage page, PlaceExtVO placeExt) { List list = new ArrayList<>(); if (null!=placeExt.getRoleName() && !placeExt.getRoleName().equals("")){ if (placeExt.getRoleName().equals("网格员")){ // 查询对应的房屋地址code list = gridService.getAddressCodeListByUserId(AuthUtil.getUserId()); } if (!placeExt.getRoleName().equals("系统管理员")){ placeExt.setCreateUser(AuthUtil.getUserId()); } } return page.setRecords(baseMapper.selectPlaceExtPage(page, placeExt,list)); } /** * 场所详情表 自定义更新 * @param placeExt * @return */ @Override @Transactional(rollbackFor = Exception.class) public boolean updatePlaceExt(PlaceExtVO placeExt) { // 设置参数 placeExt.setUpdateTime(new Date()); placeExt.setUpdateUser(AuthUtil.getUserId()); // 更新从业人员信息 boolean addFlag = true; boolean updateFlag = true; boolean removeFlag = true; //更新自身 boolean update = updateById(placeExt); // 查询对应已存在的从业人员 QueryWrapper wrapper = new QueryWrapper<>(); wrapper.eq("place_id",placeExt.getPlaceId()); List oldList = placePractitionerService.list(wrapper); List list = placeExt.getPlacePractitioner(); // 申明新增,修改,删除集合 List newList = new ArrayList<>(); List addList = new ArrayList<>(); List updateList = new ArrayList<>(); List removeList = new ArrayList<>(); // 找出需要新增的,否则组成新集合进行比对 for (PlacePractitionerEntity practitionerEntity : list) { practitionerEntity.setPlaceId(placeExt.getPlaceId()); if (null==practitionerEntity.getId()){ // 新增 PlacePractitionerEntity placePractitionerEntity= new PlacePractitionerEntity(); placePractitionerEntity.setPlaceId(placeExt.getPlaceId()); placePractitionerEntity.setName(practitionerEntity.getName()); placePractitionerEntity.setTelephone(practitionerEntity.getTelephone()); placePractitionerEntity.setTempAddress(practitionerEntity.getTempAddress()); addList.add(placePractitionerEntity); }else { newList.add(practitionerEntity); } } // 遍历去差集,判断是新增还是删除还是更新 // 取旧数据和新提交数据差集--删除 removeList = oldList.stream().filter(vo -> !newList.stream().map(e -> e.getId()).collect(Collectors.toList()).contains(vo.getId())).collect(Collectors.toList()); // 取旧数据和新提交数据交集--更新 updateList = newList.stream().filter(vo -> oldList.stream().map(e -> e.getId()).collect(Collectors.toList()).contains(vo.getId())).collect(Collectors.toList()); // 批量新增 if (addList.size()>0) { addFlag = placePractitionerService.saveBatch(addList); } // 批量修改 if (updateList.size()>0) { updateFlag = placePractitionerService.updateBatchById(updateList); } // 批量删除 if (removeList.size()>0) { removeFlag = placePractitionerService.removeBatchByIds(removeList); } // 返回 return update && addFlag && updateFlag && removeFlag; } /** * 场所详情表 审核 * @param placeExt * @return */ @Override @Transactional(rollbackFor = Exception.class) public boolean checkPlaceExt(PlaceExtEntity placeExt) { boolean flag = false; // 设置更新时间 placeExt.setConfirmTime(new Date()); placeExt.setConfirmUserId(AuthUtil.getUserId()); // 更新数据 boolean b = updateById(placeExt); if (b) { PlaceExtEntity entity = getById(placeExt.getId()); // 更新任务表状态 TaskEntity taskEntity = new TaskEntity(); taskEntity.setId(entity.getTaskId()); taskEntity.setStatus(placeExt.getConfirmFlag()); flag = taskService.updateById(taskEntity); } // 返回 return flag; } /** * 场所详情表 新增 * @param placeExt * @return */ @Override public boolean savePlaceExt(PlaceExtEntity placeExt) { PlaceEntity placeEntity = placeService.getById(placeExt.getPlaceId()); TaskEntity taskEntity = new TaskEntity(); taskEntity.setId(placeExt.getTaskId()); taskEntity.setStatus(placeExt.getConfirmFlag()); taskEntity.setType(1); taskEntity.setFrequency(1); taskEntity.setName(placeEntity.getPlaceName() + "信息完善"); // 新增任务 boolean save = taskService.save(taskEntity); if (save){ placeExt.setTaskId(taskEntity.getId()); placeExt.setConfirmFlag(1); placeExt.setCreateTime(new Date()); placeExt.setUpdateTime(new Date()); placeExt.setCreateUser(AuthUtil.getUserId()); placeExt.setUpdateUser(AuthUtil.getUserId()); // 新增场所详情 save(placeExt); } return false; } /** * 场所详情表 自定义详情 * @param placeExt * @return */ @Override public PlaceExtVO getDetail(PlaceExtVO placeExt) { PlaceExtVO detail = baseMapper.getDetail(placeExt); if (null!=detail) { // 查询从业人员信息 QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("place_id", placeExt.getPlaceId()); detail.setPlacePractitioner(placePractitionerService.list(queryWrapper)); } // 返回 return detail; } @Override public Integer selectCount(Long userId, String neiCode, Integer confirmFlag) { return baseMapper.selectCount(userId, neiCode, confirmFlag); } }