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.MedicineStorageDao; import com.miyzh.entity.Clinic; import com.miyzh.entity.MedicineStorage; import com.miyzh.entity.MedicineStorageTemp; import com.miyzh.entity.dto.MedicineStorageDto; import com.miyzh.utils.RestTemplateUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; 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.util.List; import java.util.Map; import java.util.stream.Collectors; /** * 入库 */ @Slf4j @Service public class MedicineStorageService { @Autowired private MedicineStorageDao medicineStorageDao; @Value ("${postApi.sorageUrl}") private String url; @Value("${postApi.pageSize}") private int pageSize; private class StorageType { private static final String PUR = "1"; //采购入库 private static final String OTHER = "2"; //其他 private static final String INBOUND = "3"; //销售退货 private static final String CHI_MED_INBOUND = "4"; // 退溢 } private static final String MED_PUR = "1"; //西药采购入库 private static final String CHI_MED_PUR = "2"; //中药采购入库 private static final String MED_MED_INBOUND = "3"; //西药销售退回入库 private static final String CHI_MED_INBOUND = "4"; //中药销售退回 private static final String MED_INV = "5"; //西药盘盈入库 private static final String CHI_MED_INV = "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 MED_PUR: page = PageHelper.startPage(1, pageSize).doSelectPageInfo(() -> { medicineStorageDao.listMedicinePurchase(clinic.getClinicId()); }); break; case CHI_MED_PUR: page = PageHelper.startPage(1, pageSize).doSelectPageInfo(() -> { medicineStorageDao.listChinaMedicinePurchase(clinic.getClinicId()); }); break; case MED_MED_INBOUND: page = PageHelper.startPage(1, pageSize).doSelectPageInfo(() -> { medicineStorageDao.listMedicineOutbound(clinic.getClinicId()); }); break; case CHI_MED_INBOUND: page = PageHelper.startPage(1, pageSize).doSelectPageInfo(() -> { medicineStorageDao.listChinaMedicineOutbound(clinic.getClinicId()); }); break; case MED_INV: page = PageHelper.startPage(1, pageSize).doSelectPageInfo(() -> { medicineStorageDao.listMedicineInventory(clinic.getClinicId()); }); break; case CHI_MED_INV: page = PageHelper.startPage(1, pageSize).doSelectPageInfo(() -> { medicineStorageDao.listChinaMedicineInventory(clinic.getClinicId()); }); break; } if (page.getTotal() == 0) { continue; } Map> map = page.getList() .stream() .collect(Collectors.groupingBy(MedicineStorageTemp::getStoreStorageCode)); for(Map.Entry> msMap:map.entrySet()){ MedicineStorageDto medicineStorageDto = new MedicineStorageDto(); medicineStorageDto.setStoreCode(clinic.getStoreCode()); switch (flag) { case MED_PUR: case CHI_MED_PUR: medicineStorageDto.setStorePurchaseType("5"); medicineStorageDto.setStorageType(StorageType.PUR); break; case MED_MED_INBOUND: case CHI_MED_INBOUND: medicineStorageDto.setStorageType(StorageType.INBOUND); break; case MED_INV: case CHI_MED_INV: medicineStorageDto.setStorageType(StorageType.CHI_MED_INBOUND); break; } medicineStorageDto.setStorePrecordCode("00000000"); medicineStorageDto.setStorageMan(msMap.getValue().get(0).getStorageMan()); medicineStorageDto.setStorageTime(msMap.getValue().get(0).getStorageTime()); medicineStorageDto.setStoreCode(clinic.getStoreCode()); medicineStorageDto.setStoreStorageCode(msMap.getKey()); List list = msMap.getValue() .stream() .map(MedicineStorageTemp::temp2MedSto) .collect(Collectors.toList()); medicineStorageDto.setMedicineInfos(list); this.upload(medicineStorageDto); } if (page.getPages() > 1) { PageInfo page1 = new PageInfo<>(); for(int i = 2; i <= page.getPages(); i++) { switch (flag) { case MED_PUR: page1 = PageHelper.startPage(i, pageSize).doSelectPageInfo(() -> { medicineStorageDao.listMedicinePurchase(clinic.getClinicId()); }); break; case CHI_MED_PUR: page1 = PageHelper.startPage(i, pageSize).doSelectPageInfo(() -> { medicineStorageDao.listChinaMedicinePurchase(clinic.getClinicId()); }); break; case MED_MED_INBOUND: page1 = PageHelper.startPage(i, pageSize).doSelectPageInfo(() -> { medicineStorageDao.listMedicineOutbound(clinic.getClinicId()); }); break; case CHI_MED_INBOUND: page1 = PageHelper.startPage(i, pageSize).doSelectPageInfo(() -> { medicineStorageDao.listChinaMedicineOutbound(clinic.getClinicId()); }); break; case MED_INV: page1 = PageHelper.startPage(i, pageSize).doSelectPageInfo(() -> { medicineStorageDao.listMedicineInventory(clinic.getClinicId()); }); break; case CHI_MED_INV: page1 = PageHelper.startPage(i, pageSize).doSelectPageInfo(() -> { medicineStorageDao.listChinaMedicineInventory(clinic.getClinicId()); }); break; } Map> map1 = page1.getList() .stream() .collect(Collectors.groupingBy(MedicineStorageTemp::getStoreStorageCode)); for(Map.Entry> msMap:map1.entrySet()){ MedicineStorageDto medicineStorageDto = new MedicineStorageDto(); medicineStorageDto.setStoreCode(clinic.getStoreCode()); switch (flag) { case MED_PUR: case CHI_MED_PUR: medicineStorageDto.setStorePurchaseType("5"); medicineStorageDto.setStorageType(StorageType.PUR); break; case MED_MED_INBOUND: case CHI_MED_INBOUND: medicineStorageDto.setStorageType(StorageType.INBOUND); break; case MED_INV: case CHI_MED_INV: medicineStorageDto.setStorageType(StorageType.CHI_MED_INBOUND); break; } medicineStorageDto.setStorePrecordCode("00000000"); medicineStorageDto.setStorageMan(msMap.getValue().get(0).getStorageMan()); medicineStorageDto.setStorageTime(msMap.getValue().get(0).getStorageTime()); medicineStorageDto.setStoreCode(clinic.getStoreCode()); medicineStorageDto.setStoreStorageCode(msMap.getKey()); List list = msMap.getValue() .stream() .map(MedicineStorageTemp::temp2MedSto) .collect(Collectors.toList()); medicineStorageDto.setMedicineInfos(list); this.upload(medicineStorageDto); } } } }; long syncTime = System.currentTimeMillis(); log.info("1方法执行用时--{}", startTime - syncTime); }; public void upload (Object o) throws JsonProcessingException { ObjectMapper objectMapper = new ObjectMapper(); String params = objectMapper.writeValueAsString(o); System.out.println(objectMapper.writeValueAsString(RestTemplateUtil.postHttp(url, params))); } }