From e6d05506d8401d3c5b0339da040805c168c38d98 Mon Sep 17 00:00:00 2001
From: LiJianZhao
Date: Tue, 29 Apr 2025 13:32:20 +0800
Subject: [PATCH] deb
---
.../server/common/enums/ChargeSourceEnum.java | 13 ++
.../server/common/enums/ChargeTypeEnum.java | 12 ++
.../controller/charge/ChargeController.java | 11 +-
.../controller/patient/PatientController.java | 86 ++++++++++
.../server/controller/vip/VipController.java | 148 +++++++++---------
.../controller/vip/VipIntegralController.java | 8 +-
.../server/entity/charge/ChargeOrder.java | 5 +-
.../server/entity/patient/PatientInfo.java | 2 +-
.../entity/patient/PatientRegistration.java | 8 +-
.../server/service/charge/ChargeService.java | 143 +++++++++++++----
.../vo/RetailOrderDailyChargingReportVo.java | 2 +
.../service/patient/PatientInfoService.java | 134 +++++++++++++++-
.../patient/PatientRegistrationService.java | 14 +-
.../service/vip/VipIntegralLogService.java | 16 +-
.../service/vip/VipLevelConfigService.java | 8 +-
15 files changed, 471 insertions(+), 139 deletions(-)
create mode 100644 src/main/java/com/syjiaer/clinic/server/common/enums/ChargeSourceEnum.java
create mode 100644 src/main/java/com/syjiaer/clinic/server/common/enums/ChargeTypeEnum.java
create mode 100644 src/main/java/com/syjiaer/clinic/server/controller/patient/PatientController.java
diff --git a/src/main/java/com/syjiaer/clinic/server/common/enums/ChargeSourceEnum.java b/src/main/java/com/syjiaer/clinic/server/common/enums/ChargeSourceEnum.java
new file mode 100644
index 0000000..3b896d3
--- /dev/null
+++ b/src/main/java/com/syjiaer/clinic/server/common/enums/ChargeSourceEnum.java
@@ -0,0 +1,13 @@
+package com.syjiaer.clinic.server.common.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@Getter
+@AllArgsConstructor
+public enum ChargeSourceEnum {
+ CHARGE(0,"门诊收费");
+ private final Integer type;
+ private final String desc;
+
+}
diff --git a/src/main/java/com/syjiaer/clinic/server/common/enums/ChargeTypeEnum.java b/src/main/java/com/syjiaer/clinic/server/common/enums/ChargeTypeEnum.java
new file mode 100644
index 0000000..3efc3d4
--- /dev/null
+++ b/src/main/java/com/syjiaer/clinic/server/common/enums/ChargeTypeEnum.java
@@ -0,0 +1,12 @@
+package com.syjiaer.clinic.server.common.enums;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@Getter
+@AllArgsConstructor
+public enum ChargeTypeEnum {
+ CHARGE(1,"收费"),
+ REFUND(0,"退费");
+ private final Integer chargeType;
+ private final String desc;
+}
diff --git a/src/main/java/com/syjiaer/clinic/server/controller/charge/ChargeController.java b/src/main/java/com/syjiaer/clinic/server/controller/charge/ChargeController.java
index 1bca2eb..6bf5309 100644
--- a/src/main/java/com/syjiaer/clinic/server/controller/charge/ChargeController.java
+++ b/src/main/java/com/syjiaer/clinic/server/controller/charge/ChargeController.java
@@ -15,6 +15,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.time.LocalDateTime;
+import java.util.List;
import java.util.Map;
@RestController
@@ -79,7 +80,7 @@ public class ChargeController extends BaseController {
* 每日收费报表
*/
@RequestMapping("/dailyChargingReport")
- public Result
*
* @author NiuZiYuan
- * @since 2025-04-27
+ * @since 2025-04-29
*/
@Getter
@Setter
@@ -73,4 +73,7 @@ public class ChargeOrder implements Serializable {
@ApiModelProperty("总成本")
private BigDecimal totalCost;
+
+ @ApiModelProperty("销售人id")
+ private Integer salePersionId;
}
diff --git a/src/main/java/com/syjiaer/clinic/server/entity/patient/PatientInfo.java b/src/main/java/com/syjiaer/clinic/server/entity/patient/PatientInfo.java
index 9e0edbb..a193301 100644
--- a/src/main/java/com/syjiaer/clinic/server/entity/patient/PatientInfo.java
+++ b/src/main/java/com/syjiaer/clinic/server/entity/patient/PatientInfo.java
@@ -87,5 +87,5 @@ public class PatientInfo implements Serializable {
private BigDecimal balance;
@ApiModelProperty("生日")
- private LocalDate brithday;
+ private LocalDate birthday;
}
diff --git a/src/main/java/com/syjiaer/clinic/server/entity/patient/PatientRegistration.java b/src/main/java/com/syjiaer/clinic/server/entity/patient/PatientRegistration.java
index 43550a9..2501787 100644
--- a/src/main/java/com/syjiaer/clinic/server/entity/patient/PatientRegistration.java
+++ b/src/main/java/com/syjiaer/clinic/server/entity/patient/PatientRegistration.java
@@ -48,7 +48,7 @@ public class PatientRegistration implements Serializable {
@ApiModelProperty("患者手机号")
private String phone;
- @ApiModelProperty("就诊类型")
+ @ApiModelProperty("就诊类型 初诊 复诊")
private Short visitType;
@ApiModelProperty("挂号时间")
@@ -69,11 +69,11 @@ public class PatientRegistration implements Serializable {
@ApiModelProperty("逻辑删除")
private Integer delFlag;
- @ApiModelProperty("挂号类型")
+ @ApiModelProperty("挂号类型 1普通挂号 2医保挂号")
private Integer type;
- @ApiModelProperty("性别")
- private String gender;
+ @ApiModelProperty("1男 2女")
+ private Integer gender;
@ApiModelProperty("病人id")
private Integer patientInfoId;
diff --git a/src/main/java/com/syjiaer/clinic/server/service/charge/ChargeService.java b/src/main/java/com/syjiaer/clinic/server/service/charge/ChargeService.java
index 23f14c2..2701241 100644
--- a/src/main/java/com/syjiaer/clinic/server/service/charge/ChargeService.java
+++ b/src/main/java/com/syjiaer/clinic/server/service/charge/ChargeService.java
@@ -10,16 +10,11 @@ import com.syjiaer.clinic.server.common.api.output.OM2207A;
import com.syjiaer.clinic.server.common.api.request.SocialRequest;
import com.syjiaer.clinic.server.common.config.Config;
import com.syjiaer.clinic.server.common.constants.Constants;
-import com.syjiaer.clinic.server.common.enums.InventorySocialTypeEnum;
-import com.syjiaer.clinic.server.common.enums.InventoryTypeEnum;
-import com.syjiaer.clinic.server.common.enums.RetailOrderPayTypeEnum;
-import com.syjiaer.clinic.server.common.enums.RetailOrderStatusEnum;
+import com.syjiaer.clinic.server.common.enums.*;
import com.syjiaer.clinic.server.common.exception.MessageException;
import com.syjiaer.clinic.server.common.util.StringUtil;
import com.syjiaer.clinic.server.common.vo.Page;
-import com.syjiaer.clinic.server.entity.charge.ChargeGoodsList;
-import com.syjiaer.clinic.server.entity.charge.ChargeItemList;
-import com.syjiaer.clinic.server.entity.charge.ChargeOrder;
+import com.syjiaer.clinic.server.entity.charge.*;
import com.syjiaer.clinic.server.entity.charge.dto.ChargeQuery;
import com.syjiaer.clinic.server.entity.charge.dto.ChargeSaveDto;
import com.syjiaer.clinic.server.entity.charge.vo.ChargeDetailVo;
@@ -35,11 +30,14 @@ import com.syjiaer.clinic.server.entity.item.Item;
import com.syjiaer.clinic.server.entity.manager.ManagerUser;
import com.syjiaer.clinic.server.entity.organization.OrganizationMember;
import com.syjiaer.clinic.server.entity.organization.OrganizationSection;
+import com.syjiaer.clinic.server.entity.patient.PatientInfo;
import com.syjiaer.clinic.server.entity.patient.PatientRegistration;
import com.syjiaer.clinic.server.entity.social.SocialDirectory;
import com.syjiaer.clinic.server.entity.social.SocialItem;
+import com.syjiaer.clinic.server.entity.social.SocialUser;
import com.syjiaer.clinic.server.mapper.charge.ChargeGoodsListMapper;
import com.syjiaer.clinic.server.mapper.charge.ChargeItemListMapper;
+import com.syjiaer.clinic.server.mapper.charge.ChargeLogMapper;
import com.syjiaer.clinic.server.mapper.charge.ChargeOrderMapper;
import com.syjiaer.clinic.server.mapper.diagnosis.DiagnosisMapper;
import com.syjiaer.clinic.server.mapper.diagnosis.DiagnosisMedicalGoodsListMapper;
@@ -54,6 +52,7 @@ import com.syjiaer.clinic.server.mapper.patient.PatientInfoMapper;
import com.syjiaer.clinic.server.mapper.patient.PatientRegistrationMapper;
import com.syjiaer.clinic.server.mapper.social.SocialDirectoryMapper;
import com.syjiaer.clinic.server.mapper.social.SocialItemMapper;
+import com.syjiaer.clinic.server.mapper.social.SocialUserMapper;
import com.syjiaer.clinic.server.service.BaseService;
import com.syjiaer.clinic.server.service.charge.vo.PaymentMethodVo;
import com.syjiaer.clinic.server.service.charge.vo.RetailOrderDailyChargingReportVo;
@@ -69,16 +68,17 @@ import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDate;
import java.time.LocalDateTime;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
@Service
public class ChargeService extends BaseService {
@Autowired
private ChargeOrderMapper chargeOrderMapper;
@Autowired
+ private ChargeLogMapper chargeLogMapper;
+ @Autowired
+ private SocialUserMapper socialUserMapper;
+ @Autowired
private ChargeItemListMapper chargeItemListMapper;
@Autowired
private ChargeGoodsListMapper chargeGoodsListMapper;
@@ -129,7 +129,7 @@ public class ChargeService extends BaseService {
}
Diagnosis diagnosis = diagnosisMapper.selectById(dto.getId());
//清除该诊断的病例信息
- if (diagnosis != null){
+ if (diagnosis != null) {
String diaCode = diagnosis.getCode();
diagnosisMedicalGoodsListMapper.delete(new QueryWrapper().eq("diagnosis_code", diaCode));
diagnosisMedicalItemListMapper.delete(new QueryWrapper().eq("diagnosis_code", diaCode));
@@ -137,8 +137,8 @@ public class ChargeService extends BaseService {
DiagnosisMedicalRecord medicalRecord = new DiagnosisMedicalRecord();
BeanUtils.copyProperties(dto.getDiagnosisMedicalRecord(), medicalRecord);
diagnosisMedicalRecordMapper.updateById(medicalRecord);
- List mdItmeList= new ArrayList<>();
- for (ChargeItemListVo item : dto.getItemDetail()){
+ List mdItmeList = new ArrayList<>();
+ for (ChargeItemListVo item : dto.getItemDetail()) {
DiagnosisMedicalItemList itemDetail = new DiagnosisMedicalItemList();
itemDetail.setItemId(item.getId());
itemDetail.setDiagnosisCode(diaCode);
@@ -150,8 +150,8 @@ public class ChargeService extends BaseService {
mdItmeList.add(itemDetail);
}
diagnosisMedicalItemListMapper.insert(mdItmeList);
- List mdGoodsList= new ArrayList<>();
- for (ChargeGoodsListVo goods : dto.getGoodsDetail()){
+ List mdGoodsList = new ArrayList<>();
+ for (ChargeGoodsListVo goods : dto.getGoodsDetail()) {
DiagnosisMedicalGoodsList goodDetail = new DiagnosisMedicalGoodsList();
goodDetail.setGoodsId(goods.getId());
goodDetail.setDiagnosisCode(diaCode);
@@ -169,14 +169,14 @@ public class ChargeService extends BaseService {
QueryWrapper listWrapper = new QueryWrapper<>();
listWrapper.eq("diagnosis_code", dto.getDiagnosisMedicalRecord().getDiagnosisCode());
- listWrapper.eq("status",RetailOrderStatusEnum.FINISHED.getCode());
+ listWrapper.eq("status", RetailOrderStatusEnum.FINISHED.getCode());
List dbList = chargeOrderMapper.selectList(listWrapper);
- if (!dbList.isEmpty()){
+ if (!dbList.isEmpty()) {
throw new MessageException("该诊断已完成收费");
}
QueryWrapper queryWrapper = new QueryWrapper<>();
queryWrapper.eq("diagnosis_code", dto.getDiagnosisMedicalRecord().getDiagnosisCode());
- queryWrapper.eq("status",RetailOrderStatusEnum.UNFINISHED.getCode());
+ queryWrapper.eq("status", RetailOrderStatusEnum.UNFINISHED.getCode());
chargeOrderMapper.delete(queryWrapper);
ManagerUser user = getManagerUser();
@@ -202,7 +202,7 @@ public class ChargeService extends BaseService {
itemList.setCreateDate(nowLocalDate);
itemList.setCreateTime(nowLocalDateTime);
chargeServiceLists.add(itemList);
- BigDecimal subPrice =service.getSelectedPrice().multiply(BigDecimal.valueOf(service.getSelectedNum()));
+ BigDecimal subPrice = service.getSelectedPrice().multiply(BigDecimal.valueOf(service.getSelectedNum()));
preTotalPrice = preTotalPrice.add(subPrice);
totalPrice = totalPrice.add(subPrice);
}
@@ -284,7 +284,7 @@ public class ChargeService extends BaseService {
return resultPage;
}
-// @Transactional(rollbackFor = Exception.class)
+ // @Transactional(rollbackFor = Exception.class)
// public ChargeOrder updateOrCreate(ChargeOrderDto dto) {
// //创建患者
// PatientInfo patientInfo = dto.getPatientInfo();
@@ -348,6 +348,8 @@ public class ChargeService extends BaseService {
}
inventoryLogMapper.insert(logs);
}
+ //记录收费日志
+ this.recordChargeLog(order, ChargeSourceEnum.CHARGE, ChargeTypeEnum.CHARGE);
}
@@ -371,7 +373,7 @@ public class ChargeService extends BaseService {
im2205.setPsnNo(registration.getPsnNo());
im2205.setExpContent("");
socialRequest.call2205(im2205);
- }catch (Exception e){
+ } catch (Exception e) {
e.printStackTrace();
}
@@ -437,7 +439,7 @@ public class ChargeService extends BaseService {
ChargeOrder order = chargeOrderMapper.selectByCode(changeOrderCode);
Diagnosis diagnosis = diagnosisMapper.selectByCode(order.getDiagnosisCode());
//预支付只需要卡号
- String cardNumber = mdtrtCertNo.substring(0,mdtrtCertNo.indexOf("|"));
+ String cardNumber = mdtrtCertNo.substring(0, mdtrtCertNo.indexOf("|"));
PatientRegistration registration = patientRegistrationMapper.selectById(diagnosis.getRegistrationId());
IM2206A im2206A = new IM2206A();
@@ -483,7 +485,7 @@ public class ChargeService extends BaseService {
OM2207A om2207A = socialRequest.call2207A(im2207A);
//完成订单
chargeService.completeOrder(order.getId(), RetailOrderPayTypeEnum.MEDICARE.getCode());
- return om2207A;
+ return om2207A;
}
@@ -494,8 +496,8 @@ public class ChargeService extends BaseService {
* @param endDateTime
* @return
*/
- public Map dailyChargingReport(LocalDateTime startDateTime, LocalDateTime endDateTime) {
- Map result = new HashMap<>();
+ public List dailyChargingReport(LocalDateTime startDateTime, LocalDateTime endDateTime) {
+ Map result = new TreeMap<>();
QueryWrapper queryWrapper = new QueryWrapper<>();
queryWrapper.between("create_datetime", startDateTime, endDateTime)
.eq("status", RetailOrderStatusEnum.FINISHED.getCode())
@@ -518,13 +520,21 @@ public class ChargeService extends BaseService {
}
result.put(dateKey, retailOrderDailyChargingReportVo);
}
-
+ List voList = new ArrayList<>();
result.forEach((key, value) -> {
BigDecimal grossMargin = value.getTotalMoney().subtract(value.getTotalCost());
value.setGrossMargin(grossMargin);
- value.setGrossProfitRate(String.format("%.2f%%", grossMargin.divide(value.getTotalMoney(), 4, RoundingMode.HALF_UP).multiply(new BigDecimal("100"))));
+ BigDecimal divisor = value.getTotalMoney();
+ if (divisor.compareTo(BigDecimal.ZERO) == 0) {
+ // 处理除数为零的情况,例如抛出自定义异常或返回默认值
+ value.setGrossProfitRate("0.00%");
+ }else {
+ value.setGrossProfitRate(String.format("%.2f%%", grossMargin.divide(value.getTotalMoney(), 4, RoundingMode.HALF_UP).multiply(new BigDecimal("100"))));
+ }
+ value.setDate(LocalDate.parse(key));
+ voList.add(value);
});
- return result;
+ return voList;
}
//获取各支付方式支付的金额
@@ -553,6 +563,79 @@ public class ChargeService extends BaseService {
public ChargeOrder getByCode(String code) {
QueryWrapper queryWrapper = new QueryWrapper<>();
queryWrapper.eq("code", code);
- return chargeOrderMapper.selectOne(queryWrapper);
+ return chargeOrderMapper.selectOne(queryWrapper);
+ }
+
+ /**
+ * 查询患者消费记录
+ *
+ * @param patientId
+ * @return
+ */
+ public List getListByPatientId(Integer patientId) {
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ queryWrapper.eq("patient_id", patientId);
+ return chargeOrderMapper.selectList(queryWrapper);
+ }
+
+
+ /**
+ * 收款 退款 记录
+ */
+ public void recordChargeLog(ChargeOrder chargeOrder, ChargeSourceEnum sourceEnum, ChargeTypeEnum chargeType){
+ ChargeLog chargeLog = new ChargeLog();
+ String customer = null;
+ if (chargeOrder.getPatientId() != null){
+ PatientInfo patient = patientInfoMapper.selectById(chargeOrder.getPatientId());
+ customer = patient.getName();
+ }else if (chargeOrder.getSocialUserId() != null){
+ SocialUser socialUser = socialUserMapper.selectById(chargeOrder.getSocialUserId());
+ customer = socialUser.getPsnName();
+ }else {
+ customer = "-";
+ }
+ chargeLog.setSource(sourceEnum.getType());
+ chargeLog.setCustomer(customer);
+ chargeLog.setType(chargeType.getChargeType());
+ chargeLog.setOriginalPrice(chargeOrder.getPreTotalPrice());
+ chargeLog.setReceivable(chargeOrder.getTotalPrice());
+ chargeLog.setNetReceipts(chargeOrder.getTotalPrice());
+ chargeLog.setDiscount(chargeOrder.getTotalPrice().subtract(chargeOrder.getPreTotalPrice()));
+ chargeLog.setPayType(chargeOrder.getPayType());
+ if (chargeOrder.getSalePersionId() != null){
+ OrganizationMember organizationMember = organizationMemberMapper.selectById(chargeOrder.getSalePersionId());
+ chargeLog.setSalePersonName(organizationMember.getName());
+ chargeLog.setSalePersonId(chargeOrder.getSalePersionId());
+ }
+ chargeLog.setChargeTime(LocalDateTime.now());
+ chargeLog.setProjectCode(chargeOrder.getCode());
+ chargeLogMapper.insert(chargeLog);
+ }
+ /**
+ * 销售库存变更 日志
+ */
+ public void recordChargeInventoryLog(InventoryLog log,ChargeOrder chargeOrder){
+ ChargeInventoryLog chargeInventoryLog = new ChargeInventoryLog();
+ chargeInventoryLog.setChargeOrderCode(chargeOrder.getCode());
+ chargeInventoryLog.setGoodsId(log.getGoodsId());
+ chargeInventoryLog.setInventoryId(log.getInventoryId());
+ chargeInventoryLog.setNumber(log.getChangeWholeNumber());
+ Goods dbGoods = goodsMapper.selectById(log.getGoodsId());
+ chargeInventoryLog.setTrdnFlag(false);
+ chargeInventoryLog.setUnit(dbGoods.getPackagingUnit());
+ chargeInventoryLog.setNumber(log.getChangeWholeNumber());
+ if (log.getChangeFragmentNumber() > 0 ){
+ chargeInventoryLog.setTrdnFlag(true);
+ chargeInventoryLog.setUnit(dbGoods.getMinPackagingUnit());
+ chargeInventoryLog.setNumber(log.getChangeWholeNumber()*dbGoods.getMinPackagingNumber()+log.getChangeFragmentNumber());
+ }
+ QueryWrapper listWrapper = new QueryWrapper<>();
+ listWrapper.eq("charge_order_code",chargeOrder.getCode());
+ listWrapper.eq("goods_id",log.getGoodsId());
+ ChargeGoodsList chargeGoodsList = chargeGoodsListMapper.selectOne(listWrapper);
+// chargeInventoryLog.setUnitPrice(chargeGoodsList.getUnitPrice());
+
+
+
}
}
diff --git a/src/main/java/com/syjiaer/clinic/server/service/charge/vo/RetailOrderDailyChargingReportVo.java b/src/main/java/com/syjiaer/clinic/server/service/charge/vo/RetailOrderDailyChargingReportVo.java
index 9efee1c..cf12e48 100644
--- a/src/main/java/com/syjiaer/clinic/server/service/charge/vo/RetailOrderDailyChargingReportVo.java
+++ b/src/main/java/com/syjiaer/clinic/server/service/charge/vo/RetailOrderDailyChargingReportVo.java
@@ -7,6 +7,8 @@ import java.time.LocalDate;
@Data
public class RetailOrderDailyChargingReportVo {
+ //日期
+ private LocalDate date;
//总金额
private BigDecimal totalMoney;
//总成本
diff --git a/src/main/java/com/syjiaer/clinic/server/service/patient/PatientInfoService.java b/src/main/java/com/syjiaer/clinic/server/service/patient/PatientInfoService.java
index acf393f..b3f75b2 100644
--- a/src/main/java/com/syjiaer/clinic/server/service/patient/PatientInfoService.java
+++ b/src/main/java/com/syjiaer/clinic/server/service/patient/PatientInfoService.java
@@ -3,6 +3,7 @@ package com.syjiaer.clinic.server.service.patient;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.syjiaer.clinic.server.common.exception.MessageException;
+import com.syjiaer.clinic.server.common.vo.Page;
import com.syjiaer.clinic.server.entity.patient.PatientInfo;
import com.syjiaer.clinic.server.entity.vip.Vip;
import com.syjiaer.clinic.server.entity.vip.VipExpLog;
@@ -15,31 +16,37 @@ import com.syjiaer.clinic.server.mapper.vip.VipLevelConfigMapper;
import com.syjiaer.clinic.server.service.BaseService;
import com.syjiaer.clinic.server.service.vip.VipLevelConfigService;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDate;
import java.time.LocalDateTime;
+import java.util.Iterator;
import java.util.List;
@Service
public class PatientInfoService extends BaseService {
+ @Autowired
+ @Lazy
+ private PatientInfoService patientInfoService;
@Autowired
private PatientInfoMapper patientInfoMapper;
@Autowired
private VipLevelConfigMapper vipLevelConfigMapper;
@Autowired
+ @Lazy
private VipLevelConfigService vipLevelConfigService;
@Autowired
private VipExpLogMapper vipExpLogMapper;
@Autowired
private VipIntegralLogMapper vipIntegralLogMapper;
- public void save(PatientInfo patientInfo){
+ public PatientInfo save(PatientInfo patientInfo){
patientInfo.setCreateDatetime(LocalDateTime.now());
- if (patientInfo.getBrithday() != null) {
+ if (patientInfo.getBirthday() != null) {
int currentYear = LocalDate.now().getYear();
- int birthYear = patientInfo.getBrithday().getYear();
+ int birthYear = patientInfo.getBirthday().getYear();
patientInfo.setAge(currentYear - birthYear);
}
VipLevelConfig level = vipLevelConfigService.getByExp(patientInfo.getExp());
@@ -50,7 +57,7 @@ public class PatientInfoService extends BaseService {
}
QueryWrapper queryWrapper = new QueryWrapper<>();
- queryWrapper.eq("certno", patientInfo.getPhone());
+ queryWrapper.eq("cert_no", patientInfo.getPhone());
PatientInfo dbInfo = patientInfoMapper.selectOne(queryWrapper);
if (dbInfo != null){
patientInfo.setId(dbInfo.getId());
@@ -60,6 +67,7 @@ public class PatientInfoService extends BaseService {
patientInfo.setBalance(null);
}
patientInfoMapper.insertOrUpdate(patientInfo);
+ return patientInfo;
}
@@ -144,4 +152,122 @@ public class PatientInfoService extends BaseService {
}
+
+ /**
+ * 新建vip
+ * @param patientInfo
+ */
+ public void create(PatientInfo patientInfo) {
+ patientInfo.setCreateDatetime(LocalDateTime.now());
+ Integer exp = patientInfo.getExp();
+ if (patientInfo.getBirthday() != null) {
+ int currentYear = LocalDate.now().getYear();
+ int birthYear = patientInfo.getBirthday().getYear();
+ patientInfo.setAge(currentYear - birthYear);
+ }
+ patientInfo.setExp(0);
+ VipLevelConfig level = vipLevelConfigService.getByExp(patientInfo.getExp());
+ if (level != null){
+ patientInfo.setLevelId(level.getLevelId());
+ }else {
+ patientInfo.setLevelId(0);
+ }
+
+ patientInfoMapper.insert(patientInfo);
+ if (exp != null && exp > 0){
+ patientInfoService.changeExp(patientInfo.getId(), exp, "会员创建");
+ }
+ }
+
+
+ /**
+ * 更新vip基本信息 经验值和积分不更新
+ * @param patientInfo
+ */
+ public void update(PatientInfo patientInfo) {
+ patientInfo.setExp(null);
+ patientInfo.setLevelId(null);
+ patientInfoMapper.updateById(patientInfo);
+ }
+
+ public int removeById(int vipId) {
+ return patientInfoMapper.deleteById(vipId);
+ }
+
+ /**
+ * vip分页查询
+ * @param keyword
+ * @param pageNum
+ * @param pageSize
+ * @return
+ */
+ public Page pageList(String keyword, int pageNum, int pageSize) {
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if (keyword != null && !keyword.isEmpty()){
+ queryWrapper.like("name",keyword);
+ queryWrapper.or().like("phone",keyword);
+ queryWrapper.or().like("cert_no",keyword);
+ }
+ return pageHelper(pageNum, pageSize, queryWrapper, patientInfoMapper, "create_datetime", false);
+ }
+
+ public PatientInfo getById(int id) {
+ return patientInfoMapper.selectById(id);
+ }
+
+ /**
+ * 根据名称 手机号 身份证搜索vip
+ * @param keyword
+ * @return
+ */
+ public List search(String keyword) {
+ QueryWrapper query = new QueryWrapper<>();
+ query.like("name", keyword);
+ query.or().like("phone", keyword);
+ query.or().like("cert_no", keyword);
+ return patientInfoMapper.selectList(query);
+ }
+
+
+ /**
+ * 改变vip等级
+ * @param patientId
+ * @param levelId
+ */
+ public void changeLevel(int patientId, int levelId) {
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ queryWrapper.eq("level_id", levelId);
+ VipLevelConfig levelConfig = vipLevelConfigMapper.selectOne(queryWrapper);
+ if (levelConfig == null) {
+ throw new MessageException("等级不存在");
+ }
+ PatientInfo patientInfo = patientInfoMapper.selectById(patientId);
+ int changeExp = levelConfig.getStartExp() - patientInfo.getExp();
+ patientInfoService.changeExp(patientId, changeExp, "会员等级修改");
+ }
+
+
+
+ /**
+ * 刷新所有vip等级信息
+ */
+ public void reFreshAllVipLevel() {
+ //更新所有vip的等级
+ QueryWrapper patientQuery = new QueryWrapper<>();
+ patientQuery.select("id,exp");
+ List patientList = patientInfoMapper.selectList(patientQuery);
+ Iterator iterator = patientList.iterator();
+ while (iterator.hasNext()) {
+ PatientInfo patientInfo = iterator.next();
+ VipLevelConfig levelConfig = vipLevelConfigService.getByExp(patientInfo.getExp());
+ if (levelConfig != null) {
+ patientInfo.setLevelId(levelConfig.getLevelId());
+ } else {
+ patientInfo.setLevelId(0);
+ }
+ patientInfo.setExp(null);
+
+ }
+ patientInfoMapper.updateById(patientList);
+ }
}
diff --git a/src/main/java/com/syjiaer/clinic/server/service/patient/PatientRegistrationService.java b/src/main/java/com/syjiaer/clinic/server/service/patient/PatientRegistrationService.java
index 7221143..e8998c7 100644
--- a/src/main/java/com/syjiaer/clinic/server/service/patient/PatientRegistrationService.java
+++ b/src/main/java/com/syjiaer/clinic/server/service/patient/PatientRegistrationService.java
@@ -45,6 +45,8 @@ public class PatientRegistrationService extends BaseService {
@Autowired
private PatientInfoMapper patientInfoMapper;
@Autowired
+ private PatientInfoService patientInfoService;
+ @Autowired
private OrganizationMemberMapper organizationMemberMapper;
@Autowired
private OrganizationSectionMapper organizationSectionMapper;
@@ -84,17 +86,9 @@ public class PatientRegistrationService extends BaseService {
patientInfo.setAge(registrationParam.getAge());
patientInfo.setCertType(registrationParam.getCertType());
patientInfo.setCertNo(registrationParam.getCertNo());
+ PatientInfo dbPatientInfo = patientInfoService.save(patientInfo);
- QueryWrapper patientInfoQuery = new QueryWrapper<>();
- patientInfoQuery.eq("cert_no", registrationParam.getCertNo());
- List patientInfoList = patientInfoMapper.selectList(patientInfoQuery);
- if (patientInfoList.isEmpty()) {
- patientInfoMapper.insert(patientInfo);
- } else {
- patientInfo.setId(patientInfoList.get(0).getId());
- patientInfoMapper.updateById(patientInfo);
- }
- registrationParam.setPatientInfoId(patientInfo.getId());
+ registrationParam.setPatientInfoId(dbPatientInfo.getId());
}
PatientRegistration registration = new PatientRegistration();
BeanUtils.copyProperties(registrationParam, registration);
diff --git a/src/main/java/com/syjiaer/clinic/server/service/vip/VipIntegralLogService.java b/src/main/java/com/syjiaer/clinic/server/service/vip/VipIntegralLogService.java
index 07d1ab5..558b65d 100644
--- a/src/main/java/com/syjiaer/clinic/server/service/vip/VipIntegralLogService.java
+++ b/src/main/java/com/syjiaer/clinic/server/service/vip/VipIntegralLogService.java
@@ -4,9 +4,11 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.syjiaer.clinic.server.common.constants.Constants;
import com.syjiaer.clinic.server.common.exception.MessageException;
import com.syjiaer.clinic.server.common.vo.Page;
+import com.syjiaer.clinic.server.entity.patient.PatientInfo;
import com.syjiaer.clinic.server.entity.vip.Vip;
import com.syjiaer.clinic.server.entity.vip.VipIntegralLog;
import com.syjiaer.clinic.server.entity.vip.dto.VipIntegralLogQuery;
+import com.syjiaer.clinic.server.mapper.patient.PatientInfoMapper;
import com.syjiaer.clinic.server.mapper.vip.VipIntegralLogMapper;
import com.syjiaer.clinic.server.mapper.vip.VipLevelConfigMapper;
import com.syjiaer.clinic.server.mapper.vip.VipMapper;
@@ -18,12 +20,10 @@ import java.util.List;
@Service
public class VipIntegralLogService extends BaseService {
- @Autowired
- private VipMapper vipMapper;
- @Autowired
- private VipLevelConfigMapper vipLevelConfigMapper;
@Autowired
private VipIntegralLogMapper vipIntegralLogMapper;
+ @Autowired
+ private PatientInfoMapper patientInfoMapper;
public Page pageList(VipIntegralLogQuery query) {
if (query == null){
@@ -35,12 +35,12 @@ public class VipIntegralLogService extends BaseService {
if (query.getPageSize() == null || query.getPageSize() == 0){
query.setPageSize(Constants.DetailPageSize);
}
- Vip vip = null;
+ PatientInfo patientInfo = null;
if (query.getVipId() != null){
- vip = vipMapper.selectById(query.getVipId());
+ patientInfo = patientInfoMapper.selectById(query.getVipId());
}
- if (vip == null){
- throw new MessageException("会员不存在");
+ if (patientInfo == null){
+ throw new MessageException("患者不存在");
}
QueryWrapper queryWrapper = new QueryWrapper<>();
diff --git a/src/main/java/com/syjiaer/clinic/server/service/vip/VipLevelConfigService.java b/src/main/java/com/syjiaer/clinic/server/service/vip/VipLevelConfigService.java
index 88f6857..6462b32 100644
--- a/src/main/java/com/syjiaer/clinic/server/service/vip/VipLevelConfigService.java
+++ b/src/main/java/com/syjiaer/clinic/server/service/vip/VipLevelConfigService.java
@@ -5,7 +5,9 @@ import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.syjiaer.clinic.server.entity.vip.VipLevelConfig;
import com.syjiaer.clinic.server.mapper.vip.VipLevelConfigMapper;
import com.syjiaer.clinic.server.service.BaseService;
+import com.syjiaer.clinic.server.service.patient.PatientInfoService;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -17,7 +19,7 @@ public class VipLevelConfigService extends BaseService {
@Autowired
private VipLevelConfigMapper vipLevelConfigMapper;
@Autowired
- private VipService vipService;
+ private PatientInfoService patientInfoService;
/**
* 根据经验值获取会员等级
@@ -102,14 +104,14 @@ public class VipLevelConfigService extends BaseService {
for (VipLevelConfig levelConfig : insertList){
vipLevelConfigMapper.insert(levelConfig);
}
- vipService.reFreshAllVipLevel();
+ patientInfoService.reFreshAllVipLevel();
}
@Transactional(rollbackFor = Exception.class)
public Integer delete(int id) {
Integer count = vipLevelConfigMapper.deleteById(id);
- vipService.reFreshAllVipLevel();
+ patientInfoService.reFreshAllVipLevel();
return count;
}