From a8bf44754f50d0b0a65f0f2d4beefc131261e35d Mon Sep 17 00:00:00 2001
From: zhaoxiaohao <913652501@qq.com>
Date: Wed, 24 Jun 2020 16:53:47 +0800
Subject: [PATCH] Merge branch 'dev' of http://192.168.2.240:7070/r/kidgrow-microservices-platform into dev

---
 kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/IProductOrderDetailService.java         |    8 
 kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/IConsumptionRecordService.java          |   41 +++
 kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-server/src/main/resources/application.yml                                                    |    2 
 kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/impl/ProductOrderRecordServiceImpl.java |  129 ++++++---
 kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/resources/mapper/ProductOrderDetailMapper.xml                                   |    1 
 kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/mapper/ConsumptionRecordMapper.java             |   40 +++
 kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/IProductOrderRecordService.java         |    2 
 kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-api/src/main/java/com/kidgrow/oprationcenter/vo/UserProductDetail.java                       |   28 ++
 kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/impl/ConsumptionRecordServiceImpl.java  |  139 ++++++++++
 kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/resources/mapper/ConsumptionRecordMapper.xml                                    |   63 ++++
 kidgrow-commons/kidgrow-common-spring-boot-starter/src/main/java/com/kidgrow/common/constant/ConsumptionConstant.java                                         |   72 +++++
 kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-api/src/main/java/com/kidgrow/oprationcenter/model/ConsumptionRecord.java                    |   75 +++++
 kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-server/src/main/java/com/kidgrow/oprationcenter/controller/ConsumptionRecordController.java  |  114 ++++++++
 kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/impl/ProductOrderDetailServiceImpl.java |   25 +
 14 files changed, 686 insertions(+), 53 deletions(-)

diff --git a/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-api/src/main/java/com/kidgrow/oprationcenter/model/ConsumptionRecord.java b/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-api/src/main/java/com/kidgrow/oprationcenter/model/ConsumptionRecord.java
new file mode 100644
index 0000000..93ee069
--- /dev/null
+++ b/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-api/src/main/java/com/kidgrow/oprationcenter/model/ConsumptionRecord.java
@@ -0,0 +1,75 @@
+package com.kidgrow.oprationcenter.model;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import com.kidgrow.common.model.SuperModel;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+
+/**
+ * 石家庄喜高科技有限责任公司 版权所有 © Copyright 2020<br>
+ *
+ * @version 1.0
+ * @Description: <br>
+ * @Project: 运营中心<br>
+ * @CreateDate: Created in 2020-06-23 15:07:14 <br>
+ * @Author: <a href="411269194@kidgrow.com">houruijun</a>
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@NoArgsConstructor
+@AllArgsConstructor
+@TableName("consumption_record")
+public class ConsumptionRecord extends SuperModel {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 上次消费记录id(用于退费,扣费)
+     */
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long lastRecordId;
+    /**
+     * 用户充值的套餐id
+     */
+    @JsonSerialize(using = ToStringSerializer.class)
+    @NotNull(message = "用户充值的套餐id不能为空")
+    private Long proOrderDetailId;
+    /**
+     * 调用方业务编号,光片名称
+     */
+    private String businessId;
+    /**
+     * 记录类型
+     * 1:预扣费
+     * 2:退预扣费(需要关联预扣费编号)
+     * 3:退扣费(需要关联扣费编号)
+     * 4:扣费(需要关联预扣费编号)
+     */
+    @NotNull(message = "记录类型不能为空")
+    private Integer recordType;
+    /**
+     * 业务返回结果
+     * bcode                 含义
+     * ---------------------------------
+     * 100                 余额充足
+     * 101                 余额不足
+     * 200                 已经预扣
+     * 201                 已经扣费
+     * 300                 退还预扣
+     * 301                 退还扣费
+     * 400                 义务执行出错
+     */
+    @NotEmpty(message = "业务返回结果不能为空")
+    private String businessCode;
+    /**
+     * 扣费数量/金额
+     */
+    @NotNull(message = "扣费数量/金额不能为空")
+    private Integer consumptionCount;
+}
diff --git a/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-api/src/main/java/com/kidgrow/oprationcenter/vo/UserProductDetail.java b/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-api/src/main/java/com/kidgrow/oprationcenter/vo/UserProductDetail.java
new file mode 100644
index 0000000..5595f12
--- /dev/null
+++ b/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-api/src/main/java/com/kidgrow/oprationcenter/vo/UserProductDetail.java
@@ -0,0 +1,28 @@
+package com.kidgrow.oprationcenter.vo;
+
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+/**
+ * 石家庄喜高科技有限责任公司 版权所有 © Copyright 2020<br>
+ *
+ * @Description: <br>
+ * @Project: <br>
+ * @CreateDate: Created in 2020/04/27 11:01 <br>
+ * @Author: <a href="411269194@kidgrow.com">houruijun</a>
+ * **/
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class UserProductDetail extends Model<UserProductDetail> {
+    //实体序列化  必要
+    private static final long serialVersionUID = 1L;
+    //共享套餐列表
+    List<ProductOrderJoinDetail> productOrderJoinDetailListShare;
+    //私有套餐列表
+    List<ProductOrderJoinDetail> productOrderJoinDetailsListDep;
+}
diff --git a/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/mapper/ConsumptionRecordMapper.java b/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/mapper/ConsumptionRecordMapper.java
new file mode 100644
index 0000000..2b1214e
--- /dev/null
+++ b/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/mapper/ConsumptionRecordMapper.java
@@ -0,0 +1,40 @@
+package com.kidgrow.oprationcenter.mapper;
+
+import com.kidgrow.oprationcenter.model.ConsumptionRecord;
+import com.kidgrow.db.mapper.SuperMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 石家庄喜高科技有限责任公司 版权所有 © Copyright 2020<br>
+ * @Description: <br>
+ * @Project: 运营中心<br>
+ * @CreateDate: Created in 2020-06-23 15:07:14 <br>
+ * @Author: <a href="411269194@kidgrow.com">houruijun</a>
+ * @version 1.0
+ */
+public interface ConsumptionRecordMapper extends SuperMapper<ConsumptionRecord> {
+    /**
+     * 分页查询列表
+     * @param page
+     * @param params
+     * @return
+     */
+    List<ConsumptionRecord> findList(Page<ConsumptionRecord> page, @Param("p") Map<String, Object> params);
+
+    /**
+     * 根据ConsumptionRecord对象当做查询条件进行查询
+     * @param
+     * @return ConsumptionRecord对象
+     */
+    ConsumptionRecord findByObject(@Param("p") ConsumptionRecord consumptionRecord);
+    /**
+     * 查询列表
+     * @param params
+     * @return
+     */
+    List<ConsumptionRecord> findList(@Param("p") Map<String, Object> params);
+}
diff --git a/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/IConsumptionRecordService.java b/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/IConsumptionRecordService.java
new file mode 100644
index 0000000..b678356
--- /dev/null
+++ b/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/IConsumptionRecordService.java
@@ -0,0 +1,41 @@
+package com.kidgrow.oprationcenter.service;
+
+import com.kidgrow.oprationcenter.model.ConsumptionRecord;
+import com.kidgrow.common.model.PageResult;
+import com.kidgrow.common.service.ISuperService;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 石家庄喜高科技有限责任公司 版权所有 © Copyright 2020<br>
+ * @Description: <br>
+ * @Project: 运营中心<br>
+ * @CreateDate: Created in 2020-06-23 15:07:14 <br>
+ * @Author: <a href="411269194@kidgrow.com">houruijun</a>
+ * @version 1.0
+ */
+public interface IConsumptionRecordService extends ISuperService<ConsumptionRecord> {
+    /**
+     * 列表
+     * @param params
+     * @return
+     */
+    PageResult<ConsumptionRecord> findList(Map<String, Object> params);
+
+    /**
+     * 自定义条件查询所有的列表
+     * @param params
+     * @return
+     */
+    List<ConsumptionRecord> findAllList(Map<String, Object> params);
+
+
+    /**
+    * 根据ConsumptionRecord对象当做查询条件进行查询
+    * @param consumptionRecord
+    * @return ConsumptionRecord对象
+    */
+    ConsumptionRecord findByObject(ConsumptionRecord consumptionRecord);
+}
+
diff --git a/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/IProductOrderDetailService.java b/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/IProductOrderDetailService.java
index a0d0386..7fb3857 100644
--- a/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/IProductOrderDetailService.java
+++ b/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/IProductOrderDetailService.java
@@ -8,6 +8,7 @@
 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 java.util.List;
 import java.util.Map;
@@ -61,5 +62,12 @@
      * @return
      */
     List<ProductOrderJoinDetail> findAllList(Map<String, Object> params);
+    /**
+     * 获取医院的套餐数据
+     * @param hospitalId
+     * @param departmentId
+     * @return
+     */
+    UserProductDetail getUserProductDetail(Long hospitalId, Long departmentId);
 }
 
diff --git a/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/IProductOrderRecordService.java b/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/IProductOrderRecordService.java
index ea7668c..4d94a57 100644
--- a/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/IProductOrderRecordService.java
+++ b/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/IProductOrderRecordService.java
@@ -60,6 +60,6 @@
      */
     PageResult<GroupProductDetail> groupList(Map<String, Object> params);
 
-    ResultBody biUserNowProduct(long hospitalId,Long departmentId);
+    ResultBody biUserNowProduct(Long hospitalId,Long departmentId);
 }
 
diff --git a/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/impl/ConsumptionRecordServiceImpl.java b/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/impl/ConsumptionRecordServiceImpl.java
new file mode 100644
index 0000000..29d9ba4
--- /dev/null
+++ b/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/impl/ConsumptionRecordServiceImpl.java
@@ -0,0 +1,139 @@
+package com.kidgrow.oprationcenter.service.impl;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.kidgrow.common.model.PageResult;
+import com.kidgrow.common.service.impl.SuperServiceImpl;
+import com.kidgrow.common.utils.StringUtils;
+import com.kidgrow.oprationcenter.mapper.ConsumptionRecordMapper;
+import com.kidgrow.oprationcenter.model.ConsumptionRecord;
+import com.kidgrow.oprationcenter.service.IConsumptionRecordService;
+import com.kidgrow.oprationcenter.service.IProductOrderDetailService;
+import com.kidgrow.oprationcenter.vo.ProductOrderJoinDetail;
+import com.kidgrow.oprationcenter.vo.UserProductDetail;
+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.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * 石家庄喜高科技有限责任公司 版权所有 © Copyright 2020<br>
+ * @Description: <br>
+ * @Project: 运营中心<br>
+ * @CreateDate: Created in 2020-06-23 15:07:14 <br>
+ * @Author: <a href="411269194@kidgrow.com">houruijun</a>
+ * @version 1.0
+ */
+@Slf4j
+@Service
+public class ConsumptionRecordServiceImpl extends SuperServiceImpl<ConsumptionRecordMapper, ConsumptionRecord> implements IConsumptionRecordService {
+    @Autowired
+    private IProductOrderDetailService productOrderDetailService;
+    /**
+     * 列表
+     * @param params
+     * @return
+     */
+    @Override
+    public PageResult<ConsumptionRecord> findList(Map<String, Object> params){
+        Page<ConsumptionRecord> page = new Page<>(MapUtils.getInteger(params, "page"), MapUtils.getInteger(params, "limit"));
+        List<ConsumptionRecord> list  =  baseMapper.findList(page, params);
+        return PageResult.<ConsumptionRecord>builder().data(list).code(0).count(page.getTotal()).build();
+    }
+    /**
+     * 列表
+     * @param params
+     * @return
+     */
+    @Override
+    public List<ConsumptionRecord> findAllList(Map<String, Object> params){
+        return baseMapper.findList(params);
+    }
+
+    /**
+   * 根据ConsumptionRecord对象当做查询条件进行查询
+   * @param consumptionRecord
+   * @return ConsumptionRecord
+   */
+    @Override
+    public ConsumptionRecord findByObject(ConsumptionRecord consumptionRecord){
+        return baseMapper.findByObject(consumptionRecord);
+    }
+
+    /**
+     *
+     * @param hospitalId
+     * @param departmentId
+     * @return
+     */
+    public boolean deductionDepartmentProduct(Long hospitalId,Long departmentId)
+    {
+        UserProductDetail userProductDetail=productOrderDetailService.getUserProductDetail(hospitalId,departmentId);
+        //合并集合
+        userProductDetail.getProductOrderJoinDetailListShare().addAll(userProductDetail.getProductOrderJoinDetailsListDep());
+        List<ProductOrderJoinDetail> productOrderJoinDetailList=userProductDetail.getProductOrderJoinDetailListShare();
+        //Collections.sort(productOrderJoinDetailList);
+        return false;
+    }
+    /**
+     * 写/更新记录数据
+     * @param consumptionRecord
+     * @return
+     */
+    public ConsumptionRecord SaveConsumptionRecord(ConsumptionRecord consumptionRecord)
+    {
+        if (consumptionRecord != null) {
+            this.saveOrUpdate(consumptionRecord);
+            return consumptionRecord;
+        }
+        return null;
+    }
+    /**
+     * 检查该业务是否存在该业务类型
+     * @param consumptionRecordList 该业务下的扣费列表
+     * @param recordType 记录类型编码 参考ConsumptionConstant里面
+     * @return
+     */
+    public boolean isBeforeDeduction(List<ConsumptionRecord> consumptionRecordList,int recordType)
+    {
+        if (consumptionRecordList != null) {
+            if (consumptionRecordList.size()>0) {
+                //过滤预扣费的记录
+                return consumptionRecordList.stream().filter(f->f.getRecordType()==recordType).collect(Collectors.toList()).size()==1;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * 获取一个业务关联的扣费记录
+     * @param businessId 光片的名称/编号
+     * @return
+     */
+    public List<ConsumptionRecord> GetBusinessConsumptionList(String businessId)
+    {
+        if (StringUtils.isNotBlank(businessId)) {
+            Map<String, Object> params = new HashMap<>();
+            params.put("businessId", businessId);
+            List<ConsumptionRecord> consumptionRecordList=this.findAllList(params);
+            return consumptionRecordList;
+        }
+        return null;
+    }
+    /**
+     * 获取一个扣费记录
+     * @param recordId 扣费记录id
+     * @return
+     */
+    public ConsumptionRecord GetBusinessConsumptionList(Long recordId)
+    {
+        if (recordId>0) {
+            return baseMapper.selectById(recordId);
+        }
+        return null;
+    }
+}
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 acdfb9a..7a2efd8 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
@@ -13,6 +13,7 @@
 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;
@@ -25,6 +26,7 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * 石家庄喜高科技有限责任公司 版权所有 © Copyright 2020<br>
@@ -163,4 +165,27 @@
             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;
+    }
 }
diff --git a/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/impl/ProductOrderRecordServiceImpl.java b/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/impl/ProductOrderRecordServiceImpl.java
index be5ea2e..63c5f83 100644
--- a/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/impl/ProductOrderRecordServiceImpl.java
+++ b/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,16 +34,17 @@
 
 /**
  * 石家庄喜高科技有限责任公司 版权所有 © 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
 public class ProductOrderRecordServiceImpl extends SuperServiceImpl<ProductOrderRecordMapper, ProductOrderRecord> implements IProductOrderRecordService {
-   @Autowired
+    @Autowired
     DiagnosticService diagnosticService;
     @Autowired
     private RoleOrganizationService roleOrganizationService;
@@ -49,29 +54,36 @@
     private SysHospitalService sysHospitalService;
     @Autowired
     private IProductOrderDetailService productOrderDetailService;
+    @Autowired
+    private IConsumptionRecordService consumptionRecordService;
+
     /**
      * 列表
+     *
      * @param params
      * @return
      */
     @Override
-    public PageResult<ProductOrderRecord> findList(Map<String, Object> params){
+    public PageResult<ProductOrderRecord> findList(Map<String, Object> params) {
         Page<ProductOrderRecord> page = new Page<>(MapUtils.getInteger(params, "page"), MapUtils.getInteger(params, "limit"));
-        List<ProductOrderRecord> list  =  baseMapper.findList(page, params);
+        List<ProductOrderRecord> list = baseMapper.findList(page, params);
         return PageResult.<ProductOrderRecord>builder().data(list).code(0).count(page.getTotal()).build();
     }
 
     /**
      * 获取诊断列表
+     *
      * @param params
      * @return
      */
     @Override
-    public PageResult<DiagnosisRecord> findAllDataList(Map<String, Object> params){
-        return  diagnosticService.getDiagnosticItemList(params).getData();
+    public PageResult<DiagnosisRecord> findAllDataList(Map<String, Object> params) {
+        return diagnosticService.getDiagnosticItemList(params).getData();
     }
+
     /**
      * 列表
+     *
      * @param params
      * @return
      */
@@ -80,67 +92,82 @@
         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);
+        List<ProductOrderJoinDetail> list = baseMapper.findAllList(page, params);
         return PageResult.<ProductOrderJoinDetail>builder().data(list).code(0).count(page.getTotal()).build();
     }
 
     /**
      * 获取统计数据
+     *
      * @param params
      * @return
      */
     @Override
     public PageResult<GroupProductDetail> groupList(Map<String, Object> params) {
         Page<GroupProductDetail> page = new Page<>(MapUtils.getInteger(params, "page"), MapUtils.getInteger(params, "limit"));
-        List<GroupProductDetail> list  =  baseMapper.groupProductDetail(page,params);
+        List<GroupProductDetail> list = baseMapper.groupProductDetail(page, params);
         return PageResult.<GroupProductDetail>builder().data(list).code(0).count(page.getTotal()).build();
     }
 
     /**
-     * 统计用户所有套餐剩余
+     * 统计用户所有套餐剩余  套餐剩余量=(有效期内的医院所有共享+科室私有的套餐的读片量)-预扣费的读片量
+     *
      * @param hospitalId
      * @param departmentId
      * @return
      */
     @Override
-    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) {
+    public ResultBody biUserNowProduct(Long hospitalId, Long departmentId) {
+        if (hospitalId > 0 && departmentId > 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;
+                userAICount = shareCount + depCount;
+                //计算预扣费的总量
+                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
-        {
+        } else {
             return ResultBody.failed("医院和科室数据有误!");
         }
     }
-
     /**
-   * 根据ProductOrderRecord对象当做查询条件进行查询
-   * @param productOrderRecord
-   * @return ProductOrderRecord
-   */
+     * 根据ProductOrderRecord对象当做查询条件进行查询
+     *
+     * @param productOrderRecord
+     * @return ProductOrderRecord
+     */
     @Override
-    public ProductOrderRecord findByObject(ProductOrderRecord productOrderRecord){
+    public ProductOrderRecord findByObject(ProductOrderRecord productOrderRecord) {
         return baseMapper.findByObject(productOrderRecord);
     }
+
     /**
      * 修改数据状态 启用 禁用
+     *
      * @param params
      * @return
      */
@@ -162,46 +189,46 @@
     @Override
     public ResultBody getTypeByUser(SysUser sysUser) {
         List<SysOrganization> organizations = sysUser.getOrganizations();
-        if(organizations.size()>0){
+        if (organizations.size() > 0) {
             SysOrganization sysOrganization = organizations.get(0);
-            List<ProductOrderJoinDetail> list=baseMapper.getTypeByUser(sysOrganization.getId());
-            if (list.size()>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());
+                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();
+                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());
+                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){
+                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);
+                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());
+                Double surplusDay = DateUtils.getDays(proEndtime, new Date());
                 int surplus = surplusDay.intValue();
-                mapVo.put("surplus",surplus);
-                mapVo.put("logo",logo);
+                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 {
+            } else {
                 return ResultBody.failed("该用户套餐已经失效");
             }
-        }else {
+        } else {
             return ResultBody.failed("该用户的组织已经失效");
         }
     }
diff --git a/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/resources/mapper/ConsumptionRecordMapper.xml b/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/resources/mapper/ConsumptionRecordMapper.xml
new file mode 100644
index 0000000..61f1ac4
--- /dev/null
+++ b/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/resources/mapper/ConsumptionRecordMapper.xml
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<!---->
+<mapper namespace="com.kidgrow.oprationcenter.mapper.ConsumptionRecordMapper">
+    <!--定义查询列-->
+    <sql id="Column_List">
+	   *
+	</sql>
+
+    <!--sql查询片段-->
+    <sql id="where">
+        <where>
+            <!--查询条件自行添加-->
+            1=1
+            <if test="p.recordId != null and p.recordId !=''">
+                and record_id = #{p.recordId}
+            </if>
+            <if test="p.lastRecordId != null and p.lastRecordId !=''">
+                and last_record_id = #{p.lastRecordId}
+            </if>
+            <if test="p.proOrderDetailId != null and p.proOrderDetailId !=''">
+                and pro_order_detail_id = #{p.proOrderDetailId}
+            </if>
+            <if test="p.businessId != null and p.businessId !=''">
+                and business_id = #{p.businessId}
+            </if>
+            <if test="p.recordType != null and p.recordType !=''">
+                and record_type = #{p.recordType}
+            </if>
+            <if test="p.businessCode != null and p.businessCode !=''">
+                and business_code = #{p.businessCode}
+            </if>
+            <if test="p.consumptionCount != null and p.consumptionCount !=''">
+                and consumption_count = #{p.consumptionCount}
+            </if>
+            <if test="p.updateTime != null and p.updateTime !=''">
+                and update_time = #{p.updateTime}
+            </if>
+            <if test="p.createTime != null and p.createTime !=''">
+                and create_time = #{p.createTime}
+            </if>
+        </where>
+    </sql>
+
+    <!--定义根据-ConsumptionRecord当作查询条件返回对象-->
+    <select id="findByObject" resultType="com.kidgrow.oprationcenter.model.ConsumptionRecord">
+        select
+        <include refid="Column_List"/>
+        from consumption_record
+        <include refid="where"/>
+        order by record_id desc
+        limit 1
+    </select>
+
+    <!--定义根据-ConsumptionRecord当作查询条件返回对象集合-->
+    <select id="findList" resultType="com.kidgrow.oprationcenter.model.ConsumptionRecord">
+        select
+        <include refid="Column_List"/>
+        from consumption_record
+        <include refid="where"/>
+        order by record_id desc
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/resources/mapper/ProductOrderDetailMapper.xml b/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/resources/mapper/ProductOrderDetailMapper.xml
index 707adc9..27594bd 100644
--- a/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/resources/mapper/ProductOrderDetailMapper.xml
+++ b/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/resources/mapper/ProductOrderDetailMapper.xml
@@ -154,6 +154,7 @@
     <!--查询产品的购买记录-->
     <select id="findAllList" resultType="com.kidgrow.oprationcenter.vo.ProductOrderJoinDetail">
         SELECT
+        DE.id,
         DE.ailight_count,
         DE.record_count,
         DE.is_share,
diff --git a/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-server/src/main/java/com/kidgrow/oprationcenter/controller/ConsumptionRecordController.java b/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-server/src/main/java/com/kidgrow/oprationcenter/controller/ConsumptionRecordController.java
new file mode 100644
index 0000000..08420e1
--- /dev/null
+++ b/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-server/src/main/java/com/kidgrow/oprationcenter/controller/ConsumptionRecordController.java
@@ -0,0 +1,114 @@
+package com.kidgrow.oprationcenter.controller;
+
+import com.kidgrow.common.controller.BaseController;
+import com.kidgrow.common.model.PageResult;
+import com.kidgrow.common.model.ResultBody;
+import com.kidgrow.oprationcenter.model.ConsumptionRecord;
+import com.kidgrow.oprationcenter.service.IConsumptionRecordService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.BindingResult;
+import org.springframework.validation.ObjectError;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+
+/**
+ * 石家庄喜高科技有限责任公司 版权所有 © Copyright 2020<br>
+ * @Description: 
+ * @Project: 运营中心
+ * @CreateDate: Created in 2020-06-23 15:07:14 <br>
+ * @Author: <a href="411269194@kidgrow.com">houruijun</a>
+ * @version: 1.0
+ */
+@Slf4j
+@RestController
+@RequestMapping("/consumption")
+@Api(tags = "")
+public class ConsumptionRecordController  extends BaseController{
+    @Autowired
+    private IConsumptionRecordService consumptionRecordService;
+
+    /**
+     * 列表
+     */
+    @ApiOperation(value = "查询列表")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "page", value = "分页起始位置", required = true, dataType = "Integer"),
+            @ApiImplicitParam(name = "limit", value = "分页结束位置", required = true, dataType = "Integer")
+    })
+    @GetMapping
+    public ResultBody<PageResult> list(@RequestParam Map<String, Object> params) {
+        if(params.size()==0){
+            params.put("page",1);
+            params.put("limit",10);
+        }
+        return ResultBody.ok().data(consumptionRecordService.findList(params));
+    }
+
+    /**
+     * 查询
+     */
+    @ApiOperation(value = "查询")
+    @GetMapping("/{recordId}")
+    public ResultBody findById(@PathVariable Long recordId) {
+        ConsumptionRecord model = consumptionRecordService.getById(recordId);
+        return ResultBody.ok().data(model).msg("查询成功");
+    }
+
+    /**
+     * 根据ConsumptionRecord当做查询条件进行查询
+     */
+    @ApiOperation(value = "根据ConsumptionRecord当做查询条件进行查询")
+    @PostMapping("/query")
+    public ResultBody findByObject(@RequestBody ConsumptionRecord consumptionRecord) {
+        ConsumptionRecord model = consumptionRecordService.findByObject(consumptionRecord);
+        return ResultBody.ok().data(model).msg("查询成功");
+    }
+
+    /**
+     * 新增or更新
+     */
+    @ApiOperation(value = "保存")
+    @PostMapping
+    public ResultBody save(@Valid @RequestBody ConsumptionRecord consumptionRecord, BindingResult bindingResult) {
+        List<String> errMsg= new ArrayList<>();
+        if (bindingResult.hasErrors()) {
+            for (ObjectError error : bindingResult.getAllErrors()) {
+                errMsg.add(error.getDefaultMessage());
+            }
+            return ResultBody.failed().msg(errMsg.toString());
+        } else {
+            boolean v= consumptionRecordService.saveOrUpdate(consumptionRecord);
+            if(v) {
+                return ResultBody.ok().data(consumptionRecord).msg("保存成功");
+            }
+            else {
+                return ResultBody.failed().msg("保存失败");
+            }
+        }
+    }
+
+    /**
+     * 删除
+     */
+    @ApiOperation(value = "删除")
+    @DeleteMapping("/{id}")
+    public ResultBody delete(@PathVariable Long recordId) {
+        boolean v= consumptionRecordService.removeById(recordId);
+        if(v) {
+            return ResultBody.ok().msg("删除成功");
+        }
+        else {
+            return ResultBody.failed().msg("删除失败");
+        }
+    }
+}
diff --git a/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-server/src/main/resources/application.yml b/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-server/src/main/resources/application.yml
index bb4e75f..a437e46 100644
--- a/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-server/src/main/resources/application.yml
+++ b/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-server/src/main/resources/application.yml
@@ -57,12 +57,12 @@
     #多租户隔离字段
     tenantid: tenant_id
     ignoreTables:
-      - sys_user
       - sys_logger
       - data_need
       - business_records
       - sys_feedback
       - doctor_templete
+      - consumption_record
     ignoreSqls:
       - com.kidgrow.usercenter.mapper.SysRoleMapper.findAll
 
diff --git a/kidgrow-commons/kidgrow-common-spring-boot-starter/src/main/java/com/kidgrow/common/constant/ConsumptionConstant.java b/kidgrow-commons/kidgrow-common-spring-boot-starter/src/main/java/com/kidgrow/common/constant/ConsumptionConstant.java
new file mode 100644
index 0000000..41d3cc4
--- /dev/null
+++ b/kidgrow-commons/kidgrow-common-spring-boot-starter/src/main/java/com/kidgrow/common/constant/ConsumptionConstant.java
@@ -0,0 +1,72 @@
+package com.kidgrow.common.constant;
+
+/**
+ * 石家庄喜高科技有限责任公司 版权所有 © Copyright 2020<br>
+ *
+ * @Description: 全局公共常量<br>
+ * @Project: <br>
+ * @CreateDate: Created in 2020/06/23 16:24 <br>
+ * @Author: <a href="4345453@kidgrow.com">houruijun</a>
+ **/
+public interface ConsumptionConstant {
+//记录类型
+//1:预扣费
+//2:退预扣费(需要关联预扣费编号)
+//3:退扣费(需要关联扣费编号)
+//4:扣费(需要关联预扣费编号)
+    /**
+     * 预扣费业务标识
+     */
+    int BEFORE_DEDUCTION = 1;
+    /**
+     * 退还预扣费业务标识
+     */
+    int RETURN_BEFORE_DEDUCTION = 2;
+    /**
+     * 扣费业务标识
+     */
+    int DEDUCTION = 3;
+    /**
+     * 退扣费业务标识
+     */
+    int RETURN_DEDUCTION = 4;
+
+//    业务返回结果
+//    bcode                 含义
+//---------------------------------
+//100                 余额充足
+//101                 余额不足
+//200                 已经预扣
+//201                 已经扣费
+//300                 退还预扣
+//301                 退还扣费
+//400                 义务执行出错
+    /**
+     * 余额充足
+     */
+    int BUSINESS_CODE_OK = 100;
+    /**
+     * 余额不足
+     */
+    int BUSINESS_CODE_FAIL = 101;
+    /**
+     * 已经预扣
+     */
+    int BUSINESS_CODE_IS_BEFORE_DEDUCTION = 200;
+    /**
+     * 已经扣费
+     */
+    int BUSINESS_CODE_IS_DEDUCTION = 201;
+    /**
+     * 退还预扣
+     */
+    int BUSINESS_CODE_RETURN_BEFORE_DEDUCTION = 300;
+    /**
+     * 退还预扣
+     */
+    int BUSINESS_CODE_RETURN_DEDUCTION = 301;
+    /**
+     * 业务出错
+     */
+    int BUSINESS_CODE_ERROR = 400;
+}

--
Gitblit v1.8.0