feige
2024-11-05 72f21494ba48e573e68007eab2296f8c25ecc4b7
ruoyi-admin/src/main/java/com/ruoyi/web/controller/zhang/ZInfoUserController.java
@@ -1,29 +1,399 @@
package com.ruoyi.web.controller.zhang;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.mysql.cj.x.protobuf.MysqlxDatatypes;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.core.text.Convert;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.ServletUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.domain.ShareMore;
import com.ruoyi.domain.ZInfoUser;
import com.ruoyi.domain.ZfDoctor;
import com.ruoyi.domain.ZfRelation;
import com.ruoyi.domain.dto.Genealogy;
import com.ruoyi.domain.dto.GenealogyExportDto;
import com.ruoyi.domain.dto.RelationDto;
import com.ruoyi.service.ZInfoUserService;
import com.ruoyi.service.ZfFamilyService;
import com.ruoyi.service.ZfRoleService;
import com.ruoyi.system.mapper.SysUserMapper;
import com.ruoyi.system.service.ISysUserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import javax.websocket.server.PathParam;
import java.util.*;
import java.util.regex.Pattern;
import static com.ruoyi.common.core.page.TableSupport.PAGE_NUM;
import static com.ruoyi.common.core.page.TableSupport.PAGE_SIZE;
/**
 * <p>
 *  前端控制器
 * 前端控制器
 * </p>
 *
 * @author ojq
 * @since 2023-03-14
 */
@Slf4j
@RestController
@RequestMapping("/self/user")
public class ZInfoUserController {
public class ZInfoUserController extends BaseController {
    @Resource
    private ZInfoUserService zInfoUserService;
    @Resource
    private ZfFamilyService zfFamilyService;
    @Resource
    private ZfRoleService zfRoleService;
    @Resource
    private SysUserMapper sysUserMapper;
//    @GetMapping("/all")
//    public AjaxResult  listAll(ZInfoUser zInfoUser){
//        Integer pageNum = Convert.toInt(ServletUtils.getParameter(PAGE_NUM), 1);
//        Integer pageSize = Convert.toInt(ServletUtils.getParameter(PAGE_SIZE), 10);
//        return zInfoUserService.selectInfoList(zInfoUser, pageNum, pageSize);
//    }
    /**
     * 导出个人详细信息记录列表
     */
//    @PreAuthorize("@ss.hasPermi('system:property:export')")
    @Log(title = "个人详细信息记录", businessType = BusinessType.EXPORT)
    @PostMapping("/export")
    public void export(HttpServletResponse response, ZInfoUser zInfoUser) {
        SysUser user = SecurityUtils.getLoginUser().getUser();
        Long userId = user.getUserId();
        zInfoUser.setUserId(userId);
        List<ZInfoUser> list = zInfoUserService.selectByCondition(zInfoUser);
        log.info("导出记录为:{}", list);
        ExcelUtil<ZInfoUser> util = new ExcelUtil<>(ZInfoUser.class);
        util.exportExcel(response, list, "个人详细信息记录数据");
    }
    /**
     * 导入个人详细信息记录列表
     */
    @Log(title = "用户管理", businessType = BusinessType.IMPORT)
    @PostMapping("/importData")
    public AjaxResult importData(@RequestParam("excelImport") MultipartFile file) throws Exception {
        SysUser user = SecurityUtils.getLoginUser().getUser();
        Long userId = user.getUserId();
        ExcelUtil<ZInfoUser> util = new ExcelUtil<>(ZInfoUser.class);
        List<ZInfoUser> eventList = util.importExcel(file.getInputStream());
        log.info("个人详细信息列表为:{}", eventList);
        if (eventList.size() > 1) {
            return AjaxResult.error("导入个人信息只能有一条记录");
        }
        ZInfoUser zInfoUser = eventList.get(0);
        zInfoUser.setUserId(userId);
        if (zInfoUserService.updateById(zInfoUser)) {
            return AjaxResult.success("导入数据成功");
        }
        return AjaxResult.error("导入数据失败");
    }
    /**
     * 获取个人详细信息记录详细信息
     */
//    @PreAuthorize("@ss.hasPermi('system:property:query')")
    @GetMapping()
    public AjaxResult getInfo() {
        SysUser user = SecurityUtils.getLoginUser().getUser();
        Long userId = user.getUserId();
        ZInfoUser zInfoUser = zInfoUserService.getInfoById(userId);
        if(zInfoUser!=null)
        {
            return AjaxResult.success(zInfoUser);
        }
        else
            return AjaxResult.success(user);
    }
    @GetMapping("/{id}")
    public AjaxResult getInfoById(@PathVariable("id") Long id) {
      //  SysUser user = SecurityUtils.getLoginUser().getUser();
        Long userId = id;
        //查询sys_user表
      //  SysUser sysUser = sysUserService.selectUserById(userId);
        return AjaxResult.success(zInfoUserService.getInfoById(userId));
    }
//
    /**
     * 修改个人详细信息记录
     */
//    @PreAuthorize("@ss.hasPermi('system:property:add')")
    @Log(title = "个人详细信息记录", businessType = BusinessType.INSERT)
    @PutMapping
    public AjaxResult update(@RequestBody ZInfoUser zInfoUser) {
//        if (!Pattern.matches("^[\\d]+(?:,[\\d]+)*$",zInfoUser.getFamilyId())) {
//            throw new RuntimeException("请输入只有数字和英文逗号的字符串,且数字和逗号必须交替出现");
//        }
        SysUser user = SecurityUtils.getLoginUser().getUser();
        Long userId = user.getUserId();
        zInfoUser.setSysId(userId);
        LambdaUpdateWrapper<ZInfoUser> uw = new LambdaUpdateWrapper<>();
        uw.eq(ZInfoUser::getSysId,userId).set(ZInfoUser::getSelfIntroduction,zInfoUser.getSelfIntroduction());
        return toAjax(zInfoUserService.update(uw));
            //    saveOrUpdate(zInfoUser));
    }
//    /**
//     * 修改个人详细信息记录
//     */
////    @PreAuthorize("@ss.hasPermi('system:property:edit')")
//    @Log(title = "个人详细信息记录", businessType = BusinessType.UPDATE)
//    @PutMapping
//    public AjaxResult edit(@RequestBody ZInfoUser zInfoUser)
//    {
//        return toAjax(zInfoUserService.updateById(zInfoUser));
//    }
//
    /**
     * 删除个人详细信息记录
     */
//    @PreAuthorize("@ss.hasPermi('system:property:remove')")
    @Log(title = "个人详细信息记录", businessType = BusinessType.DELETE)
    @DeleteMapping()
    public AjaxResult remove() {
        SysUser user = SecurityUtils.getLoginUser().getUser();
        Long userId = user.getUserId();
        return toAjax(zInfoUserService.removeById(userId));
    }
    /**
     * 查询家庭主要成员及关系
     */
    @GetMapping("/relation")
    public AjaxResult listMyRelation() {
        return zInfoUserService.searchMyRelation();
    }
    @PostMapping("/relation")
    public AjaxResult addRelation(@RequestBody ZfRelation zfRelation){
        return zInfoUserService.addRelation(zfRelation);
    }
    @PutMapping("/relation")
    public AjaxResult updateRelation(@RequestBody ZfRelation zfRelation){
        return zInfoUserService.updateRelation(zfRelation);
    }
    @DeleteMapping("/relation/{ids}")
    public AjaxResult deleteRelation(@PathVariable Long[] ids){
        return zInfoUserService.deleteRelation(ids);
    }
//    /**
//     * 授权
//     */
//    @PostMapping("/empower")
//    public AjaxResult empower(@RequestBody EmpowerDto empowerDto){
//
//        return zInfoUserService.empower(empowerDto);
//    }
    /**
     * 根据用户id判断是否是子孙 tpfid:自己id 根据用户id判断是否是异性  不是本家的人选
     */
    @GetMapping("/uidAndUJd/{tpfid}/{sex}/{clanId}")
        public AjaxResult findByUidAndUid(@PathVariable("tpfid")  Long tpfid, @PathVariable("sex")  Integer sex, @PathVariable("clanId")  Integer clanId)
        {
//            Integer sex = zInfoUserService.getInfoById(tpfid).getSex();
            //sex == 0 -> 男
            if (sex == 1){
                sex = 0;
            }
            else if (sex == 0){
                sex = 1;
            }
            List<ZInfoUser> zInfoUsers = zInfoUserService.getDataBySex(sex, clanId);
            List<HashMap<Long,String>> satisfyIds = new ArrayList<>();
            HashMap<Long,String> bs = new HashMap<>();
            for (ZInfoUser zInfoUser:zInfoUsers) {
                    if (!zInfoUserService.findByuid(zInfoUser.getUserId(), tpfid) && (zInfoUser.getMaritalStatus() == null || zInfoUser.getMaritalStatus() != 1)){
                        bs.put(zInfoUser.getUserId(),zInfoUser.getNickName());
                    }
            }
            satisfyIds.add(bs);
            return AjaxResult.success(satisfyIds);
        }
    /**
     * 根据用户id判断是否是子孙 uid:长辈id,tpfid:我自己的zinfoid
     */
    @GetMapping("/uidUJd/{uid}/{tpfid}")
    public AjaxResult findByUidAndUid2(@PathVariable("uid") Long uid ,@PathVariable("tpfid")  Long tpfid){
        return AjaxResult.success( zInfoUserService.findByuid(uid,tpfid));
    }
    @GetMapping("/sex/{sex}/{clanId}")
    public AjaxResult findBySex(@PathVariable("sex")  Integer sex, @PathVariable("clanId")  Integer clanId)
    {
//            Integer sex = zInfoUserService.getInfoById(tpfid).getSex();
        //sex == 0 -> 男
        if (sex == 1){
            sex = 0;
        }
        else if (sex == 0){
            sex = 1;
        }
        List<ZInfoUser> zInfoUsers = zInfoUserService.getDataBySex(sex, clanId);
        List<HashMap<Long,String>> satisfyIds = new ArrayList<>();
        HashMap<Long,String> bs = new HashMap<>();
        for (ZInfoUser zInfoUser:zInfoUsers) {
            if (zInfoUser.getMaritalStatus() ==null || zInfoUser.getMaritalStatus() != 1 )
                bs.put(zInfoUser.getUserId(),zInfoUser.getNickName());
        }
        satisfyIds.add(bs);
        return AjaxResult.success(satisfyIds);
    }
    /**
     * 根据用户id判断是否是异性
     */
//    /**
//     * 根据用户id判断是否是子孙(uid:?,tpfid:自己id) 根据用户id判断是否是异性     不是本家的人选
//     */
//    @GetMapping("/uidAndUJd/{uid}/{tpfid}/{sex}")
//        public AjaxResult findByUidAndUid(@PathVariable("uid")  Long uid,@PathVariable("tpfid")  Long tpfid, @PathVariable("sex")  Integer sex)
//        {
////            Integer sex = zInfoUserService.getInfoById(tpfid).getSex();
//            //sex == 0 -> 男
//            if (sex == 1){
//                sex = 0;
//            }
//            else if (sex == 0){
//                sex = 1;
//            }
//            List<ZInfoUser> zInfoUsers = zInfoUserService.getDataBySex(sex);
//            List<String> nickName = new ArrayList<>();
//            for (ZInfoUser zInfoUser:zInfoUsers) {
//                if (!zInfoUserService.findByuid(uid, tpfid)){
//                    if (zInfoUser.getIsMyFamily() == 1)
//                        nickName.add(zInfoUser.getNickName());
//                }
//            }
//            return AjaxResult.success(nickName);
//        }
    /**
     * 家根网
     */
    @GetMapping("/root")
    public AjaxResult listAllPeopleWithTree(@PathParam("depth") Integer depth,@PathParam("clanId") Integer clanId){
        return zInfoUserService.listWithTree(depth, clanId);
    }
    /**
     * 根据家庭成员找到所有人
     */
    @GetMapping("/allFamInfo")
        public AjaxResult listAllFamilyPeople(@PathParam("clanId") Integer clanId)
        {
            return zInfoUserService.listAllFamilyPeople(clanId);
        }
    /**
     * 找到所有的成员
     */
    @GetMapping("/all")
    public AjaxResult listAllPeople(){
        return zInfoUserService.listAllExceptAdmin();
    }
    /**
     * 新增、修改父子关系
     */
    @PutMapping("/setParent")
    public AjaxResult addParent(@PathParam("fatherId")Long fatherId,@PathParam("motherId")Long motherId){
        return zInfoUserService.addParent(fatherId,motherId);
    }
    /**
     * 根据本人id查询本人信息以及配偶信息
     */
    @GetMapping("/listMyself/{id}")
    public AjaxResult listMySelfAndSpouse(@PathVariable("id") Long id){
        return zInfoUserService.listMySelfAndSpouse(id);
    }
    /**
     * 家谱
     */
    @GetMapping("/list/genealogy")
    public AjaxResult listGenealogy(Genealogy genealogy){
        Integer pageNum = Convert.toInt(ServletUtils.getParameter(PAGE_NUM), 1);
        Integer pageSize = Convert.toInt(ServletUtils.getParameter(PAGE_SIZE), 10);
        return zInfoUserService.listGenealogy(genealogy,pageNum,pageSize);
    }
    /**
     * 导出家谱
     */
    @PostMapping("/export/genealogy")
    public void exportGenealogy(@RequestBody List<GenealogyExportDto> params, HttpServletResponse response){
        List<Genealogy> list= zInfoUserService.selectDatas(params);
        ExcelUtil<Genealogy> util = new ExcelUtil<>(Genealogy.class);
        util.exportExcel(response,list,"家谱记录数据");
    }
    /**
     * 家谱2.0
     */
    @GetMapping("/list/genealogy2")
    public AjaxResult listGenealogy2(Genealogy genealogy){
        Integer pageNum = Convert.toInt(ServletUtils.getParameter(PAGE_NUM), 1);
        Integer pageSize = Convert.toInt(ServletUtils.getParameter(PAGE_SIZE), 10);
        return zInfoUserService.listGenealogy2(genealogy,pageNum,pageSize);
    }
    @GetMapping("/list/getInfoByfid/{fid}")
    public AjaxResult getInfoByfid(@PathVariable("fid") Long fid)
    {
        return zInfoUserService.getInfoByfid(fid);
    }
    /**
     //     * 分享给其他家族数据,通过输入名字查找所有的同名用户和家族号
     //     */
    @PostMapping("/byName")
    public AjaxResult listByNickNameDate(@RequestBody ZInfoUser zInfoUser)
    {
        return zInfoUserService.findInfoUserNameAClan(zInfoUser.getNickName());
    }
}