From 3fd36846ad612f627c0784587dc6099a322a158e Mon Sep 17 00:00:00 2001
From: houruijun <411269194@kidgrow.com>
Date: Wed, 24 Jun 2020 18:55:09 +0800
Subject: [PATCH] 1.编写扣费业务4大接口(AI 调用前,失败退,调用后,人工读) 2.增加写mq消息队列 3.增加扣费业务相关全局静态值 4.调整扣费,套餐,套餐记录services里面的调用关系。

---
 kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/impl/ProductOrderDetailServiceImpl.java |  158 +++++++++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 142 insertions(+), 16 deletions(-)

diff --git a/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/impl/ProductOrderDetailServiceImpl.java b/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/impl/ProductOrderDetailServiceImpl.java
index 805eaf4..b508878 100644
--- a/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/impl/ProductOrderDetailServiceImpl.java
+++ b/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/impl/ProductOrderDetailServiceImpl.java
@@ -1,26 +1,35 @@
 package com.kidgrow.oprationcenter.service.impl;
 
+import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.kidgrow.common.model.PageResult;
-import com.kidgrow.common.model.ResultBody;
-import com.kidgrow.common.model.SysUser;
+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.ConsumptionRecordMapper;
 import com.kidgrow.oprationcenter.mapper.ProductOrderDetailMapper;
+import com.kidgrow.oprationcenter.model.ConsumptionRecord;
 import com.kidgrow.oprationcenter.model.ProductOrderDetail;
 import com.kidgrow.oprationcenter.service.IProductOrderDetailService;
 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;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.MapUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.Date;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * 石家庄喜高科技有限责任公司 版权所有 © Copyright 2020<br>
@@ -37,6 +46,12 @@
     DiagnosticService diagnosticService;
     @Autowired
     private RoleOrganizationService roleOrganizationService;
+    @Autowired
+    private SysDoctorService sysDoctorService;
+    @Autowired
+    private SysHospitalService sysHospitalService;
+    @Autowired
+    private ConsumptionRecordMapper consumptionRecordMapper;
     /**
      * 列表
      * @param params
@@ -48,6 +63,15 @@
         List<ProductOrderDetail> list  =  baseMapper.findList(page, params);
         return PageResult.<ProductOrderDetail>builder().data(list).code(0).count(page.getTotal()).build();
     }
+    /**
+     * 获取已购买产品列表
+     * @param params
+     * @return
+     */
+    @Override
+    public List<ProductOrderJoinDetail> findAllList(Map<String, Object> params){
+        return baseMapper.findAllList(params);
+    }
 
     /**
      * 获取诊断列表
@@ -57,19 +81,6 @@
     @Override
     public PageResult<DiagnosisRecord> findAllDataList(Map<String, Object> params){
         return  diagnosticService.getDiagnosticItemList(params).getData();
-    }
-    /**
-     * 列表
-     * @param params
-     * @return
-     */
-    @Override
-    public PageResult<ProductOrderJoinDetail> findAllList(Map<String, Object> params, SysUser sysUser) {
-        Page<ProductOrderJoinDetail> page = new Page<>(MapUtils.getInteger(params, "page"), MapUtils.getInteger(params, "limit"));
-        Map<String, Object> roleOrgMap = roleOrganizationService.getRoleOrgMap(sysUser.getRoles());
-        params.putAll(roleOrgMap);
-        List<ProductOrderJoinDetail> list  =  baseMapper.findAllList(page,params);
-        return PageResult.<ProductOrderJoinDetail>builder().data(list).code(0).count(page.getTotal()).build();
     }
 
     /**
@@ -112,4 +123,119 @@
         int i = baseMapper.updateById(productOrder);
         return i > 0 ? ResultBody.ok().data(productOrder).msg("更新成功") : ResultBody.failed("更新失败");
     }
+
+    @Override
+    public ResultBody getTypeByUser(SysUser sysUser) {
+        List<SysOrganization> organizations = sysUser.getOrganizations();
+        if(organizations.size()>0){
+            SysOrganization sysOrganization = organizations.get(0);
+            List<ProductOrderJoinDetail> list=baseMapper.getTypeByUser(sysOrganization.getId());
+            if (list.size()>0) {
+                ProductOrderJoinDetail productOrderJoinDetail = list.get(0);
+                //查询用户的真实姓名
+                Map<String,Object> selectMap=new HashMap<>();
+                selectMap.put("user_id",sysUser.getId());
+                ResultBody listByMap = sysDoctorService.getListByMap(selectMap);
+                List<SysDoctor> sysDoctors = JSON.parseArray(JSON.toJSONString(listByMap.getData()), SysDoctor.class);
+                String str="";
+                if(sysDoctors!=null&&sysDoctors.size()>0){
+                    str= sysDoctors.get(0).getDoctorName();
+                }
+                //查询医院的 logo
+                Map<String,Object> map=new HashMap<>();
+                map.put("id",sysOrganization.getId());
+                ResultBody allByMap = sysHospitalService.findAllByMap(map);
+                List<SysHospital> hospitals = JSON.parseArray(JSON.toJSONString(allByMap.getData()), SysHospital.class);
+                String logo="";
+                if(hospitals.size()>0){
+                    logo = hospitals.get(0).getHospitalLogo();
+                }
+                Map<String,Object> mapVo=new HashMap<>();
+                mapVo.put("type",productOrderJoinDetail.getProType());
+                mapVo.put("realName",str);
+                //剩余时间
+                Date proEndtime = productOrderJoinDetail.getProEndtime();
+                Double surplusDay=DateUtils.getDays(proEndtime, new Date());
+                int surplus = surplusDay.intValue();
+                mapVo.put("surplus",surplus);
+                mapVo.put("logo",logo);
+                //获取 售后服务工程师********不能从sysOrganization获取,从department获取
+               /* mapVo.put("saleUserName",sysOrganization.getSaleUserName());
+                mapVo.put("saleUserTel",sysOrganization.getSaleUserTel());*/
+                return ResultBody.ok().data(mapVo);
+            }else {
+                return ResultBody.failed("该用户套餐已经失效");
+            }
+        }else {
+            return ResultBody.failed("该用户的组织已经失效");
+        }
+    }
+    /**
+     *获取医院的套餐数据
+     * @param hospitalId
+     * @param departmentId
+     * @return
+     */
+    @Override
+    public UserProductDetail getUserProductDetail(Long hospitalId, Long departmentId)
+    {
+        //查询当前医院正在使用的套餐
+        Map<String, Object> selectMap = new HashMap<>();
+        selectMap.put("hospitalId", hospitalId);
+        List<ProductOrderJoinDetail> productOrderDetailList = this.findAllList(selectMap);
+        if (productOrderDetailList.size() > 0) {
+            UserProductDetail userProductDetail=new UserProductDetail();
+            //包含共享的数据
+            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()));
+            return userProductDetail;
+        }
+        return null;
+    }
+    /**
+     * 统计用户所有套餐剩余  套餐剩余量=(有效期内的医院所有共享+科室私有的套餐的读片量)-预扣费的读片量
+     *
+     * @param hospitalId
+     * @param departmentId
+     * @return
+     */
+    @Override
+    public ResultBody biUserNowProduct(Long hospitalId, Long departmentId) {
+        if (hospitalId > 0 && departmentId > 0) {
+            UserProductDetail userProductDetail=getUserProductDetail(hospitalId,departmentId);
+            int userAICount = 0;
+            if (userProductDetail!=null) {
+                //包含共享的数据
+                List<ProductOrderJoinDetail> productOrderJoinDetailListShare = userProductDetail.getProductOrderJoinDetailListShare();
+                //科室私有的数据
+                List<ProductOrderJoinDetail> productOrderJoinDetailsListDep = userProductDetail.getProductOrderJoinDetailsListDep();
+                //本医院可共享的读片总量
+                int shareCount = productOrderJoinDetailListShare.stream().collect(Collectors.summingInt(ProductOrderJoinDetail::getAilightCount));
+                //本科室私有读片总量
+                int depCount = productOrderJoinDetailsListDep.stream().collect(Collectors.summingInt(ProductOrderJoinDetail::getAilightCount));
+                //可用的总量
+                userAICount = shareCount + depCount;
+                //计算预扣费的总量
+                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));
+                    userAICount -= (shareConCount + depConCount);
+                }
+            }
+
+            return ResultBody.ok().data(userAICount);
+        } else {
+            return ResultBody.failed("医院和科室数据有误!");
+        }
+    }
 }

--
Gitblit v1.8.0