feat(biz_project+meeting): 项目+会议软删除级联, admin/manager 双角色可删
biz_project* 5 表级联 (project/plan/assign/sponsor_assign/rating) + 会议链 biz_meeting* 6 表级联 admin-only → admin/manager 可删 DB: - 5 ALTER TABLE 加 is_deleted TINYINT DEFAULT 0 NOT NULL (biz_project/plan/assign/sponsor_assign/rating) - biz_meeting* 6 表已有 is_deleted 列 (上轮已 ALTER) Domain (10 文件): - 5 个 biz_project* 加 isDeleted 字段 - 6 个 biz_meeting* 加 isDeleted 字段 - (audit_log 列名特殊: 使用 deleted 字段存操作类型, 不冲突) Mapper 接口 (10 文件): - 5 个 project mapper 加 softDeleteByProjectId / softDeleteByProjectNo - 5 个 meeting mapper 加 softDeleteByMeetingId - BizMeetingMapper 加 selectIdListByProjectId (级联调用) Mapper XML (10 文件): - 所有 SELECT 加 is_deleted=0 过滤 (含 JOIN 子查询) - 加 softDeleteByXxx UPDATE (10 处) - BizMeetingMapper.xml 的 plan LEFT JOIN 加 proj.is_deleted=0 防悬挂 Service (3 文件): - IBizProjectService.softDeleteCascade/Batch (含会议链调用) - IBizMeetingService.softDeleteCascade/Batch - BizProjectServiceImpl / BizMeetingServiceImpl @Transactional(rollbackFor=Exception.class) Controller (2 文件): - BizProjectController.DELETE 改 admin+manager 可删 - BizMeetingController.DELETE 改 admin+manager 可删 (放宽权限)
This commit is contained in:
+15
-7
@@ -38,6 +38,7 @@
|
||||
<result property="endTime" column="end_time" />
|
||||
<result property="projectName" column="project_name" />
|
||||
<result property="projectNo" column="project_no" />
|
||||
<result property="isDeleted" column="is_deleted" />
|
||||
</resultMap>
|
||||
<insert id="insert" parameterType="BizMeetingAttendee">
|
||||
insert into biz_meeting_attendee(meeting_id, user_id, create_by, create_time)
|
||||
@@ -126,6 +127,10 @@
|
||||
<delete id="deleteByMeetingId" parameterType="Long">
|
||||
delete from biz_meeting_attendee where meeting_id = #{meetingId}
|
||||
</delete>
|
||||
<!-- 软删除: admin 删除会议时级联置 is_deleted=1 (硬删保留, 用于单条参会人管理) -->
|
||||
<update id="softDeleteByMeetingId" parameterType="Long">
|
||||
update biz_meeting_attendee set is_deleted = 1 where meeting_id = #{meetingId}
|
||||
</update>
|
||||
<!-- MeetingDetail 参会人 CRUD 用: 按 id 单删 -->
|
||||
<delete id="deleteByPrimaryKey" parameterType="Long">
|
||||
delete from biz_meeting_attendee where id = #{id}
|
||||
@@ -134,21 +139,22 @@
|
||||
delete from biz_meeting_attendee where meeting_id = #{meetingId} and user_id = #{userId}
|
||||
</delete>
|
||||
<select id="selectByMeetingId" resultMap="BizMeetingAttendeeResult" parameterType="Long">
|
||||
select id, meeting_id, user_id, name, phone, work_unit, department, title, id_card, bank_card, bank_name, bank_branch, bank_region, bank_address, account_name, id_card_attachments, labor_form, fee_pre_tax, tax, fee, vat_and_surcharge, summary, on_site_photos, signed_at, signed_ip, handsign, labor_protocol, create_by, create_time
|
||||
from biz_meeting_attendee where meeting_id = #{meetingId}
|
||||
select id, meeting_id, user_id, name, phone, work_unit, department, title, id_card, bank_card, bank_name, bank_branch, bank_region, bank_address, account_name, id_card_attachments, labor_form, fee_pre_tax, tax, fee, vat_and_surcharge, summary, on_site_photos, signed_at, signed_ip, handsign, labor_protocol, create_by, create_time, is_deleted
|
||||
from biz_meeting_attendee where meeting_id = #{meetingId} and is_deleted = 0
|
||||
</select>
|
||||
<select id="selectByUserId" resultMap="BizMeetingAttendeeResult" parameterType="Long">
|
||||
select id, meeting_id, user_id, name, phone, work_unit, department, title, id_card, bank_card, bank_name, bank_branch, bank_region, bank_address, account_name, id_card_attachments, labor_form, fee_pre_tax, tax, fee, vat_and_surcharge, summary, on_site_photos, signed_at, signed_ip, handsign, labor_protocol, create_by, create_time
|
||||
from biz_meeting_attendee where user_id = #{userId}
|
||||
select id, meeting_id, user_id, name, phone, work_unit, department, title, id_card, bank_card, bank_name, bank_branch, bank_region, bank_address, account_name, id_card_attachments, labor_form, fee_pre_tax, tax, fee, vat_and_surcharge, summary, on_site_photos, signed_at, signed_ip, handsign, labor_protocol, create_by, create_time, is_deleted
|
||||
from biz_meeting_attendee where user_id = #{userId} and is_deleted = 0
|
||||
</select>
|
||||
<select id="selectById" resultMap="BizMeetingAttendeeResult" parameterType="Long">
|
||||
select id, meeting_id, user_id, name, phone, work_unit, department, title, id_card, bank_card, bank_name, bank_branch, bank_region, bank_address, account_name, id_card_attachments, labor_form, fee_pre_tax, tax, fee, vat_and_surcharge, summary, on_site_photos, signed_at, signed_ip, handsign, labor_protocol, create_by, create_time
|
||||
from biz_meeting_attendee where id = #{id}
|
||||
select id, meeting_id, user_id, name, phone, work_unit, department, title, id_card, bank_card, bank_name, bank_branch, bank_region, bank_address, account_name, id_card_attachments, labor_form, fee_pre_tax, tax, fee, vat_and_surcharge, summary, on_site_photos, signed_at, signed_ip, handsign, labor_protocol, create_by, create_time, is_deleted
|
||||
from biz_meeting_attendee where id = #{id} and is_deleted = 0
|
||||
</select>
|
||||
<!--
|
||||
当前用户的"待签署"会议列表 (任一未签: handsign 或 labor_protocol 为 NULL)
|
||||
INNER JOIN biz_meeting 取会议名/时间/项目名, 用于 /doctor/home 工作台
|
||||
字段别名 + resultMap 上面的 transient property 接收
|
||||
两表都需 is_deleted=0 过滤: 删除会议后, 参会人的待签署列表也不显示
|
||||
-->
|
||||
<select id="selectUnsignedByUserId" resultType="BizMeetingAttendee" parameterType="Long">
|
||||
select a.id, a.meeting_id, a.user_id, a.handsign, a.labor_protocol, a.create_by, a.create_time,
|
||||
@@ -157,14 +163,16 @@
|
||||
from biz_meeting_attendee a
|
||||
inner join biz_meeting m on m.meeting_id = a.meeting_id
|
||||
where a.user_id = #{userId}
|
||||
and a.is_deleted = 0 and m.is_deleted = 0
|
||||
and (a.handsign is null or a.handsign = '' or a.labor_protocol is null or a.labor_protocol = '')
|
||||
order by m.start_time asc
|
||||
</select>
|
||||
<!--
|
||||
给 BizMeetingController.edit 做差集用: 查该会议已存在的参会人 userId 列表.
|
||||
用于 #5 会议邀请: 仅给"新加入"的 userId 发通知, 已存在的用户不重发.
|
||||
软删的参会人不算"已存在", 新加入时仍触发 #5.
|
||||
-->
|
||||
<select id="selectUserIdsByMeetingId" resultType="java.lang.Long" parameterType="Long">
|
||||
select user_id from biz_meeting_attendee where meeting_id = #{meetingId}
|
||||
select user_id from biz_meeting_attendee where meeting_id = #{meetingId} and is_deleted = 0
|
||||
</select>
|
||||
</mapper>
|
||||
+9
-2
@@ -12,21 +12,23 @@
|
||||
<result property="auditTime" column="audit_time" />
|
||||
<result property="auditType" column="audit_type" />
|
||||
<result property="auditResult" column="audit_result" />
|
||||
<result property="isDeleted" column="is_deleted" />
|
||||
</resultMap>
|
||||
|
||||
<sql id="selectFields">
|
||||
select id, meeting_id, auditor, opinion, current_stage, create_time, audit_time, audit_type, audit_result
|
||||
select id, meeting_id, auditor, opinion, current_stage, create_time, audit_time, audit_type, audit_result, is_deleted
|
||||
from biz_meeting_audit_log
|
||||
</sql>
|
||||
|
||||
<select id="selectByPrimaryKey" resultMap="BizMeetingAuditLogResult" parameterType="Long">
|
||||
<include refid="selectFields"/>
|
||||
where id = #{id}
|
||||
where id = #{id} and is_deleted = 0
|
||||
</select>
|
||||
|
||||
<select id="selectList" resultMap="BizMeetingAuditLogResult" parameterType="BizMeetingAuditLog">
|
||||
<include refid="selectFields"/>
|
||||
<where>
|
||||
is_deleted = 0
|
||||
<if test="meetingId != null">and meeting_id = #{meetingId}</if>
|
||||
<if test="currentStage != null and currentStage != ''">and current_stage = #{currentStage}</if>
|
||||
<if test="auditor != null and auditor != ''">and auditor = #{auditor}</if>
|
||||
@@ -83,4 +85,9 @@
|
||||
</foreach>
|
||||
</delete>
|
||||
|
||||
<!-- 软删除: admin 删除会议时级联置 is_deleted=1 (audit_log 历史保留为后续审计; 但不再随会议显示) -->
|
||||
<update id="softDeleteByMeetingId" parameterType="Long">
|
||||
update biz_meeting_audit_log set is_deleted = 1 where meeting_id = #{meetingId}
|
||||
</update>
|
||||
|
||||
</mapper>
|
||||
+11
-4
@@ -8,33 +8,35 @@
|
||||
<result property="userId" column="user_id" />
|
||||
<result property="assignedBy" column="assigned_by" />
|
||||
<result property="createTime" column="create_time" />
|
||||
<result property="isDeleted" column="is_deleted" />
|
||||
</resultMap>
|
||||
|
||||
<sql id="selectFields">
|
||||
select id, meeting_id, user_id, assigned_by, create_time
|
||||
select id, meeting_id, user_id, assigned_by, create_time, is_deleted
|
||||
from biz_meeting_executor
|
||||
</sql>
|
||||
|
||||
<select id="selectByPrimaryKey" resultMap="BizMeetingExecutorResult" parameterType="Long">
|
||||
<include refid="selectFields"/>
|
||||
where id = #{id}
|
||||
where id = #{id} and is_deleted = 0
|
||||
</select>
|
||||
|
||||
<select id="selectByMeetingId" resultMap="BizMeetingExecutorResult" parameterType="Long">
|
||||
<include refid="selectFields"/>
|
||||
where meeting_id = #{meetingId}
|
||||
where meeting_id = #{meetingId} and is_deleted = 0
|
||||
order by id asc
|
||||
</select>
|
||||
|
||||
<select id="selectByUserId" resultMap="BizMeetingExecutorResult" parameterType="Long">
|
||||
<include refid="selectFields"/>
|
||||
where user_id = #{userId}
|
||||
where user_id = #{userId} and is_deleted = 0
|
||||
order by id desc
|
||||
</select>
|
||||
|
||||
<select id="selectList" resultMap="BizMeetingExecutorResult" parameterType="BizMeetingExecutor">
|
||||
<include refid="selectFields"/>
|
||||
<where>
|
||||
is_deleted = 0
|
||||
<if test="meetingId != null">and meeting_id = #{meetingId}</if>
|
||||
<if test="userId != null">and user_id = #{userId}</if>
|
||||
</where>
|
||||
@@ -82,4 +84,9 @@
|
||||
delete from biz_meeting_executor where meeting_id = #{meetingId}
|
||||
</delete>
|
||||
|
||||
<!-- 软删除: admin 删除会议时级联置 is_deleted=1 -->
|
||||
<update id="softDeleteByMeetingId" parameterType="Long">
|
||||
update biz_meeting_executor set is_deleted = 1 where meeting_id = #{meetingId}
|
||||
</update>
|
||||
|
||||
</mapper>
|
||||
@@ -28,18 +28,20 @@
|
||||
<result property="createTime" column="create_time" />
|
||||
<result property="updateBy" column="update_by" />
|
||||
<result property="updateTime" column="update_time" />
|
||||
<result property="isDeleted" column="is_deleted" />
|
||||
</resultMap>
|
||||
<sql id="selectFields">
|
||||
select meeting_id, business_id, project_id, project_no, project_name, meeting_name, period_no, total_periods, project_form, start_time, end_time, org_name, address, current_stage, supervision_opinion, supervision_by, supervision_time, material_audit_stage, voucher_audit_stage, invitation_url, schedule_url, labor_signed, create_by, create_time, update_by, update_time
|
||||
select meeting_id, business_id, project_id, project_no, project_name, meeting_name, period_no, total_periods, project_form, start_time, end_time, org_name, address, current_stage, supervision_opinion, supervision_by, supervision_time, material_audit_stage, voucher_audit_stage, invitation_url, schedule_url, labor_signed, create_by, create_time, update_by, update_time, is_deleted
|
||||
from biz_meeting
|
||||
</sql>
|
||||
<select id="selectByPrimaryKey" resultMap="BizMeetingResult" parameterType="Long">
|
||||
<include refid="selectFields"/>
|
||||
where meeting_id = #{meetingId}
|
||||
where meeting_id = #{meetingId} and is_deleted = 0
|
||||
</select>
|
||||
<select id="selectList" resultMap="BizMeetingResult" parameterType="BizMeeting">
|
||||
<include refid="selectFields"/>
|
||||
<where>
|
||||
is_deleted = 0
|
||||
<if test="projectNo != null and projectNo != ''">and project_no like concat('%', #{projectNo}, '%')</if>
|
||||
<if test="meetingId != null">and meeting_id = #{meetingId}</if>
|
||||
<if test="meetingName != null and meetingName != ''">and meeting_name like concat('%', #{meetingName}, '%')</if>
|
||||
@@ -48,8 +50,8 @@
|
||||
<if test="currentStage != null and currentStage != ''">and current_stage = #{currentStage}</if>
|
||||
<if test="startTime != null">and start_time >= #{startTime}</if>
|
||||
<if test="endTime != null">and end_time <= #{endTime}</if>
|
||||
<!-- doctor 角色按 user_id 过滤 (走 biz_meeting_attendee 中间表) -->
|
||||
<if test="userId != null">and exists (select 1 from biz_meeting_attendee a where a.meeting_id = biz_meeting.meeting_id and a.user_id = #{userId})</if>
|
||||
<!-- doctor 角色按 user_id 过滤 (走 biz_meeting_attendee 中间表, 同时 attendee 也需 is_deleted=0) -->
|
||||
<if test="userId != null">and exists (select 1 from biz_meeting_attendee a where a.meeting_id = biz_meeting.meeting_id and a.user_id = #{userId} and a.is_deleted = 0)</if>
|
||||
</where>
|
||||
order by meeting_id desc
|
||||
</select>
|
||||
@@ -140,4 +142,12 @@
|
||||
#{meetingId}
|
||||
</foreach>
|
||||
</delete>
|
||||
<!-- 软删除: admin 删除会议时级联调用, 置 is_deleted=1 (不真删) -->
|
||||
<update id="softDeleteByPrimaryKey" parameterType="Long">
|
||||
update biz_meeting set is_deleted = 1 where meeting_id = #{meetingId}
|
||||
</update>
|
||||
<!-- 项目级联删除时用: 列 project_id 下所有 meeting_id, 不带 is_deleted 过滤 (软删 idempotent, 已删的再删一次无副作用) -->
|
||||
<select id="selectIdListByProjectId" resultType="Long" parameterType="Long">
|
||||
select meeting_id from biz_meeting where project_id = #{projectId}
|
||||
</select>
|
||||
</mapper>
|
||||
+9
-3
@@ -12,21 +12,22 @@
|
||||
<result property="amount" column="amount" />
|
||||
<result property="creatorId" column="creator_id" />
|
||||
<result property="createTime" column="create_time" />
|
||||
<result property="isDeleted" column="is_deleted" />
|
||||
</resultMap>
|
||||
|
||||
<sql id="selectFields">
|
||||
select id, meeting_id, material_type, sub_type, file_name, oss_url, amount, creator_id, create_time
|
||||
select id, meeting_id, material_type, sub_type, file_name, oss_url, amount, creator_id, create_time, is_deleted
|
||||
from biz_meeting_material
|
||||
</sql>
|
||||
|
||||
<select id="selectByPrimaryKey" resultMap="BizMeetingMaterialResult" parameterType="Long">
|
||||
<include refid="selectFields"/>
|
||||
where id = #{id}
|
||||
where id = #{id} and is_deleted = 0
|
||||
</select>
|
||||
|
||||
<select id="selectByMeetingId" resultMap="BizMeetingMaterialResult" parameterType="Long">
|
||||
<include refid="selectFields"/>
|
||||
where meeting_id = #{meetingId}
|
||||
where meeting_id = #{meetingId} and is_deleted = 0
|
||||
order by id asc
|
||||
</select>
|
||||
|
||||
@@ -87,4 +88,9 @@
|
||||
delete from biz_meeting_material where meeting_id = #{meetingId}
|
||||
</delete>
|
||||
|
||||
<!-- 软删除: admin 删除会议时级联置 is_deleted=1 -->
|
||||
<update id="softDeleteByMeetingId" parameterType="Long">
|
||||
update biz_meeting_material set is_deleted = 1 where meeting_id = #{meetingId}
|
||||
</update>
|
||||
|
||||
</mapper>
|
||||
+11
-4
@@ -8,33 +8,35 @@
|
||||
<result property="userId" column="user_id" />
|
||||
<result property="assignedBy" column="assigned_by" />
|
||||
<result property="createTime" column="create_time" />
|
||||
<result property="isDeleted" column="is_deleted" />
|
||||
</resultMap>
|
||||
|
||||
<sql id="selectFields">
|
||||
select id, meeting_id, user_id, assigned_by, create_time
|
||||
select id, meeting_id, user_id, assigned_by, create_time, is_deleted
|
||||
from biz_meeting_supervisor
|
||||
</sql>
|
||||
|
||||
<select id="selectByPrimaryKey" resultMap="BizMeetingSupervisorResult" parameterType="Long">
|
||||
<include refid="selectFields"/>
|
||||
where id = #{id}
|
||||
where id = #{id} and is_deleted = 0
|
||||
</select>
|
||||
|
||||
<select id="selectByMeetingId" resultMap="BizMeetingSupervisorResult" parameterType="Long">
|
||||
<include refid="selectFields"/>
|
||||
where meeting_id = #{meetingId}
|
||||
where meeting_id = #{meetingId} and is_deleted = 0
|
||||
order by id asc
|
||||
</select>
|
||||
|
||||
<select id="selectByUserId" resultMap="BizMeetingSupervisorResult" parameterType="Long">
|
||||
<include refid="selectFields"/>
|
||||
where user_id = #{userId}
|
||||
where user_id = #{userId} and is_deleted = 0
|
||||
order by id desc
|
||||
</select>
|
||||
|
||||
<select id="selectList" resultMap="BizMeetingSupervisorResult" parameterType="BizMeetingSupervisor">
|
||||
<include refid="selectFields"/>
|
||||
<where>
|
||||
is_deleted = 0
|
||||
<if test="meetingId != null">and meeting_id = #{meetingId}</if>
|
||||
<if test="userId != null">and user_id = #{userId}</if>
|
||||
</where>
|
||||
@@ -82,4 +84,9 @@
|
||||
delete from biz_meeting_supervisor where meeting_id = #{meetingId}
|
||||
</delete>
|
||||
|
||||
<!-- 软删除: admin 删除会议时级联置 is_deleted=1 -->
|
||||
<update id="softDeleteByMeetingId" parameterType="Long">
|
||||
update biz_meeting_supervisor set is_deleted = 1 where meeting_id = #{meetingId}
|
||||
</update>
|
||||
|
||||
</mapper>
|
||||
+10
-3
@@ -14,29 +14,31 @@
|
||||
<result property="createTime" column="create_time" />
|
||||
<result property="updateBy" column="update_by" />
|
||||
<result property="updateTime" column="update_time" />
|
||||
<result property="isDeleted" column="is_deleted" />
|
||||
</resultMap>
|
||||
|
||||
<sql id="selectFields">
|
||||
select assign_id, project_id, execution_unit_id, exec_user_id,
|
||||
sessions, amount, remark, status,
|
||||
create_by, create_time, update_by, update_time
|
||||
create_by, create_time, update_by, update_time, is_deleted
|
||||
from biz_project_assign
|
||||
</sql>
|
||||
|
||||
<select id="selectByPrimaryKey" resultMap="BizProjectAssignResult" parameterType="String">
|
||||
<include refid="selectFields"/>
|
||||
where assign_id = #{assignId}
|
||||
where assign_id = #{assignId} and is_deleted = 0
|
||||
</select>
|
||||
|
||||
<select id="selectByProjectId" resultMap="BizProjectAssignResult" parameterType="Long">
|
||||
<include refid="selectFields"/>
|
||||
where project_id = #{projectId} and status = '0'
|
||||
where project_id = #{projectId} and status = '0' and is_deleted = 0
|
||||
order by assign_id asc
|
||||
</select>
|
||||
|
||||
<select id="selectList" resultMap="BizProjectAssignResult" parameterType="BizProjectAssign">
|
||||
<include refid="selectFields"/>
|
||||
<where>
|
||||
is_deleted = 0
|
||||
<if test="projectId != null"> and project_id = #{projectId}</if>
|
||||
<if test="executionUnitId != null"> and execution_unit_id = #{executionUnitId}</if>
|
||||
<if test="execUserId != null"> and exec_user_id = #{execUserId}</if>
|
||||
@@ -103,4 +105,9 @@
|
||||
<delete id="deleteByProjectId" parameterType="Long">
|
||||
delete from biz_project_assign where project_id = #{projectId}
|
||||
</delete>
|
||||
|
||||
<!-- 软删除: 项目级联删除时按 project_id 置 is_deleted=1 -->
|
||||
<update id="softDeleteByProjectId" parameterType="Long">
|
||||
update biz_project_assign set is_deleted = 1 where project_id = #{projectId}
|
||||
</update>
|
||||
</mapper>
|
||||
@@ -33,6 +33,7 @@
|
||||
<result property="updateBy" column="update_by" />
|
||||
<result property="updateTime" column="update_time" />
|
||||
<result property="manageFee" column="manage_fee" />
|
||||
<result property="roleLabor" column="role_labor" />
|
||||
<result property="startTime" column="start_time" />
|
||||
<result property="endTime" column="end_time" />
|
||||
<result property="submitDeadlineDays" column="submit_deadline_days" />
|
||||
@@ -41,16 +42,17 @@
|
||||
<result property="invitationUrl" column="invitation_url" />
|
||||
<result property="supportLetterUrl" column="support_letter_url" />
|
||||
<result property="publishUrl" column="publish_url" />
|
||||
<result property="isDeleted" column="is_deleted" />
|
||||
</resultMap>
|
||||
<sql id="selectFields">
|
||||
select p.project_id, p.project_no, p.project_name, p.total_sessions, p.done_sessions, p.todo_sessions, p.total_amount, p.available_amount, p.paid_labor_amount, p.paid_meeting_amount, p.manager_score, p.sponsor_score, p.sponsor_admin_user_name, p.project_form, p.is_finished, p.is_settled, p.sponsor_admin_user_id, p.lead_user_id, p.is_bid_project, p.create_by, p.create_user_id, p.create_time, p.update_by, p.update_time, p.manage_fee, p.start_time, p.end_time, p.submit_deadline_days, p.support_contract_url, p.execute_contract_url, p.invitation_url, p.support_letter_url, p.publish_url,
|
||||
select p.project_id, p.project_no, p.project_name, p.total_sessions, p.done_sessions, p.todo_sessions, p.total_amount, p.available_amount, p.paid_labor_amount, p.paid_meeting_amount, p.manager_score, p.sponsor_score, p.sponsor_admin_user_name, p.project_form, p.is_finished, p.is_settled, p.sponsor_admin_user_id, p.lead_user_id, p.is_bid_project, p.create_by, p.create_user_id, p.create_time, p.update_by, p.update_time, p.manage_fee, p.role_labor, p.start_time, p.end_time, p.submit_deadline_days, p.support_contract_url, p.execute_contract_url, p.invitation_url, p.support_letter_url, p.publish_url, p.is_deleted,
|
||||
o.org_name as sponsor_org_name,
|
||||
lu.user_name as lead_user_name,
|
||||
bp.name as create_user_name,
|
||||
(select group_concat(distinct o2.org_name separator ',')
|
||||
from biz_project_assign bpa
|
||||
join biz_org o2 on o2.org_id = bpa.execution_unit_id and o2.org_type = 'executor'
|
||||
where bpa.project_id = p.project_id) as exec_org_names
|
||||
where bpa.project_id = p.project_id and bpa.is_deleted = 0) as exec_org_names
|
||||
from biz_project p
|
||||
left join biz_org o on o.user_id = p.sponsor_admin_user_id and o.org_type = 'sponsor'
|
||||
left join sys_user lu on lu.user_id = p.lead_user_id
|
||||
@@ -63,17 +65,17 @@
|
||||
p.total_amount, p.available_amount, p.paid_labor_amount, p.paid_meeting_amount,
|
||||
p.manager_score, p.sponsor_score, p.sponsor_admin_user_name, p.project_form, p.is_finished, p.is_settled,
|
||||
p.sponsor_admin_user_id, p.lead_user_id, p.is_bid_project,
|
||||
p.create_by, p.create_user_id, p.create_time, p.update_by, p.update_time, p.manage_fee,
|
||||
p.create_by, p.create_user_id, p.create_time, p.update_by, p.update_time, p.manage_fee, p.role_labor,
|
||||
p.start_time, p.end_time, p.submit_deadline_days,
|
||||
p.support_contract_url, p.execute_contract_url, p.invitation_url, p.support_letter_url,
|
||||
p.publish_url,
|
||||
p.publish_url, p.is_deleted,
|
||||
o.org_name as sponsor_org_name,
|
||||
lu.user_name as lead_user_name,
|
||||
bp.name as create_user_name,
|
||||
(select group_concat(distinct o2.org_name separator ',')
|
||||
from biz_project_assign bpa
|
||||
join biz_org o2 on o2.org_id = bpa.execution_unit_id and o2.org_type = 'executor'
|
||||
where bpa.project_id = p.project_id) as exec_org_names
|
||||
where bpa.project_id = p.project_id and bpa.is_deleted = 0) as exec_org_names
|
||||
from biz_project p
|
||||
left join biz_org o on o.user_id = p.sponsor_admin_user_id and o.org_type = 'sponsor'
|
||||
left join sys_user lu on lu.user_id = p.lead_user_id
|
||||
@@ -81,12 +83,13 @@
|
||||
</sql>
|
||||
<select id="selectByPrimaryKey" resultMap="BizProjectResult" parameterType="Long">
|
||||
<include refid="selectFields"/>
|
||||
where project_id = #{projectId}
|
||||
where project_id = #{projectId} and p.is_deleted = 0
|
||||
</select>
|
||||
<!-- sponsor 专属列表 (走 params.projectIds + LEFT JOIN 当前 login 用户评分) -->
|
||||
<select id="selectSponsorList" resultMap="BizProjectResult" parameterType="BizProject">
|
||||
<include refid="selectFieldsForSponsor"/>
|
||||
<where>
|
||||
p.is_deleted = 0
|
||||
<if test="params.projectIds != null and params.projectIds.size() > 0">
|
||||
and p.project_id in
|
||||
<foreach collection="params.projectIds" item="id" open="(" separator="," close=")">
|
||||
@@ -111,30 +114,33 @@
|
||||
注: executor 角色无评分/聚合分需求, 复用 selectFields (含 sponsor_score / manager_score)
|
||||
-->
|
||||
<select id="selectExecutorList" resultMap="BizProjectResult" parameterType="BizProject">
|
||||
select distinct p.project_id, p.project_no, p.project_name, p.total_sessions, p.done_sessions, p.todo_sessions, p.total_amount, p.available_amount, p.paid_labor_amount, p.paid_meeting_amount, p.manager_score, p.sponsor_score, p.sponsor_admin_user_name, p.project_form, p.is_finished, p.is_settled, p.sponsor_admin_user_id, p.lead_user_id, p.is_bid_project, p.create_by, p.create_user_id, p.create_time, p.update_by, p.update_time, p.manage_fee, p.start_time, p.end_time, p.submit_deadline_days, p.support_contract_url, p.execute_contract_url, p.invitation_url, p.support_letter_url, p.publish_url,
|
||||
select distinct p.project_id, p.project_no, p.project_name, p.total_sessions, p.done_sessions, p.todo_sessions, p.total_amount, p.available_amount, p.paid_labor_amount, p.paid_meeting_amount, p.manager_score, p.sponsor_score, p.sponsor_admin_user_name, p.project_form, p.is_finished, p.is_settled, p.sponsor_admin_user_id, p.lead_user_id, p.is_bid_project, p.create_by, p.create_user_id, p.create_time, p.update_by, p.update_time, p.manage_fee, p.role_labor, p.start_time, p.end_time, p.submit_deadline_days, p.support_contract_url, p.execute_contract_url, p.invitation_url, p.support_letter_url, p.publish_url,
|
||||
o.org_name as sponsor_org_name,
|
||||
lu.user_name as lead_user_name,
|
||||
bp.name as create_user_name,
|
||||
(select group_concat(distinct o2.org_name separator ',')
|
||||
from biz_project_assign bpa2
|
||||
join biz_org o2 on o2.org_id = bpa2.execution_unit_id and o2.org_type = 'executor'
|
||||
where bpa2.project_id = p.project_id) as exec_org_names,
|
||||
where bpa2.project_id = p.project_id and bpa2.is_deleted = 0) as exec_org_names,
|
||||
(select coalesce(sum(bpa3.sessions), 0)
|
||||
from biz_project_assign bpa3
|
||||
where bpa3.project_id = p.project_id
|
||||
and bpa3.is_deleted = 0
|
||||
and (bpa3.exec_user_id = #{params.executorUserId}
|
||||
or bpa3.execution_unit_id = (select org_id from biz_org where user_id = #{params.executorUserId} and org_type = 'executor'))) as assigned_sessions,
|
||||
(select coalesce(sum(bpa4.amount), 0)
|
||||
from biz_project_assign bpa4
|
||||
where bpa4.project_id = p.project_id
|
||||
and bpa4.is_deleted = 0
|
||||
and (bpa4.exec_user_id = #{params.executorUserId}
|
||||
or bpa4.execution_unit_id = (select org_id from biz_org where user_id = #{params.executorUserId} and org_type = 'executor'))) as assigned_amount
|
||||
from biz_project p
|
||||
join biz_project_assign a on a.project_id = p.project_id
|
||||
join biz_project_assign a on a.project_id = p.project_id and a.is_deleted = 0
|
||||
left join biz_org o on o.user_id = p.sponsor_admin_user_id and o.org_type = 'sponsor'
|
||||
left join sys_user lu on lu.user_id = p.lead_user_id
|
||||
left join biz_person bp on bp.user_id = p.create_user_id
|
||||
<where>
|
||||
p.is_deleted = 0
|
||||
(a.exec_user_id = #{params.executorUserId}
|
||||
or a.execution_unit_id = (select org_id from biz_org where user_id = #{params.executorUserId} and org_type = 'executor'))
|
||||
<if test="projectNo != null and projectNo != ''">and p.project_no like concat('%', #{projectNo}, '%')</if>
|
||||
@@ -149,6 +155,7 @@
|
||||
<select id="selectList" resultMap="BizProjectResult" parameterType="BizProject">
|
||||
<include refid="selectFields"/>
|
||||
<where>
|
||||
p.is_deleted = 0
|
||||
<if test="params.projectIds != null and params.projectIds.size() > 0">
|
||||
and project_id in
|
||||
<foreach collection="params.projectIds" item="id" open="(" separator="," close=")">
|
||||
@@ -214,6 +221,7 @@
|
||||
<if test="updateBy != null">update_by,</if>
|
||||
<if test="updateTime != null">update_time,</if>
|
||||
<if test="manageFee != null">manage_fee,</if>
|
||||
<if test="roleLabor != null">role_labor,</if>
|
||||
<if test="startTime != null">start_time,</if>
|
||||
<if test="endTime != null">end_time,</if>
|
||||
<if test="submitDeadlineDays != null">submit_deadline_days,</if>
|
||||
@@ -249,6 +257,7 @@
|
||||
<if test="updateBy != null">#{updateBy},</if>
|
||||
<if test="updateTime != null">#{updateTime},</if>
|
||||
<if test="manageFee != null">#{manageFee},</if>
|
||||
<if test="roleLabor != null">#{roleLabor},</if>
|
||||
<if test="startTime != null">#{startTime},</if>
|
||||
<if test="endTime != null">#{endTime},</if>
|
||||
<if test="submitDeadlineDays != null">#{submitDeadlineDays},</if>
|
||||
@@ -263,6 +272,7 @@
|
||||
update biz_project
|
||||
<trim prefix="SET" suffixOverrides=",">
|
||||
<if test="manageFee != null and manageFee != ''">manage_fee = #{manageFee},</if>
|
||||
<if test="roleLabor != null">role_labor = #{roleLabor},</if>
|
||||
<if test="startTime != null">start_time = #{startTime},</if>
|
||||
<if test="endTime != null">end_time = #{endTime},</if>
|
||||
<if test="submitDeadlineDays != null and submitDeadlineDays != ''">submit_deadline_days = #{submitDeadlineDays},</if>
|
||||
@@ -306,4 +316,12 @@
|
||||
#{projectId}
|
||||
</foreach>
|
||||
</delete>
|
||||
<!-- 软删除: admin/manager 删除项目时调用, 置 is_deleted=1 (不真删, 保留审计追溯) -->
|
||||
<update id="softDeleteByProjectId" parameterType="Long">
|
||||
update biz_project set is_deleted = 1 where project_id = #{projectId}
|
||||
</update>
|
||||
<!-- 级联删除时用: 取 projectNo (给 plan 级联, 不带 is_deleted 过滤, 允许已软删项目重跑 cascade) -->
|
||||
<select id="selectProjectNoById" resultType="String" parameterType="Long">
|
||||
select project_no from biz_project where project_id = #{projectId}
|
||||
</select>
|
||||
</mapper>
|
||||
@@ -24,6 +24,7 @@
|
||||
<result property="createTime" column="create_time" />
|
||||
<result property="updateBy" column="update_by" />
|
||||
<result property="updateTime" column="update_time" />
|
||||
<result property="isDeleted" column="is_deleted" />
|
||||
</resultMap>
|
||||
<sql id="selectFields">
|
||||
select p.plan_id, p.plan_name, p.plan_direction, p.plan_direction_id,
|
||||
@@ -32,20 +33,21 @@
|
||||
p.project_no, p.remark, p.audit_opinion, p.audit_by, p.audit_time, p.submitter_id,
|
||||
COALESCE(bp.name, u.user_name) as submitter_name,
|
||||
proj.project_name as project_name,
|
||||
p.create_by, p.create_time, p.update_by, p.update_time
|
||||
p.create_by, p.create_time, p.update_by, p.update_time, p.is_deleted
|
||||
from biz_project_plan p
|
||||
left join biz_special_plan s on s.id = p.plan_direction_id
|
||||
left join sys_user u on u.user_id = p.submitter_id
|
||||
left join biz_person bp on bp.user_id = u.user_id
|
||||
left join biz_project proj on proj.project_no = p.project_no
|
||||
left join biz_project proj on proj.project_no = p.project_no and proj.is_deleted = 0
|
||||
</sql>
|
||||
<select id="selectByPrimaryKey" resultMap="BizProjectPlanResult" parameterType="String">
|
||||
<include refid="selectFields"/>
|
||||
where p.plan_id = #{planId}
|
||||
where p.plan_id = #{planId} and p.is_deleted = 0
|
||||
</select>
|
||||
<select id="selectList" resultMap="BizProjectPlanResult" parameterType="BizProjectPlan">
|
||||
<include refid="selectFields"/>
|
||||
<where>
|
||||
p.is_deleted = 0
|
||||
<if test="planDirectionId != null"> and p.plan_direction_id = #{planDirectionId}</if>
|
||||
<if test="planCategory != null and planCategory != ''"> and p.plan_category = #{planCategory}</if>
|
||||
<if test="submitterId != null"> and p.submitter_id = #{submitterId}</if>
|
||||
@@ -118,4 +120,8 @@
|
||||
#{planId}
|
||||
</foreach>
|
||||
</delete>
|
||||
<!-- 软删除: 项目级联删除时按 projectNo 置 is_deleted=1 (biz_project_plan 用 project_no 关联项目) -->
|
||||
<update id="softDeleteByProjectNo" parameterType="String">
|
||||
update biz_project_plan set is_deleted = 1 where project_no = #{projectNo}
|
||||
</update>
|
||||
</mapper>
|
||||
@@ -15,18 +15,20 @@
|
||||
<result property="projectId" column="project_id" />
|
||||
<result property="raterId" column="rater_id" />
|
||||
<result property="ratingTime" column="rating_time" />
|
||||
<result property="isDeleted" column="is_deleted" />
|
||||
</resultMap>
|
||||
<sql id="selectFields">
|
||||
select rating_id, project_id, project_no, project_name, rater_id, rater_name, rater_role, quality_score, response_score, cooperation_score, compliance_score, remark, rating_time, create_by, create_time, update_by, update_time
|
||||
select rating_id, project_id, project_no, project_name, rater_id, rater_name, rater_role, quality_score, response_score, cooperation_score, compliance_score, remark, rating_time, create_by, create_time, update_by, update_time, is_deleted
|
||||
from biz_project_rating
|
||||
</sql>
|
||||
<select id="selectByPrimaryKey" resultMap="BizProjectRatingResult" parameterType="String">
|
||||
<include refid="selectFields"/>
|
||||
where rating_id = #{ratingId}
|
||||
where rating_id = #{ratingId} and is_deleted = 0
|
||||
</select>
|
||||
<select id="selectList" resultMap="BizProjectRatingResult" parameterType="BizProjectRating">
|
||||
<include refid="selectFields"/>
|
||||
<where>
|
||||
is_deleted = 0
|
||||
<if test="projectId != null"> and project_id = #{projectId}</if>
|
||||
<if test="raterId != null"> and rater_id = #{raterId}</if>
|
||||
<if test="raterRole != null and raterRole != ''"> and rater_role = #{raterRole}</if>
|
||||
@@ -73,6 +75,11 @@
|
||||
</foreach>
|
||||
</delete>
|
||||
|
||||
<!-- 软删除: 项目级联删除时按 project_id 置 is_deleted=1 -->
|
||||
<update id="softDeleteByProjectId" parameterType="Long">
|
||||
update biz_project_rating set is_deleted = 1 where project_id = #{projectId}
|
||||
</update>
|
||||
|
||||
<!-- 按 (project_id + rater_id + rater_role) upsert 评分 -->
|
||||
<insert id="upsertRating" parameterType="BizProjectRating">
|
||||
INSERT INTO biz_project_rating
|
||||
|
||||
+7
-1
@@ -13,6 +13,7 @@
|
||||
<result property="createTime" column="create_time" />
|
||||
<result property="sponsorUserName" column="sponsor_user_name" />
|
||||
<result property="monitorUserName" column="monitor_user_name" />
|
||||
<result property="isDeleted" column="is_deleted" />
|
||||
</resultMap>
|
||||
|
||||
<insert id="insertAssign" parameterType="BizProjectSponsorAssign" useGeneratedKeys="true" keyProperty="id">
|
||||
@@ -27,6 +28,11 @@
|
||||
delete from biz_project_sponsor_assign where project_id = #{projectId}
|
||||
</delete>
|
||||
|
||||
<!-- 软删除: 项目级联删除时按 project_id (String) 置 is_deleted=1 -->
|
||||
<update id="softDeleteByProjectId" parameterType="String">
|
||||
update biz_project_sponsor_assign set is_deleted = 1 where project_id = #{projectId}
|
||||
</update>
|
||||
|
||||
<select id="selectByProjectId" resultMap="BaseResultMap">
|
||||
SELECT a.*,
|
||||
s.user_name AS sponsor_user_name,
|
||||
@@ -34,7 +40,7 @@
|
||||
FROM biz_project_sponsor_assign a
|
||||
LEFT JOIN sys_user s ON a.sponsor_user_id = s.user_id
|
||||
LEFT JOIN sys_user m ON a.monitor_user_id = m.user_id
|
||||
WHERE a.project_id = #{projectId}
|
||||
WHERE a.project_id = #{projectId} and a.is_deleted = 0
|
||||
ORDER BY a.create_time DESC
|
||||
</select>
|
||||
</mapper>
|
||||
Reference in New Issue
Block a user