|
|
@@ -51,6 +51,22 @@ const (
|
|
|
callCancelRecharge = "CALL sp_user_expense_cancel_recharge_activity(?, ?, ?, ?, ?, ?, ?)"
|
|
|
// SP9 自定义退费:(userid, schoolid, campusid, money, requestid, remark, createUserid)
|
|
|
callCustomRefund = "CALL sp_user_expense_custom_refund(?, ?, ?, ?, ?, ?, ?)"
|
|
|
+
|
|
|
+ // ---- 活动链 7 支(批 3a)。参数顺序一律照 dump 的参数列表,不照调用方 ---- //
|
|
|
+ // 报名:(userid, activityid, status, recommendUserid, createUserid) —— 5 参,SELECT success
|
|
|
+ callSignedAdd = "CALL sp_courses_activity_signed_add(?, ?, ?, ?, ?)"
|
|
|
+ // 取消报名:(userid, activityid) —— 2 参,SELECT success
|
|
|
+ callSignedCancel = "CALL sp_courses_activity_signed_cancel(?, ?)"
|
|
|
+ // 消耗充值赠送额度:(userid, activityid, stuCourseId, amount, memo) —— **没有结果集**
|
|
|
+ callUseActivityRecharge = "CALL sp_courses_activity_use_activity_recharge(?, ?, ?, ?, ?)"
|
|
|
+ // 冲回充值赠送额度:(stuCourseId, amount, memo) —— **没有 userid**,没有结果集
|
|
|
+ callRefundActivityRecharge = "CALL sp_courses_activity_refund_activity_recharge(?, ?, ?)"
|
|
|
+ // 使用赠送额度:(userid, activityid, stuCourseId, amount, memo) —— 没有结果集
|
|
|
+ callUserDiscountUse = "CALL sp_courses_activity_user_discount_use(?, ?, ?, ?, ?)"
|
|
|
+ // 退回赠送额度:(stuCourseId, amount, memo) —— **没有 userid**,3 参
|
|
|
+ callUserDiscountRefund = "CALL sp_courses_activity_user_discount_refund(?, ?, ?)"
|
|
|
+ // 按活动退回:(userid, activityid, amount, memo) —— 4 参
|
|
|
+ callUserDiscountRefundByActivity = "CALL sp_courses_activity_user_discount_refund_user_activity(?, ?, ?, ?)"
|
|
|
)
|
|
|
|
|
|
// returnsResultSet 标记"该 SP 会 SELECT 出结果集"。
|
|
|
@@ -60,8 +76,19 @@ const (
|
|
|
// 这类 SP 不能用 `Exec` 调 —— 必须把结果集读干净,否则连接上会留下未消费的结果集。
|
|
|
// 而且**结果集本身是契约**:`success=0` 是"成功返回但业务失败",只看 error 会漏掉。
|
|
|
func returnsResultSet(op Op) bool {
|
|
|
+ switch op {
|
|
|
// SP8 与 SP9 的每条路径都以 `SELECT ...` 结尾(成功 `success,msg`;失败也 `success,msg`)。
|
|
|
- return op == OpCancelRechargeActivity || op == OpCustomRefund
|
|
|
+ case OpCancelRechargeActivity, OpCustomRefund:
|
|
|
+ return true
|
|
|
+ // 活动链只有这两支有结果集(正文末尾 `SELECT success;`)。其余 5 支是纯写。
|
|
|
+ //
|
|
|
+ // ⚠ 判据是**正文末尾有没有 SELECT**,不是"名字像不像查询":
|
|
|
+ // `use_activity_recharge` / `refund_activity_recharge` 都读 cursor,但**没有** SELECT 输出;
|
|
|
+ // 把它们的调用走 `Rows()` 会拿到空结果集,`Success` 永远是 false —— 那会让 4 条 case 假红。
|
|
|
+ case OpSignedAdd, OpSignedCancel:
|
|
|
+ return true
|
|
|
+ }
|
|
|
+ return false
|
|
|
}
|
|
|
|
|
|
// callArgs 按 Op 组出 CALL 的实参(顺序与 dump 一致)。
|
|
|
@@ -98,6 +125,21 @@ func callArgs(c Case) []any {
|
|
|
// SP9:(userid, schoolid, campusid, money, requestid, remark, createUserid) —— **有 schoolid**
|
|
|
return []any{c.LegacyUserID, c.InstitutionID, c.CampusID, moneyYuan,
|
|
|
c.RequestID, c.Remark, c.LegacyUserID}
|
|
|
+ case OpSignedAdd:
|
|
|
+ // SP9a:(userid, activityid, status, recommendUserid, createUserid)
|
|
|
+ return []any{c.LegacyUserID, c.ActivityID, c.SignStatus, c.RecommendUserID, c.LegacyUserID}
|
|
|
+ case OpSignedCancel:
|
|
|
+ return []any{c.LegacyUserID, c.ActivityID}
|
|
|
+ case OpUseActivityRecharge:
|
|
|
+ return []any{c.LegacyUserID, c.ActivityID, c.StuCourseID, moneyYuan, c.Remark}
|
|
|
+ case OpRefundActivityRecharge:
|
|
|
+ return []any{c.StuCourseID, moneyYuan, c.Remark}
|
|
|
+ case OpUserDiscountUse:
|
|
|
+ return []any{c.LegacyUserID, c.ActivityID, c.StuCourseID, moneyYuan, c.Remark}
|
|
|
+ case OpUserDiscountRefund:
|
|
|
+ return []any{c.StuCourseID, moneyYuan, c.Remark}
|
|
|
+ case OpUserDiscountRefundByActivity:
|
|
|
+ return []any{c.LegacyUserID, c.ActivityID, moneyYuan, c.Remark}
|
|
|
default:
|
|
|
return []any{c.LegacyUserID, c.InstitutionID, c.CampusID, moneyYuan,
|
|
|
c.Type, c.RequestID, c.Remark, c.LegacyUserID}
|
|
|
@@ -125,6 +167,20 @@ func callStmt(op Op) string {
|
|
|
return callCancelRecharge
|
|
|
case OpCustomRefund:
|
|
|
return callCustomRefund
|
|
|
+ case OpSignedAdd:
|
|
|
+ return callSignedAdd
|
|
|
+ case OpSignedCancel:
|
|
|
+ return callSignedCancel
|
|
|
+ case OpUseActivityRecharge:
|
|
|
+ return callUseActivityRecharge
|
|
|
+ case OpRefundActivityRecharge:
|
|
|
+ return callRefundActivityRecharge
|
|
|
+ case OpUserDiscountUse:
|
|
|
+ return callUserDiscountUse
|
|
|
+ case OpUserDiscountRefund:
|
|
|
+ return callUserDiscountRefund
|
|
|
+ case OpUserDiscountRefundByActivity:
|
|
|
+ return callUserDiscountRefundByActivity
|
|
|
default:
|
|
|
return callExpenditure
|
|
|
}
|