feat: 优化关联首付分期政策列表显示字段\n\n- 精简列表只显示政策名称、已售面积、已售套数、已售底价总价、生效日期、失效日期\n- 移除序号、首付比例、付款方式、房源套数、楼栋范围、备注等字段\n- 隐藏表头标题,数据改为纯文本显示\n- 调整新增按钮位置和样式
This commit is contained in:
@ -0,0 +1,84 @@
|
||||
package org.dromara.system.controller;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.dromara.common.log.annotation.Log;
|
||||
import org.dromara.common.log.enums.BusinessType;
|
||||
import org.dromara.common.idempotent.annotation.RepeatSubmit;
|
||||
import org.dromara.common.core.domain.R;
|
||||
import org.dromara.common.core.validate.AddGroup;
|
||||
import org.dromara.common.core.validate.EditGroup;
|
||||
import org.dromara.system.domain.bo.CompositePeriodicPolicyBo;
|
||||
import org.dromara.system.service.IPeriodicPolicyCompositeService;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
/**
|
||||
* 组合分期方案控制器 - 一次性保存分期方案、分期政策、付款明细
|
||||
*
|
||||
* @author System
|
||||
* @date 2025-01-15
|
||||
*/
|
||||
@Slf4j
|
||||
@RestController
|
||||
@RequestMapping("/system/composite/periodicpolicy")
|
||||
@RequiredArgsConstructor
|
||||
public class CompositePeriodicPolicyController {
|
||||
|
||||
private final IPeriodicPolicyCompositeService compositeService;
|
||||
|
||||
/**
|
||||
* 组合保存分期方案及其关联数据
|
||||
*
|
||||
* @param compositeBo 组合分期方案业务对象
|
||||
* @return 保存结果
|
||||
*/
|
||||
@Log(title = "组合分期方案", businessType = BusinessType.INSERT)
|
||||
@RepeatSubmit()
|
||||
@PostMapping("/save")
|
||||
public R<String> saveComposite(@Validated(AddGroup.class) @RequestBody CompositePeriodicPolicyBo compositeBo) {
|
||||
try {
|
||||
log.info("开始组合保存分期方案数据");
|
||||
String schemeId = compositeService.saveCompositePeriodicPolicy(
|
||||
compositeBo.getPeriodicpolicy(),
|
||||
compositeBo.getPolicies(),
|
||||
compositeBo.getPaymentDetails()
|
||||
);
|
||||
log.info("组合保存分期方案数据成功,方案ID: {}", schemeId);
|
||||
return R.ok(schemeId);
|
||||
} catch (Exception e) {
|
||||
log.error("组合保存分期方案数据失败", e);
|
||||
return R.fail("保存失败: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 组合更新分期方案及其关联数据
|
||||
*
|
||||
* @param compositeBo 组合分期方案业务对象
|
||||
* @return 更新结果
|
||||
*/
|
||||
@Log(title = "组合分期方案", businessType = BusinessType.UPDATE)
|
||||
@RepeatSubmit()
|
||||
@PutMapping("/update")
|
||||
public R<Void> updateComposite(@Validated(EditGroup.class) @RequestBody CompositePeriodicPolicyBo compositeBo) {
|
||||
try {
|
||||
log.info("开始组合更新分期方案数据");
|
||||
boolean success = compositeService.updateCompositePeriodicPolicy(
|
||||
compositeBo.getPeriodicpolicy(),
|
||||
compositeBo.getPolicies(),
|
||||
compositeBo.getPaymentDetails()
|
||||
);
|
||||
if (success) {
|
||||
log.info("组合更新分期方案数据成功");
|
||||
return R.ok();
|
||||
} else {
|
||||
log.error("组合更新分期方案数据失败");
|
||||
return R.fail("更新失败");
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("组合更新分期方案数据失败", e);
|
||||
return R.fail("更新失败: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -99,8 +99,8 @@ public class TPolicy extends TenantEntity {
|
||||
/**
|
||||
* 首付比例
|
||||
*/
|
||||
@TableField("downPaymentRatio")
|
||||
private BigDecimal downPaymentRatio;
|
||||
@TableField("down_payment_ratio")
|
||||
private String downPaymentRatio;
|
||||
|
||||
/**
|
||||
* 删除标志(0存在 1删除)
|
||||
|
||||
@ -0,0 +1,44 @@
|
||||
package org.dromara.system.domain.bo;
|
||||
|
||||
import lombok.Data;
|
||||
import org.dromara.common.core.validate.AddGroup;
|
||||
import org.dromara.common.core.validate.EditGroup;
|
||||
|
||||
import jakarta.validation.Valid;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 组合分期方案业务对象 - 用于一次性保存分期方案、分期政策、付款明细
|
||||
*
|
||||
* @author System
|
||||
* @date 2025-01-15
|
||||
*/
|
||||
@Data
|
||||
public class CompositePeriodicPolicyBo {
|
||||
|
||||
/**
|
||||
* 分期方案信息
|
||||
*/
|
||||
@Valid
|
||||
@NotNull(message = "分期方案信息不能为空", groups = {AddGroup.class, EditGroup.class})
|
||||
private TPeriodicpolicyBo periodicpolicy;
|
||||
|
||||
/**
|
||||
* 分期政策列表
|
||||
*/
|
||||
@Valid
|
||||
private List<TPolicyBo> policies;
|
||||
|
||||
/**
|
||||
* 付款明细列表(按政策分组)
|
||||
* 每个元素对应一个政策的付款明细列表
|
||||
*/
|
||||
@Valid
|
||||
private List<List<TPaymentDetailsBo>> paymentDetails;
|
||||
|
||||
/**
|
||||
* 是否为编辑模式
|
||||
*/
|
||||
private boolean editMode = false;
|
||||
}
|
||||
@ -147,6 +147,6 @@ public class TPolicyBo extends BaseEntity {
|
||||
/**
|
||||
* 首付比例
|
||||
*/
|
||||
private BigDecimal downPaymentRatio;
|
||||
private String downPaymentRatio;
|
||||
|
||||
}
|
||||
|
||||
@ -120,7 +120,7 @@ public class TPolicyVo implements Serializable {
|
||||
* 首付比例
|
||||
*/
|
||||
@ExcelProperty(value = "首付比例")
|
||||
private BigDecimal downPaymentRatio;
|
||||
private String downPaymentRatio;
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -0,0 +1,40 @@
|
||||
package org.dromara.system.service;
|
||||
|
||||
import org.dromara.system.domain.bo.TPeriodicpolicyBo;
|
||||
import org.dromara.system.domain.bo.TPolicyBo;
|
||||
import org.dromara.system.domain.bo.TPaymentDetailsBo;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 分期方案组合服务接口
|
||||
*
|
||||
* @author System
|
||||
* @date 2025-01-15
|
||||
*/
|
||||
public interface IPeriodicPolicyCompositeService {
|
||||
|
||||
/**
|
||||
* 组合保存分期方案及其关联的分期政策和付款明细
|
||||
*
|
||||
* @param periodicpolicyBo 分期方案业务对象
|
||||
* @param policyBos 分期政策业务对象列表
|
||||
* @param paymentDetailsBos 付款明细业务对象列表(按政策分组)
|
||||
* @return 保存成功的分期方案ID
|
||||
*/
|
||||
String saveCompositePeriodicPolicy(TPeriodicpolicyBo periodicpolicyBo,
|
||||
List<TPolicyBo> policyBos,
|
||||
List<List<TPaymentDetailsBo>> paymentDetailsBos);
|
||||
|
||||
/**
|
||||
* 组合更新分期方案及其关联的分期政策和付款明细
|
||||
*
|
||||
* @param periodicpolicyBo 分期方案业务对象
|
||||
* @param policyBos 分期政策业务对象列表
|
||||
* @param paymentDetailsBos 付款明细业务对象列表(按政策分组)
|
||||
* @return 是否更新成功
|
||||
*/
|
||||
boolean updateCompositePeriodicPolicy(TPeriodicpolicyBo periodicpolicyBo,
|
||||
List<TPolicyBo> policyBos,
|
||||
List<List<TPaymentDetailsBo>> paymentDetailsBos);
|
||||
}
|
||||
@ -0,0 +1,186 @@
|
||||
package org.dromara.system.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.dromara.common.core.utils.MapstructUtils;
|
||||
import org.dromara.common.satoken.utils.LoginHelper;
|
||||
import org.dromara.system.domain.bo.TPeriodicpolicyBo;
|
||||
import org.dromara.system.domain.bo.TPolicyBo;
|
||||
import org.dromara.system.domain.bo.TPaymentDetailsBo;
|
||||
import org.dromara.system.domain.TPeriodicpolicy;
|
||||
import org.dromara.system.domain.TPolicy;
|
||||
import org.dromara.system.domain.TPaymentDetails;
|
||||
import org.dromara.system.mapper.TPeriodicpolicyMapper;
|
||||
import org.dromara.system.mapper.TPolicyMapper;
|
||||
import org.dromara.system.mapper.TPaymentDetailsMapper;
|
||||
import org.dromara.system.service.IPeriodicPolicyCompositeService;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 分期方案组合服务 - 将分期方案、分期政策、付款明细放在同一个事务下保存
|
||||
*
|
||||
* @author System
|
||||
* @date 2025-01-15
|
||||
*/
|
||||
@Slf4j
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class PeriodicPolicyCompositeServiceImpl implements IPeriodicPolicyCompositeService {
|
||||
|
||||
private final TPeriodicpolicyMapper periodicpolicyMapper;
|
||||
private final TPolicyMapper policyMapper;
|
||||
private final TPaymentDetailsMapper paymentDetailsMapper;
|
||||
|
||||
/**
|
||||
* 组合保存分期方案及其关联的分期政策和付款明细
|
||||
*
|
||||
* @param periodicpolicyBo 分期方案业务对象
|
||||
* @param policyBos 分期政策业务对象列表
|
||||
* @param paymentDetailsBos 付款明细业务对象列表(按政策分组)
|
||||
* @return 保存成功的分期方案ID
|
||||
*/
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public String saveCompositePeriodicPolicy(TPeriodicpolicyBo periodicpolicyBo,
|
||||
List<TPolicyBo> policyBos,
|
||||
List<List<TPaymentDetailsBo>> paymentDetailsBos) {
|
||||
try {
|
||||
log.info("开始组合保存分期方案数据");
|
||||
|
||||
// 1. 保存分期方案
|
||||
TPeriodicpolicy periodicpolicy = MapstructUtils.convert(periodicpolicyBo, TPeriodicpolicy.class);
|
||||
// 设置当前登录用户为创建人
|
||||
periodicpolicy.setCreator(LoginHelper.getUsername());
|
||||
periodicpolicyMapper.insert(periodicpolicy);
|
||||
String schemeId = periodicpolicy.getId();
|
||||
log.info("分期方案保存成功,ID: {}", schemeId);
|
||||
|
||||
// 2. 保存分期政策及其付款明细
|
||||
if (policyBos != null && !policyBos.isEmpty()) {
|
||||
for (int i = 0; i < policyBos.size(); i++) {
|
||||
TPolicyBo policyBo = policyBos.get(i);
|
||||
policyBo.setPeriodicPolicyId(schemeId); // 设置关联的分期方案ID
|
||||
|
||||
TPolicy policy = MapstructUtils.convert(policyBo, TPolicy.class);
|
||||
// 设置当前登录用户为创建人
|
||||
policy.setCreator(LoginHelper.getUsername());
|
||||
policyMapper.insert(policy);
|
||||
String policyId = policy.getId();
|
||||
log.info("分期政策保存成功,ID: {}", policyId);
|
||||
|
||||
// 3. 保存该政策的付款明细
|
||||
if (paymentDetailsBos != null && i < paymentDetailsBos.size()) {
|
||||
List<TPaymentDetailsBo> detailsForPolicy = paymentDetailsBos.get(i);
|
||||
if (detailsForPolicy != null && !detailsForPolicy.isEmpty()) {
|
||||
for (TPaymentDetailsBo paymentDetailsBo : detailsForPolicy) {
|
||||
paymentDetailsBo.setPolicyid(policyId); // 设置关联的政策ID
|
||||
TPaymentDetails paymentDetails = MapstructUtils.convert(paymentDetailsBo, TPaymentDetails.class);
|
||||
// 设置当前登录用户为创建人
|
||||
paymentDetails.setCreator(LoginHelper.getUsername());
|
||||
// 设置创建人ID
|
||||
paymentDetails.setCreatorid(LoginHelper.getUserIdStr());
|
||||
paymentDetailsMapper.insert(paymentDetails);
|
||||
}
|
||||
log.info("政策 {} 的付款明细保存成功,共 {} 条", policyId, detailsForPolicy.size());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
log.info("组合保存分期方案数据完成,方案ID: {}", schemeId);
|
||||
return schemeId;
|
||||
|
||||
} catch (Exception e) {
|
||||
log.error("组合保存分期方案数据失败", e);
|
||||
throw new RuntimeException("保存分期方案数据失败: " + e.getMessage(), e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 组合更新分期方案及其关联的分期政策和付款明细
|
||||
*
|
||||
* @param periodicpolicyBo 分期方案业务对象
|
||||
* @param policyBos 分期政策业务对象列表
|
||||
* @param paymentDetailsBos 付款明细业务对象列表(按政策分组)
|
||||
* @return 是否更新成功
|
||||
*/
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public boolean updateCompositePeriodicPolicy(TPeriodicpolicyBo periodicpolicyBo,
|
||||
List<TPolicyBo> policyBos,
|
||||
List<List<TPaymentDetailsBo>> paymentDetailsBos) {
|
||||
try {
|
||||
log.info("开始组合更新分期方案数据,方案ID: {}", periodicpolicyBo.getId());
|
||||
|
||||
String schemeId = periodicpolicyBo.getId();
|
||||
|
||||
// 1. 更新分期方案
|
||||
TPeriodicpolicy periodicpolicy = MapstructUtils.convert(periodicpolicyBo, TPeriodicpolicy.class);
|
||||
// 设置当前登录用户为创建人
|
||||
periodicpolicy.setCreator(LoginHelper.getUsername());
|
||||
periodicpolicyMapper.updateById(periodicpolicy);
|
||||
log.info("分期方案更新成功,ID: {}", schemeId);
|
||||
|
||||
// 2. 删除原有的分期政策和付款明细
|
||||
// 先获取关联的政策ID列表
|
||||
List<Object> policyIds = policyMapper.selectObjs(Wrappers.<TPolicy>lambdaQuery()
|
||||
.eq(TPolicy::getPeriodicPolicyId, schemeId)
|
||||
.select(TPolicy::getId));
|
||||
|
||||
// 如果有政策ID,才删除对应的付款明细
|
||||
if (policyIds != null && !policyIds.isEmpty()) {
|
||||
paymentDetailsMapper.delete(Wrappers.<TPaymentDetails>lambdaQuery()
|
||||
.in(TPaymentDetails::getPolicyid, policyIds));
|
||||
}
|
||||
|
||||
// 再删除分期政策
|
||||
policyMapper.delete(Wrappers.<TPolicy>lambdaQuery()
|
||||
.eq(TPolicy::getPeriodicPolicyId, schemeId));
|
||||
|
||||
log.info("原有的分期政策和付款明细已删除");
|
||||
|
||||
// 3. 重新保存分期政策及其付款明细
|
||||
if (policyBos != null && !policyBos.isEmpty()) {
|
||||
for (int i = 0; i < policyBos.size(); i++) {
|
||||
TPolicyBo policyBo = policyBos.get(i);
|
||||
policyBo.setPeriodicPolicyId(schemeId);
|
||||
|
||||
TPolicy policy = MapstructUtils.convert(policyBo, TPolicy.class);
|
||||
// 设置当前登录用户为创建人
|
||||
policy.setCreator(LoginHelper.getUsername());
|
||||
policyMapper.insert(policy);
|
||||
String policyId = policy.getId();
|
||||
|
||||
// 保存该政策的付款明细
|
||||
if (paymentDetailsBos != null && i < paymentDetailsBos.size()) {
|
||||
List<TPaymentDetailsBo> detailsForPolicy = paymentDetailsBos.get(i);
|
||||
if (detailsForPolicy != null && !detailsForPolicy.isEmpty()) {
|
||||
for (TPaymentDetailsBo paymentDetailsBo : detailsForPolicy) {
|
||||
paymentDetailsBo.setPolicyid(policyId);
|
||||
TPaymentDetails paymentDetails = MapstructUtils.convert(paymentDetailsBo, TPaymentDetails.class);
|
||||
// 设置当前登录用户为创建人
|
||||
paymentDetails.setCreator(LoginHelper.getUsername());
|
||||
// 设置创建人ID
|
||||
paymentDetails.setCreatorid(LoginHelper.getUserIdStr());
|
||||
paymentDetailsMapper.insert(paymentDetails);
|
||||
}
|
||||
log.info("政策 {} 的付款明细更新成功,共 {} 条", policyId, detailsForPolicy.size());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
log.info("组合更新分期方案数据完成,方案ID: {}", schemeId);
|
||||
return true;
|
||||
|
||||
} catch (Exception e) {
|
||||
log.error("组合更新分期方案数据失败", e);
|
||||
throw new RuntimeException("更新分期方案数据失败: " + e.getMessage(), e);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user