package thyyxxk.webserver.scheduled;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import thyyxxk.webserver.dao.his.scheduled.JieShouFeiYongDao;
import thyyxxk.webserver.entity.inpatient.patient.Patient;
import thyyxxk.webserver.service.PublicServer;
import thyyxxk.webserver.service.inpatient.PatientService;

import java.util.List;

/**
 * <p>
 * 描述： 费用接受重算
 * </p>
 *
 * @author xc
 * @date 2021-12-21 16:37
 */
@Slf4j
@Component
public class FeiYongJieShouChongSuan {

    private final JieShouFeiYongDao dao;
    private final PatientService patientService;
    private final PublicServer publicServer;

    @Value("${execute-scheduled}")
    private Boolean executeScheduled;

    public FeiYongJieShouChongSuan(JieShouFeiYongDao dao, PatientService patientService, PublicServer publicServer) {
        this.dao = dao;
        this.patientService = patientService;
        this.publicServer = publicServer;
    }

    @Scheduled(cron = "0 30 23 * * ?")
    public void jieShouFeiYong() {
        // 每天 23 点 执行
        if (executeScheduled) {
            List<Patient> xuYaoJieShouDeFeiYong = dao.xuYaoJieShouFeiYong();
            for (Patient item : xuYaoJieShouDeFeiYong) {
                try {
                    if (item.getLedgerSn() == null) {
                        item.setLedgerSn(publicServer.getLedgerSn(item.getInpatientNo(), item.getAdmissTimes()));
                    }
                    patientService.receiveAndRecalculateCost(item);
                } catch (Exception e) {
                    log.info("费用接受失败==>住院号：{}，住院次数：{}，账页号：{}", item.getInpatientNo(), item.getAdmissTimes(), item.getLedgerSn());
                    e.printStackTrace();
                }
            }
        }
    }

    @Scheduled(cron = "59 59 23 * * ?")
    public void chongZhiYaoDanHao() {
        if (executeScheduled) {
            dao.chongZhiYaoDanHao();
        }
    }
}
