forked from kidgrow-microservices-platform

kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/impl/ProductOrderRecordServiceImpl.java
@@ -2,18 +2,22 @@
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;
import com.kidgrow.oprationcenter.feign.DiagnosticService;
import com.kidgrow.oprationcenter.feign.RoleOrganizationService;
import com.kidgrow.oprationcenter.mapper.ProductOrderRecordMapper;
import com.kidgrow.oprationcenter.model.ConsumptionRecord;
import com.kidgrow.oprationcenter.model.ProductOrderRecord;
import com.kidgrow.oprationcenter.service.IConsumptionRecordService;
import com.kidgrow.oprationcenter.service.IProductOrderDetailService;
import com.kidgrow.oprationcenter.service.IProductOrderRecordService;
import com.kidgrow.oprationcenter.vo.DiagnosisRecord;
import com.kidgrow.oprationcenter.vo.GroupProductDetail;
import com.kidgrow.oprationcenter.vo.ProductOrderJoinDetail;
import com.kidgrow.oprationcenter.vo.UserProductDetail;
import com.kidgrow.usercenter.feign.SysDoctorService;
import com.kidgrow.usercenter.feign.SysHospitalService;
import com.kidgrow.usercenter.model.SysHospital;
@@ -30,11 +34,12 @@
/**
 * 石家庄喜高科技有限责任公司 版权所有 © Copyright 2020<br>
 *
 * @version 1.0
 * @Description: 产品/明显的充值记录<br>
 * @Project: 用户中心<br>
 * @CreateDate: Created in 2020-04-01 09:37:05 <br>
 * @Author: <a href="4345453@kidgrow.com">liuke</a>
 * @version 1.0
 */
@Slf4j
@Service
@@ -49,8 +54,12 @@
    private SysHospitalService sysHospitalService;
    @Autowired
    private IProductOrderDetailService productOrderDetailService;
    @Autowired
    private IConsumptionRecordService consumptionRecordService;
    /**
     * 列表
     *
     * @param params
     * @return
     */
@@ -63,6 +72,7 @@
    /**
     * 获取诊断列表
     *
     * @param params
     * @return
     */
@@ -70,8 +80,10 @@
    public PageResult<DiagnosisRecord> findAllDataList(Map<String, Object> params){
        return  diagnosticService.getDiagnosticItemList(params).getData();
    }
    /**
     * 列表
     *
     * @param params
     * @return
     */
@@ -86,6 +98,7 @@
    /**
     * 获取统计数据
     *
     * @param params
     * @return
     */
@@ -97,41 +110,53 @@
    }
    /**
     * 统计用户所有套餐剩余
     * 统计用户所有套餐剩余  套餐剩余量=(有效期内的医院所有共享+科室私有的套餐的读片量)-预扣费的读片量
     *
     * @param hospitalId
     * @param departmentId
     * @return
     */
    @Override
    public ResultBody biUserNowProduct(long hospitalId, Long departmentId) {
    public ResultBody biUserNowProduct(Long hospitalId, Long departmentId) {
        if (hospitalId>0&& departmentId>0) {
            //查询当前医院正在使用的套餐
            Map<String,Object> selectMap=new HashMap<>();
            selectMap.put("hospitalId",hospitalId);
            List<ProductOrderJoinDetail>  productOrderDetailList=productOrderDetailService.findAllList(selectMap);
            Long userAICount=0l;
            if (productOrderDetailList.size()>0) {
            UserProductDetail userProductDetail=productOrderDetailService.getUserProductDetail(hospitalId,departmentId);
            int userAICount = 0;
            if (userProductDetail!=null) {
                //包含共享的数据
                List<ProductOrderJoinDetail> productOrderJoinDetailListShare=productOrderDetailList.stream().filter(f->f.getIsShare()).collect(Collectors.toList());
                List<ProductOrderJoinDetail> productOrderJoinDetailListShare = userProductDetail.getProductOrderJoinDetailListShare();
                //科室私有的数据
                List<ProductOrderJoinDetail> productOrderJoinDetailsListDep=productOrderDetailList.stream().filter((f->departmentId.equals(f.getDepartmentId())&&f.getIsShare()==false)).collect(Collectors.toList());
                List<ProductOrderJoinDetail> productOrderJoinDetailsListDep = userProductDetail.getProductOrderJoinDetailsListDep();
                //本医院可共享的读片总量
                Long shareCount=productOrderJoinDetailListShare.stream().collect(Collectors.summingLong(ProductOrderJoinDetail::getAilightCount));
                int shareCount = productOrderJoinDetailListShare.stream().collect(Collectors.summingInt(ProductOrderJoinDetail::getAilightCount));
                //本科室私有读片总量
                Long depCount=productOrderJoinDetailsListDep.stream().collect(Collectors.summingLong(ProductOrderJoinDetail::getAilightCount));
                int depCount = productOrderJoinDetailsListDep.stream().collect(Collectors.summingInt(ProductOrderJoinDetail::getAilightCount));
                //可用的总量
                userAICount=shareCount+depCount;
            }
            return ResultBody.ok().data(userAICount);
        }
        else
        {
            return ResultBody.failed("医院和科室数据有误!");
                //计算预扣费的总量
                Map<String, Object> selectMap = new HashMap<>();
                selectMap.put("recordType", ConsumptionConstant.BEFORE_DEDUCTION);
                List<ConsumptionRecord> consumptionRecordList = consumptionRecordService.findAllList(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));
                    userAICount -= (shareConCount + depConCount);
        }
    }
            return ResultBody.ok().data(userAICount);
        } else {
            return ResultBody.failed("医院和科室数据有误!");
        }
    }
    /**
   * 根据ProductOrderRecord对象当做查询条件进行查询
     *
   * @param productOrderRecord
   * @return ProductOrderRecord
   */
@@ -139,8 +164,10 @@
    public ProductOrderRecord findByObject(ProductOrderRecord productOrderRecord){
        return baseMapper.findByObject(productOrderRecord);
    }
    /**
     * 修改数据状态 启用 禁用
     *
     * @param params
     * @return
     */