package com.ruoyi.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.bean.BeanUtils;
import com.ruoyi.common.utils.uuid.IdUtils;
import com.ruoyi.domain.MarryUser;
import com.ruoyi.domain.ZMarry;
import com.ruoyi.domain.dto.MarryInfoDto;
import com.ruoyi.mapper.ZMarryMapper;
import com.ruoyi.service.MarryUserService;
import com.ruoyi.service.ZMarryService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.*;
/**
*
* 服务实现类
*
*
* @author ojq
* @since 2023-03-14
*/
@Service
public class ZMarryServiceImpl extends ServiceImpl implements ZMarryService {
@Resource
MarryUserService marryUserService;
@Autowired
ZMarryServiceImpl zMarryService;
@Override
public AjaxResult getNow() {
SysUser user = SecurityUtils.getLoginUser().getUser();
Long userId = user.getUserId();
//先查询个人信息
LambdaQueryWrapper marryUserLambdaQueryWrapper1 = new LambdaQueryWrapper<>();
marryUserLambdaQueryWrapper1.eq(MarryUser::getMyId, userId);
MarryUser myself = marryUserService.getOne(marryUserLambdaQueryWrapper1);
//再查询中间表信息
if (myself == null) {
throw new RuntimeException("您暂时还未在婚姻表中添加个人信息");
}
LambdaQueryWrapper zMarryLambdaQueryWrapper = new LambdaQueryWrapper<>();
zMarryLambdaQueryWrapper.eq(ZMarry::getUserId, myself.getMyId())
.eq(ZMarry::getDeleteStatus, 0);
ZMarry myMarryInfo = getOne(zMarryLambdaQueryWrapper);//只能有一个配偶
//根据中间表信息查询配偶信息
if (myMarryInfo == null) {
throw new RuntimeException("您暂时还未在婚姻表中添加婚姻信息");
}
String spouseId = myMarryInfo.getSpouseId();
LambdaQueryWrapper marryUserLambdaQueryWrapper2 = new LambdaQueryWrapper<>();
marryUserLambdaQueryWrapper2.eq(MarryUser::getId, spouseId);
MarryUser spouse = marryUserService.getOne(marryUserLambdaQueryWrapper2);
if (spouse == null) {
throw new RuntimeException("您暂时还未在婚姻表中添加配偶信息");
}
//根据中间表信息查询前任信息
LambdaQueryWrapper zMarryOldLQW = new LambdaQueryWrapper<>();
zMarryOldLQW.eq(ZMarry::getUserId,myself.getMyId())
.eq(ZMarry::getDeleteStatus,1);
List oldList = list(zMarryOldLQW);
//前任信息表
List oldSpouseList = new ArrayList<>();
for (ZMarry zMarry : oldList) {
String spouseId1 = zMarry.getSpouseId();
MarryUser oldSpouse = marryUserService.getById(spouseId1);
oldSpouseList.add(oldSpouse);
}
// //统一封装返回
// HashMap resultMap = new HashMap<>();
// resultMap.put("myInfo",myself);
// resultMap.put("spouseInfo",spouse);
// resultMap.put("marryInfo",myMarryInfo);
// resultMap.put("oldSpouseInfo",oldSpouseList);
//转成DTO返回
MarryInfoDto marryInfoDto = MarryInfoToDto(myMarryInfo, oldSpouseList, myself, spouse);
return AjaxResult.success(marryInfoDto);
}
private MarryInfoDto MarryInfoToDto(ZMarry myMarryInfo,List oldSpouseList,MarryUser myself,MarryUser spouse){
MarryInfoDto marryInfoDto = new MarryInfoDto();
marryInfoDto.setId(myself.getId());
marryInfoDto.setName(myself.getName());
marryInfoDto.setBirthday(myself.getBirthday());
marryInfoDto.setAddress(myself.getAddress());
marryInfoDto.setWorkAddress(myself.getWorkAddress());
marryInfoDto.setMarryStatus(myself.getMarryStatus());
marryInfoDto.setSex(myself.getSex());
marryInfoDto.setNation(myself.getNation());
marryInfoDto.setPhone(myself.getPhone());
marryInfoDto.setSpouseId(spouse.getId());
marryInfoDto.setSpouseName(spouse.getName());
marryInfoDto.setSpouseBirthday(spouse.getBirthday());
marryInfoDto.setSpouseAddress(spouse.getAddress());
marryInfoDto.setSpouseWorkAddress(spouse.getWorkAddress());
marryInfoDto.setSpouseMarryStatus(spouse.getMarryStatus());
marryInfoDto.setSpouseSex(spouse.getSex());
marryInfoDto.setSpouseNation(spouse.getNation());
marryInfoDto.setSpousePhone(spouse.getPhone());
marryInfoDto.setMarryId(myMarryInfo.getId());
marryInfoDto.setBearStatus(myMarryInfo.getBearStatus());
marryInfoDto.setHandbookStatus(myMarryInfo.getHandbookStatus());
marryInfoDto.setHandbookTime(myMarryInfo.getHandbookTime());
marryInfoDto.setOneBorn(myMarryInfo.getOneBorn());
marryInfoDto.setOneBornTime(myMarryInfo.getOneBornTime());
marryInfoDto.setContent(myMarryInfo.getContent());
marryInfoDto.setRemark(myMarryInfo.getRemark());
marryInfoDto.setMarryTime(myMarryInfo.getMarryTime());
marryInfoDto.setOldSpouseList(oldSpouseList);
return marryInfoDto;
}
@Transactional
public AjaxResult addInfo(MarryInfoDto marryInfoDto){
SysUser user = SecurityUtils.getLoginUser().getUser();
Long userId = user.getUserId();
String meId= IdUtils.simpleUUID();
String spouseId = IdUtils.simpleUUID();
//添加自己的信息
MarryUser myself = new MarryUser();
myself.setId(meId);
myself.setName(marryInfoDto.getName());
myself.setBirthday(marryInfoDto.getBirthday());
myself.setAddress(marryInfoDto.getAddress());
myself.setWorkAddress(marryInfoDto.getWorkAddress());
myself.setMarryStatus(marryInfoDto.getMarryStatus());
myself.setSex(marryInfoDto.getSex());
myself.setMyId(userId);
myself.setNation(marryInfoDto.getNation());
myself.setPhone(marryInfoDto.getPhone());
marryUserService.save(myself);
//添加配偶的信息
MarryUser spouse = new MarryUser();
spouse.setId(spouseId);
spouse.setName(marryInfoDto.getSpouseName());
spouse.setBirthday(marryInfoDto.getSpouseBirthday());
spouse.setAddress(marryInfoDto.getSpouseAddress());
spouse.setWorkAddress(marryInfoDto.getSpouseWorkAddress());
spouse.setMarryStatus(marryInfoDto.getSpouseMarryStatus());
spouse.setSex(marryInfoDto.getSpouseSex());
spouse.setNation(marryInfoDto.getSpouseNation());
spouse.setPhone(marryInfoDto.getSpousePhone());
marryUserService.save(spouse);
//添加生育情况(中间表)信息
ZMarry zMarry = new ZMarry();
zMarry.setUserId(userId);
zMarry.setSpouseId(spouseId);
zMarry.setMarryTime(marryInfoDto.getMarryTime());
zMarry.setBearStatus(marryInfoDto.getBearStatus());
zMarry.setHandbookStatus(marryInfoDto.getHandbookStatus());
zMarry.setHandbookTime(marryInfoDto.getHandbookTime());
zMarry.setOneBorn(marryInfoDto.getOneBorn());
zMarry.setOneBornTime(marryInfoDto.getOneBornTime());
zMarry.setContent(marryInfoDto.getContent());
zMarry.setRemark(marryInfoDto.getRemark());
zMarry.setDeleteStatus(0);
zMarryService.save(zMarry);
List oldSpouseList = marryInfoDto.getOldSpouseList();
//添加前任的信息
if(oldSpouseList!=null&&oldSpouseList.size()!=0){
for (MarryUser marryUser : oldSpouseList) {
//先添加配偶用户信息
String spId = IdUtils.simpleUUID();
marryUser.setId(spId);
marryUserService.save(marryUser);
//再添加中间表信息
ZMarry oldMarry = new ZMarry();
oldMarry.setUserId(userId);
oldMarry.setSpouseId(spId);
oldMarry.setDeleteStatus(1);
zMarryService.save(oldMarry);
}
}
return AjaxResult.success();
}
@Transactional
public AjaxResult updateInfo(MarryInfoDto marryInfoDto){
SysUser user = SecurityUtils.getLoginUser().getUser();
Long userId = user.getUserId();
//更新自己的信息
MarryUser myself = new MarryUser();
myself.setId(marryInfoDto.getId());
myself.setName(marryInfoDto.getName());
myself.setBirthday(marryInfoDto.getBirthday());
myself.setAddress(marryInfoDto.getAddress());
myself.setWorkAddress(marryInfoDto.getWorkAddress());
myself.setMarryStatus(marryInfoDto.getMarryStatus());
myself.setSex(marryInfoDto.getSex());
myself.setNation(marryInfoDto.getNation());
myself.setPhone(marryInfoDto.getPhone());
marryUserService.updateById(myself);
//更新配偶的信息
//先查询是更新配偶信息还是换配偶,因为配偶只能有一个
//这里暂时用名字来判断吧,如果有重名的人就会有bug
//先查询
String spouseName = marryInfoDto.getSpouseName();
MarryUser marry = marryUserService.getById(marryInfoDto.getSpouseId());
String marryName = marry.getName();
if(!spouseName.equals(marryName)){
//如果正妻子换人了,就新增而不是修改,同时删除旧纪录
//将现在中间表的妻子改成前妻
LambdaQueryWrapper lqw = new LambdaQueryWrapper<>();
lqw.eq(ZMarry::getUserId,userId)
.eq(ZMarry::getSpouseId,marryInfoDto.getSpouseId());
ZMarry one = getOne(lqw);
one.setDeleteStatus(1);
zMarryService.updateById(one);
//新增用户信息表
String spouseId = IdUtils.simpleUUID();
MarryUser spouse = new MarryUser();
spouse.setId(spouseId);
spouse.setName(marryInfoDto.getSpouseName());
spouse.setBirthday(marryInfoDto.getSpouseBirthday());
spouse.setAddress(marryInfoDto.getSpouseAddress());
spouse.setWorkAddress(marryInfoDto.getSpouseWorkAddress());
spouse.setMarryStatus(marryInfoDto.getSpouseMarryStatus());
spouse.setSex(marryInfoDto.getSpouseSex());
spouse.setNation(marryInfoDto.getSpouseNation());
spouse.setPhone(marryInfoDto.getSpousePhone());
marryUserService.save(spouse);
//新增中间表
//添加生育情况(中间表)信息
ZMarry zMarry = new ZMarry();
zMarry.setUserId(userId);
zMarry.setSpouseId(spouseId);
zMarry.setMarryTime(marryInfoDto.getMarryTime());
zMarry.setBearStatus(marryInfoDto.getBearStatus());
zMarry.setHandbookStatus(marryInfoDto.getHandbookStatus());
zMarry.setHandbookTime(marryInfoDto.getHandbookTime());
zMarry.setOneBorn(marryInfoDto.getOneBorn());
zMarry.setOneBornTime(marryInfoDto.getOneBornTime());
zMarry.setContent(marryInfoDto.getContent());
zMarry.setRemark(marryInfoDto.getRemark());
zMarry.setDeleteStatus(0);
zMarryService.save(zMarry);
}else {
MarryUser spouse = new MarryUser();
spouse.setId(marryInfoDto.getSpouseId());
spouse.setName(marryInfoDto.getSpouseName());
spouse.setBirthday(marryInfoDto.getSpouseBirthday());
spouse.setAddress(marryInfoDto.getSpouseAddress());
spouse.setWorkAddress(marryInfoDto.getSpouseWorkAddress());
spouse.setMarryStatus(marryInfoDto.getSpouseMarryStatus());
spouse.setSex(marryInfoDto.getSpouseSex());
spouse.setNation(marryInfoDto.getSpouseNation());
spouse.setPhone(marryInfoDto.getSpousePhone());
marryUserService.updateById(spouse);
//更新生育情况信息
ZMarry zMarry = new ZMarry();
zMarry.setId(marryInfoDto.getMarryId());
zMarry.setMarryTime(marryInfoDto.getMarryTime());
zMarry.setBearStatus(marryInfoDto.getBearStatus());
zMarry.setHandbookStatus(marryInfoDto.getHandbookStatus());
zMarry.setHandbookTime(marryInfoDto.getHandbookTime());
zMarry.setOneBorn(marryInfoDto.getOneBorn());
zMarry.setOneBornTime(marryInfoDto.getOneBornTime());
zMarry.setContent(marryInfoDto.getContent());
zMarry.setRemark(marryInfoDto.getRemark());
zMarry.setDeleteStatus(0);
zMarryService.updateById(zMarry);
}
//更新前任信息
List oldSpouseList = marryInfoDto.getOldSpouseList();
if(oldSpouseList!=null&&oldSpouseList.size()!=0){
for (MarryUser marryUser : oldSpouseList) {
//修改用户前任信息
marryUserService.updateById(marryUser);
//中间表不需要修改
}
}
return AjaxResult.success();
}
public AjaxResult deleteOld(String spouseId){
marryUserService.removeById(spouseId);
return AjaxResult.success();
}
}