package thyyxxk.webserver.service.datamodify;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import thyyxxk.webserver.config.exception.ExceptionEnum;
import thyyxxk.webserver.constants.Capacity;
import thyyxxk.webserver.dao.his.datamodify.ZyDetailChargeDao;
import thyyxxk.webserver.entity.ResultVo;
import thyyxxk.webserver.entity.datamodify.ZyDetailCharge;
import thyyxxk.webserver.utils.ResultVoUtil;
import thyyxxk.webserver.utils.TokenUtil;

import java.util.HashMap;
import java.util.Map;


/**
 * <p>
 * 住院费用修改 服务类
 * </p>
 *
 * @author 肖蟾
 * @since 2021-03-13
 */
@Service
@Slf4j
public class ZyChargeFeeModifyService {

    private final ZyDetailChargeDao dao;

    public ZyChargeFeeModifyService(ZyDetailChargeDao dao) {
        this.dao = dao;
    }

    /**
     * 根据住院号和收费项目码 来查询 住院费用 并且分页查询
     *
     * @param param 传入 inpatient_no 住院号 charge_code_mx 收费项目码  分页条件 currentPage  PageSize
     * @return 返回数据
     */
    public ResultVo<Map<String, Object>> queryHospitalizationExpenses(ZyDetailCharge param) {
        IPage<ZyDetailCharge> page = new Page<>(param.getCurrentPage(), param.getPageSize());
        dao.queryHospitalizationExpenses(page, param.getInpatientNo(), param.getChargeCodeMx());
        Map<String, Object> map = new HashMap<>(Capacity.TWO);
        map.put("data", page.getRecords());
        map.put("total", page.getTotal());
        if (page.getRecords().size() > 0 || page.getTotal() > 0) {
            return ResultVoUtil.success(map);
        }
        return ResultVoUtil.fail(ExceptionEnum.NO_DATA_EXIST, "没有查询到对应的数据，患者可能出院了");
    }

    /**
     * 修改单个住院费用的金额 要根据住院号，流水号，住院次数，结算次数 来获取到单个数据
     *
     * @param param 需要修改的数据 目前只能修改单个的金额
     * @return 返回数据
     */
    public ResultVo<Boolean> totalModify(ZyDetailCharge param) {
        log.info("修改价格 --> 操作人员{}，住院号{}，流水号{}，住院次数{}，结算次数{}，修改前价格{}，修改后价格{}",
                TokenUtil.getInstance().getTokenUserId(), param.getInpatientNo(),
                param.getDetailSn(), param.getAdmissTimes(), param.getLedgerSn(),
                param.getChargeFee(), param.getNewChargeFee());
        return ResultVoUtil.success(dao.totalModify(param));
    }
}
