forked from kidgrow-microservices-platform

houruijun
2020-08-25 4fa3c68a3526dd366638a6aa3020ce9c1ede22d4
kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/impl/ProductOrderDetailServiceImpl.java
@@ -2,7 +2,6 @@
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.kidgrow.common.constant.ConsumptionConstant;
import com.kidgrow.common.model.*;
import com.kidgrow.common.service.impl.SuperServiceImpl;
import com.kidgrow.common.utils.DateUtils;
@@ -20,6 +19,7 @@
import com.kidgrow.usercenter.model.SysHospital;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.MapUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cglib.beans.BeanCopier;
import org.springframework.stereotype.Service;
@@ -158,7 +158,7 @@
     * @return
             */
    @Override
    public OrderChartVo productOrderChart(Map<String, Object> params) {
    public List<OrderChartVo> productOrderChart(Map<String, Object> params) {
        return baseMapper.productOrderChart(params);
    }
    /**
@@ -167,8 +167,20 @@
     *          units 是产品名称
     */
    @Override
    public OrderChartVo proCountChart() {
    public List<OrderChartVo> proCountChart() {
        return baseMapper.proCountChart();
    }
    /**
     *获取该科室下的所有的套餐信息
     * @param params
     * @return
     */
    @Override
    public PageResult<ProductOrderDetail> departmentProductDetail(Map<String, Object> params) {
        Page<ProductOrderDetail> page = new Page<>(MapUtils.getInteger(params, "page"), MapUtils.getInteger(params, "limit"));
        List<ProductOrderDetail> list  =
                baseMapper.departmentProductDetail(page, Long.parseLong(params.get("hospitalId").toString()),Long.parseLong(params.get("departmentId").toString()));
        return PageResult.<ProductOrderDetail>builder().data(list).code(0).count(page.getTotal()).build();
    }
    /**
@@ -287,7 +299,7 @@
            //包含共享的数据
            userProductDetail.setProductOrderJoinDetailListShare(productOrderDetailList.stream().filter(f -> f.getIsShare()).collect(Collectors.toList()));
            //科室私有的数据
            userProductDetail.setProductOrderJoinDetailsListDep(productOrderDetailList.stream().filter((f -> departmentId.equals(f.getDepartmentId()) && f.getIsShare() == false)).collect(Collectors.toList()));
            userProductDetail.setProductOrderJoinDetailsListDep(productOrderDetailList.stream().filter((f -> departmentId.equals(f.getDepartmentId()) && !f.getIsShare())).collect(Collectors.toList()));
            return userProductDetail;
        }
        return null;
@@ -310,24 +322,40 @@
                //科室私有的数据
                List<ProductOrderJoinDetail> productOrderJoinDetailsListDep = userProductDetail.getProductOrderJoinDetailsListDep();
                //本医院可共享的读片总量
                int shareCount = productOrderJoinDetailListShare.stream().collect(Collectors.summingInt(ProductOrderJoinDetail::getAilightCount));
                int shareCount = (productOrderJoinDetailListShare.size()>0)?
                        productOrderJoinDetailListShare.stream().collect(Collectors.summingInt(ProductOrderJoinDetail::getAilightCount))
                        :0;
                //本科室私有读片总量
                int depCount = productOrderJoinDetailsListDep.stream().collect(Collectors.summingInt(ProductOrderJoinDetail::getAilightCount));
                int depCount = (productOrderJoinDetailsListDep.size()>0)?
                        productOrderJoinDetailsListDep.stream().collect(Collectors.summingInt(ProductOrderJoinDetail::getAilightCount))
                        :0;
                //可用的总量
                userAICount = shareCount + depCount;
                //共享套餐里面的detailid
                List<Long> shareDetailId = (productOrderJoinDetailListShare.size()>0)
                        ?productOrderJoinDetailListShare.stream().map(m -> m.getId()).collect(Collectors.toList())
                        :new ArrayList<>();
                //私有套餐里面的detailid
                List<Long> depDetailId = (productOrderJoinDetailsListDep.size()>0)
                        ?productOrderJoinDetailsListDep.stream().map(m -> m.getId()).collect(Collectors.toList())
                        :new ArrayList<>();
                //获取所有有效的套餐id
                List<Long> nowDetailList=new ArrayList<>();
                BeanUtils.copyProperties(shareDetailId,nowDetailList);
                nowDetailList.addAll(depDetailId);
                //查询已预扣 未退还  未扣费的数据
                List<ConsumptionRecord> consumptionRecordList = consumptionRecordMapper.findDetailList(nowDetailList);
                //计算预扣费的总量
                Map<String, Object> selectMap = new HashMap<>();
                selectMap.put("recordType", ConsumptionConstant.BEFORE_DEDUCTION);
                List<ConsumptionRecord> consumptionRecordList = consumptionRecordMapper.findList(selectMap);;
                if (consumptionRecordList.size() > 0) {
                    //共享套餐里面的detailid
                    List<Long> shareDetailId = productOrderJoinDetailListShare.stream().map(m -> m.getId()).collect(Collectors.toList());
                    //私有套餐里面的detailid
                    List<Long> depDetailId = productOrderJoinDetailsListDep.stream().map(m -> m.getId()).collect(Collectors.toList());
                    //共享套餐里面预扣费总数
                    int shareConCount = consumptionRecordList.stream().filter(f -> shareDetailId.contains(f.getProOrderDetailId())).collect(Collectors.summingInt(ConsumptionRecord::getConsumptionCount));
                    //共享套餐里面预扣费总数
                    int depConCount = consumptionRecordList.stream().filter(f -> depDetailId.contains(f.getProOrderDetailId())).collect(Collectors.summingInt(ConsumptionRecord::getConsumptionCount));
                    int shareConCount = (shareDetailId.size()>0)?consumptionRecordList.stream()
                            .filter(f -> shareDetailId.contains(f.getProOrderDetailId()))
                            .collect(Collectors.summingInt(ConsumptionRecord::getConsumptionCount)):0;
                    //私有套餐里面预扣费总数
                    int depConCount = (depDetailId.size()>0)?consumptionRecordList.stream()
                            .filter(f -> depDetailId.contains(f.getProOrderDetailId()))
                            .collect(Collectors.summingInt(ConsumptionRecord::getConsumptionCount)):0;
                    userAICount -= (shareConCount + depConCount);
                }
            }