szq 4 years ago
parent
commit
607b1b9093

+ 1 - 1
src/main/java/com/miyzh/entity/MedicineStorage.java

@@ -1,13 +1,13 @@
 package com.miyzh.entity;
 
 import lombok.Data;
+import org.springframework.beans.BeanUtils;
 
 @Data
 public class MedicineStorage extends Medicine {
 
     private String storageQuantity; //实际入库数量
 
-    private String storeStorageCode; //机构入库编码
 
 }
 

+ 16 - 0
src/main/java/com/miyzh/entity/MedicineStorageTemp.java

@@ -0,0 +1,16 @@
+package com.miyzh.entity;
+
+import lombok.Data;
+
+@Data
+public class MedicineStorageTemp extends MedicineStorage {
+
+    private String storeStorageCode; //机构入库编码
+
+    private String storageMan; //入库人
+
+    private String storageTime; //入库时间
+
+}
+
+

+ 7 - 2
src/main/java/com/miyzh/service/BaseService.java

@@ -24,9 +24,14 @@ public class BaseService {
         try{
             long startTime = System.currentTimeMillis();
             List<Clinic> clinicList = clinicService.listClinic();
-//            storeUploadService.uploadMedicine(clinicList);
+//            medicineStoreService.uploadMedicine(clinicList);
 //            medicineStoreService.uploadChinaMedicine(clinicList);
-            medicineStorageService.uploadMedicine(clinicList);
+            medicineStorageService.uploadMedicine(clinicList, "1");
+            medicineStorageService.uploadMedicine(clinicList, "2");
+//            medicineStorageService.uploadMedicine(clinicList, "3");
+//            medicineStorageService.uploadMedicine(clinicList, "4");
+//            medicineStorageService.uploadMedicine(clinicList, "5");
+//            medicineStorageService.uploadMedicine(clinicList, "6");
 
             long syncTime = System.currentTimeMillis();
             log.info("总耗时--{}", startTime - syncTime);

+ 159 - 48
src/main/java/com/miyzh/service/MedicineStorageService.java

@@ -4,22 +4,18 @@ 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.MedicineStorageDao;
-import com.miyzh.dao.MedicineStoreDao;
 import com.miyzh.entity.Clinic;
 import com.miyzh.entity.MedicineStorage;
-import com.miyzh.entity.MedicineStore;
-import com.miyzh.entity.dto.MedicineStoreDto;
-import com.miyzh.utils.RestTemplateUtil;
+import com.miyzh.entity.MedicineStorageTemp;
+import com.miyzh.entity.dto.MedicineStorageDto;
 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.time.LocalDateTime;
-import java.time.format.DateTimeFormatter;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
@@ -39,62 +35,177 @@ public class MedicineStorageService {
     @Value("${postApi.pageSize}")
     private int pageSize;
 
-    @Async
-    public void uploadMedicine(List<Clinic> clinicList) throws InterruptedException, JsonProcessingException {
-        long startTime = System.currentTimeMillis();
-        for(Clinic clinic : clinicList) {
-            PageInfo<MedicineStorage> page = PageHelper.startPage(1, pageSize).doSelectPageInfo(() -> {
-                medicineStorageDao.listMedicinePurchase(clinic.getClinicId());
-            });
-            Map<String, List<MedicineStorage>> map =  page.getList().stream()
-                    .collect(Collectors.groupingBy(MedicineStorage::getStoreStorageCode, Collectors.toList()));
-//            storeInfo.setMedicineInfos(page.getList());
-//            this.upload(storeInfo);
-//            if (page.getPages() > 1) {
-//                for(int i = 2; i <= page.getPages(); i++) {
-//                    PageHelper.startPage(i, pageSize).doSelectPageInfo(() -> {
-//                        medicineStoreDao.listMedicineStore(clinic.getClinicId());
-//                    });
-//                    storeInfo.setMedicineInfos(page.getList());
-//                    this.upload(storeInfo);
-//                }
-//            }
-        };
-        long syncTime = System.currentTimeMillis();
-        log.info("1方法执行用时--{}", startTime - syncTime);
-    };
+    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 uploadChinaMedicine(List<Clinic> clinicList) throws JsonProcessingException {
+    public void uploadMedicine(List<Clinic> clinicList, String flag) throws InterruptedException, JsonProcessingException {
         long startTime = System.currentTimeMillis();
-        MedicineStoreDto storeInfo = new MedicineStoreDto();
-        storeInfo.setCheckMan("");
-        storeInfo.setCheckTime(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss")));
+        PageInfo<MedicineStorageTemp> page = new PageInfo<>();
         for(Clinic clinic : clinicList) {
-            storeInfo.setStoreCode(clinic.getStoreCode());
-            PageInfo<MedicineStore> page = PageHelper.startPage(1, pageSize).doSelectPageInfo(() -> {
-                medicineStorageDao.listMedicinePurchase(clinic.getClinicId());
-            });
-            storeInfo.setMedicineInfos(page.getList());
-            this.upload(storeInfo);
-            if (page.getPages() > 1) {
-                for(int i = 2; i <= page.getPages(); i++) {
-                    PageHelper.startPage(i, pageSize).doSelectPageInfo(() -> {
+            switch (flag) {
+                case MED_PUR:
+                    page = PageHelper.startPage(1, pageSize).doSelectPageInfo(() -> {
                         medicineStorageDao.listMedicinePurchase(clinic.getClinicId());
                     });
-                    storeInfo.setMedicineInfos(page.getList());
-                    this.upload(storeInfo);
+                    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<String, List<MedicineStorageTemp>> map =  page.getList()
+                    .stream()
+                    .collect(Collectors.groupingBy(MedicineStorageTemp::getStoreStorageCode));
+            for(Map.Entry<String, List<MedicineStorageTemp>> msMap:map.entrySet()){
+                MedicineStorageDto medicineStorageDto = new MedicineStorageDto();
+                medicineStorageDto.setStoreCode(clinic.getStoreCode());
+                switch (flag) {
+                    case MED_PUR:
+                    case CHI_MED_PUR:
+                        medicineStorageDto.setStorageType("1");
+                        break;
+                    case MED_MED_INBOUND:
+                    case CHI_MED_INBOUND:
+                        medicineStorageDto.setStorageType("3");
+                        break;
+                    case MED_INV:
+                    case CHI_MED_INV:
+                        medicineStorageDto.setStorageType("4");
+                        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<MedicineStorage> list = msMap.getValue()
+                        .stream()
+                        .map(e -> {
+                            MedicineStorage medicineStorage = new MedicineStorage();
+                            BeanUtils.copyProperties(e, medicineStorage);
+                            return medicineStorage;
+                        })
+                        .collect(Collectors.toList());
+                medicineStorageDto.setMedicineInfos(list);
+                this.upload(medicineStorageDto);
+            }
+            if (page.getPages() > 1) {
+                PageInfo<MedicineStorageTemp> 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<String, List<MedicineStorageTemp>> map1 =  page1.getList()
+                            .stream()
+                            .collect(Collectors.groupingBy(MedicineStorageTemp::getStoreStorageCode));
+                    for(Map.Entry<String, List<MedicineStorageTemp>> msMap:map1.entrySet()){
+                        MedicineStorageDto medicineStorageDto = new MedicineStorageDto();
+                        medicineStorageDto.setStoreCode(clinic.getStoreCode());
+                        switch (flag) {
+                            case MED_PUR:
+                            case CHI_MED_PUR:
+                                medicineStorageDto.setStorageType("1");
+                                break;
+                            case MED_MED_INBOUND:
+                            case CHI_MED_INBOUND:
+                                medicineStorageDto.setStorageType("3");
+                                break;
+                            case MED_INV:
+                            case CHI_MED_INV:
+                                medicineStorageDto.setStorageType("4");
+                                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<MedicineStorage> list = msMap.getValue()
+                                .stream()
+                                .map(e -> {
+                                    MedicineStorage medicineStorage = new MedicineStorage();
+                                    BeanUtils.copyProperties(e, medicineStorage);
+                                    return medicineStorage;
+                                })
+                                .collect(Collectors.toList());
+                        medicineStorageDto.setMedicineInfos(list);
+                        this.upload(medicineStorageDto);
+                    }
                 }
             }
         };
         long syncTime = System.currentTimeMillis();
-        log.info("2方法执行用时--{}", startTime - syncTime);
+        log.info("1方法执行用时--{}", startTime - syncTime);
+    };
+
+    @Async
+    public void uploadChinaMedicine(List<Clinic> clinicList) throws JsonProcessingException {
+
     };
 
     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)));
+        System.out.println(params);
+//        System.out.println(objectMapper.writeValueAsString(RestTemplateUtil.postHttp(url, params)));
     }
 
 }

+ 3 - 3
src/main/java/com/miyzh/service/MedicineStoreService.java

@@ -39,7 +39,7 @@ public class MedicineStoreService {
     private int pageSize;
 
     @Async
-    public void uploadMedicine(List<Clinic> clinicList) throws InterruptedException, JsonProcessingException {
+    public void uploadMedicine(List<Clinic> clinicList) throws Exception {
         long startTime = System.currentTimeMillis();
         MedicineStoreDto storeInfo = new MedicineStoreDto();
         storeInfo.setCheckMan("");
@@ -66,7 +66,7 @@ public class MedicineStoreService {
     };
 
     @Async
-    public void uploadChinaMedicine(List<Clinic> clinicList) throws JsonProcessingException {
+    public void uploadChinaMedicine(List<Clinic> clinicList) throws Exception {
         long startTime = System.currentTimeMillis();
         MedicineStoreDto storeInfo = new MedicineStoreDto();
         storeInfo.setCheckMan("");
@@ -92,7 +92,7 @@ public class MedicineStoreService {
         log.info("uploadChinaMedicine方法执行用时--{}", startTime - syncTime);
     };
 
-    public void upload (MedicineStoreDto storeInfo) throws JsonProcessingException {
+    public void upload (MedicineStoreDto storeInfo) throws Exception {
         ObjectMapper objectMapper = new ObjectMapper();
         String params = objectMapper.writeValueAsString(storeInfo);
         BaseResult baseResult = RestTemplateUtil.postHttp(url, params);

+ 4 - 1
src/main/resources/application-szq.yml

@@ -79,7 +79,10 @@ scheduling:
   limit: 100
 postApi:
   pageSize: 2000
-  storeUrl: http://localhost:8080/mhis-pisp/api/pis/inventory-balance/upload
+  storeUrl: http://15.72.176.14/mhis-pisp/api/pis/inventory-balance/upload
+  sorageUrl: http://15.72.176.14/mhis-pisp/api/pis/storagein-records/upload
+  outStoreUrl: http://15.72.176.14/mhis-pisp/api/pis/storageout-records/upload
+  orderDetailUrl: http://15.72.176.14/mhis-pisp/api/pis/order-details/upload
 
 
 

+ 340 - 52
src/main/resources/mapper/MedicineStorageMapper.xml

@@ -2,11 +2,15 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.miyzh.dao.MedicineStorageDao">
 
-    <resultMap id="BaseResultMap" type="com.miyzh.entity.MedicineStorage" extends="com.miyzh.dao.MedicineDao.BaseResultMap">
+    <resultMap id="BaseResultMap" type="com.miyzh.entity.MedicineStorageTemp" extends="com.miyzh.dao.MedicineDao.BaseResultMap">
         <!--实际入库数量-->
         <result column="storage_quantity" jdbcType="VARCHAR" property="storageQuantity" />
         <!--机构入库编码-->
         <result column="store_storage_code" jdbcType="VARCHAR" property="storeStorageCode" />
+        <!--入库人-->
+        <result column="storage_man" jdbcType="VARCHAR" property="storageMan" />
+        <!--入库时间-->
+        <result column="storage_time" jdbcType="VARCHAR" property="storageTime" />
     </resultMap>
 
     <select id="listMedicinePurchase" resultMap="BaseResultMap" parameterType="java.lang.String">
@@ -15,23 +19,224 @@
             IF
             ( length( cm.med_ins_backup_id )> 0, cm.med_ins_backup_id, cm.medicine_id ) AS store_medicine_code,
             cm.medicine_c_name as store_medicine_name,
-            cm.medicine_specifications AS YPGG,
-            cm.medicine_unit AS YPDW,
-            '采购入库' BRXM,
+            cm.medicine_name_goods as store_medicine_trade_name,
+            ifnull(idm.formulation, " ") as dosage_id,
+            cm.medicine_dosage_forms as dosage_name,
+            cm.medicine_specifications AS specification,
+            cm.medicine_manufacturer_name as manufacturer,
+            cm.medicine_place as place,
+            cm.medicine_unit AS pack,
+            " " as model,
+            csd.stock_batch_number as batch_no,
+            csd.create_time as medicine_deadline,
+            csd.medicine_deadline as manufacture_time,
+            cm.medicine_barcode as bar_code,
+            "" as regist_no,
+            csd.stock_channel as delivery_company,
+            "999999999" as distributor,
             cp.purchase_no as store_storage_code,
-            sum( csd.stock_change_number ) AS YPSL,
-            csd.stock_bid AS JHJG,
-            cs.medicine_retail_price AS YPDJ,
-            sum( csd.stock_change_number * cs.medicine_retail_price ) AS YPJE,
-            cp.create_time AS CZRQ,
-            cp.create_username AS CZGH,
-            cp.id AS HIS_ID
+            sum( csd.stock_change_number ) AS storage_quantity,
+            csd.stock_bid AS price,
+            cs.medicine_retail_price AS retail_price,
+            "" as plat_item_code,
+            "" as plat_item_name,
+            idm.standard_menu_code as item_code,
+            idm.insurance_medicine_name as item_name,
+            cp.create_username AS storage_man,
+            cp.create_time as storage_time
         FROM
             clc_stock_detail csd,
             clc_medicine cm,
             clc_stock cs,
             clc_stock_inbound csi,
-            clc_purchase cp
+            clc_purchase cp,
+            ins_d_medicine idm
+        WHERE
+            csd.medicine_id = cm.medicine_id
+            AND csd.clinic_id = cm.clinic_id
+            AND csd.clinic_id = cs.clinic_id
+            AND csd.medicine_id = cs.medicine_id
+            AND cs.warehouse_code = '1'
+            AND csd.clinic_id = csi.clinic_id
+            AND csd.id = csi.id
+            AND csd.clinic_id = cp.clinic_id
+            AND cp.id = csi.purchase_id
+            AND csd.clinic_id = #{clinicId}
+            AND timestamp_number != 'default'
+            AND cm.is_base = 1
+            and cp.purchase_no is not null
+            AND idm.medicine_id = cm.medicine_id
+            AND idm.clinic_id = cm.clinic_id
+        GROUP BY
+            cp.id,
+            csd.medicine_id
+        ORDER BY
+            cp.create_time,
+            csd.medicine_id
+    </select>
+
+    <select id="listChinaMedicinePurchase" resultMap="BaseResultMap" parameterType="java.lang.String">
+        SELECT DISTINCT
+            cm.medicine_category as item_type,
+            IF
+            ( length( cm.med_ins_backup_id )> 0, cm.med_ins_backup_id, cm.medicine_id ) AS store_medicine_code,
+            cm.medicine_c_name as store_medicine_name,
+            cm.medicine_name_goods as store_medicine_trade_name,
+            ifnull(idm.formulation, " ") as dosage_id,
+            cm.medicine_dosage_forms as dosage_name,
+            cm.medicine_specifications AS specification,
+            cm.medicine_manufacturer_name as manufacturer,
+            cm.medicine_place as place,
+            cm.medicine_unit AS pack,
+            " " as model,
+            csd.stock_batch_number as batch_no,
+            csd.create_time as medicine_deadline,
+            csd.medicine_deadline as manufacture_time,
+            cm.medicine_barcode as bar_code,
+            "" as regist_no,
+            csd.stock_channel as delivery_company,
+            "999999999" as distributor,
+            cp.purchase_no as store_storage_code,
+            sum( csd.stock_change_number ) AS storage_quantity,
+            csd.stock_bid AS price,
+            cs.medicine_retail_price AS retail_price,
+            "" as plat_item_code,
+            "" as plat_item_name,
+            idm.standard_menu_code as item_code,
+            idm.insurance_medicine_name as item_name,
+            cp.create_username AS storage_man,
+            cp.create_time as storage_time
+        FROM
+            clc_stock_detail csd,
+            clc_medicine cm,
+            clc_stock cs,
+            clc_stock_inbound csi,
+            clc_purchase cp,
+            ins_d_medicine idm
+        WHERE
+            csd.medicine_id = cm.medicine_id
+            AND csd.clinic_id = cm.clinic_id
+            AND csd.clinic_id = cs.clinic_id
+            AND csd.medicine_id = cs.medicine_id
+            AND cs.warehouse_code = '1'
+            AND csd.clinic_id = csi.clinic_id
+            AND csd.id = csi.id
+            AND csd.clinic_id = cp.clinic_id
+            AND cp.id = csi.purchase_id
+            AND csd.clinic_id = #{clinicId}
+            AND timestamp_number != 'default'
+            AND cm.is_base = 1
+            and cp.purchase_no is not null
+            AND idm.medicine_id = cm.medicine_id
+            AND idm.clinic_id = cm.clinic_id
+        GROUP BY
+            cp.id,
+            csd.medicine_id
+        ORDER BY
+            cp.create_time,
+            csd.medicine_id
+    </select>
+
+    <select id="listMedicineOutbound" resultMap="BaseResultMap" parameterType="java.lang.String">
+        SELECT DISTINCT
+            cm.medicine_category as item_type,
+            IF
+            ( length( cm.med_ins_backup_id )> 0, cm.med_ins_backup_id, cm.medicine_id ) AS store_medicine_code,
+            cm.medicine_c_name as store_medicine_name,
+            cm.medicine_name_goods as store_medicine_trade_name,
+            ifnull(idm.formulation, " ") as dosage_id,
+            cm.medicine_dosage_forms as dosage_name,
+            cm.medicine_specifications AS specification,
+            cm.medicine_manufacturer_name as manufacturer,
+            cm.medicine_place as place,
+            cm.medicine_unit AS pack,
+            " " as model,
+            csd.stock_batch_number as batch_no,
+            csd.create_time as medicine_deadline,
+            csd.medicine_deadline as manufacture_time,
+            cm.medicine_barcode as bar_code,
+            "" as regist_no,
+            csd.stock_channel as delivery_company,
+            "999999999" as distributor,
+            cp.purchase_no as store_storage_code,
+            sum( csd.stock_change_number ) AS storage_quantity,
+            csd.stock_bid AS price,
+            cs.medicine_retail_price AS retail_price,
+            "" as plat_item_code,
+            "" as plat_item_name,
+            idm.standard_menu_code as item_code,
+            idm.insurance_medicine_name as item_name,
+            cp.create_username AS storage_man,
+            cp.create_time as storage_time
+        FROM
+            clc_stock_detail csd,
+            clc_medicine cm,
+            clc_stock cs,
+            clc_stock_inbound csi,
+            clc_purchase cp,
+            ins_d_medicine idm
+        WHERE
+            csd.medicine_id = cm.medicine_id
+            AND csd.clinic_id = cm.clinic_id
+            AND csd.clinic_id = cs.clinic_id
+            AND csd.medicine_id = cs.medicine_id
+            AND cs.warehouse_code = '1'
+            AND csd.clinic_id = csi.clinic_id
+            AND csd.id = csi.id
+            AND csd.clinic_id = cp.clinic_id
+            AND cp.id = csi.purchase_id
+            AND csd.clinic_id = #{clinicId}
+            AND timestamp_number != 'default'
+            AND cm.is_base = 1
+            and cp.purchase_no is not null
+            AND idm.medicine_id = cm.medicine_id
+            AND idm.clinic_id = cm.clinic_id
+        GROUP BY
+            cp.id,
+            csd.medicine_id
+        ORDER BY
+            cp.create_time,
+            csd.medicine_id
+    </select>
+
+    <select id="listChinaMedicineOutbound" resultMap="BaseResultMap" parameterType="java.lang.String">
+        SELECT DISTINCT
+            cm.medicine_category as item_type,
+            IF
+            ( length( cm.med_ins_backup_id )> 0, cm.med_ins_backup_id, cm.medicine_id ) AS store_medicine_code,
+            cm.medicine_c_name as store_medicine_name,
+            cm.medicine_name_goods as store_medicine_trade_name,
+            ifnull(idm.formulation, " ") as dosage_id,
+            cm.medicine_dosage_forms as dosage_name,
+            cm.medicine_specifications AS specification,
+            cm.medicine_manufacturer_name as manufacturer,
+            cm.medicine_place as place,
+            cm.medicine_unit AS pack,
+            " " as model,
+            csd.stock_batch_number as batch_no,
+            csd.create_time as medicine_deadline,
+            csd.medicine_deadline as manufacture_time,
+            cm.medicine_barcode as bar_code,
+            "" as regist_no,
+            csd.stock_channel as delivery_company,
+            "999999999" as distributor,
+            cp.purchase_no as store_storage_code,
+            sum( csd.stock_change_number ) AS storage_quantity,
+            csd.stock_bid AS price,
+            cs.medicine_retail_price AS retail_price,
+            "" as plat_item_code,
+            "" as plat_item_name,
+            idm.standard_menu_code as item_code,
+            idm.insurance_medicine_name as item_name,
+            cp.create_username AS storage_man,
+            cp.create_time as storage_time
+        FROM
+            clc_stock_detail csd,
+            clc_medicine cm,
+            clc_stock cs,
+            clc_stock_inbound csi,
+            clc_purchase cp,
+            ins_d_medicine idm
         WHERE
             csd.medicine_id = cm.medicine_id
             AND csd.clinic_id = cm.clinic_id
@@ -45,6 +250,9 @@
             AND csd.clinic_id = #{clinicId}
             AND timestamp_number != 'default'
             AND cm.is_base = 1
+            and cp.purchase_no is not null
+            AND idm.medicine_id = cm.medicine_id
+            AND idm.clinic_id = cm.clinic_id
         GROUP BY
             cp.id,
             csd.medicine_id
@@ -53,48 +261,128 @@
             csd.medicine_id
     </select>
 
-    <select id="listChinaMedicineStore" resultMap="BaseResultMap" parameterType="java.lang.String">
-        select
-        ccm.medicine_category as item_type,
-        ccm.med_ins_backup_id as store_medicine_code,
-        ccm.medicine_name as store_medicine_name,
-        ccm.medicine_name as store_medicine_trade_name,
-        ifnull(idm.formulation, " ") as dosage_id,
-        ccm.medicine_rate_last as dosage_name,
-        ccm.medicine_specifications as specification,
-        ccm.medicine_manufacturer_name as manufacturer,
-        ccm.medicine_address as place,
-        idm.medicine_package as pack,
-        " " as model,
-        ccsp.stock_batch_number as batch_no,
-        ccm.create_time as medicine_deadline,
-        ccsp.medicine_deadline as manufacture_time,
-        "0000000000000" as bar_code,
-        "" as regist_no,
-        ccsp.stock_channel as delivery_company,
-        "999999999" as distributor,
-        ccsp.stock_bid as price,
-        idm.sale_price as retail_price,
-        "" as plat_item_code,
-        "" as plat_item_name,
-        idm.standard_menu_code as item_code,
-        idm.insurance_medicine_name as item_name,
-        "999999999" as approval_number,
-        ccsp.remain_number as current_num
-        from
-            clc_china_stock_profit ccsp
-        left join
-            clc_china_medicine ccm
-        on
-            ccm.clinic_id = ccsp.clinic_id and ccsp.medicine_id=ccm.medicine_id
-        left join
+    <select id="listMedicineInventory" resultMap="BaseResultMap" parameterType="java.lang.String">
+        SELECT DISTINCT
+            cm.medicine_category as item_type,
+            IF
+            ( length( cm.med_ins_backup_id )> 0, cm.med_ins_backup_id, cm.medicine_id ) AS store_medicine_code,
+            cm.medicine_c_name as store_medicine_name,
+            cm.medicine_name_goods as store_medicine_trade_name,
+            ifnull(idm.formulation, " ") as dosage_id,
+            cm.medicine_dosage_forms as dosage_name,
+            cm.medicine_specifications AS specification,
+            cm.medicine_manufacturer_name as manufacturer,
+            cm.medicine_place as place,
+            cm.medicine_unit AS pack,
+            " " as model,
+            csd.stock_batch_number as batch_no,
+            csd.create_time as medicine_deadline,
+            csd.medicine_deadline as manufacture_time,
+            cm.medicine_barcode as bar_code,
+            "" as regist_no,
+            csd.stock_channel as delivery_company,
+            "999999999" as distributor,
+            cp.purchase_no as store_storage_code,
+            sum( csd.stock_change_number ) AS storage_quantity,
+            csd.stock_bid AS price,
+            cs.medicine_retail_price AS retail_price,
+            "" as plat_item_code,
+            "" as plat_item_name,
+            idm.standard_menu_code as item_code,
+            idm.insurance_medicine_name as item_name,
+            cp.create_username AS storage_man,
+            cp.create_time as storage_time
+        FROM
+            clc_stock_detail csd,
+            clc_medicine cm,
+            clc_stock cs,
+            clc_stock_inbound csi,
+            clc_purchase cp,
             ins_d_medicine idm
-        on
-            ccsp.clinic_id = idm.clinic_id and ccsp.medicine_id=idm.medicine_id
-        where
-            ccsp.clinic_id = #{clinicId}
+        WHERE
+            csd.medicine_id = cm.medicine_id
+            AND csd.clinic_id = cm.clinic_id
+            AND csd.clinic_id = cs.clinic_id
+            AND csd.medicine_id = cs.medicine_id
+            AND cs.warehouse_code = '1'
+            AND csd.clinic_id = csi.clinic_id
+            AND csd.id = csi.id
+            AND csd.clinic_id = cp.clinic_id
+            AND cp.id = csi.purchase_id
+            AND csd.clinic_id = #{clinicId}
+            AND timestamp_number != 'default'
+            AND cm.is_base = 1
+            and cp.purchase_no is not null
+            AND idm.medicine_id = cm.medicine_id
+            AND idm.clinic_id = cm.clinic_id
+        GROUP BY
+            cp.id,
+            csd.medicine_id
+        ORDER BY
+            cp.create_time,
+            csd.medicine_id
+    </select>
+
+    <select id="listChinaMedicineInventory" resultMap="BaseResultMap" parameterType="java.lang.String">
+        SELECT DISTINCT
+            cm.medicine_category as item_type,
+            IF
+            ( length( cm.med_ins_backup_id )> 0, cm.med_ins_backup_id, cm.medicine_id ) AS store_medicine_code,
+            cm.medicine_c_name as store_medicine_name,
+            cm.medicine_name_goods as store_medicine_trade_name,
+            ifnull(idm.formulation, " ") as dosage_id,
+            cm.medicine_dosage_forms as dosage_name,
+            cm.medicine_specifications AS specification,
+            cm.medicine_manufacturer_name as manufacturer,
+            cm.medicine_place as place,
+            cm.medicine_unit AS pack,
+            " " as model,
+            csd.stock_batch_number as batch_no,
+            csd.create_time as medicine_deadline,
+            csd.medicine_deadline as manufacture_time,
+            cm.medicine_barcode as bar_code,
+            "" as regist_no,
+            csd.stock_channel as delivery_company,
+            "999999999" as distributor,
+            cp.purchase_no as store_storage_code,
+            sum( csd.stock_change_number ) AS storage_quantity,
+            csd.stock_bid AS price,
+            cs.medicine_retail_price AS retail_price,
+            "" as plat_item_code,
+            "" as plat_item_name,
+            idm.standard_menu_code as item_code,
+            idm.insurance_medicine_name as item_name,
+            cp.create_username AS storage_man,
+            cp.create_time as storage_time
+        FROM
+            clc_stock_detail csd,
+            clc_medicine cm,
+            clc_stock cs,
+            clc_stock_inbound csi,
+            clc_purchase cp,
+            ins_d_medicine idm
+        WHERE
+            csd.medicine_id = cm.medicine_id
+            AND csd.clinic_id = cm.clinic_id
+            AND csd.clinic_id = cs.clinic_id
+            AND csd.medicine_id = cs.medicine_id
+            AND cs.warehouse_code = '1'
+            AND csd.clinic_id = csi.clinic_id
+            AND csd.id = csi.id
+            AND csd.clinic_id = cp.clinic_id
+            AND cp.id = csi.purchase_id
+            AND csd.clinic_id = #{clinicId}
+            AND timestamp_number != 'default'
+            AND cm.is_base = 1
+            and cp.purchase_no is not null
+            AND idm.medicine_id = cm.medicine_id
+            AND idm.clinic_id = cm.clinic_id
         GROUP BY
-            ccsp.medicine_id
+            cp.id,
+            csd.medicine_id
+        ORDER BY
+            cp.create_time,
+            csd.medicine_id
     </select>