kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/mapper/ConsumptionRecordMapper.java
@@ -37,4 +37,10 @@ * @return */ List<ConsumptionRecord> findList(@Param("p") Map<String, Object> params); /** * 查询有效预扣费 * @param DetailList 有效的套餐 * @return */ List<ConsumptionRecord> findDetailList(@Param("p") List<Long> DetailList); } kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/impl/ConsumptionRecordServiceImpl.java
@@ -20,7 +20,6 @@ import org.apache.commons.collections4.MapUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; @@ -116,7 +115,8 @@ //2.没有扣费,检查是否已经预扣费 if (!isBeforeDeduction(consumptionRecordList, ConsumptionConstant.BEFORE_DEDUCTION)) { //3.没有预扣,查询余额 if (VateUserNowProduct(consumptionRequest.getConsumptionCount(),consumptionRequest.getHospitalId(),consumptionRequest.getDepartmentId())) { Map<String,Object> vateMap=VateUserNowProduct(consumptionRequest.getConsumptionCount(),consumptionRequest.getHospitalId(),consumptionRequest.getDepartmentId()); if (Boolean.parseBoolean(vateMap.get("vateRe").toString())) { //4.余额充足 获取要扣的套餐 写预扣费记录 if (beforeConsumption(consumptionRequest)) { //预扣费成功 @@ -129,9 +129,9 @@ bcode = ConsumptionConstant.BUSINESS_CODE_ERROR; } } else { //余额不足 //余额不足 或获取异常 isSuccess = false; reMsg = "余额不足或获取失败!"; reMsg = vateMap.get("vateMsg").toString(); bcode = ConsumptionConstant.BUSINESS_CODE_FAIL; } } else { @@ -179,7 +179,8 @@ //2.没有扣费,检查是否已经预扣费 if (!isBeforeDeduction(consumptionRecordList, ConsumptionConstant.BEFORE_DEDUCTION)) { //2.1.没有预扣,查询余额 if (VateUserNowProduct(consumptionRequest.getConsumptionCount(),hospitalId,consumptionRequest.getDepartmentId())) { Map<String,Object> vateMap=VateUserNowProduct(consumptionRequest.getConsumptionCount(),hospitalId,consumptionRequest.getDepartmentId()); if (Boolean.parseBoolean(vateMap.get("vateRe").toString())) { //2.2.余额充足 获取要扣的套餐 写预扣费记录 if (beforeConsumption(consumptionRequest)) { //预扣费成功 @@ -194,7 +195,7 @@ } else { //余额不足 isSuccess = false; reMsg = "余额不足或获取失败!"; reMsg = vateMap.get("vateMsg").toString(); bcode = ConsumptionConstant.BUSINESS_CODE_FAIL; return ResultReturn(consumptionRequest, bcode,ConsumptionConstant.BEFORE_DEDUCTION, reMsg, isSuccess); } @@ -380,7 +381,8 @@ //2.没有扣费,检查是否已经预扣费 if (!isBeforeDeduction(consumptionRecordList, ConsumptionConstant.BEFORE_DEDUCTION)) { //3.没有预扣,查询余额 if (VateUserNowProduct(consumptionRequest.getConsumptionCount(),consumptionRequest.getHospitalId(),consumptionRequest.getDepartmentId())) { Map<String,Object> vateMap=VateUserNowProduct(consumptionRequest.getConsumptionCount(),consumptionRequest.getHospitalId(),consumptionRequest.getDepartmentId()); if (Boolean.parseBoolean(vateMap.get("vateRe").toString())) { //4.余额充足 获取要扣的套餐 写预扣费记录 if (!beforeConsumption(consumptionRequest)) { //预扣费执行失败 @@ -395,7 +397,7 @@ } } else { //余额不足 reMsg = "余额不足或获取失败!"; reMsg = vateMap.get("vateMsg").toString(); bcode = ConsumptionConstant.BUSINESS_CODE_FAIL; return ResultReturn(consumptionRequest, bcode,ConsumptionConstant.BEFORE_DEDUCTION, reMsg, isSuccess); } @@ -564,24 +566,32 @@ * @param consumptionCount 要扣的数量 * @return */ private Boolean VateUserNowProduct(int consumptionCount,Long hospitalId,Long departmentId) { private Map<String,Object> VateUserNowProduct(int consumptionCount,Long hospitalId,Long departmentId) { Map<String,Object> returnMap=new HashMap<>(); ResultBody biUserPro = productOrderDetailService.biUserNowProduct(hospitalId, departmentId); if (biUserPro.getCode() == 0) { if (StringUtils.isNotBlank(biUserPro.getData().toString())) { //余额 int userAICount = Integer.parseInt(biUserPro.getData().toString()); if (userAICount >= consumptionCount) { return true; returnMap.put("vateRe",true); returnMap.put("vateMsg","余额足够!"); } else { returnMap.put("vateRe",false); returnMap.put("vateMsg","余额不足!"); logger.info("医院id:【{}】余额不足!", hospitalId); } } else { returnMap.put("vateRe",false); returnMap.put("vateMsg","余额获取异常,data为空!"); logger.error("医院id:【{}】余额获取异常!", hospitalId); } } else { }else { returnMap.put("vateRe",false); returnMap.put("vateMsg","余额获取异常,Code非0!"); logger.info("医院id:【{}】余额获取异常,返回非0!", hospitalId); } return false; return returnMap; } /** @@ -672,7 +682,7 @@ * 发消息到消息队列 * @return */ @RabbitListener(queues = "BoneAgeEvaluationData") //@RabbitListener(queues = "BoneAgeEvaluationData") private void MessageToBI(ConsumptionRequest consumptionRequest) { //发消息到队列 @@ -681,5 +691,7 @@ "\",\"doctorId\":\"" + consumptionRequest.getDoctorId() + "\",\"date\":\"" + DateUtils.formatDate(new Date(),"yyyy-MM-dd")+"\"}"; rabbitTemplate.convertAndSend(ConsumptionConstant.EXCHANGE_DATA, ConsumptionConstant.ROUTINGKEY_DATA+envName, context); log.error("骨龄评价扣费消息已发送:"+context); } } kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/impl/ProductOrderDetailServiceImpl.java
@@ -2,7 +2,6 @@ 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; @@ -315,18 +314,22 @@ int depCount = productOrderJoinDetailsListDep.stream().collect(Collectors.summingInt(ProductOrderJoinDetail::getAilightCount)); //可用的总量 userAICount = shareCount + depCount; //共享套餐里面的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()); //获取所有有效的套餐id List<Long> nowDetailList=shareDetailId; nowDetailList.addAll(depDetailId); //查询已预扣 未退还 未扣费的数据 List<ConsumptionRecord> consumptionRecordList = consumptionRecordMapper.findDetailList(nowDetailList); //计算预扣费的总量 Map<String, Object> selectMap = new HashMap<>(); selectMap.put("recordType", ConsumptionConstant.BEFORE_DEDUCTION); List<ConsumptionRecord> consumptionRecordList = consumptionRecordMapper.findList(selectMap);; if (consumptionRecordList.size() > 0) { //共享套餐里面的detailid List<Long> shareDetailId = productOrderJoinDetailListShare.stream().map(m -> m.getId()).collect(Collectors.toList()); //私有套餐里面的detailid List<Long> depDetailId = productOrderJoinDetailsListDep.stream().map(m -> m.getId()).collect(Collectors.toList()); //共享套餐里面预扣费总数 int shareConCount = consumptionRecordList.stream().filter(f -> shareDetailId.contains(f.getProOrderDetailId())).collect(Collectors.summingInt(ConsumptionRecord::getConsumptionCount)); //共享套餐里面预扣费总数 //私有套餐里面预扣费总数 int depConCount = consumptionRecordList.stream().filter(f -> depDetailId.contains(f.getProOrderDetailId())).collect(Collectors.summingInt(ConsumptionRecord::getConsumptionCount)); userAICount -= (shareConCount + depConCount); } kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/resources/mapper/ConsumptionRecordMapper.xml
@@ -60,4 +60,20 @@ <include refid="where"/> order by id desc </select> <!--定义根据-ConsumptionRecord当作查询条件返回对象集合--> <select id="findDetailList" resultType="com.kidgrow.oprationcenter.model.ConsumptionRecord"> SELECT * FROM `consumption_record` where record_type=1 and update_time is null <where> <if test="p!=null and p.size()>0"> and pro_order_detail_id in <foreach item="item" index="index" collection="p" open="(" close=")" separator=","> #{item} </foreach> </if> </where> and pro_order_detail_id in (1,1) order by id desc </select> </mapper> kidgrow-business/kidgrow-opration-center/pom.xml
@@ -43,6 +43,10 @@ <groupId>com.kidgrow</groupId> <artifactId>kidgrow-ribbon-spring-boot-starter</artifactId> </dependency> <!-- <dependency>--> <!-- <groupId>com.kidgrow</groupId>--> <!-- <artifactId>kidgrow-rabbitmq-spring-boot-starter</artifactId>--> <!-- </dependency>--> <dependency> <groupId>com.kidgrow</groupId> <artifactId>kidgrow-usercenter-api</artifactId> kidgrow-commons/kidgrow-ribbon-spring-boot-starter/src/main/java/com/kidgrow/ribbon/config/FeignHttpInterceptorConfig.java
@@ -30,6 +30,7 @@ @PostConstruct public void initialize() { requestHeaders.add(SecurityConstants.USER_ID_HEADER); requestHeaders.add(SecurityConstants.DOCTOR_ID_HEADER); requestHeaders.add(SecurityConstants.USER_HEADER); requestHeaders.add(SecurityConstants.USER_DEP_ID_HEADER); requestHeaders.add(SecurityConstants.USER_DEP_NAME_HEADER); kidgrow-commons/kidgrow-ribbon-spring-boot-starter/src/main/java/com/kidgrow/ribbon/config/FeignHttpTenantInterceptorConfig.java
@@ -30,6 +30,7 @@ @PostConstruct public void initialize() { requestHeaders.add(SecurityConstants.USER_ID_HEADER); requestHeaders.add(SecurityConstants.DOCTOR_ID_HEADER); requestHeaders.add(SecurityConstants.USER_HEADER); requestHeaders.add(SecurityConstants.USER_DEP_ID_HEADER); requestHeaders.add(SecurityConstants.USER_DEP_NAME_HEADER); kidgrow-config/src/main/resources/application-uat.properties
@@ -1 +1,76 @@ # \u9884\u4E0A\u7EBF\u73AF\u5883 # \u9884\u4E0A\u7EBF\u73AF\u5883 ########################## \u7EDF\u4E00\u53D8\u91CF\u914D\u7F6E ########################## ##### \u6570\u636E\u5E93\u914D\u7F6E kidgrow.datasource.ip=rm-2ze84sb2l40k33a034o.mysql.rds.aliyuncs.com kidgrow.datasource.username=yingdawangluo kidgrow.datasource.password=Yingdawangluo2020 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver ##### Redis\u914D\u7F6E # \u662F\u5426\u5F00\u542FRedis\u7F13\u5B58 true\u5F00\u542F false \u5173\u95ED spring.redis.open=true spring.redis.host=182.92.99.224 spring.redis.port=6379 spring.redis.password=kidgrow spring.redis.timeout=5000 #rabbitmq\u914D\u7F6E kidgrow.rabbitmq.host=182.92.99.224 kidgrow.rabbitmq.port=5672 kidgrow.rabbitmq.username=liuke kidgrow.rabbitmq.password=kidgrow2020 kidgrow.rabbitmq.exchangeName=BoneAgeEvaluation kidgrow.rabbitmq.queueName=test_queue kidgrow.rabbitmq.routingKeyName=Kidgrow2020 kidgrow.rabbitmq.virtual-host=kidgrow #\u963F\u91CCDruid\u914D\u7F6E kidgrow.druid.loginname=admin kidgrow.druid.loginpwd=123456 #eureka \u6CE8\u518C\u4E2D\u5FC3Url kidgrow.eureka.client.serviceUrl.defaultZone=http://172.17.97.143:9001/eureka/,http://172.17.64.228:9001/eureka/ kidgrow.eureka.instance.hostname=127.0.0.1 ##eureka client\u53D1\u9001\u5FC3\u8DF3\u7ED9server\u7AEF\u7684\u9891\u7387 eureka.instance.lease-renewal-interval-in-seconds=30 #eureka client\u95F4\u9694\u591A\u4E45\u53BB\u62C9\u53D6\u670D\u52A1\u6CE8\u518C\u4FE1\u606F\uFF0C\u9ED8\u8BA4\u4E3A30\u79D2\uFF0C\u5BF9\u4E8Eapi-gateway\uFF0C\u5982\u679C\u8981\u8FC5\u901F\u83B7\u53D6\u670D\u52A1\u6CE8\u518C\u72B6\u6001\uFF0C\u53EF\u4EE5\u7F29\u5C0F\u8BE5\u503C\uFF0C\u6BD4\u59825\u79D2 eureka.instance.lease-expiration-duration-in-seconds=30 ##### elasticsearch\u914D\u7F6E kidgrow.elasticsearch.cluster-name=kidgrow-es kidgrow.elasticsearch.cluster-nodes=123.57.164.62 ##### sentinel\u914D\u7F6E kidgrow.sentinel.dashboard=127.0.0.1:6999 ##### fastDFS\u914D\u7F6E kidgrow.fdfs.web-url=127.0.0.1 kidgrow.fdfs.trackerList=${kidgrow.fdfs.web-url}:22122 ####\u963F\u91CCOSS\u914D\u7F6E kidgrow.oss.access-key=LTAI4FennfcwZupz3B6hkK3N kidgrow.oss.accessKeySecret=NzBBGe8SS41qJlp0nA3tlJ3t74lBZM kidgrow.oss.endpoint=123.kidgrow.cloud kidgrow.oss.bucketName=kidgrow kidgrow.oss.domain=http://123.kidgrow.cloud/ ##### \u65E5\u5FD7\u94FE\u8DEF\u8FFD\u8E2A kidgrow.trace.enable=true ##### \u8D1F\u8F7D\u5747\u8861\u9694\u79BB(version\u9694\u79BB\uFF0C\u53EA\u9002\u7528\u4E8E\u5F00\u53D1\u73AF\u5883) kidgrow.ribbon.isolation.enabled=false ##### mybatis-plus\u6253\u5370\u5B8C\u6574sql(\u53EA\u9002\u7528\u4E8E\u5F00\u53D1\u73AF\u5883) mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl ##### \u5BA1\u8BA1\u65E5\u5FD7\u914D\u7F6E kidgrow.audit-log.enabled=true kidgrow.audit-log.log-type=db kidgrow.audit-log.datasource.driver-class-name=com.mysql.cj.jdbc.Driver kidgrow.audit-log.datasource.jdbc-url=jdbc:mysql://${kidgrow.datasource.ip}:3306/logger_center_${spring.profiles.active}?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false&zeroDateTimeBehavior=convertToNull&serverTimezone=Asia/Shanghai kidgrow.audit-log.datasource.username=${kidgrow.datasource.username} kidgrow.audit-log.datasource.password=${kidgrow.datasource.password} ##### \u79FB\u52A8\u7AEF\u4E0A\u4F20\u5149\u7247Web\u5E94\u7528URL appUrl=https://upload.kidgrow.cloud/ kidgrow-web/kidgrow-web-manager/src/main/resources/static/pages/opration/hospital.html
@@ -75,6 +75,7 @@ headers: { 'Authorization': 'Bearer ' + config.getToken().access_token }, page: true, cols: [[ { field: 'hospitalId', width: 180, title: '医院编号', fixed: 'left' }, { field: 'hospitalName', width: 250, title: '医院名称', fixed: 'left' }, { field: 'departmentName', width: 100, title: '科室/部门', fixed: 'left' }, {