From abba1aff81da3cc9d74d75f64cbd48d25716aec3 Mon Sep 17 00:00:00 2001 From: luliqiang <kidgrow> Date: Fri, 12 Mar 2021 19:19:10 +0800 Subject: [PATCH] 1、增加对于套餐中的剩余读片量、有效开始日期、结束日期的加密 2、增加扣费过程中对于剩余读片量的加密 3、为下载私有云数据库增加合同与明细的查询Feign接口 4、修改合作商数据库(影像版API)的合同与明细的查询bug --- kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/impl/ProductOrderDetailServiceImpl.java | 176 +++++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 165 insertions(+), 11 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 96cba5a..029ff37 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,10 +1,12 @@ package com.kidgrow.oprationcenter.service.impl; import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.kidgrow.common.constant.CommonConstant; import com.kidgrow.common.model.*; import com.kidgrow.common.service.impl.SuperServiceImpl; +import com.kidgrow.common.utils.AesUtils; import com.kidgrow.common.utils.DateUtils; import com.kidgrow.common.utils.StringUtils; import com.kidgrow.oprationcenter.feign.DiagnosticService; @@ -13,8 +15,10 @@ import com.kidgrow.oprationcenter.model.ConsumptionRecord; import com.kidgrow.oprationcenter.model.ProductOrder; import com.kidgrow.oprationcenter.model.ProductOrderDetail; +import com.kidgrow.oprationcenter.model.SysProduct; import com.kidgrow.oprationcenter.service.IProductOrderDetailService; import com.kidgrow.oprationcenter.service.IProductOrderService; +import com.kidgrow.oprationcenter.service.ISysProductService; import com.kidgrow.oprationcenter.vo.*; import com.kidgrow.redis.util.RedisUtils; import com.kidgrow.usercenter.feign.SysDoctorService; @@ -27,6 +31,7 @@ import org.springframework.cglib.beans.BeanCopier; import org.springframework.stereotype.Service; +import java.text.SimpleDateFormat; import java.util.*; import java.util.stream.Collectors; @@ -52,6 +57,8 @@ @Autowired private IProductOrderService iProductOrderService; @Autowired + private ISysProductService productService; + @Autowired private RedisUtils redisUtils; /** * 列表 @@ -62,6 +69,15 @@ public PageResult<ProductOrderDetail> findList(Map<String, Object> params){ Page<ProductOrderDetail> page = new Page<>(MapUtils.getInteger(params, "page"), MapUtils.getInteger(params, "limit")); List<ProductOrderDetail> list = baseMapper.findList(page, params); + for (ProductOrderDetail productOrderDetail : list) { + if(productOrderDetail.getOrderAilightCount()==null){ + SysProduct byId = productService.getById(productOrderDetail.getProId()); + if(byId!=null){ + productOrderDetail.setOrderAilightCount(byId.getAilightCount()); + productOrderDetail.setOrderRecordCount(byId.getRecordCount()); + } + } + } return PageResult.<ProductOrderDetail>builder().data(list).code(0).count(page.getTotal()).build(); } /** @@ -75,30 +91,50 @@ } /** - * 判定医院科室的套餐是否到期 以及到期时间 + * 判定医院科室的套餐是否到期 以及剩余的读片量 * @param hospitalId * @param departmentId * @param diagnosticId * @return */ - public ResultBody<UserProductData> UserProductDetailData(Long hospitalId,Long departmentId,String diagnosticId) + @Override + public ResultBody<UserProductData> userProductDetailData(Long hospitalId,Long departmentId,String diagnosticId) { UserProductData userProductData=new UserProductData(); - userProductData.setEnd(true); + userProductData.setIsEnd(true); + userProductData.setRecordCount(0); + userProductData.setAilightCount(0); + userProductData.setLimitDays(0); UserProductDetail userProductDetail = this.getUserProductDetail(hospitalId, departmentId); if (userProductDetail != null) { //合并集合 userProductDetail.getProductOrderJoinDetailListShare().addAll(userProductDetail.getProductOrderJoinDetailsListDep()); List<ProductOrderJoinDetail> productOrderJoinDetailList = userProductDetail.getProductOrderJoinDetailListShare(); if (productOrderJoinDetailList.size() > 0) { - userProductData.setEnd(false); + userProductData.setIsEnd(false); //合并后按id排序并筛除已用完的套餐 - List<ProductOrderJoinDetail> productOrderJoinDetailsNewList = productOrderJoinDetailList.stream().filter(f -> f.getAilightCount() >= 0).sorted(Comparator.comparing(ProductOrderJoinDetail::getProEndtime).reversed()).collect(Collectors.toList()); - userProductData.setMaxEndTime(productOrderJoinDetailsNewList.get(0).getProEndtime()); + List<ProductOrderJoinDetail> productOrderJoinDetailsNewList = productOrderJoinDetailList.stream().filter(f -> f.getAilightCount() >= 0).sorted(Comparator.comparing(ProductOrderJoinDetail::getProEndtime)).collect(Collectors.toList()); + for (int i = 0; i <productOrderJoinDetailsNewList.size(); i++) { + userProductData.setAilightCount(productOrderJoinDetailsNewList.get(i).getAilightCount()); + userProductData.setRecordCount(productOrderJoinDetailsNewList.get(i).getRecordCount()); + Double days=DateUtils.getDays(new Date(),productOrderJoinDetailsNewList.get(i).getProEndtime()); + if (i<productOrderJoinDetailsNewList.size()-1) { + //按照结束日期正序排序后,如果第二条的开始时间减去第一条的结束时间 差值大于0 说明套餐间有中断 则以当前这条套餐作为当前套餐的剩余天数 + Double daysTemp=DateUtils.getDays(productOrderJoinDetailsNewList.get(i).getProEndtime(), + productOrderJoinDetailsNewList.get(i+1).getProBegintime()); + if (daysTemp>0) { + userProductData.setLimitDays(Integer.valueOf(Double.valueOf(days).intValue())); + } + } + else + { + userProductData.setLimitDays(Integer.valueOf(Double.valueOf(days).intValue())); + } + } } } //是否已经结束 - if (userProductData.isEnd()&& StringUtils.isNotBlank(diagnosticId)) { + if (userProductData.getIsEnd()&& StringUtils.isNotBlank(diagnosticId)) { //写入redis中,防止扣非后不能生成报告 redisUtils.lSet(CommonConstant.SAAS_LAST_SERVER+diagnosticId,diagnosticId); } @@ -181,17 +217,51 @@ public List<OrderChartVo> proCountChart() { return baseMapper.proCountChart(); } + @Override + public int getUserdProduct(Long hospitalId, Long departmentId) { + return baseMapper.getUserdProduct(hospitalId,departmentId); + } /** *获取该科室下的所有的套餐信息 * @param params * @return */ @Override - public PageResult<ProductOrderDetail> departmentProductDetail(Map<String, Object> params) { + public PageResult<ProductOrderDetailVo> departmentProductDetail(Map<String, Object> params) { Page<ProductOrderDetail> page = new Page<>(MapUtils.getInteger(params, "page"), MapUtils.getInteger(params, "limit")); + Boolean enabled = MapUtils.getBoolean(params, "enabled"); List<ProductOrderDetail> list = - baseMapper.departmentProductDetail(page, Long.parseLong(params.get("hospitalId").toString()),Long.parseLong(params.get("departmentId").toString())); - return PageResult.<ProductOrderDetail>builder().data(list).code(0).count(page.getTotal()).build(); + baseMapper.departmentProductDetail(page, Long.parseLong(params.get("hospitalId").toString()),Long.parseLong(params.get("departmentId").toString()),enabled); + List<ProductOrderDetailVo> listvo = new ArrayList<>(); + for (ProductOrderDetail productOrderDetail : list) { + ProductOrderDetailVo productOrderDetailVo=new ProductOrderDetailVo(); + BeanCopier beanCopier = BeanCopier.create(ProductOrderDetail.class, ProductOrderDetailVo.class, false); + beanCopier.copy(productOrderDetail,productOrderDetailVo,null); + Date proBegintime = productOrderDetailVo.getProBegintime(); + Date proEndtime = productOrderDetailVo.getProEndtime(); + Date nowDate = new Date(); + if(productOrderDetailVo.getEnabled()){ + if(nowDate.getTime()<proBegintime.getTime()){ + productOrderDetailVo.setUseType("未使用"); + }else if (proBegintime.getTime()<=nowDate.getTime()&&nowDate.getTime()<proEndtime.getTime()){ + productOrderDetailVo.setUseType("使用中"); + }else if(nowDate.getTime()>=proEndtime.getTime()){ + productOrderDetailVo.setUseType("已结束"); + } + }else { + productOrderDetailVo.setUseType("禁用"); + } + listvo.add(productOrderDetailVo); + } + return PageResult.<ProductOrderDetailVo>builder().data(listvo).code(0).count(page.getTotal()).build(); + } + + @Override + public PageResult<ProductEndVo> productEndList(Map<String, Object> params) { + Page<ProductEndVo> page = new Page<>(MapUtils.getInteger(params, "page"), MapUtils.getInteger(params, "limit")); + List<ProductEndVo> list = + baseMapper.productEndList(page,MapUtils.getIntValue(params,"monthPar"),MapUtils.getIntValue(params,"aiCountPar")); + return PageResult.<ProductEndVo>builder().data(list).code(0).count(page.getTotal()).build(); } /** @@ -216,7 +286,6 @@ List<GroupProductDetail> list = baseMapper.groupProductDetail(page,params); return PageResult.<GroupProductDetail>builder().data(list).code(0).count(page.getTotal()).build(); } - /** * 根据ProductOrderDetail对象当做查询条件进行查询 * @param productOrderDetail @@ -376,4 +445,89 @@ return ResultBody.failed("医院和科室数据有误!"); } } + + /** + * 私有云套餐验证 + * @param hospitalId 医院ID + * @param departmentId 科室ID + * @return com.kidgrow.common.model.ResultBody + */ + public ResultBody verificateProductOrderDetail(Long hospitalId, Long departmentId ){ + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); + + // 查询科室可用的合同列表【当前日期在合同开始、结束日期之间】 + List<ProductOrder> productOrderList = iProductOrderService.list( + new QueryWrapper<ProductOrder>() + .eq("hospital_id",hospitalId) + .eq("department_id",departmentId) + //.le("contract_begin_time",dateFormat.format(DateTime.now())) + //.ge("contract_end_time",dateFormat.format(DateTime.now())) + .eq("enabled",1) + .eq("is_del",0) + ); + + if ((productOrderList != null) && (productOrderList.size() > 0)) { + for (int i = 0 ; i < productOrderList.size(); i++) { + + ProductOrder productOrder = productOrderList.get(i); + // 查询合同可用的套餐【当前日期在套餐开始、结束日期之间,剩余读片量大于零】 + List<ProductOrderDetail> productOrderDetailList = baseMapper.selectList( + new QueryWrapper<ProductOrderDetail>() + .eq("order_id",productOrder.getId()) + //.le("pro_begintime",dateFormat.format(DateTime.now())) + //.ge("pro_endtime",dateFormat.format(DateTime.now())) + //.gt("order_ailight_count",0) + //.gt("order_ailight_count - ailight_count",0) + .eq("enabled",1) + .eq("is_del",0) + + ); + if ((productOrderDetailList != null) && (productOrderDetailList.size() > 0)) { + try { + for (int j = 0; j < productOrderDetailList.size(); j++) { + ProductOrderDetail productOrderDetail = productOrderDetailList.get(j); + if ((productOrderDetail.getAilightCountEncryption() == null) || (productOrderDetail.getAilightCountEncryption().isEmpty())) { + log.error("可用读片数量验证串为空"); + return ResultBody.failed("可用读片数量验证串为空"); + } + if ((productOrderDetail.getProBegintimeEncryption() == null) || (productOrderDetail.getProBegintimeEncryption().isEmpty())) { + log.error("套餐开始日期验证串为空"); + return ResultBody.failed("套餐开始日期验证串为空"); + } + if ((productOrderDetail.getProEndtimeEncryption() == null) || (productOrderDetail.getProEndtimeEncryption().isEmpty())) { + log.error("套餐结束日期验证串为空"); + return ResultBody.failed("套餐结束日期验证串为空"); + } + + String ailightCount = AesUtils.desEncrypt(productOrderDetail.getAilightCountEncryption()); + String proBeginTime = AesUtils.desEncrypt(productOrderDetail.getProBegintimeEncryption()); + String proEndTime = AesUtils.desEncrypt(productOrderDetail.getProEndtimeEncryption()); + + if ((ailightCount.isEmpty()) || (!productOrderDetail.getAilightCount().toString().equals(ailightCount))) { + log.error("可用读片数量验证失败"); + return ResultBody.failed("可用读片数量验证失败"); + } + if ((proBeginTime.isEmpty()) || (!dateFormat.format(productOrderDetail.getProBegintime()).equals(proBeginTime))) { + log.error("套餐开始日期验证失败"); + return ResultBody.failed("套餐开始日期验证失败"); + } + if ((proEndTime.isEmpty()) || (!dateFormat.format(productOrderDetail.getProEndtime()).equals(proEndTime))) { + log.error("套餐结束日期验证失败"); + return ResultBody.failed("套餐结束日期验证失败"); + } + + } + } catch (Exception e) { + e.printStackTrace(); + return ResultBody.failed(e.getMessage()); + } + + } + } +// } else { +// return ResultBody.failed("无有效的合同"); + } + log.error("私有云套餐验证通过"); + return ResultBody.ok().msg("私有云套餐验证通过"); + } } -- Gitblit v1.8.0