登记收款附件bug修改

This commit is contained in:
luojiaquan
2026-09-15 18:06:40 +08:00
parent 73e425b12f
commit 662a09bf16
7 changed files with 50 additions and 13 deletions
@@ -19,12 +19,21 @@ public class BmsCustomerAttachment extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** 业务模块:客户档案附件 */
public static final String BIZ_TYPE_CUSTOMER = "customer";
/** 业务模块:客户收款水单 */
public static final String BIZ_TYPE_CUSTOMER_RECEIPT = "customer_receipt";
/** 附件ID */
private Long attachmentId;
/** 所属客户ID */
private Long customerId;
/** 业务模块(customer客户档案附件 / customer_receipt客户收款水单),为空按客户档案处理 */
private String bizType;
/** 文件原始名称 */
@Excel(name = "文件名称")
private String fileName;
@@ -43,11 +52,11 @@ public class BmsCustomerAttachment extends BaseEntity
@Excel(name = "文件扩展名")
private String fileExtension;
/** 附件类型(0附件资料 1客户Logo 2合同文件 3其他) */
/** 附件类型(文件分类:0附件资料 1客户Logo 2合同文件 3其他) */
@Excel(name = "附件类型", readConverterExp = "0=附件资料,1=客户Logo,2=合同文件,3=其他")
private String attachmentType;
/** 关联业务ID(如收款单ID,attachment_type=3 时使用) */
/** 关联业务ID(业务模块内的单据ID,如收款单ID) */
private Long bizId;
/** 是否Logo(0否 1是) */
@@ -95,6 +95,14 @@ public interface BmsCustomerMapper
*/
public int deleteBmsCustomerAttachmentByCustomerId(Long customerId);
/**
* 按客户ID删除客户档案模块的附件(保留收款水单等其他业务模块附件)
*
* @param customerId 客户主键
* @return 结果
*/
public int deleteBmsCustomerProfileAttachmentByCustomerId(Long customerId);
/**
* 批量删除客户附件
*
@@ -41,6 +41,7 @@ public class BmsCustomerServiceImpl implements IBmsCustomerService
{
BmsCustomerAttachment query = new BmsCustomerAttachment();
query.setCustomerId(customerId);
query.setBizType(BmsCustomerAttachment.BIZ_TYPE_CUSTOMER);
bmsCustomer.setAttachmentList(bmsCustomerMapper.selectBmsCustomerAttachmentList(query));
BmsCustomerCompany companyQuery = new BmsCustomerCompany();
companyQuery.setCustomerId(customerId);
@@ -84,6 +85,7 @@ public class BmsCustomerServiceImpl implements IBmsCustomerService
for (BmsCustomerAttachment item : attachmentList)
{
item.setCustomerId(customerId);
item.setBizType(BmsCustomerAttachment.BIZ_TYPE_CUSTOMER);
if (item.getDelFlag() == null)
{
item.setDelFlag("0");
@@ -241,8 +243,8 @@ public class BmsCustomerServiceImpl implements IBmsCustomerService
SysUser user = SecurityUtils.getLoginUser().getUser();
bmsCustomer.setUpdateTime(DateUtils.getNowDate());
bmsCustomer.setUpdateBy(user.getUserName());
// 先逻辑删除原有附件,再按新列表重建(简化全量替换)
bmsCustomerMapper.deleteBmsCustomerAttachmentByCustomerId(bmsCustomer.getCustomerId());
// 仅重建客户档案模块的附件,收款水单等其他业务模块的附件保留不动
bmsCustomerMapper.deleteBmsCustomerProfileAttachmentByCustomerId(bmsCustomer.getCustomerId());
if (bmsCustomer.getAttachmentList() != null)
{
for (BmsCustomerAttachment item : bmsCustomer.getAttachmentList())
@@ -68,6 +68,7 @@ public class CustomerMoneyServiceImpl implements ICustomerMoneyService
if (receipt != null)
{
BmsCustomerAttachment query = new BmsCustomerAttachment();
query.setBizType(BmsCustomerAttachment.BIZ_TYPE_CUSTOMER_RECEIPT);
query.setBizId(id);
receipt.setAttachmentList(bmsCustomerMapper.selectBmsCustomerAttachmentList(query));
}
@@ -134,7 +135,7 @@ public class CustomerMoneyServiceImpl implements ICustomerMoneyService
receipt.setVersion(0);
customerMoneyMapper.insertReceipt(receipt);
// 收款附件:复用客户附件表,类型挂"其他(3)",biz_id 关联收款单
// 收款附件:复用客户附件表,业务模块挂 customer_receipt,biz_id 关联收款单
saveReceiptAttachments(receipt);
return 1;
}
@@ -274,7 +275,7 @@ public class CustomerMoneyServiceImpl implements ICustomerMoneyService
attachment.setAttachmentId(null);
attachment.setCustomerId(receipt.getCustomerId());
attachment.setBizId(receipt.getId());
attachment.setAttachmentType("3");
attachment.setBizType(BmsCustomerAttachment.BIZ_TYPE_CUSTOMER_RECEIPT);
if (!StringUtils.hasText(attachment.getIsLogo()))
{
attachment.setIsLogo("0");
@@ -92,6 +92,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<resultMap type="com.ruoyi.customer.customerinfo.domain.BmsCustomerAttachment" id="BmsCustomerAttachmentResult">
<result property="attachmentId" column="attachment_id" />
<result property="customerId" column="customer_id" />
<result property="bizType" column="biz_type" />
<result property="fileName" column="file_name" />
<result property="filePath" column="file_path" />
<result property="fileSize" column="file_size" />
@@ -110,13 +111,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</resultMap>
<sql id="selectBmsCustomerAttachmentVo">
select attachment_id, customer_id, file_name, file_path, file_size, file_type, file_extension, attachment_type, biz_id, is_logo, sort_order, remark, create_by, create_time, update_by, update_time, del_flag from bms_customer_attachment
select attachment_id, customer_id, biz_type, file_name, file_path, file_size, file_type, file_extension, attachment_type, biz_id, is_logo, sort_order, remark, create_by, create_time, update_by, update_time, del_flag from bms_customer_attachment
</sql>
<select id="selectBmsCustomerAttachmentList" parameterType="com.ruoyi.customer.customerinfo.domain.BmsCustomerAttachment" resultMap="BmsCustomerAttachmentResult">
<include refid="selectBmsCustomerAttachmentVo"/>
<where>
<if test="customerId != null "> and customer_id = #{customerId}</if>
<if test="bizType != null and bizType != ''"> and ifnull(nullif(biz_type, ''), 'customer') = #{bizType}</if>
<if test="fileName != null and fileName != ''"> and file_name like concat('%', #{fileName}, '%')</if>
<if test="attachmentType != null and attachmentType != ''"> and attachment_type = #{attachmentType}</if>
<if test="bizId != null"> and biz_id = #{bizId}</if>
@@ -130,6 +132,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
insert into bms_customer_attachment
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="customerId != null">customer_id,</if>
<if test="bizType != null">biz_type,</if>
<if test="fileName != null">file_name,</if>
<if test="filePath != null">file_path,</if>
<if test="fileSize != null">file_size,</if>
@@ -146,6 +149,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="customerId != null">#{customerId},</if>
<if test="bizType != null">#{bizType},</if>
<if test="fileName != null">#{fileName},</if>
<if test="filePath != null">#{filePath},</if>
<if test="fileSize != null">#{fileSize},</if>
@@ -166,6 +170,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
update bms_customer_attachment
<trim prefix="SET" suffixOverrides=",">
<if test="customerId != null">customer_id = #{customerId},</if>
<if test="bizType != null">biz_type = #{bizType},</if>
<if test="fileName != null">file_name = #{fileName},</if>
<if test="filePath != null">file_path = #{filePath},</if>
<if test="fileSize != null">file_size = #{fileSize},</if>
@@ -186,6 +191,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
update bms_customer_attachment set del_flag = '2' where customer_id = #{customerId}
</delete>
<!-- 仅逻辑删除客户档案模块的附件,保留收款水单等其他业务模块的附件 -->
<update id="deleteBmsCustomerProfileAttachmentByCustomerId" parameterType="Long">
update bms_customer_attachment set del_flag = '2'
where customer_id = #{customerId}
and (biz_type = 'customer' or biz_type is null or biz_type = '')
</update>
<delete id="deleteBmsCustomerAttachmentByAttachmentIds" parameterType="String">
update bms_customer_attachment set del_flag = '2' where attachment_id in
<foreach item="attachmentId" collection="attachmentIds" open="(" separator="," close=")">
@@ -667,9 +667,8 @@ const uploadFileUrl = ref(baseUrl + '/common/upload')
const uploadHeaders = ref({ Authorization: 'Bearer ' + getToken() })
const attachmentTypeOptions = ref([
{ value: '0', label: '附件资料' },
{ value: '1', label: '客户Logo' },
{ value: '2', label: '合同文件' },
{ value: '3', label: '其他' }
{ value: '1', label: '合同文件' },
{ value: '2', label: '其他' }
])
const ATTACHMENT_SIZE_LIMIT = 50
const ATTACHMENT_EXTENSIONS = ['pdf', 'jpg', 'jpeg', 'png', 'doc', 'docx', 'xls', 'xlsx', 'zip', 'rar']
@@ -711,6 +710,7 @@ function handleAttachmentUploadSuccess(res, file) {
form.value.attachmentList.push({
attachmentId: null,
customerId: form.value.customerId || null,
bizType: 'customer',
fileName: file.name,
filePath: res.fileName,
fileSize: file.size,
@@ -332,7 +332,7 @@
</template>
</el-table-column>
</el-table>
<div class="upload-tip">附件分类挂在「其他」类型下,支持 PDF/图片/Office/压缩包,单个不超过 50MB</div>
<div class="upload-tip">收款水单单独归档,不会显示在客户档案的附件资料中;支持 PDF/图片/Office/压缩包,单个不超过 50MB</div>
</el-form-item>
</el-col>
</el-row>
@@ -372,7 +372,11 @@
<div class="attach-title">收款凭证附件</div>
<el-table :data="viewDialog.attachments" border size="small" max-height="240" v-loading="viewDialog.loading">
<el-table-column label="序号" type="index" width="55" align="center" />
<el-table-column label="文件名称" prop="fileName" align="center" show-overflow-tooltip min-width="200" />
<el-table-column label="文件名称" prop="fileName" align="center" show-overflow-tooltip min-width="200">
<template #default="scope">
<el-button link type="primary" @click="handleDownload(scope.row)">{{ scope.row.fileName }}</el-button>
</template>
</el-table-column>
<el-table-column label="大小" align="center" width="100">
<template #default="scope">{{ formatFileSize(scope.row.fileSize) }}</template>
</el-table-column>
@@ -786,13 +790,14 @@ function handleUploadSuccess(res, file) {
receiptDialog.form.attachmentList.push({
attachmentId: null,
customerId: route.query.customerId || null,
bizType: "customer_receipt",
bizId: null,
fileName: file.name,
filePath: res.fileName,
fileSize: file.size,
fileType: file.type || '',
fileExtension: (file.name.split('.').pop() || "").toLowerCase(),
attachmentType: "3",
attachmentType: "0",
isLogo: "0",
sortOrder: receiptDialog.form.attachmentList.length,
remark: "",