|  | @@ -0,0 +1,126 @@
 | 
	
		
			
				|  |  | +package thyyxxk.webserver.scheduled;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +import com.alibaba.fastjson.JSON;
 | 
	
		
			
				|  |  | +import lombok.extern.slf4j.Slf4j;
 | 
	
		
			
				|  |  | +import org.apache.commons.collections4.ListUtils;
 | 
	
		
			
				|  |  | +import org.springframework.beans.factory.annotation.Value;
 | 
	
		
			
				|  |  | +import org.springframework.scheduling.annotation.Scheduled;
 | 
	
		
			
				|  |  | +import org.springframework.stereotype.Component;
 | 
	
		
			
				|  |  | +import thyyxxk.webserver.dao.his.reports.PatientDistributionAddressDao;
 | 
	
		
			
				|  |  | +import thyyxxk.webserver.entity.inpatient.patient.Patient;
 | 
	
		
			
				|  |  | +import thyyxxk.webserver.utils.BaiduMapGeocoderUtil;
 | 
	
		
			
				|  |  | +import thyyxxk.webserver.utils.ListUtil;
 | 
	
		
			
				|  |  | +import thyyxxk.webserver.utils.StringUtil;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +import java.io.IOException;
 | 
	
		
			
				|  |  | +import java.math.BigDecimal;
 | 
	
		
			
				|  |  | +import java.nio.charset.StandardCharsets;
 | 
	
		
			
				|  |  | +import java.nio.file.Files;
 | 
	
		
			
				|  |  | +import java.nio.file.Path;
 | 
	
		
			
				|  |  | +import java.nio.file.Paths;
 | 
	
		
			
				|  |  | +import java.util.ArrayList;
 | 
	
		
			
				|  |  | +import java.util.List;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +@Component
 | 
	
		
			
				|  |  | +@Slf4j
 | 
	
		
			
				|  |  | +public class UpdatePatientLatitudeAndLongitude {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @Value("${execute-scheduled}")
 | 
	
		
			
				|  |  | +    private Boolean executeScheduled;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    private final PatientDistributionAddressDao dao;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    public UpdatePatientLatitudeAndLongitude(PatientDistributionAddressDao dao) {
 | 
	
		
			
				|  |  | +        this.dao = dao;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    /**
 | 
	
		
			
				|  |  | +     * 每天一点执行定时任务
 | 
	
		
			
				|  |  | +     * 患者地址转坐标
 | 
	
		
			
				|  |  | +     */
 | 
	
		
			
				|  |  | +    @Scheduled(cron = "0 0 1 * * ?")
 | 
	
		
			
				|  |  | +    public void UpdatePatientLatitudeAndLongitude() {
 | 
	
		
			
				|  |  | +        if (!executeScheduled) {
 | 
	
		
			
				|  |  | +            return;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        List<Patient> list = dao.timedTaskPatientData();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        if (ListUtil.notBlank(list)) {
 | 
	
		
			
				|  |  | +            for (Patient patient : list) {
 | 
	
		
			
				|  |  | +                if (StringUtil.notBlank(patient.getHomeStreet())) {
 | 
	
		
			
				|  |  | +                    String[] address = BaiduMapGeocoderUtil.getlocation(patient.getHomeStreet());
 | 
	
		
			
				|  |  | +                    if (address == null) {
 | 
	
		
			
				|  |  | +                        patient.setAddrTransedFlag(1);
 | 
	
		
			
				|  |  | +                        patient.setLatitude(null);
 | 
	
		
			
				|  |  | +                        patient.setLongitude(null);
 | 
	
		
			
				|  |  | +                    } else {
 | 
	
		
			
				|  |  | +                        patient.setAddrTransedFlag(0);
 | 
	
		
			
				|  |  | +                        patient.setLongitude(new BigDecimal(address[0]));
 | 
	
		
			
				|  |  | +                        patient.setLatitude(new BigDecimal(address[1]));
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +                    log.info("住院号:{},地址:{},经度:{},纬度:{}", patient.getInpatientNo(),
 | 
	
		
			
				|  |  | +                            patient.getHomeStreet(),
 | 
	
		
			
				|  |  | +                            patient.getLongitude(), patient.getLatitude());
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            List<List<Patient>> performAnUpdate = ListUtils.partition(list, 50);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            for (List<Patient> patients : performAnUpdate) {
 | 
	
		
			
				|  |  | +                dao.updatePatientAddress(patients);
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    public void test() throws IOException {
 | 
	
		
			
				|  |  | +        String fileName = "D:\\world\\server\\web-server\\serverlog\\temp.txt";
 | 
	
		
			
				|  |  | +        Path path = Paths.get(fileName);
 | 
	
		
			
				|  |  | +        List<String> allLines = Files.readAllLines(path, StandardCharsets.UTF_8);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        List<Patient> updated = new ArrayList<>();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        Integer 数量 = 0;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        for (String allLine : allLines) {
 | 
	
		
			
				|  |  | +            Patient patient = new Patient();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            Integer 位置 = allLine.indexOf("住院号:");
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            if (位置 > -1) {
 | 
	
		
			
				|  |  | +                String str = allLine.substring(位置);
 | 
	
		
			
				|  |  | +                String[] list = str.split(",");
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                for (int i = 0; i < list.length; i++) {
 | 
	
		
			
				|  |  | +                    String 信息 = list[i].split(":")[1];
 | 
	
		
			
				|  |  | +                    if ("null".equals(信息)) {
 | 
	
		
			
				|  |  | +                        信息 = null;
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +                    switch (i) {
 | 
	
		
			
				|  |  | +                        case 0:
 | 
	
		
			
				|  |  | +                            patient.setInpatientNo(信息);
 | 
	
		
			
				|  |  | +                            break;
 | 
	
		
			
				|  |  | +                        case 2:
 | 
	
		
			
				|  |  | +                            patient.setLongitude(信息 == null ? null : new BigDecimal(信息));
 | 
	
		
			
				|  |  | +                            break;
 | 
	
		
			
				|  |  | +                        case 3:
 | 
	
		
			
				|  |  | +                            patient.setLatitude(信息 == null ? null : new BigDecimal(信息));
 | 
	
		
			
				|  |  | +                            break;
 | 
	
		
			
				|  |  | +                        default:
 | 
	
		
			
				|  |  | +                            break;
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +                log.info("转化信息:{}", JSON.toJSONString(patient));
 | 
	
		
			
				|  |  | +                updated.add(patient);
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        List<List<Patient>> performAnUpdate = ListUtils.partition(updated, 50);
 | 
	
		
			
				|  |  | +        for (List<Patient> patients : performAnUpdate) {
 | 
	
		
			
				|  |  | +            dao.updatePatientAddress(patients);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 |