package com.miyzh.service; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.miyzh.dao.ClinicDao; import com.miyzh.dao.MedicineStoreDao; import com.miyzh.dao.OrderDetailDao; import com.miyzh.entity.*; import com.miyzh.entity.dto.MedicineReturnDto; import com.miyzh.entity.dto.MedicineStoreDto; import com.miyzh.entity.dto.OrderDetailDto; import com.mysql.cj.util.StringUtils; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** * 结算明细 */ @Slf4j @Service public class OrderDetailService { @Autowired private ClinicDao clinicDao; @Autowired private OrderDetailDao orderDetailDao; @Value ("${postApi.orderUrl}") private String url; @Value("${postApi.pageSize}") private int pageSize; private static final String CLI_MED = "1"; // 西药销售明细(自费门诊) private static final String CLI_CHI_MED = "2"; // 中药销售明细(自费门诊) private static final String INS_CLC_MED = "3"; // 西药销售明细(医保门诊) private static final String INS_CLC_CHI_MED = "4"; // 中药销售明细(医保门诊) private static final String HOS_MED = "5"; // 西药销售明细(住院) private static final String HOS_CHI_MED = "6"; // 中药销售明细(住院) @Async public void uploadMedicine(List clinicList, String flag) throws InterruptedException, JsonProcessingException { long startTime = System.currentTimeMillis(); PageInfo page = new PageInfo<>(); for(Clinic clinic : clinicList) { switch (flag) { case CLI_MED: page = PageHelper.startPage(1, pageSize).doSelectPageInfo(() -> { orderDetailDao.listClcMedOrder(clinic.getClinicId()); }); break; case CLI_CHI_MED: page = PageHelper.startPage(1, pageSize).doSelectPageInfo(() -> { orderDetailDao.listClcChinaMedOrder(clinic.getClinicId()); }); break; case INS_CLC_MED: page = PageHelper.startPage(1, pageSize).doSelectPageInfo(() -> { orderDetailDao.listInsClcMedOrder(clinic.getClinicId()); }); break; case INS_CLC_CHI_MED: page = PageHelper.startPage(1, pageSize).doSelectPageInfo(() -> { orderDetailDao.listInsClcChinaMedOrder(clinic.getClinicId()); }); break; case HOS_MED: page = PageHelper.startPage(1, pageSize).doSelectPageInfo(() -> { orderDetailDao.listHosMedOrder(clinic.getClinicId()); }); break; case HOS_CHI_MED: page = PageHelper.startPage(1, pageSize).doSelectPageInfo(() -> { orderDetailDao.listHosChinaMedOrder(clinic.getClinicId()); }); break; } if (page.getTotal() == 0) { continue; } Map> map = new HashMap<>(); if (HOS_MED.equals(flag) || HOS_CHI_MED.equals(flag)) { map = page.getList().stream().collect(Collectors.groupingBy(OrderDetailTemp::getVisitCode)); } else { map = page.getList().stream().collect(Collectors.groupingBy(OrderDetailTemp::getStoreOrderNo)); } for(Map.Entry> msMap:map.entrySet()){ OrderDetailDto orderDetailDto = new OrderDetailDto(); orderDetailDto.setStoreCode(clinic.getStoreCode()); orderDetailDto.setStoreOrderNo(msMap.getValue().get(0).getStoreOrderNo()); if (StringUtils.isNullOrEmpty(msMap.getValue().get(0).getMisNo())) { orderDetailDto.setMisNo("99999999"); } else { orderDetailDto.setMisNo(msMap.getValue().get(0).getMisNo()); } orderDetailDto.setSettledTypeNo(msMap.getValue().get(0).getSettledTypeNo()); orderDetailDto.setSettledTypeName(msMap.getValue().get(0).getSettledTypeName()); orderDetailDto.setSettledstatus(msMap.getValue().get(0).getSettledstatus()); orderDetailDto.setTotalAmt(msMap.getValue().get(0).getTotalAmt()); orderDetailDto.setInsuranceAmt(msMap.getValue().get(0).getInsuranceAmt()); orderDetailDto.setOperater(msMap.getValue().get(0).getOperater()); orderDetailDto.setSaleDate(msMap.getValue().get(0).getSaleDate()); orderDetailDto.setSaleTime(msMap.getValue().get(0).getSaleTime()); orderDetailDto.setBuyMedPerson(msMap.getValue().get(0).getBuyMedPerson()); orderDetailDto.setSex(msMap.getValue().get(0).getSex()); orderDetailDto.setAge(msMap.getValue().get(0).getAge()); orderDetailDto.setIdCard(msMap.getValue().get(0).getIdCard()); orderDetailDto.setCredentialNum(msMap.getValue().get(0).getCredentialNum()); List list = msMap.getValue() .stream() .map(OrderDetailTemp::temp2OrderDetail) .collect(Collectors.toList()); orderDetailDto.setOrderDetails(list); this.upload(orderDetailDto); } if (page.getPages() > 1) { PageInfo page1 = new PageInfo<>(); for(int i = 2; i <= page.getPages(); i++) { switch (flag) { case CLI_MED: page = PageHelper.startPage(1, pageSize).doSelectPageInfo(() -> { orderDetailDao.listClcMedOrder(clinic.getClinicId()); }); break; case CLI_CHI_MED: page = PageHelper.startPage(1, pageSize).doSelectPageInfo(() -> { orderDetailDao.listClcChinaMedOrder(clinic.getClinicId()); }); break; case INS_CLC_MED: page = PageHelper.startPage(1, pageSize).doSelectPageInfo(() -> { orderDetailDao.listInsClcMedOrder(clinic.getClinicId()); }); break; case INS_CLC_CHI_MED: page = PageHelper.startPage(1, pageSize).doSelectPageInfo(() -> { orderDetailDao.listInsClcChinaMedOrder(clinic.getClinicId()); }); break; case HOS_MED: page = PageHelper.startPage(1, pageSize).doSelectPageInfo(() -> { orderDetailDao.listHosMedOrder(clinic.getClinicId()); }); break; case HOS_CHI_MED: page = PageHelper.startPage(1, pageSize).doSelectPageInfo(() -> { orderDetailDao.listHosChinaMedOrder(clinic.getClinicId()); }); break; } Map> map1 = new HashMap<>(); if (HOS_MED.equals(flag) || HOS_CHI_MED.equals(flag)) { map1 = page.getList().stream().collect(Collectors.groupingBy(OrderDetailTemp::getVisitCode)); } else { map1 = page.getList().stream().collect(Collectors.groupingBy(OrderDetailTemp::getStoreOrderNo)); } for(Map.Entry> msMap:map1.entrySet()){ OrderDetailDto orderDetailDto = new OrderDetailDto(); orderDetailDto.setStoreCode(clinic.getStoreCode()); if (HOS_MED.equals(flag) || HOS_CHI_MED.equals(flag)) { orderDetailDto.setStoreOrderNo(msMap.getValue().get(0).getVisitCode()); } else { orderDetailDto.setStoreOrderNo(msMap.getValue().get(0).getStoreOrderNo()); } if (StringUtils.isNullOrEmpty(msMap.getValue().get(0).getMisNo())) { orderDetailDto.setMisNo("99999999"); } else { orderDetailDto.setMisNo(msMap.getValue().get(0).getMisNo()); } orderDetailDto.setSettledTypeNo(msMap.getValue().get(0).getSettledTypeNo()); orderDetailDto.setSettledTypeName(msMap.getValue().get(0).getSettledTypeName()); orderDetailDto.setSettledstatus(msMap.getValue().get(0).getSettledstatus()); orderDetailDto.setTotalAmt(msMap.getValue().get(0).getTotalAmt()); orderDetailDto.setInsuranceAmt(msMap.getValue().get(0).getInsuranceAmt()); orderDetailDto.setOperater(msMap.getValue().get(0).getOperater()); orderDetailDto.setSaleDate(msMap.getValue().get(0).getSaleDate()); orderDetailDto.setSaleTime(msMap.getValue().get(0).getSaleTime()); orderDetailDto.setBuyMedPerson(msMap.getValue().get(0).getBuyMedPerson()); orderDetailDto.setSex(msMap.getValue().get(0).getSex()); orderDetailDto.setAge(msMap.getValue().get(0).getAge()); orderDetailDto.setIdCard(msMap.getValue().get(0).getIdCard()); orderDetailDto.setCredentialNum(msMap.getValue().get(0).getCredentialNum()); List list = msMap.getValue() .stream() .map(OrderDetailTemp::temp2OrderDetail) .collect(Collectors.toList()); orderDetailDto.setOrderDetails(list); this.upload(orderDetailDto); } } } }; long syncTime = System.currentTimeMillis(); log.info("执行用时--{}", startTime - syncTime); }; public void upload (Object o) throws JsonProcessingException { ObjectMapper objectMapper = new ObjectMapper(); String params = objectMapper.writeValueAsString(o); System.out.println(params); // System.out.println(objectMapper.writeValueAsString(RestTemplateUtil.postHttp(url, params))); } }