|
@@ -4,12 +4,16 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
|
|
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
|
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
|
|
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
|
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
|
|
import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
|
|
import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
|
|
|
|
|
+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.ElderlyConsumerVouchersPageReqVO;
|
|
|
import cn.iocoder.yudao.module.system.controller.admin.biz.vo.ElderlyConsumerVouchersSaveReqVO;
|
|
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.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.ExpenseOrderDO;
|
|
|
import cn.iocoder.yudao.module.system.dal.dataobject.biz.ExpenseOrderItemDO;
|
|
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.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.ExpenseOrderItemMapper;
|
|
|
import cn.iocoder.yudao.module.system.dal.mysql.biz.ExpenseOrderMapper;
|
|
import cn.iocoder.yudao.module.system.dal.mysql.biz.ExpenseOrderMapper;
|
|
|
import cn.iocoder.yudao.module.system.enums.change.BusinessConstants;
|
|
import cn.iocoder.yudao.module.system.enums.change.BusinessConstants;
|
|
@@ -47,6 +51,9 @@ public class ElderlyConsumerVouchersServiceImpl implements ElderlyConsumerVouche
|
|
|
@Resource
|
|
@Resource
|
|
|
private ExpenseOrderItemMapper expenseOrderItemMapper;
|
|
private ExpenseOrderItemMapper expenseOrderItemMapper;
|
|
|
|
|
|
|
|
|
|
+ @Resource
|
|
|
|
|
+ private ElderlyInfoMapper elderlyInfoMapper;
|
|
|
|
|
+
|
|
|
@Override
|
|
@Override
|
|
|
public Long create(ElderlyConsumerVouchersDO createReqVO) {
|
|
public Long create(ElderlyConsumerVouchersDO createReqVO) {
|
|
|
validateBillingMonth(createReqVO.getBillingMonth());
|
|
validateBillingMonth(createReqVO.getBillingMonth());
|
|
@@ -82,6 +89,67 @@ public class ElderlyConsumerVouchersServiceImpl implements ElderlyConsumerVouche
|
|
|
return new PageResult<>(list, page.getTotal());
|
|
return new PageResult<>(list, page.getTotal());
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public void importData(List<ElderlyConsumerVouchersImportExcelVO> list) {
|
|
|
|
|
+ if (list == null || list.isEmpty()) {
|
|
|
|
|
+ throw exception(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 + "行数据为空");
|
|
|
|
|
+ }
|
|
|
|
|
+ if (StringUtils.isBlank(item.getElderName())) {
|
|
|
|
|
+ throw exception(COMMON_ERROR, "第" + excelRow + "行【长者姓名】不能为空");
|
|
|
|
|
+ }
|
|
|
|
|
+ if (StringUtils.isBlank(item.getIdCard())) {
|
|
|
|
|
+ throw exception(COMMON_ERROR, "第" + excelRow + "行【身份证号】不能为空");
|
|
|
|
|
+ }
|
|
|
|
|
+ if (item.getAmount() == null) {
|
|
|
|
|
+ throw exception(COMMON_ERROR, "第" + excelRow + "行【消费券金额】不能为空");
|
|
|
|
|
+ }
|
|
|
|
|
+ if (StringUtils.isBlank(item.getBillingMonth())) {
|
|
|
|
|
+ throw exception(COMMON_ERROR, "第" + excelRow + "行【账单归属月】不能为空");
|
|
|
|
|
+ }
|
|
|
|
|
+ validateBillingMonth(item.getBillingMonth());
|
|
|
|
|
+
|
|
|
|
|
+ ElderlyInfoDO elderlyInfo = elderlyInfoMapper.selectOne(new LambdaQueryWrapperX<ElderlyInfoDO>()
|
|
|
|
|
+ .eq(ElderlyInfoDO::getElderName, item.getElderName())
|
|
|
|
|
+ .eq(ElderlyInfoDO::getIdCard, item.getIdCard())
|
|
|
|
|
+ .eqIfPresent(ElderlyInfoDO::getTenantId, currentTenantId));
|
|
|
|
|
+ if (elderlyInfo == null) {
|
|
|
|
|
+ throw exception(COMMON_ERROR, "第" + excelRow + "行未找到匹配长者(姓名+身份证)");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ ExpenseOrderDO expenseOrder = expenseOrderMapper.selectOne(new LambdaQueryWrapperX<ExpenseOrderDO>()
|
|
|
|
|
+ .eqIfPresent(ExpenseOrderDO::getTenantId, elderlyInfo.getTenantId())
|
|
|
|
|
+ .eq(ExpenseOrderDO::getElderId, elderlyInfo.getId())
|
|
|
|
|
+ .eq(ExpenseOrderDO::getIsShow, true)
|
|
|
|
|
+ .eq(ExpenseOrderDO::getIsLock,0)
|
|
|
|
|
+ .eq(ExpenseOrderDO::getConfirmStatus,0)
|
|
|
|
|
+ .ne(ExpenseOrderDO::getPayStatus, 1)
|
|
|
|
|
+ .eq(ExpenseOrderDO::getBillingMonth, item.getBillingMonth())
|
|
|
|
|
+ .in(ExpenseOrderDO::getType, 1, 2));
|
|
|
|
|
+ if (expenseOrder == null) {
|
|
|
|
|
+ throw exception(COMMON_ERROR, "第" + excelRow + "行未找到可抵扣账单(需存在未缴费且可见的对应账单月账单)");
|
|
|
|
|
+ }
|
|
|
|
|
+ validateExpenseOrderNotConfirmedAndNotLock(expenseOrder);
|
|
|
|
|
+
|
|
|
|
|
+ ElderlyConsumerVouchersDO data = ElderlyConsumerVouchersDO.builder()
|
|
|
|
|
+ .elderId(elderlyInfo.getId())
|
|
|
|
|
+ .billingMonth(item.getBillingMonth())
|
|
|
|
|
+ .amount(item.getAmount())
|
|
|
|
|
+ .remarks(item.getRemarks())
|
|
|
|
|
+ .status(0)
|
|
|
|
|
+ .returnStatus(0)
|
|
|
|
|
+ .tenantId(elderlyInfo.getTenantId())
|
|
|
|
|
+ .build();
|
|
|
|
|
+ this.create(data);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
/**
|
|
/**
|
|
|
* 消费券录入对应未缴费的账单需要更新
|
|
* 消费券录入对应未缴费的账单需要更新
|
|
|
*/
|
|
*/
|
|
@@ -90,8 +158,10 @@ public class ElderlyConsumerVouchersServiceImpl implements ElderlyConsumerVouche
|
|
|
.eq(ExpenseOrderDO::getElderId, createReqVO.getElderId())
|
|
.eq(ExpenseOrderDO::getElderId, createReqVO.getElderId())
|
|
|
.eq(ExpenseOrderDO::getIsShow, true)
|
|
.eq(ExpenseOrderDO::getIsShow, true)
|
|
|
.ne(ExpenseOrderDO::getPayStatus, 1)
|
|
.ne(ExpenseOrderDO::getPayStatus, 1)
|
|
|
|
|
+ .eq(ExpenseOrderDO::getIsLock,0)
|
|
|
|
|
+ .eq(ExpenseOrderDO::getConfirmStatus,0)
|
|
|
.eq(ExpenseOrderDO::getBillingMonth, createReqVO.getBillingMonth())
|
|
.eq(ExpenseOrderDO::getBillingMonth, createReqVO.getBillingMonth())
|
|
|
- .in(ExpenseOrderDO::getType, 1,2));
|
|
|
|
|
|
|
+ .in(ExpenseOrderDO::getType, 1, 2));
|
|
|
|
|
|
|
|
if (expenseOrder == null) {
|
|
if (expenseOrder == null) {
|
|
|
return;
|
|
return;
|
|
@@ -116,7 +186,7 @@ public class ElderlyConsumerVouchersServiceImpl implements ElderlyConsumerVouche
|
|
|
orderItem.setEndDate(yearMonth.atEndOfMonth());
|
|
orderItem.setEndDate(yearMonth.atEndOfMonth());
|
|
|
orderItem.setTenantId(createReqVO.getTenantId());
|
|
orderItem.setTenantId(createReqVO.getTenantId());
|
|
|
orderItem.setPayStatus(0);
|
|
orderItem.setPayStatus(0);
|
|
|
- orderItem.setDescription(StringUtils.isBlank(createReqVO.getRemarks()) ? yearMonth+"消费券抵扣" : createReqVO.getRemarks()) ;
|
|
|
|
|
|
|
+ orderItem.setDescription(StringUtils.isBlank(createReqVO.getRemarks()) ? yearMonth + "消费券抵扣" : createReqVO.getRemarks());
|
|
|
expenseOrderItemMapper.insert(orderItem);
|
|
expenseOrderItemMapper.insert(orderItem);
|
|
|
|
|
|
|
|
BigDecimal currentAmount = expenseOrder.getActualAmount() != null ? expenseOrder.getActualAmount() : BigDecimal.ZERO;
|
|
BigDecimal currentAmount = expenseOrder.getActualAmount() != null ? expenseOrder.getActualAmount() : BigDecimal.ZERO;
|