package thyyxxk.webserver.service.datamodify;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import thyyxxk.webserver.config.exception.ExceptionEnum;
import thyyxxk.webserver.dao.his.datamodify.SecondFefundDao;
import thyyxxk.webserver.entity.ResultVo;
import thyyxxk.webserver.entity.datamodify.MzChargeDetail;
import thyyxxk.webserver.utils.BigUtils;
import thyyxxk.webserver.utils.ResultVoUtil;
import thyyxxk.webserver.utils.StringUtil;
import thyyxxk.webserver.utils.TokenUtil;

/**
 * <p>
 * 描述： 二次退费
 * </p>
 *
 * @author xc
 * @date 2021-05-18 11:22
 */
@Slf4j
@Service
public class SecondFefundService {
    private final SecondFefundDao dao;

    @Autowired
    public SecondFefundService(SecondFefundDao dao) {
        this.dao = dao;
    }

    /**
     * 分页获取 需要二次退费的人 信息
     *
     * @param mzParam 门诊号，次数，收费编码
     * @return 返回分页数据
     */
    public ResultVo<Page<MzChargeDetail>> getMzTuiFei(MzChargeDetail mzParam) {
        Page<MzChargeDetail> page = new Page<>(mzParam.getCurrentPage(), mzParam.getPageSize());
        return ResultVoUtil.success(dao.getMzTuiFei(page, mzParam.getPatientId(), mzParam.getTimes(), mzParam.getChargeItemCode()));
    }

    /**
     * 原来的 功能 已经废除了
     *
     * @param patientId      门诊号
     * @param times          次数
     * @param chargeItemCode 收费编码
     * @return 数据
     */
    public ResultVo<MzChargeDetail> getOrderInformation(String patientId, Integer times, String chargeItemCode) {
        try {
            MzChargeDetail pojo = dao.getOrderInformation(patientId, times, chargeItemCode);
            if (pojo != null) {
                return ResultVoUtil.success(pojo);
            }
            return ResultVoUtil.fail(ExceptionEnum.NO_DATA_EXIST);
        } catch (Exception e) {
            return ResultVoUtil.fail(ExceptionEnum.INTERNAL_SERVER_ERROR, "该患者存在两条记录。");
        }
    }

    /**
     * 修改二次退费 通过 门诊号 次数 收费编码 来确定这一条 需要更新的字段 为选中的退药量
     *
     * @param mzChargeDetail 实体类
     * @return 返回提示成功的数据
     */
    public ResultVo<MzChargeDetail> xiuGaiTuiFei(MzChargeDetail mzChargeDetail) {
        if (StringUtil.isBlank(mzChargeDetail.getPatientId()) && mzChargeDetail.getTimes() != null && StringUtil.isBlank(mzChargeDetail.getChargeItemCode())
                && mzChargeDetail.getItemNo() == null) {
            return ResultVoUtil.fail(ExceptionEnum.NULL_POINTER, "患者信息不完善。");
        } else if (BigUtils.dengYu(mzChargeDetail.getQuantity(), 0) && BigUtils.bigXiaoYu(mzChargeDetail.getQuantity(), 0)) {
            return ResultVoUtil.fail(ExceptionEnum.NULL_POINTER, "退药量错误。");
        }
        log.info("修改二次退费 --> 操作人：{}，门诊号：{}，次数：{}，收费编码：{}，退费数量：{}，itemNo：{}", TokenUtil.getInstance().getTokenUserId(), mzChargeDetail.getPatientId(),
                mzChargeDetail.getTimes(), mzChargeDetail.getChargeItemCode(), mzChargeDetail.getQuantity(), mzChargeDetail.getItemNo());
        dao.xiuGaiTuiFei(mzChargeDetail.getPatientId(),
                mzChargeDetail.getTimes(), mzChargeDetail.getChargeItemCode(), mzChargeDetail.getQuantity(), mzChargeDetail.getItemNo());
        return ResultVoUtil.success(ExceptionEnum.SUCCESS_AND_EL_MESSAGE, "修改成功。");
    }
}
