|
|
@@ -1,5 +1,6 @@
|
|
|
package cn.iocoder.yudao.module.system.service.biz;
|
|
|
|
|
|
+import cn.hutool.core.collection.CollectionUtil;
|
|
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
|
|
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
|
|
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
|
|
@@ -8,18 +9,14 @@ import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder;
|
|
|
import cn.iocoder.yudao.module.system.controller.admin.biz.vo.ElderlyConsumerVouchersPageReqVO;
|
|
|
import cn.iocoder.yudao.module.system.controller.admin.biz.vo.ElderlyConsumerVouchersSaveReqVO;
|
|
|
import cn.iocoder.yudao.module.system.controller.admin.biz.vo.excel.ElderlyConsumerVouchersImportExcelVO;
|
|
|
-import cn.iocoder.yudao.module.system.dal.dataobject.biz.ElderlyConsumerVouchersDO;
|
|
|
-import cn.iocoder.yudao.module.system.dal.dataobject.biz.ElderlyInfoDO;
|
|
|
-import cn.iocoder.yudao.module.system.dal.dataobject.biz.ExpenseOrderDO;
|
|
|
-import cn.iocoder.yudao.module.system.dal.dataobject.biz.ExpenseOrderItemDO;
|
|
|
-import cn.iocoder.yudao.module.system.dal.mysql.biz.ElderlyConsumerVouchersMapper;
|
|
|
-import cn.iocoder.yudao.module.system.dal.mysql.biz.ElderlyInfoMapper;
|
|
|
-import cn.iocoder.yudao.module.system.dal.mysql.biz.ExpenseOrderItemMapper;
|
|
|
-import cn.iocoder.yudao.module.system.dal.mysql.biz.ExpenseOrderMapper;
|
|
|
+import cn.iocoder.yudao.module.system.dal.dataobject.biz.*;
|
|
|
+import cn.iocoder.yudao.module.system.dal.mysql.biz.*;
|
|
|
import cn.iocoder.yudao.module.system.enums.change.BusinessConstants;
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
import org.springframework.validation.annotation.Validated;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
@@ -33,6 +30,7 @@ import java.util.Date;
|
|
|
import java.util.List;
|
|
|
|
|
|
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
|
|
+import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exceptionCustomMsg;
|
|
|
import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.COMMON_ERROR;
|
|
|
import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.COMMON_NOT_FOUND;
|
|
|
import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.EXPENSE_ORDER_ALREADY_CONFIRMED;
|
|
|
@@ -54,11 +52,18 @@ public class ElderlyConsumerVouchersServiceImpl implements ElderlyConsumerVouche
|
|
|
@Resource
|
|
|
private ElderlyInfoMapper elderlyInfoMapper;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private RefundSettlementOrderMapper refundSettlementOrderMapper;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private RefundSettlementOrderItemMapper refundSettlementOrderItemMapper;
|
|
|
+
|
|
|
@Override
|
|
|
public Long create(ElderlyConsumerVouchersDO createReqVO) {
|
|
|
validateBillingMonth(createReqVO.getBillingMonth());
|
|
|
elderlyConsumerVouchersMapper.insert(createReqVO);
|
|
|
updateExpenseOrder(createReqVO);
|
|
|
+ updateRefundOrder(createReqVO);
|
|
|
return createReqVO.getId();
|
|
|
}
|
|
|
|
|
|
@@ -71,8 +76,14 @@ public class ElderlyConsumerVouchersServiceImpl implements ElderlyConsumerVouche
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
+ @Transactional
|
|
|
public void delete(Long id) {
|
|
|
validateExists(id);
|
|
|
+ ExpenseOrderItemDO expenseOrderItemDO = expenseOrderItemMapper.selectOne(new LambdaQueryWrapperX<ExpenseOrderItemDO>().eq(ExpenseOrderItemDO::getSourceExpenseItemId, id));
|
|
|
+ ExpenseOrderDO expenseOrderDO = expenseOrderMapper.selectById(expenseOrderItemDO.getExpenseOrderId());
|
|
|
+ expenseOrderDO.setActualAmount(expenseOrderDO.getActualAmount().subtract(expenseOrderItemDO.getTotalAmount()));
|
|
|
+ expenseOrderMapper.updateById(expenseOrderDO);
|
|
|
+ expenseOrderItemMapper.deleteById(expenseOrderItemDO);
|
|
|
elderlyConsumerVouchersMapper.deleteById(id);
|
|
|
}
|
|
|
|
|
|
@@ -90,28 +101,29 @@ public class ElderlyConsumerVouchersServiceImpl implements ElderlyConsumerVouche
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
+ @Transactional
|
|
|
public void importData(List<ElderlyConsumerVouchersImportExcelVO> list) {
|
|
|
if (list == null || list.isEmpty()) {
|
|
|
- throw exception(COMMON_ERROR, "导入数据不能为空");
|
|
|
+ throw exceptionCustomMsg(COMMON_ERROR, "导入数据不能为空");
|
|
|
}
|
|
|
Long currentTenantId = TenantContextHolder.getTenantId();
|
|
|
for (int i = 0; i < list.size(); i++) {
|
|
|
int excelRow = i + 2;
|
|
|
ElderlyConsumerVouchersImportExcelVO item = list.get(i);
|
|
|
if (item == null) {
|
|
|
- throw exception(COMMON_ERROR, "第" + excelRow + "行数据为空");
|
|
|
+ throw exceptionCustomMsg(COMMON_ERROR, "第" + excelRow + "行数据为空");
|
|
|
}
|
|
|
if (StringUtils.isBlank(item.getElderName())) {
|
|
|
- throw exception(COMMON_ERROR, "第" + excelRow + "行【长者姓名】不能为空");
|
|
|
+ throw exceptionCustomMsg(COMMON_ERROR, "第" + excelRow + "行【长者姓名】不能为空");
|
|
|
}
|
|
|
if (StringUtils.isBlank(item.getIdCard())) {
|
|
|
- throw exception(COMMON_ERROR, "第" + excelRow + "行【身份证号】不能为空");
|
|
|
+ throw exceptionCustomMsg(COMMON_ERROR, "第" + excelRow + "行【身份证号】不能为空");
|
|
|
}
|
|
|
if (item.getAmount() == null) {
|
|
|
- throw exception(COMMON_ERROR, "第" + excelRow + "行【消费券金额】不能为空");
|
|
|
+ throw exceptionCustomMsg(COMMON_ERROR, "第" + excelRow + "行【消费券金额】不能为空");
|
|
|
}
|
|
|
if (StringUtils.isBlank(item.getBillingMonth())) {
|
|
|
- throw exception(COMMON_ERROR, "第" + excelRow + "行【账单归属月】不能为空");
|
|
|
+ throw exceptionCustomMsg(COMMON_ERROR, "第" + excelRow + "行【账单归属月】不能为空");
|
|
|
}
|
|
|
validateBillingMonth(item.getBillingMonth());
|
|
|
|
|
|
@@ -120,7 +132,7 @@ public class ElderlyConsumerVouchersServiceImpl implements ElderlyConsumerVouche
|
|
|
.eq(ElderlyInfoDO::getIdCard, item.getIdCard())
|
|
|
.eqIfPresent(ElderlyInfoDO::getTenantId, currentTenantId));
|
|
|
if (elderlyInfo == null) {
|
|
|
- throw exception(COMMON_ERROR, "第" + excelRow + "行未找到匹配长者(姓名+身份证)");
|
|
|
+ throw exceptionCustomMsg(COMMON_ERROR, "第" + excelRow + "行未找到匹配长者(姓名+身份证)");
|
|
|
}
|
|
|
|
|
|
ExpenseOrderDO expenseOrder = expenseOrderMapper.selectOne(new LambdaQueryWrapperX<ExpenseOrderDO>()
|
|
|
@@ -133,7 +145,7 @@ public class ElderlyConsumerVouchersServiceImpl implements ElderlyConsumerVouche
|
|
|
.eq(ExpenseOrderDO::getBillingMonth, item.getBillingMonth())
|
|
|
.in(ExpenseOrderDO::getType, 1, 2));
|
|
|
if (expenseOrder == null) {
|
|
|
- throw exception(COMMON_ERROR, "第" + excelRow + "行未找到可抵扣账单(需存在未缴费且可见的对应账单月账单)");
|
|
|
+ throw exceptionCustomMsg(COMMON_ERROR, "第" + excelRow + "行未找到可抵扣账单(需存在未缴费且可见的对应账单月账单)");
|
|
|
}
|
|
|
validateExpenseOrderNotConfirmedAndNotLock(expenseOrder);
|
|
|
|
|
|
@@ -227,4 +239,41 @@ public class ElderlyConsumerVouchersServiceImpl implements ElderlyConsumerVouche
|
|
|
throw exception(COMMON_ERROR, "账单归属月格式需为 yyyy-MM,例如 2025-01");
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 更新退住结算单
|
|
|
+ */
|
|
|
+ private void updateRefundOrder(ElderlyConsumerVouchersDO vouchers){
|
|
|
+ //创建长护险的时候要把费用生成对应的账单里面
|
|
|
+ // 查询对应退住的账单,如果不存在则返回
|
|
|
+ List<RefundSettlementOrderDO> refundSettlementOrderDOList = refundSettlementOrderMapper.selectList(new LambdaQueryWrapperX<RefundSettlementOrderDO>()
|
|
|
+ .eq(RefundSettlementOrderDO::getElderId, vouchers.getElderId())
|
|
|
+ .orderByDesc(RefundSettlementOrderDO::getCreatedTime)); // 月度账单
|
|
|
+ if(CollectionUtil.isEmpty(refundSettlementOrderDOList)){
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ RefundSettlementOrderDO refundSettlementOrderDO = refundSettlementOrderDOList.get(0);
|
|
|
+
|
|
|
+ // 创建账单费用项
|
|
|
+ RefundSettlementOrderItemDO orderItem = new RefundSettlementOrderItemDO();
|
|
|
+ orderItem.setRefundSettlementOrderId(refundSettlementOrderDO.getId());
|
|
|
+ orderItem.setType(2);
|
|
|
+ orderItem.setCount(1);
|
|
|
+ orderItem.setItemName("长护险抵扣");
|
|
|
+ orderItem.setRemarks(vouchers.getRemarks());
|
|
|
+ orderItem.setPrice(vouchers.getAmount().negate()); // 单价为负数表示抵扣
|
|
|
+ orderItem.setRefundAmount(vouchers.getAmount().negate()); // 实际单价
|
|
|
+ orderItem.setActualRefundAmount(vouchers.getAmount().negate()); // 总金额为负数表示抵扣
|
|
|
+ orderItem.setTenantId(vouchers.getTenantId());
|
|
|
+ orderItem.setSourceItemId(vouchers.getId());
|
|
|
+ refundSettlementOrderItemMapper.insert(orderItem);
|
|
|
+ // 更新账单总金额
|
|
|
+ BigDecimal currentAmount = refundSettlementOrderDO.getRefundAmount() != null ? refundSettlementOrderDO.getRefundAmount() : BigDecimal.ZERO;
|
|
|
+ BigDecimal newAmount = currentAmount.add(orderItem.getRefundAmount());
|
|
|
+ refundSettlementOrderDO.setRefundAmount(newAmount);
|
|
|
+ refundSettlementOrderMapper.updateById(refundSettlementOrderDO);
|
|
|
+ //更新长护险状态
|
|
|
+ vouchers.setStatus(1);
|
|
|
+ elderlyConsumerVouchersMapper.updateById(vouchers);
|
|
|
+ }
|
|
|
}
|