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.*; import com.miyzh.entity.dto.MedicineStorageDto; import com.miyzh.entity.dto.MedicineStoreDto; 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.http.HttpHeaders; 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; @Value("${update.startDate}") public String startDate; @Value("${update.endDate}") public String endDate; @Value("${update.dateType}") public String dateType; @Value("${update.count}") public Integer count; 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"; //中药盘盈入库 public void uploadMedicine(Clinic clinic, String flag) throws InterruptedException, JsonProcessingException { PageInfo page = new PageInfo<>(); switch (flag) { case MED_PUR: System.out.println(clinic.getStoreCode() + "开始查询西药采购入库记录..."); page = PageHelper.startPage(1, pageSize).doSelectPageInfo(() -> { medicineStorageDao.listMedicinePurchase(clinic.getClinicId(), startDate, endDate, dateType, count); }); System.out.println(clinic.getStoreCode() + "开始同步西药采购入库记录, 数量" + page.getTotal()); break; case CHI_MED_PUR: System.out.println(clinic.getStoreCode() + "开始查询中药采购入库记录..."); page = PageHelper.startPage(1, pageSize).doSelectPageInfo(() -> { medicineStorageDao.listChinaMedicinePurchase(clinic.getClinicId(), startDate, endDate, dateType, count); }); System.out.println(clinic.getStoreCode() + "开始同步中药采购入库记录, 数量" + page.getTotal()); break; case MED_MED_INBOUND: System.out.println(clinic.getStoreCode() + "开始查询西药销售退回入库记录..."); page = PageHelper.startPage(1, pageSize).doSelectPageInfo(() -> { medicineStorageDao.listMedicineOutbound(clinic.getClinicId(), startDate, endDate, dateType, count); }); System.out.println(clinic.getStoreCode() + "开始同步西药销售退回入库记录, 数量" + page.getTotal()); break; case CHI_MED_INBOUND: System.out.println(clinic.getStoreCode() + "开始查询中药销售退回入库记录..."); page = PageHelper.startPage(1, pageSize).doSelectPageInfo(() -> { medicineStorageDao.listChinaMedicineOutbound(clinic.getClinicId(), startDate, endDate, dateType, count); }); System.out.println(clinic.getStoreCode() + "开始同步中药销售退回入库记录, 数量" + page.getTotal()); break; case MED_INV: System.out.println(clinic.getStoreCode() + "开始查询西药盘盈入库记录..."); page = PageHelper.startPage(1, pageSize).doSelectPageInfo(() -> { medicineStorageDao.listMedicineInventory(clinic.getClinicId(), startDate, endDate, dateType, count); }); System.out.println(clinic.getStoreCode() + "开始同步西药盘盈入库记录, 数量" + page.getTotal()); break; case CHI_MED_INV: System.out.println(clinic.getStoreCode() + "开始查询中药盘盈入库记录..."); page = PageHelper.startPage(1, pageSize).doSelectPageInfo(() -> { medicineStorageDao.listChinaMedicineInventory(clinic.getClinicId(), startDate, endDate, dateType, count); }); System.out.println(clinic.getStoreCode() + "开始同步中药盘盈入库记录, 数量" + page.getTotal()); break; } if (page.getTotal() == 0) { return; } for(MedicineStorageTemp medicineStore : page.getList()) { if(null == medicineStore.getDosageId() || "".equals(medicineStore.getDosageId().trim())) { medicineStore.setDosageId("999999999"); } if(null == medicineStore.getDosageName() || "".equals(medicineStore.getDosageName().trim())) { medicineStore.setDosageName("999999999"); } if(null == medicineStore.getSpecification() || "".equals(medicineStore.getSpecification().trim())) { medicineStore.setSpecification("999999999"); } if(null == medicineStore.getManufacturer() || "".equals(medicineStore.getManufacturer().trim())) { medicineStore.setManufacturer("999999999"); } if(null == medicineStore.getPlace() || "".equals(medicineStore.getPlace().trim())) { medicineStore.setPlace("999999999"); } if(null == medicineStore.getPack() || "".equals(medicineStore.getPack().trim())) { medicineStore.setPack("999999999"); } if(null == medicineStore.getBatchNo() || "".equals(medicineStore.getBatchNo().trim())) { medicineStore.setBatchNo("0000000000000"); } if(null == medicineStore.getMedicineDeadline() || "".equals(medicineStore.getMedicineDeadline().trim())) { medicineStore.setMedicineDeadline("0000000000000"); } if(null == medicineStore.getBarCode() || "".equals(medicineStore.getBarCode().trim())) { medicineStore.setBarCode("0000000000000"); } if(null == medicineStore.getDeliveryCompany() || "".equals(medicineStore.getDeliveryCompany().trim())) { medicineStore.setDeliveryCompany("999999999"); } if(null == medicineStore.getItemCode() || "".equals(medicineStore.getItemCode().trim())) { medicineStore.setItemCode("999999999"); } if(null == medicineStore.getItemName() || "".equals(medicineStore.getItemName().trim())) { medicineStore.setItemName("999999999"); } if(null == medicineStore.getValidity() || "".equals(medicineStore.getValidity().trim())) { medicineStore.setValidity("0000000000000"); } if(null == medicineStore.getManufactureTime() || "".equals(medicineStore.getManufactureTime().trim())) { medicineStore.setManufactureTime("0000-00-00"); } } 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()); // 西药部分 耗材西药分别上传 中药不需要处理 if(flag.equals(MED_PUR) || flag.equals(MED_MED_INBOUND) || flag.equals(MED_INV)){ Map> medMap = list.stream().collect(Collectors.groupingBy(MedicineStorage::getItemType)); for(Map.Entry> m : medMap.entrySet()) { if(m.getValue().size() > 0) { String f = ("1".equals(m.getKey())?"西药":"耗材"); System.out.println(f + "数量" + m.getValue().size()); medicineStorageDto.setMedicineInfos(m.getValue()); this.upload(medicineStorageDto, flag); } } } else { medicineStorageDto.setMedicineInfos(list); this.upload(medicineStorageDto, flag); } } 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(), startDate, endDate, dateType, count); }); break; case CHI_MED_PUR: page1 = PageHelper.startPage(i, pageSize).doSelectPageInfo(() -> { medicineStorageDao.listChinaMedicinePurchase(clinic.getClinicId(), startDate, endDate, dateType, count); }); break; case MED_MED_INBOUND: page1 = PageHelper.startPage(i, pageSize).doSelectPageInfo(() -> { medicineStorageDao.listMedicineOutbound(clinic.getClinicId(), startDate, endDate, dateType, count); }); break; case CHI_MED_INBOUND: page1 = PageHelper.startPage(i, pageSize).doSelectPageInfo(() -> { medicineStorageDao.listChinaMedicineOutbound(clinic.getClinicId(), startDate, endDate, dateType, count); }); break; case MED_INV: page1 = PageHelper.startPage(i, pageSize).doSelectPageInfo(() -> { medicineStorageDao.listMedicineInventory(clinic.getClinicId(), startDate, endDate, dateType, count); }); break; case CHI_MED_INV: page1 = PageHelper.startPage(i, pageSize).doSelectPageInfo(() -> { medicineStorageDao.listChinaMedicineInventory(clinic.getClinicId(), startDate, endDate, dateType, count); }); break; } for(MedicineStorageTemp medicineStore : page1.getList()) { if(null == medicineStore.getDosageId() || "".equals(medicineStore.getDosageId().trim())) { medicineStore.setDosageId("999999999"); } if(null == medicineStore.getDosageName() || "".equals(medicineStore.getDosageName().trim())) { medicineStore.setDosageName("999999999"); } if(null == medicineStore.getSpecification() || "".equals(medicineStore.getSpecification().trim())) { medicineStore.setSpecification("999999999"); } if(null == medicineStore.getManufacturer() || "".equals(medicineStore.getManufacturer().trim())) { medicineStore.setManufacturer("999999999"); } if(null == medicineStore.getPlace() || "".equals(medicineStore.getPlace().trim())) { medicineStore.setPlace("999999999"); } if(null == medicineStore.getPack() || "".equals(medicineStore.getPack().trim())) { medicineStore.setPack("999999999"); } if(null == medicineStore.getBatchNo() || "".equals(medicineStore.getBatchNo().trim())) { medicineStore.setBatchNo("0000000000000"); } if(null == medicineStore.getMedicineDeadline() || "".equals(medicineStore.getMedicineDeadline().trim())) { medicineStore.setMedicineDeadline("0000000000000"); } if(null == medicineStore.getBarCode() || "".equals(medicineStore.getBarCode().trim())) { medicineStore.setBarCode("0000000000000"); } if(null == medicineStore.getDeliveryCompany() || "".equals(medicineStore.getDeliveryCompany().trim())) { medicineStore.setDeliveryCompany("999999999"); } if(null == medicineStore.getItemCode() || "".equals(medicineStore.getItemCode().trim())) { medicineStore.setItemCode("999999999"); } if(null == medicineStore.getItemName() || "".equals(medicineStore.getItemName().trim())) { medicineStore.setItemName("999999999"); } if(null == medicineStore.getValidity() || "".equals(medicineStore.getValidity().trim())) { medicineStore.setValidity("0000000000000"); } if(null == medicineStore.getManufactureTime() || "".equals(medicineStore.getManufactureTime().trim())) { medicineStore.setManufactureTime("0000-00-00"); } } 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.setStoreName(clinic.getStoreName()); medicineStorageDto.setStoreStorageCode(msMap.getKey()); List list = msMap.getValue() .stream() .map(MedicineStorageTemp::temp2MedSto) .collect(Collectors.toList()); if(flag.equals(MED_PUR) || flag.equals(MED_MED_INBOUND) || flag.equals(MED_INV)){ Map> medMap = list.stream().collect(Collectors.groupingBy(MedicineStorage::getItemType)); for(Map.Entry> m : medMap.entrySet()) { if(m.getValue().size() > 0) { String f = ("1".equals(m.getKey())?"西药":"耗材"); System.out.println(f + "数量" + m.getValue().size()); medicineStorageDto.setMedicineInfos(m.getValue()); this.upload(medicineStorageDto, flag); } } } else { medicineStorageDto.setMedicineInfos(list); this.upload(medicineStorageDto, flag); } } } } }; public void upload (MedicineStorageDto storageDtoInfo, String flag) throws InterruptedException, JsonProcessingException { String flagStr = ""; switch (flag) { case MED_PUR: flagStr = "西药采购入库"; break; case CHI_MED_PUR: flagStr = "中药采购入库"; break; case MED_MED_INBOUND: flagStr = "西药销售退回入库"; break; case CHI_MED_INBOUND: flagStr = "中药销售退回"; break; case MED_INV: flagStr = "西药盘盈入库"; break; case CHI_MED_INV: flagStr = "中药盘盈入库"; break; } ObjectMapper objectMapper = new ObjectMapper(); String params = objectMapper.writeValueAsString(storageDtoInfo); BaseResult baseResult = RestTemplateUtil.postHttp(url, params, new HttpHeaders(), new BaseResult()); if (null != baseResult && baseResult.isSuccess()) { log.info(storageDtoInfo.getStoreCode() + flagStr + baseResult.getMessage() + ",数量" + storageDtoInfo.getMedicineInfos().size()); } else { log.error(flagStr + "------" + storageDtoInfo.getStoreCode() + "------" + baseResult.getMessage()); } } }