forked from kidgrow-microservices-platform

zhaoxiaohao
2020-06-24 a8bf44754f50d0b0a65f0f2d4beefc131261e35d
Merge branch 'dev' of http://192.168.2.240:7070/r/kidgrow-microservices-platform into dev
8 files added
6 files modified
739 ■■■■■ changed files
kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-api/src/main/java/com/kidgrow/oprationcenter/model/ConsumptionRecord.java 75 ●●●●● patch | view | raw | blame | history
kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-api/src/main/java/com/kidgrow/oprationcenter/vo/UserProductDetail.java 28 ●●●●● patch | view | raw | blame | history
kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/mapper/ConsumptionRecordMapper.java 40 ●●●●● patch | view | raw | blame | history
kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/IConsumptionRecordService.java 41 ●●●●● patch | view | raw | blame | history
kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/IProductOrderDetailService.java 8 ●●●●● patch | view | raw | blame | history
kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/IProductOrderRecordService.java 2 ●●● patch | view | raw | blame | history
kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/impl/ConsumptionRecordServiceImpl.java 139 ●●●●● patch | view | raw | blame | history
kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/impl/ProductOrderDetailServiceImpl.java 25 ●●●●● patch | view | raw | blame | history
kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/impl/ProductOrderRecordServiceImpl.java 129 ●●●●● patch | view | raw | blame | history
kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/resources/mapper/ConsumptionRecordMapper.xml 63 ●●●●● patch | view | raw | blame | history
kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/resources/mapper/ProductOrderDetailMapper.xml 1 ●●●● patch | view | raw | blame | history
kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-server/src/main/java/com/kidgrow/oprationcenter/controller/ConsumptionRecordController.java 114 ●●●●● patch | view | raw | blame | history
kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-server/src/main/resources/application.yml 2 ●●● patch | view | raw | blame | history
kidgrow-commons/kidgrow-common-spring-boot-starter/src/main/java/com/kidgrow/common/constant/ConsumptionConstant.java 72 ●●●●● patch | view | raw | blame | history
kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-api/src/main/java/com/kidgrow/oprationcenter/model/ConsumptionRecord.java
New file
@@ -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;
}
kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-api/src/main/java/com/kidgrow/oprationcenter/vo/UserProductDetail.java
New file
@@ -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;
}
kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/mapper/ConsumptionRecordMapper.java
New file
@@ -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);
}
kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/IConsumptionRecordService.java
New file
@@ -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);
}
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);
}
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);
}
kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/impl/ConsumptionRecordServiceImpl.java
New file
@@ -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;
    }
}
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;
    }
}
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("该用户的组织已经失效");
        }
    }
kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/resources/mapper/ConsumptionRecordMapper.xml
New file
@@ -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>
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,
kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-server/src/main/java/com/kidgrow/oprationcenter/controller/ConsumptionRecordController.java
New file
@@ -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("删除失败");
        }
    }
}
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
kidgrow-commons/kidgrow-common-spring-boot-starter/src/main/java/com/kidgrow/common/constant/ConsumptionConstant.java
New file
@@ -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;
}