package com.ruoyi.zzb.zyww.controller;

import com.alibaba.fastjson.JSONObject;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.zzb.zyww.domain.ZywwApplyInfo;
import com.ruoyi.zzb.zyww.service.ZywwService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@Slf4j
@RestController
@RequestMapping("/api/zyww")
public class ZywwController extends BaseController {

    @Autowired
    private ZywwService zywwService;

    /**
     * 保存一条【住院慰问】申请信息记录，同时保存每一个上传文件项的需要提交的多个附件信息记录以及保存对应的文件到服务器
     * @param
     * @return
     */
    /*@PostMapping("/saveOrUpdate")
    public JSONObject saveOrUpdate(ZywwApplyInfo zywwApplyInfo, ZywwFileSetDTO zywwFileSetDTO){
        try {
            // 文件上传路径
            String fileStoragePath = RuoYiConfig.getUploadPath();
            SysUser user = SecurityUtils.getLoginUser().getUser();
            if(null != user){
                String applyFormId;
                if(StringUtils.isBlank(zywwApplyInfo.getApplyFormId())){   // 申请单ID为空代表是 新增操作
                    // 生成申请单ID
                    SnowflakeIdGenerator generator = new SnowflakeIdGenerator(1);
                    applyFormId = String.valueOf(generator.nextId());
                } else {   // 修改操作
                    applyFormId = zywwApplyInfo.getApplyFormId();
                }
                List<BaseFileInfo> baseFileInfoList = zywwService.processUploadAndBuildParams(zywwFileSetDTO, "zyww", "住院慰问", applyFormId, fileStoragePath);
                // 等上传的文件写盘成功，再向数据库写入对应的申请信息和与之关联的文件信息
                zywwService.saveOrUpdateZywwApplyInfoAndBaseFileInfos(zywwApplyInfo, user, applyFormId, baseFileInfoList);
                return RspResult.success(true);
            }
            return RspResult.error("用户信息为空，【住院慰问】申请信息无法保存/修改");
        } catch (Exception e){
            log.error("【住院慰问】申请信息保存/修改失败", e);
            return RspResult.error("【住院慰问】申请信息保存/修改失败 - " + e.getMessage());
        }
    }*/

    /**
     * 功能描述:
     * @param: 审批一条【住院慰问】申请信息记录   0：待审批，1：审批通过，2：审批驳回
     * @return: com.alibaba.fastjson.JSONObject
     * @author: peifjFantasy 
     * @Date: 2024/11/28 15:22
     */
    @PostMapping("/approve")
    public AjaxResult approve(@RequestBody JSONObject reqBody){
        String applyFormId = reqBody.getString("applyFormId");
        String optFlag = reqBody.getString("optFlag");
        if(StringUtils.isBlank(applyFormId) || StringUtils.isBlank(optFlag)){
            log.error("审批参数为空");
            return error("审批参数为空");
        }
        SysUser user = SecurityUtils.getLoginUser().getUser();
        try {
            if(null != user){
                if(zywwService.approveAndSaveApproveInfo(applyFormId, optFlag, user)){
                    return success(true);
                }
            }
            return error("用户信息为空，【住院慰问】申请信息审批失败");
        } catch (Exception e){
            log.error("【住院慰问】申请信息审批失败", e);
            return error("【住院慰问】申请信息审批失败 - " + e.getMessage());
        }
    }

    /**
     * 根据 审批状态码 分页查询【住院慰问】申请信息列表
     * @param reqBody
     * @return
     */
    @PostMapping("/query")
    public AjaxResult query(@RequestBody JSONObject reqBody){
        // 审批状态码  ---0：审批中，1：审批通过，2：审批驳回
        Integer approveStatus = reqBody.getInteger("approveStatus");
        String type = reqBody.getString("type");
        String optFlag = reqBody.getString("optFlag");
        if(approveStatus == null || StringUtils.isBlank(type)){
            log.error("查询参数为空");
            return error("查询参数为空");
        }
        try {
            return success(zywwService.getDataByPage(approveStatus, type, optFlag, reqBody));
        } catch (Exception e){
            log.error("根据条件分页查询【住院慰问】申请信息发生异常", e);
            return error("根据条件分页查询【住院慰问】申请信息发生异常 - " + e.getMessage());
        }
    }


    /**
     * 保存/修改一条【住院慰问】申请信息记录
     * @param
     * @return
     */
    @PostMapping("/saveOrUpdate")
    public AjaxResult saveOrUpdate(@RequestBody ZywwApplyInfo zywwApplyInfo){
        try {
            SysUser user = SecurityUtils.getLoginUser().getUser();
            if(null != user){
                String applyFormId = zywwApplyInfo.getApplyFormId();
                if(StringUtils.isBlank(applyFormId)){
                    return error("applyFormId参数为空");
                }
                boolean optFlag = zywwService.saveOrUpdateZywwApplyInfo(zywwApplyInfo, user);
                return optFlag? success(true) : error("【住院慰问】申请信息保存/修改失败");
            }
            return error("用户信息为空，【住院慰问】申请信息无法保存/修改");
        } catch (Exception e){
            log.error("【住院慰问】申请信息保存/修改失败", e);
            return error("【住院慰问】申请信息保存/修改失败 - " + e.getMessage());
        }
    }

    
}
