16 Commits

Author SHA1 Message Date
64824e6f74 保存进度! 2023-09-25 16:23:26 +08:00
099a1e65f6 保存进度! 2023-09-24 16:34:31 +08:00
a9b30dd293 保存进度! 2023-09-24 09:01:06 +08:00
f61f623f73 保存进度! 2023-09-24 01:17:54 +08:00
b03056d783 保存进度! 2023-09-22 19:22:04 +08:00
bcef8b4994 保存进度! 2023-09-21 22:58:01 +08:00
b91c7d281e 保存进度! 2023-09-21 18:36:31 +08:00
1d554056ac 保存进度! 2023-09-21 16:56:34 +08:00
0d0b61db3c 保存进度! 2023-09-19 19:00:20 +08:00
8fd5ee4904 保存进度! 2023-09-19 18:59:39 +08:00
fa4f211ac2 保存进度! 2023-09-18 18:32:21 +08:00
992606d77a 保存进度! 2023-09-15 18:05:03 +08:00
712aabfb99 保存进度! 2023-09-14 18:42:23 +08:00
9878abb946 保存进度! 2023-09-14 00:42:03 +08:00
7d0112b483 保存进度! 2023-09-13 22:54:43 +08:00
58f60b9eaf 保存进度! 2023-09-13 22:48:35 +08:00
26 changed files with 3511 additions and 2156 deletions

View File

@@ -0,0 +1,99 @@
CREATE OR REPLACE PACKAGE telsaler_reward_pkg IS
-- Author : WANGWEI-202
-- Created : 2023/9/13 10:05:43
-- Purpose : <20><>ϯ<EFBFBD><CFAF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>صİ<D8B5>
PROCEDURE add_telsaler_reward
(
a_reward_index VARCHAR2,
a_telsaler_name VARCHAR2
);
PROCEDURE update_telsaler_reward
(
a_rec_id INTEGER,
a_telsaler_name VARCHAR2,
a_reward_index VARCHAR2
);
PROCEDURE delete_telsaler_reward(a_rec_id INTEGER);
END telsaler_reward_pkg;
/
CREATE OR REPLACE PACKAGE BODY telsaler_reward_pkg IS
PROCEDURE add_telsaler_reward
(
a_reward_index VARCHAR2,
a_telsaler_name VARCHAR2
) IS
BEGIN
BEGIN
INSERT INTO telsaler_reward
(reward_index,
telsaler_name)
VALUES
(a_reward_index,
a_telsaler_name);
EXCEPTION
WHEN OTHERS THEN
IF SQLCODE = -00001
THEN
raise_application_error(-20001,
<>ظ<EFBFBD>');
END IF;
END;
COMMIT;
END;
PROCEDURE update_telsaler_reward
(
a_rec_id INTEGER,
a_telsaler_name VARCHAR2,
a_reward_index VARCHAR2
) IS
BEGIN
/*MERGE INTO telsaler_reward r
USING (SELECT COUNT(*) COUNT
FROM telsaler_reward
WHERE rec_id = a_rec_id) a
ON (a.count > 0)
WHEN MATCHED THEN
UPDATE
SET r.reward_index = a_reward_index,
r.telsaler_name = a_telsaler_name
WHERE r.rec_id = a_rec_id
WHEN NOT MATCHED THEN
INSERT
(reward_index,
telsaler_name)
VALUES
(a_reward_index,
a_telsaler_name);*/
BEGIN
UPDATE telsaler_reward r
SET r.reward_index = a_reward_index,
r.telsaler_name = a_telsaler_name
WHERE r.rec_id = a_rec_id;
EXCEPTION
WHEN no_data_found THEN
raise_application_error(-20002,
'<27>޴˼<DEB4>¼<EFBFBD><C2BC>');
END;
COMMIT;
END;
PROCEDURE delete_telsaler_reward(a_rec_id INTEGER) IS
BEGIN
DELETE telsaler_reward
WHERE rec_id = a_rec_id;
COMMIT;
END;
BEGIN
NULL;
END telsaler_reward_pkg;
/

View File

@@ -0,0 +1,259 @@
with aa1 as (select
to_char(t.signature_date,'yyyy-mm-dd') 签发日期
,t.policy_no 保单号_车险
,qt.t_cre TID
,qt.b_cre BTID
,V.PLATE_NUMBER 车牌号
from
idst0.auto_agreement_request_t t
left join idst0.auto_agreement_t e on e.policy_no = t.policy_no
left join idst0.motorised_vehicle_t v on v.policy_no = e.policy_no
left join idst0.auto_premium_t pt on pt.policy_no = t.policy_no and pt.endorsement_no = t.endorsement_no
left join ywglxt.w_dxbd_i i on e.policy_no = i.bdh
left join idst0.rydm_t xx on xx.staff_code = nvl(i.zhjywy,e.operator_code)
left join idst0.ks_t y on y.section_office_code = nvl(xx.section_office_code,e.section_office_code)
left join idst0.bm_t z on z.department_code = nvl(xx.department_code,e.department_code)
--left join ywglxt.q_auto_agreement _extend_t qe on qe.policy_no = e.policy_no
left join ywglxt.q_auto_agreement_t qt on qt.policy_no = e.policy_no
left join dc_tb_jc_c_tag cl on cl.保单号 = e.policy_no
--left join dc_yangg_basecode_teams fg on fg.bm = z.department_name and fg.ks = y.section_office_name
left join idst0.auto_agreement_extend_t et on et.policy_no = e.policy_no
left join idst0.t_sell_policy_autobase_t zx on zx.policy_no = e.policy_no
left join dc_YZH_ZXYS YS ON YS.坐席工号= nvlzx.workerno,et.telpartnercode)
where
t.signature_date >= sysdate-365
AND t.signature_date < sysdate+90
and e.policy_status = '1' --条件:保单有效
--AND V.PLATE_NUMBER='LVHRM1810F5024561'
and qt.tflag = '0' --条件:类型为个人
--AND qt.t_cre='440881198901110216'
and t.endorsement_no='无'
and qt.usage_xm = '家庭自用车'
and e.planned_end_date - e.inception_date >= 360 --条件:保单周期
and et.LICENSEOWNERCERTIFICATETYPE not in ('17','15','13')
)
,DD2 AS
(SELECT AA1.签发日期,AA1.TID 证件号,AA1.保单号_车险 FROM AA1
union
SELECT AA1.签发日期,AA1.BTID 证件号,AA1.保单号_车险 FROM AA1 )
--select * from dd2
,dd3 AS (SELECT DISTINCT DD2.证件号,dd2.保单号_车险,
case when DD2.证件号 is not null then row_number() over (partition by DD2.证件号 order by DD2.签发日期 desc) else 1 end Crow_no1 FROM DD2 )
,dd4 AS (SELECT DISTINCT AA1.车牌号,AA1.保单号_车险,
case when AA1.车牌号 is not null then row_number() over (partition by AA1.车牌号 order by AA1.签发日期 desc) else 1 end Crow_no2 FROM aa1 )
--,dd as (
--select dd2.*
--,case when DD2.TID is not null then row_number() over (partition by DD2.TID order by DD2.签单日期 desc) else 1 end Crow_no
--from dd2)
,dd5 AS (SELECT DD3.证件号,dd3.保单号_车险 from dd3 where dd3.Crow_no1='1')
,dd6 AS (SELECT DD4.车牌号,dd4.保单号_车险 from dd4 where dd4.Crow_no2='1')
,bb as (
select
'非车' 条线名称
,to_char(q.signature_date,'yyyy-mm-dd') 签发日期
,nvl(dd5.保单号_车险,dd6.保单号_车险) 保单号_车险
,q.policy_no 保单号_非车
--,q.endorsement_no pdh
,qna.t_cre tid
,qna.B_cre Btid
,(case when nvl(dd5.保单号_车险,dd6.保单号_车险)IS NOT NULL THEN '是' else '' end )是否分公司融合
--,'' 客户数_分公司
--,qna.tbrmc 投保人名称
,JYX.LICENSE_PLATE_NO 车牌号
,round((pt.premium_amount-nvl(pt.taxamount,0))*c.rate/100,2) 车险签发保费
,x.staff_name 经办姓名
,X.STAFF_CODE 经办代码
,y.section_office_name 科室名称
,z.department_name 部门
,(case when nvlzx.workerno,et.telpartnercode) = 'DX001' and x.staff_name like '%建发凯迪%' then '林伟华'
when nvlzx.workerno,et.telpartnercode) = 'DX001' and x.staff_name not like '%建发凯迪%' then '其他'
when x.staff_name like '%建发汽车续保%' then '林伟华'
when x.staff_name like '%建发凯通泰成续保%' and e.planned_end_date < to_date('2023-09-30 00:00:00', 'yyyy-mm-dd hh24:mi:ss') then '李定定'
when x.staff_name like '%建发凯通泰成续保%' then '周阳'
else to_char(ys.坐席姓名) END) 坐席名称
,nvlzx.workerno,et.telpartnercode) 坐席代码
,YS.团队 坐席团队
,cl.管理渠道21版 管理渠道
,cl.新转续 ntr
,(select AUTO_NAME from idst0.auto_store_t where auto_code = qna.AGENT_CODE) dldmc
,(case when gk.product_name like '%驾乘%' or gk.product_code in'23XZ9800','23YZ9800') THEN '1' ELSE '' END) 是否驾乘
,'' 车商代码
,'' 品牌
,qna.life_salesperson 寿险代码
,nvl(ca.plan_name,ra.plan_name) 产品方案名称
,E.INCEPTION_DATE 起保日期
--,QNA.PRODUCT_CODE 险种代码
FROM
idst0.nonauto_agreement_request_t q
left join idst0.nonauto_agreement_t e on e.policy_no = q.policy_no
left join idst0.nonauto_premium_t pt on pt.endorsement_no = q.endorsement_no and pt.policy_no = q.policy_no
--left join idst0.reinsurance_t r on r.reinsurance_policy_no = e.policy_no
left join idst0.exrate_month_t c on pt.currency_code = c.bzh
and to_char(q.signature_date,'YYYY') = c.theyear and to_char(q.signature_date,'fmmm') = c.themonth
left join idst0.rydm_t x on x.staff_code = e.operator_code
left join idst0.ks_t y on y.section_office_code = x.section_office_code
left join idst0.bm_t z on z.department_code = x.department_code
left join ywglxt.q_nonauto_agreement_t qna on qna.policy_no = q.policy_no
left join dc_yangg_gkxzh gk on gk.product_code = e.product_code --分散型险种
left join dd5 on dd5.证件号 = qna.t_cre
left join IDst0.nonauto_vehicle_info_t JYX ON JYX.POLICY_NO=q.policy_no
left join dd6 on dd6.车牌号 = JYX.LICENSE_PLATE_NO
left join idst0.auto_agreement_extend_t et on et.policy_no = e.policy_no
left join idst0.T_SELL_POLICY_PROPERTY_INFO_T zx on zx.policy_no = e.policy_no
left join dc_YZH_ZXYS YS ON YS.坐席工号= nvlzx.workerno,et.telpartnercode)
left join dc_tb_jc_c_tag cl on cl.保单号 = nvl(dd5.保单号_车险,dd6.保单号_车险)
left join idst0.ryx_agreement_t ra on ra.policy_no = e.policy_no
left join idst0.cibs_agreement_t ca on ca.policy_no = e.policy_no
--left join (SELECT CX.POLICY_NO,CX.LIFE_SALESPERSON,CX.VEHICLE_BRAND FROM ywglxt.q_Auto_Agreement_t CX) cx on cx.policy_no=rmi.保单号_车险
--left join ywglxt.v_xzh xzh on xzh.product_code = e.product_code
--left join ywglxt.q_auto_agreement_t qtt on qtt.plate_number = JYX.LICENSE_PLATE_NO 剔除车非不是家用车
where
qna.tflag = '0'
and (case when q.endorsement_no !='无' and round((pt.premium_amount-nvl(pt.taxamount,0))*c.rate/100,2) !=0 then '是' end) is null
--and q.endorsement_no = '无'
and nvl(dd5.证件号,dd6.车牌号) is not null
and q.signature_date >= sysdate-5
AND q.signature_date < sysdate
--AND qna.t_cre='350623198706075199'
--and (case when JYX.LICENSE_PLATE_NO is not null and qtt.usage_xm='家庭自用车' then '是' when JYX.LICENSE_PLATE_NO is null then '是' end )IS NOT NULL 剔除车非不是家用车
and e.policy_status = '1'
and gk.product_code is not null
and (e.product_code like '2%' or e.product_code like '1106%' --意健 --责任
or e.product_code like '1107%' or e.product_code like '1108%' or e.product_code like '1307%' or e.product_code like '1304A400%' --家财
)
--AND qna.policy_no='AXIMQDI30V23FP0062SH'
)
,BB3 AS (SELECT bb.tid ,COUNT(*) 次数 from bb group by bb.tid )
,bb2 as (
select bb.*
,case when bb.是否驾乘 ='1' then row_number() over (partition by bb.tid,bb.是否驾乘 order by bb.签发日期 desc) else 1 end JCrow_no
,case when bb.tid IS not NULL then row_number() over (partition by bb.tid order by bb.签发日期 desc) else 1 end CFrow_no
,BB3.次数
from BB
LEFT JOIN BB3 ON BB3.tid =bb.tid
)
,BB4 AS(select bb2.*
,(CASE when bb2.次数='1' THEN '1'
WHEN bb2.次数 = '2' and BB2.是否驾乘 ='1' and jcROW_NO ='1' then '1'
-- WHEN bb2.次数 = '2' and BB2.是否驾乘 is null and CFROW_NO ='2' then '0'
WHEN bb2.次数 = '2' and BB2.是否驾乘 is null and CFROW_NO ='1' then '1'
WHEN bb2.次数 > '2' AND cfROW_NO ='1' then '1' --BB2.是否驾乘 ='1' and
-- WHEN bb2.次数 > '2' AND BB2.是否驾乘 IS NULL THEN '1'--AND CFROW_NO ='1'
ELSE '0' END ) 客户数
from bb2
/*,ff AS(
SELECT
to_char(rmi.签发日期,'yyyy-mm-dd') 签发日期
,RMI.保单号_车险
,rmi.保单号_非车
,rmi.车险签发保费
,RMI.条线名称
,RMI.是否分公司融合
,RMI.客户数_分公司
,cl.经办姓名
,CL.科室名称
,CL.部门
,(case when nvlzx.workerno,et.telpartnercode) = 'DX001' and cl.经办姓名 like '%建发凯迪%' then '林伟华'
when nvl(zx.workerno,et.telpartnercode) = 'DX001' and cl.经办姓名 not like '%建发凯迪%' then '其他'
else to_char(ys.坐席姓名) END) 坐席名称
,YS.团队 坐席团队
,cl.管理渠道21版 管理渠道
,cl.新转续 ntr
,(select AUTO_NAME from idst0.auto_store_t where auto_code = nvl(e.selling_shop_code,e.tel_sale_4s_code)) dldmc
FROM DC_CF_RMI rmi
left join idst0.auto_agreement_t e on e.policy_no = rmi.保单号_车险
left join dc_tb_jc_c_tag cl on cl.保单号 = e.policy_no
--left join dc_yangg_basecode_teams fg on fg.bm = z.department_name and fg.ks = y.section_office_name
left join idst0.auto_agreement_extend_t et on et.policy_no = e.policy_no
left join idst0.t_sell_policy_autobase_t zx on zx.policy_no = e.policy_no
left join dc_YZH_ZXYS YS ON YS.坐席工号= nvlzx.workerno,et.telpartnercode))*/
,aa as (select
'车险' 条线名称
,to_char(t.signature_date,'yyyy-mm-dd') 签发日期
,t.policy_no 保单号_车险
--,t.endorsement_no pdh
,'' 保单号_非车
,'' 是否分公司融合
,(case when qt.bd_type in ('1','2') THEN '1'
when qt.bd_type = '3' and qt.xzh_xm='商业险' then '1' ELSE '0'END )客户数_分公司
--,decode(qT.bd_type,'1','单交强','2','单商业','3','交商共保','其它') 保单类型
,qt.t_cre TID
,qt.b_cre BTID
--,QT.TBRMC 投保人名称
,V.PLATE_NUMBER 车牌号
,pt.premium_amount - nvl(pt.tax_amount,0) 车险签发保费
,xx.staff_name 经办姓名
,XX.STAFF_CODE 经办代码
,y.section_office_name 科室名称
,z.department_name 部门
,(case when nvlzx.workerno,et.telpartnercode) = 'DX001' and xx.staff_name like '%建发凯迪%' then '林伟华'
when nvl(zx.workerno,et.telpartnercode) = 'DX001' and xx.staff_name not like '%建发凯迪%' then '其他'
when xx.staff_name like '%建发汽车续保%' then '林伟华'
when xx.staff_name like '%建发凯通泰成续保%' and e.planned_end_date < to_date('2023-09-30 00:00:00', 'yyyy-mm-dd hh24:mi:ss') then '李定定'
when xx.staff_name like '%建发凯通泰成续保%' then '周阳'
else to_char(ys.坐席姓名) END) 坐席名称
,nvl(zx.workerno,et.telpartnercode) 坐席代码
,YS.团队 坐席团队
,cl.管理渠道21版 管理渠道
,cl.新转续 ntr
,(select AUTO_NAME from idst0.auto_store_t where auto_code = nvl(e.selling_shop_code,e.tel_sale_4s_code)) dldmc
,e.selling_shop_code 车商代码
,qt.life_salesperson 寿险代码
,QT.VEHICLE_BRAND 品牌
,'' 产品方案名称
,E.INCEPTION_DATE 起保日期
--,QT.PRODUCT_CODE 险种代码
from
idst0.auto_agreement_request_t t
left join idst0.auto_agreement_t e on e.policy_no = t.policy_no
left join idst0.motorised_vehicle_t v on v.policy_no = e.policy_no
left join idst0.auto_premium_t pt on pt.policy_no = t.policy_no and pt.endorsement_no = t.endorsement_no
left join ywglxt.w_dxbd_i i on e.policy_no = i.bdh
left join idst0.rydm_t xx on xx.staff_code = nvl(i.zhjywy,e.operator_code)
left join idst0.ks_t y on y.section_office_code = nvl(xx.section_office_code,e.section_office_code)
left join idst0.bm_t z on z.department_code = nvl(xx.department_code,e.department_code)
--left join ywglxt.q_auto_agreement _extend_t qe on qe.policy_no = e.policy_no
left join ywglxt.q_auto_agreement_t qt on qt.policy_no = e.policy_no
left join dc_tb_jc_c_tag cl on cl.保单号 = e.policy_no
--left join dc_yangg_basecode_teams fg on fg.bm = z.department_name and fg.ks = y.section_office_name
left join idst0.auto_agreement_extend_t et on et.policy_no = e.policy_no
left join idst0.t_sell_policy_autobase_t zx on zx.policy_no = e.policy_no
left join dc_YZH_ZXYS YS ON YS.坐席工号= nvlzx.workerno,et.telpartnercode)
where
t.signature_date >= sysdate-5
AND t.signature_date < sysdate
AND e.policy_status = '1' --条件:保单有效
--AND qt.t_cre='350623198706075199'
and qt.tflag = '0' --条件:类型为个人
and t.endorsement_no='无'
and qt.usage_xm = '家庭自用车'
and e.planned_end_date - e.inception_date >= 360 --条件:保单周期
and et.LICENSEOWNERCERTIFICATETYPE not in ('17','15','13')
--AND e.policy_no='AXIMC01Y2023B015820W'
)
select "签发日期","保单号_车险","保单号_非车","条线名称","是否分公司融合","客户数","车险签发保费","经办姓名","经办代码","科室名称","部门","坐席名称","坐席代码","坐席团队","管理渠道","NTR","DLDMC","车商代码","寿险代码","品牌","产品方案名称","起保日期","车牌号"
from bb4
UNION
select "签发日期","保单号_车险","保单号_非车","条线名称","是否分公司融合","客户数_分公司","车险签发保费","经办姓名","经办代码","科室名称","部门","坐席名称","坐席代码","坐席团队","管理渠道","NTR","DLDMC","车商代码","寿险代码","品牌","产品方案名称","起保日期","车牌号"
from AA
--UNION
--Select "签发日期","保单号_车险","保单号_非车","条线名称","是否分公司融合","客户数_分公司","车险签发保费","经办姓名","科室名称","部门","坐席名称","坐席团队","管理渠道","NTR","DLDMC"
--from ff

File diff suppressed because it is too large Load Diff

View File

@@ -9,32 +9,32 @@
"preview": "vite preview" "preview": "vite preview"
}, },
"dependencies": { "dependencies": {
"@babel/eslint-parser": "^7.22.15",
"@element-plus/icons-vue": "^2.1.0", "@element-plus/icons-vue": "^2.1.0",
"@rushstack/eslint-patch": "^1.3.3",
"@vue/eslint-config-typescript": "^11.0.3",
"babel": "^6.23.0",
"echarts": "^5.4.3", "echarts": "^5.4.3",
"element-plus": "^2.3.12", "element-plus": "^2.3.14",
"mitt": "^3.0.1",
"moment": "^2.29.4", "moment": "^2.29.4",
"sass-loader": "^13.3.2", "sass-loader": "^13.3.2",
"ts-node": "^10.9.1",
"vue": "^3.3.4", "vue": "^3.3.4",
"vue-router": "^4.2.4", "vue-router": "^4.2.5",
"vuex": "^4.1.0" "vuex": "^4.1.0"
}, },
"devDependencies": { "devDependencies": {
"@babel/eslint-parser": "^7.22.15", "@babel/eslint-parser": "^7.22.15",
"@typescript-eslint/eslint-plugin": "~6.6.0", "@rushstack/eslint-patch": "^1.4.0",
"@typescript-eslint/eslint-plugin": "^6.7.2",
"@vitejs/plugin-vue": "^4.3.4", "@vitejs/plugin-vue": "^4.3.4",
"@vue/cli-plugin-eslint": "^5.0.8", "@vue/cli-plugin-eslint": "^5.0.8",
"axios": "~1.5.0", "@vue/eslint-config-typescript": "^12.0.0",
"axios": "^1.5.0",
"babel": "^6.23.0",
"eslint-config-recommended": "^4.1.0", "eslint-config-recommended": "^4.1.0",
"eslint-config-standard-with-typescript": "^39.0.0", "eslint-config-standard-with-typescript": "^39.1.0",
"eslint-plugin-vue": "^9.17.0", "eslint-plugin-vue": "^9.17.0",
"node-sass": "^9.0.0", "node-sass": "^9.0.0",
"sass": "^1.66.1", "sass": "^1.68.0",
"style-loader": "^3.3.3", "style-loader": "^3.3.3",
"ts-node": "^10.9.1",
"vue-eslint-parser": "^9.3.1" "vue-eslint-parser": "^9.3.1"
} }
} }

View File

@@ -15,7 +15,7 @@
alt="" alt=""
> >
<div class="title-wrapper"> <div class="title-wrapper">
<span>"消7灭6"突围战</span> <span>"消8灭70"突围战</span>
<span>{{ props.month }}月入营坐席</span> <span>{{ props.month }}月入营坐席</span>
</div> </div>
</div> </div>

View File

@@ -12,7 +12,7 @@
<span class="company-name">CPIC</span> <span class="company-name">CPIC</span>
<div class="version-wrapper"> <div class="version-wrapper">
<span>桌面霸屏后台管理</span> <span>桌面霸屏后台管理</span>
<span>Build-202303251257</span> <span>Build-20230915</span>
</div> </div>
<div class="buttons-wrapper"> <div class="buttons-wrapper">
<component <component
@@ -35,7 +35,7 @@ export default {
/** /**
* 退出登录 * 退出登录
*/ */
const Logout = ():void => const Logout = (): void =>
{ {
ElMessageBox.confirm( ElMessageBox.confirm(
"是否要退出系统?", "是否要退出系统?",
@@ -46,11 +46,12 @@ export default {
type: "warning", type: "warning",
} }
) )
.then(() => .then((): void =>
{ {
// debugger; // debugger;
logout(); logout();
}); })
.catch((): void => {});
}; };
return { Logout, }; return { Logout, };
@@ -94,7 +95,7 @@ export default {
size: 0.5rem; size: 0.5rem;
} }
> *+* { >*+* {
margin-top: 1px; margin-top: 1px;
} }
} }

View File

@@ -71,13 +71,22 @@ const routes = [
component: ()=> import( "../views/StaffManagement.vue" ), component: ()=> import( "../views/StaffManagement.vue" ),
}, },
{ {
path:"/archievement_data", path: "/data_management",
name:"ArchievementDataManagement", name: "DataManagement",
meta: { meta: {
title:"数据管理", title: "数据管理",
icon: "document", icon: "document",
}, },
component: ()=> import( "../views/DataManagement.vue" ), component: ()=> import( "../views/DataManagement.vue" ),
},
{
path:"/reward_management",
name:"RewardManagement",
meta: {
title:"奖励管理",
icon: "document",
},
component: ()=> import( "../views/RewardManagement.vue" ),
}, },
], ],
}, },

View File

@@ -0,0 +1,12 @@
/*
* @Author: Kane
* @Date: 2023-09-14 00:22:04
* @LastEditors: Kane
* @FilePath: /task_schedule/src/utils/api/eventBus.ts
* @Description: 消息总线。
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
import mitt from "mitt";
export default mitt();

View File

@@ -7,7 +7,7 @@
* *
* Copyright (c) ${2022} by Kane, All Rights Reserved. * Copyright (c) ${2022} by Kane, All Rights Reserved.
*/ */
export const API_URL = { const API_URL = {
// URL_LOGIN: import.meta.env.VITE_URL_LOGIN, // URL_LOGIN: import.meta.env.VITE_URL_LOGIN,
// URL_LOGIN: "http://222.76.244.118:11101/admin-system/account/p13_account_check", // URL_LOGIN: "http://222.76.244.118:11101/admin-system/account/p13_account_check",
URL_LOGIN: "http://10.39.0.41:8081/admin-system/account/p13_account_check", URL_LOGIN: "http://10.39.0.41:8081/admin-system/account/p13_account_check",
@@ -25,13 +25,26 @@ export const API_URL = {
URL_RANKINGLIST: "http://10.39.0.41:8081/desktop_archievement_backend/archievement/query_ranking_list.do", URL_RANKINGLIST: "http://10.39.0.41:8081/desktop_archievement_backend/archievement/query_ranking_list.do",
// 坐席业绩查询 // 坐席业绩查询
// URL_CALLER_ARCHIEVEMENT: "http://222.76.244.118:11101/desktop_archievement_backend/archievement/query_caller_archievement.do",
URL_CALLER_ARCHIEVEMENT: "http://10.39.0.41:8081/desktop_archievement_backend/archievement/query_caller_archievement.do", URL_CALLER_ARCHIEVEMENT: "http://10.39.0.41:8081/desktop_archievement_backend/archievement/query_caller_archievement.do",
/** 奖项相关 **/ /** 奖项相关 **/
// 查询奖励项目 // 查询奖励项目
// URL_RWARD_PROJECTS: "http://222.76.244.118:11101/desktop_archievement_backend/rewards/query_reward_projects.do" // URL_RWARD_PROJECTS: "http://222.76.244.118:11101/desktop_archievement_backend/rewards/query_reward_projects.do",
URL_RWARD_PROJECTS: "http://10.39.0.41:8081/desktop_archievement_backend/rewards/query_reward_projects.do", URL_RWARD_PROJECTS: "http://10.39.0.41:8081/desktop_archievement_backend/rewards/query_reward_projects.do",
// 查询获奖人员 // 查询获奖人员
// URL_REWARD_GAINERS: "http://{{生产地址}}/desktop_archievement_backend/rewards/query_reward_gainers.do" URL_REWARD_GAINERS: "http://10.39.0.41:8081/desktop_archievement_backend/rewards/query_reward_gainers.do",
URL_REWARD_GAINERS: "http://222.76.244.118:11101/desktop_archievement_backend/rewards/query_reward_gainers.do", // URL_REWARD_GAINERS: "http://222.76.244.118:11101/desktop_archievement_backend/rewards/query_reward_gainers.do",
// 添加获奖人员
URL_ADD_REWARD_TELSALER: "http://10.39.0.41:8081/desktop_archievement_backend/rewards/add_telsaler_reward.do",
// URL_ADD_REWARD_TELSALER: "http://222.76.244.118:11101/desktop_archievement_backend/rewards/add_telsaler_reward.do",
// 更新获奖人员
URL_UPDATE_REWARD_TELSALER: "http://10.39.0.41:8081/desktop_archievement_backend/rewards/update_telsaler_reward.do",
// URL_ADD_REWARD_TELSALER: "http://222.76.244.118:11101/desktop_archievement_backend/rewards/update_telsaler_reward.do",
// 删除获奖人员
URL_DEL_REWARD_TELSALER: "http://10.39.0.41:8081/desktop_archievement_backend/rewards/delete_telsaler_reward.do",
// URL_ADD_REWARD_TELSALER: "http://222.76.244.118:11101/desktop_archievement_backend/rewards/delete_telsaler_reward.do",
}; };
export { API_URL };

View File

@@ -40,6 +40,42 @@ interface RewardGainerResponse
gainerList: RewardGainer[] | null; gainerList: RewardGainer[] | null;
} }
interface AddRewardTelsalerRequest
{
telsalerName: string;
rewardIndex: number;
}
interface AddRewardTelsalerResponse
{
success: boolean;
message: string;
}
interface UpdateRewardTelsalerRequest
{
recordID: number,
telsalerName: string;
rewardIndex: number;
}
interface UpdateRewardTelsalerResponse
{
success: boolean;
message: string;
}
interface DeleteRewardTelsalerRequest
{
recordID: number[];
}
interface DeleteRewardTelsalerResponse
{
success: boolean;
message: string;
}
/** /**
* 请求奖项清单 * 请求奖项清单
* @param handler 用于处理请求数据的回调函数; * @param handler 用于处理请求数据的回调函数;
@@ -82,8 +118,8 @@ function requestRewardPorjectsList( handler: any ): void
} }
/** /**
* * 请求获奖人员清单
* @param handler * @param handler 处理请求结果的回调函数
*/ */
function requestRewardGainers( handler: any ): void function requestRewardGainers( handler: any ): void
{ {
@@ -122,6 +158,126 @@ function requestRewardGainers( handler: any ): void
}); });
} }
function addRewardTelsaler( data: AddRewardTelsalerRequest, handler: any ): void
{
if ( handler === undefined || handler === null )
{
return;
}
const addResponse: AddRewardTelsalerResponse = {
success: false,
message: "",
};
instance.request({
method: "post",
url: API_URL.URL_ADD_REWARD_TELSALER,
data,
})
.then(( response: AxiosResponse<any, any> ): void =>
{
const data: AddRewardTelsalerResponse = response.data ?? {};
addResponse.success = data.success ?? false;
addResponse.message = data.message ?? "";
handler( addResponse );
})
.catch(( error ): void =>
{
console.log( error );
addResponse.success = false;
addResponse.message = "请求添加获奖坐席失败,请查看控制台!";
handler( addResponse, error );
});
}
/**
* 请求更新获奖坐席根据请求结果调用handler函数。
* @param data 请求数据
* @param handler 处理请求结果数据的回调函数。
*/
function updateTelsalerReward( data: UpdateRewardTelsalerRequest, handler: any ): void
{
if ( handler === undefined || handler === null )
{
return;
}
const updateResponse: UpdateRewardTelsalerResponse = {
success: false,
message: "",
};
instance.request({
method: "post",
url: API_URL.URL_UPDATE_REWARD_TELSALER,
data,
})
.then(( response: AxiosResponse<any, any> ): any =>
{
const data: UpdateRewardTelsalerResponse = response.data ?? {};
updateResponse.success = data.success ?? false;
updateResponse.message = data.message ?? "";
handler( updateResponse );
})
.catch(( error: any ): void =>
{
updateResponse.success = false;
updateResponse.message = "请求更新获奖坐席失败,请查看控制台!";
console.log( error );
handler( updateResponse, error );
});
}
/**
* 请求删除获奖坐席。
* @param data 请求数据
* @param handler 处理请求结果的回调函数
*/
function deleteRewardTelsaler( data: DeleteRewardTelsalerRequest, handler: any ): void
{
if ( handler === undefined || handler === null )
{
return;
}
const deleteResponse: DeleteRewardTelsalerResponse = {
success: false,
message: "",
};
instance.request({
method: "post",
url: API_URL.URL_DEL_REWARD_TELSALER,
data,
})
.then(( response: AxiosResponse<any, any> ): void =>
{
const data: DeleteRewardTelsalerResponse = response.data ?? {};
deleteResponse.success = data.success ?? false;
deleteResponse.message = data.message ?? "";
handler( deleteResponse );
})
.catch(( error: any ): void =>
{
deleteResponse.message = "请求删除获奖坐席失败,请检查日志!";
deleteResponse.success = false;
console.log( error );
handler( deleteResponse, error );
});
}
// **功能函数 **********************************/ // **功能函数 **********************************/
function checkRewardProjects( data: any[]): RewardProject[] | null function checkRewardProjects( data: any[]): RewardProject[] | null
{ {
@@ -176,6 +332,15 @@ export {
type RewardGainer, type RewardGainer,
type RewardProjectResponse, type RewardProjectResponse,
type RewardGainerResponse, type RewardGainerResponse,
type DeleteRewardTelsalerRequest,
type DeleteRewardTelsalerResponse,
type AddRewardTelsalerRequest,
type AddRewardTelsalerResponse,
type UpdateRewardTelsalerRequest,
type UpdateRewardTelsalerResponse,
requestRewardPorjectsList, requestRewardPorjectsList,
requestRewardGainers requestRewardGainers,
addRewardTelsaler,
updateTelsalerReward,
deleteRewardTelsaler
}; };

View File

@@ -1,263 +1,35 @@
<!-- <!--
* @Author: Kane * @Author: Kane
* @Date: 2023-03-23 16:05:08 * @Date: 2023-09-25 09:48:25
* @LastEditors: Kane * @LastEditors: Kane
* @FilePath: /task_schedule/src/views/DataManagement.vue * @FilePath: /task_schedule/src/views/DataManagement.vue
* @Description: * @Description: 数据管理view
* *
* Copyright (c) ${2022} by Kane, All Rights Reserved. * Copyright (c) ${2022} by Kane, All Rights Reserved.
--> -->
<template> <template>
<div <div class="data_management_wrapper">
v-if="ui.showUI" 数据管理
class="wrapper"
>
<div class="reward-wrapper">
<div class="reward-gainer-wrapper">
<el-divider content-position="left">
90俱乐部
</el-divider>
<div class="toolbutton-wrapper">
<el-button
type="primary"
icon="documentAdd"
>
新增
</el-button>
<el-button
type="danger"
icon="delete"
>
删除
</el-button>
<el-button
type="warning"
icon="Refresh"
@click="refresh"
>
刷新
</el-button>
</div>
<el-table
border
stripe
style="width:100%;"
:height="tableHeight"
:data="rewardGainerData"
>
<el-table-column type="selection" />
<el-table-column
label="坐席名称"
align="center"
>
<template #default="rewardGainer">
<span
class="reward-gainer-td"
@dblclick="onEditRewardGainer(rewardGainer.row.recID, rewardGainer.row.callerName, rewardGainer.row.rewardProjectCode)"
>{{ rewardGainer.row.callerName }}</span>
</template>
</el-table-column>
<el-table-column
label="奖项名称"
align="center"
>
<template #default="rewardGainer">
<span
class="reward-gainer-td"
@dblclick="onEditRewardGainer( rewardGainer.row.recID, rewardGainer.row.callerName, rewardGainer.row.rewardProjectCode)"
>{{ rewardGainer.row.rewardProjectName }}</span>
</template>
</el-table-column>
</el-table>
<div class="pagination-wrapper">
<el-pagination
v-model="ui.tablePageIndex"
class="pull_left"
size="small"
background
:page-size="ui.tablePageSize"
:page-sizes="[10, 20, 50, 100]"
layout="total, sizes, prev, pager, next, jumper"
:total="(ui.rewardGainerList ?? []).length"
@current-change="onCurrentPageIndexChange"
@size-change="onTablePageSizeChange"
/>
</div>
</div>
</div>
<div
v-if="ui.showEditRewardGainerDialog"
class="dialog-wrapper"
>
<el-dialog
v-model="ui.showEditRewardGainerDialog"
title="编辑获奖人员"
width="400px"
>
<RewardGainerDialog
:selected-rec-id="(ui.selectedRecID ?? -9999)"
:selected-reward-project-code="ui.selectedRewardProjectCode"
:selected-telsaler-name="ui.selectedTelsalerName"
/>
</el-dialog>
</div>
</div> </div>
</template> </template>
<script lang="ts"> <script lang="ts">
import { reactive, computed, onBeforeMount } from "vue"; import { ref, reactive } from "vue";
import {
type RewardProject,
type RewardGainer,
type RewardProjectResponse,
type RewardGainerResponse,
requestRewardPorjectsList,
requestRewardGainers
} from "@/utils/reward.js";
import { ElMessageBox } from "element-plus";
import RewardGainerDialog from "@/views/reward/RewardTelsaler.vue";
interface UI
{
showUI: boolean;
showEditRewardGainerDialog: boolean;
rewardGainerList: RewardGainer[] | null;
tablePageIndex: number;
tablePageSize: number;
selectedRecID: number | null;
selectedTelsalerName: string;
selectedRewardProjectCode: number;
}
export default { export default {
name: "DataManagement", name: "DataManagement",
components: { RewardGainerDialog, },
setup() setup()
{ {
const ui: UI = reactive({ const ui = reactive({
showUI: true, showUI: false,
showEditRewardGainerDialog: false,
rewardGainerList: null,
tablePageIndex: 1,
tablePageSize: 10,
selectedRecID: null,
selectedTelsalerName: "",
selectedRewardProjectCode: -999,
}); });
/** 请求数据相关 ***************************/ return { ui, };
const applyGainerList = ( response: RewardGainerResponse, error: any ): void =>
{
if ( !response.success )
{
console.log( error );
ElMessageBox({
message: "请求获奖人列表失败,请查看日志!",
type: "error",
center: true,
})
.then((): void => {})
.catch((): void => {});
return;
}
ui.rewardGainerList = response.gainerList;
console.log( "请求获奖人员列表", ui.rewardGainerList );
};
/** 表格相关 ***************************/
const tableHeight = computed((): number =>
{
return ( ui.tablePageSize + 1 ) * 40;
});
/**
* 用于根据分页组件的参数,生成表格用的数据。
*/
const rewardGainerData = computed((): RewardGainer[] =>
{
// 防御性验证
if ( ui.rewardGainerList === null )
{
return [];
}
const startIndex = ui.tablePageSize * ( ui.tablePageIndex - 1 );
const endIndex = startIndex + ui.tablePageSize;
const data = ui.rewardGainerList.slice( startIndex, endIndex );
console.log( ui.tablePageSize, ui.tablePageIndex );
console.log( "表格数据:", data );
return data;
});
const onCurrentPageIndexChange = ( pageIndex: number ): void =>
{
ui.tablePageIndex = pageIndex;
};
const onTablePageSizeChange = ( pageSize: number ): void =>
{
ui.tablePageSize = pageSize;
};
// 表格编辑相关
/**
* 响应用户在表格中的双击
* @param telsalerName
* @param rewardProjectName
*/
const onEditRewardGainer = ( recID: number, telsalerName: string, rewardProjectCode: number ): void =>
{
console.log( "编辑获奖清单", recID, telsalerName, rewardProjectCode );
ui.selectedRecID = recID;
ui.selectedTelsalerName = telsalerName;
ui.selectedRewardProjectCode = rewardProjectCode;
ui.showEditRewardGainerDialog = true;
};
/**
* 用于刷新页面
*/
const refresh = (): void =>
{
requestRewardGainers( applyGainerList );
};
onBeforeMount((): void =>
{
refresh();
});
return {
ui,
tableHeight,
rewardGainerData,
onCurrentPageIndexChange,
onTablePageSizeChange,
onEditRewardGainer,
refresh,
};
}, },
}; };
</script> </script>
<style lang="scss" scoped> <style lang="scss">
@import "@/assets/css/public/_public.scss"; .data_management_wrapper {
.wrapper {
margin: 10px; margin: 10px;
padding: 10px;
// background-color: #fff;
// border-radius: 5px;
// box-shadow: $box-shadow;
// &:hover {
// box-shadow: $box-shadow-hover;
// }
min-width: 800px; min-width: 800px;
@@ -265,55 +37,4 @@ export default {
margin-top: 10px; margin-top: 10px;
} }
} }
.reward-wrapper {
display: flex;
justify-content: center;
align-items: center;
>div {
background-color: #fff;
border-radius: 5px;
box-shadow: $box-shadow;
padding: 10px;
&:hover {
box-shadow: $box-shadow-hover;
}
}
>*+* {
margin-left: 10px;
}
}
.reward-gainer-wrapper {
flex-grow: 1;
}
.dishonor-wrapper {
flex-grow: 1;
}
.toolbutton-wrapper {
text-align: left;
margin-bottom: 10px;
>*+* {
margin-left: 15px;
}
}
.pagination-wrapper {
margin-top: 10px;
display: flex;
justify-content: flex-end;
}
.reward-gainer-td {
cursor: pointer;
display: block;
}
</style> </style>

View File

@@ -0,0 +1,391 @@
<!--
* @Author: Kane
* @Date: 2023-03-23 16:05:08
* @LastEditors: Kane
* @FilePath: /task_schedule/src/views/RewardManagement.vue
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
-->
<template>
<div
v-if="ui.showUI"
class="wrapper"
>
<div class="reward-wrapper">
<div class="reward-gainer-wrapper">
<el-divider content-position="left">
90俱乐部 & 消7灭6包围战
</el-divider>
<div class="toolbutton-wrapper">
<el-button
type="primary"
icon="documentAdd"
@click="onAddRewardGainer"
>
新增
</el-button>
<el-button
type="danger"
icon="delete"
@click="onDeleteRewardGainer"
>
删除
</el-button>
<el-button
type="warning"
icon="Refresh"
@click="refresh"
>
刷新
</el-button>
</div>
<el-table
ref="rewardTelsalerTable"
border
stripe
style="width:100%;"
:data="rewardGainerData"
>
<el-table-column type="selection" />
<el-table-column
label="坐席名称"
align="center"
>
<template #default="rewardGainer">
<span
class="reward-gainer-td"
@dblclick="onEditRewardGainer(rewardGainer.row.recID, rewardGainer.row.callerName, rewardGainer.row.rewardProjectCode)"
>{{ rewardGainer.row.callerName }}</span>
</template>
</el-table-column>
<el-table-column
label="奖项名称"
align="center"
>
<template #default="rewardGainer">
<span
class="reward-gainer-td"
@dblclick="onEditRewardGainer( rewardGainer.row.recID, rewardGainer.row.callerName, rewardGainer.row.rewardProjectCode)"
>{{ rewardGainer.row.rewardProjectName }}</span>
</template>
</el-table-column>
</el-table>
<div class="pagination-wrapper">
<el-pagination
v-model="ui.tablePageIndex"
class="pull_left"
size="small"
background
:page-size="ui.tablePageSize"
:page-sizes="[10, 20, 50, 100]"
layout="total, sizes, prev, pager, next, jumper"
:total="(ui.rewardGainerList ?? []).length"
@current-change="onCurrentPageIndexChange"
@size-change="onTablePageSizeChange"
/>
</div>
</div>
</div>
<div
v-if="ui.showEditRewardGainerDialog"
class="dialog-wrapper"
>
<el-dialog
v-model="ui.showEditRewardGainerDialog"
title="编辑获奖人员"
width="400px"
>
<RewardGainerDialog
:selected-rec-id="(ui.selectedRecID ?? -9999)"
:selected-reward-project-code="ui.selectedRewardProjectCode"
:selected-telsaler-name="ui.selectedTelsalerName"
/>
</el-dialog>
</div>
</div>
</template>
<script lang="ts">
import { reactive, computed, onBeforeMount, ref } from "vue";
import { type RewardGainer, type RewardGainerResponse, requestRewardGainers, type DeleteRewardTelsalerResponse, deleteRewardTelsaler, type DeleteRewardTelsalerRequest } from "@/utils/reward.js";
import eventBus from "@/utils/api/EventBus.js";
import { ElMessage, ElMessageBox, type ElTable } from "element-plus";
import RewardGainerDialog from "@/views/reward/RewardTelsaler.vue";
interface UI
{
showUI: boolean;
showEditRewardGainerDialog: boolean;
rewardGainerList: RewardGainer[] | null;
tablePageIndex: number;
tablePageSize: number;
selectedRecID: number | null;
selectedTelsalerName: string;
selectedRewardProjectCode: number;
}
export default {
name: "RewardManagement",
components: { RewardGainerDialog, },
setup()
{
const ui: UI = reactive({
showUI: true,
showEditRewardGainerDialog: false,
rewardGainerList: null,
tablePageIndex: 1,
tablePageSize: 10,
selectedRecID: null,
selectedTelsalerName: "",
selectedRewardProjectCode: -999,
});
const rewardTelsalerTable = ref<InstanceType<typeof ElTable>>();
/** 请求数据相关 ***************************/
const requestRewardTelsalerListHandler = ( response: RewardGainerResponse, error: any ): void =>
{
if ( !response.success )
{
console.log( error );
ElMessageBox({
message: "请求获奖人列表失败,请查看日志!",
type: "error",
center: true,
})
.then((): void => {})
.catch((): void => {});
return;
}
ui.rewardGainerList = response.gainerList;
console.log( "请求获奖人员列表", ui.rewardGainerList );
refreshUI();
};
/** 表格相关 ***************************/
const tableHeight = computed((): number =>
{
return ( ui.tablePageSize + 1 ) * 40;
});
/**
* 用于根据分页组件的参数,生成表格用的数据。
*/
const rewardGainerData = computed((): RewardGainer[] =>
{
// 防御性验证
if ( ui.rewardGainerList === null )
{
return [];
}
const startIndex = ui.tablePageSize * ( ui.tablePageIndex - 1 );
const endIndex = startIndex + ui.tablePageSize;
const data = ui.rewardGainerList.slice( startIndex, endIndex );
console.log( ui.tablePageSize, ui.tablePageIndex );
console.log( "表格数据:", data );
return data;
});
const onCurrentPageIndexChange = ( pageIndex: number ): void =>
{
ui.tablePageIndex = pageIndex;
};
const onTablePageSizeChange = ( pageSize: number ): void =>
{
ui.tablePageSize = pageSize;
};
/** 功能按钮相关 *******************************/
/**
* 添加获奖坐席
*/
const onAddRewardGainer = (): void =>
{
ui.selectedRecID = -1;
ui.selectedRewardProjectCode = 3;
ui.selectedTelsalerName = "";
ui.showEditRewardGainerDialog = true;
};
/**
* 响应用户在表格中的双击
* @param telsalerName
* @param rewardProjectName
*/
const onEditRewardGainer = ( recID: number, telsalerName: string, rewardProjectCode: number ): void =>
{
console.log( "编辑获奖清单", recID, telsalerName, rewardProjectCode );
ui.selectedRecID = recID;
ui.selectedTelsalerName = telsalerName;
ui.selectedRewardProjectCode = rewardProjectCode;
ui.showEditRewardGainerDialog = true;
};
/**
* 响应点击删除按钮
*/
const onDeleteRewardGainer = (): void =>
{
const selectedRecord: RewardGainer[] = rewardTelsalerTable.value?.getSelectionRows();
const deleteRequest: DeleteRewardTelsalerRequest = {
recordID: [],
};
if ( selectedRecord !== undefined )
{
selectedRecord.forEach(( item: RewardGainer ): void =>
{
deleteRequest.recordID.push( item.recID );
});
}
deleteRewardTelsaler( deleteRequest, deleteTelsalerRewardHandler );
};
/** 回调函数 ************************/
const deleteTelsalerRewardHandler = ( response: DeleteRewardTelsalerResponse, error: any ): void =>
{
if ( response.success )
{
ElMessage({
message: response.message,
type: "success",
});
}
else
{
ElMessage({
message: response.message,
type: "error",
});
}
refresh();
};
/** 事件相关 ***************/
/** 订阅新增和保存修改获奖者事件 */
eventBus.on( "onSavedRewardTelsaler", (): void =>
{
// 关闭对话框后,重新请求获奖清单,刷新页面。
ui.showEditRewardGainerDialog = false;
refresh();
});
/**
* 用于刷新页面
*/
const refresh = (): void =>
{
requestRewardGainers( requestRewardTelsalerListHandler );
};
const refreshUI = (): void =>
{
ui.showUI = false;
setTimeout(() =>
{
ui.showUI = true;
}, 0 );
};
onBeforeMount((): void =>
{
refresh();
});
return {
ui,
tableHeight,
rewardGainerData,
rewardTelsalerTable,
onCurrentPageIndexChange,
onTablePageSizeChange,
onEditRewardGainer,
refresh,
onAddRewardGainer,
onDeleteRewardGainer,
};
},
};
</script>
<style lang="scss" scoped>
@import "@/assets/css/public/_public.scss";
.wrapper {
margin: 10px;
// padding: 10px;
// background-color: #fff;
// border-radius: 5px;
// box-shadow: $box-shadow;
// &:hover {
// box-shadow: $box-shadow-hover;
// }
min-width: 800px;
>*+* {
margin-top: 10px;
}
}
.reward-wrapper {
display: flex;
justify-content: center;
align-items: center;
>div {
background-color: #fff;
border-radius: 5px;
box-shadow: $box-shadow;
padding: 10px;
&:hover {
box-shadow: $box-shadow-hover;
}
}
>*+* {
margin-left: 10px;
}
}
.reward-gainer-wrapper {
flex-grow: 1;
}
.dishonor-wrapper {
flex-grow: 1;
}
.toolbutton-wrapper {
text-align: left;
margin-bottom: 10px;
>*+* {
margin-left: 15px;
}
}
.pagination-wrapper {
margin-top: 10px;
display: flex;
justify-content: flex-end;
}
.reward-gainer-td {
cursor: pointer;
display: block;
}
</style>

View File

@@ -42,6 +42,7 @@
<el-button <el-button
type="primary" type="primary"
icon="select" icon="select"
@click="onSaveRewardTelsaler"
> >
保存 保存
</el-button> </el-button>
@@ -56,16 +57,23 @@
</template> </template>
<script lang="ts"> <script lang="ts">
import { reactive, onBeforeMount } from "vue"; import { reactive, onBeforeMount } from "vue";
import import { ElMessage, ElMessageBox } from "element-plus";
{ import {
type RewardProject, type RewardProject,
type RewardGainer,
type RewardProjectResponse, type RewardProjectResponse,
type RewardGainerResponse, type RewardGainerResponse,
type DeleteRewardTelsalerRequest,
type DeleteRewardTelsalerResponse,
type AddRewardTelsalerRequest,
type AddRewardTelsalerResponse,
type UpdateRewardTelsalerRequest,
type UpdateRewardTelsalerResponse,
requestRewardPorjectsList, requestRewardPorjectsList,
requestRewardGainers addRewardTelsaler,
updateTelsalerReward,
deleteRewardTelsaler
} from "@/utils/reward.js"; } from "@/utils/reward.js";
import { ElMessageBox } from "element-plus"; import eventBus from "@/utils/api/EventBus.js";
interface RewardGainerUI interface RewardGainerUI
{ {
@@ -107,6 +115,11 @@ export default {
selectedRecID: 0, selectedRecID: 0,
}); });
/**
* 请求奖项清单的回调函数,用于处理请求结果。
* @param response 请求奖项清单的响应对象
* @param error 请求失败时的错误对象
*/
const applyRewardProjectsData = ( response: RewardProjectResponse, error: any ): void => const applyRewardProjectsData = ( response: RewardProjectResponse, error: any ): void =>
{ {
if ( !response.success ) if ( !response.success )
@@ -144,12 +157,77 @@ export default {
console.log( props.selectedRewardProjectCode ); console.log( props.selectedRewardProjectCode );
}); });
const onSaveRewardTelsaler = (): void =>
{
if ( props.selectedRecId === -1 )
{
// 新增
const addRequest: AddRewardTelsalerRequest = {
rewardIndex: ui.selectedRewardProjectCode as number,
telsalerName: ui.selectedRewardTelsalerName,
};
addRewardTelsaler( addRequest, addRewardTelsalerHandler );
}
else
{
// 更新
const updateRequest: UpdateRewardTelsalerRequest = {
recordID: ui.selectedRecID,
telsalerName: ui.selectedRewardTelsalerName,
rewardIndex: ui.selectedRewardProjectCode as number,
};
updateTelsalerReward( updateRequest, updateTelsalerRewardHandler );
}
};
const addRewardTelsalerHandler = ( data: AddRewardTelsalerResponse, error: any ): void =>
{
if ( data.success )
{
ElMessage({
message: data.message,
type: "success",
});
}
else
{
ElMessage({
message: data.message,
type: "error",
});
}
eventBus.emit( "onSavedRewardTelsaler" );
};
const updateTelsalerRewardHandler = ( data: UpdateRewardTelsalerResponse, error: any ): void =>
{
if ( data.success )
{
ElMessage({
message: data.message,
type: "success",
});
}
else
{
ElMessage({
message: data.message,
type: "error",
});
}
eventBus.emit( "onSavedRewardTelsaler" );
};
// onBeforeUpdate((): void => // onBeforeUpdate((): void =>
// { // {
// refresh(); // refresh();
// }); // });
return { ui, }; return { ui, onSaveRewardTelsaler, };
}, },
}; };
</script> </script>

View File

@@ -35,6 +35,7 @@
] ]
}, },
"include": [ "include": [
"src/**/*",
"src/**/*.ts", "src/**/*.ts",
"src/**/*.tsx", "src/**/*.tsx",
"src/**/*.vue", "src/**/*.vue",

View File

@@ -0,0 +1,6 @@
{
"name": "desktop_archievement_backend",
"lockfileVersion": 3,
"requires": true,
"packages": {}
}

View File

@@ -11,8 +11,9 @@
package com.cpic.xim.mybatis.mapper; package com.cpic.xim.mybatis.mapper;
import java.util.ArrayList; import java.util.ArrayList;
import com.cpic.xim.mybatis.pojo.RewardProject; import java.util.HashMap;
import com.cpic.xim.mybatis.pojo.RewardGainer; import com.cpic.xim.mybatis.pojo.RewardGainer;
import com.cpic.xim.mybatis.pojo.RewardProject;
public interface RewardsMapper public interface RewardsMapper
{ {
@@ -20,5 +21,9 @@ public interface RewardsMapper
public ArrayList<RewardGainer> queryRewardTelsaler(); public ArrayList<RewardGainer> queryRewardTelsaler();
public void addRewardTelSaler( HashMap<String, Object> params );
public void updateRewardTelSaler( HashMap<String, Object> params );
public void deleteRewardTelSaler( HashMap<String, Object> params );
} }

View File

@@ -0,0 +1,91 @@
/*
* @Author: Kane
* @Date: 2023-09-21 11:35:57
* @LastEditors: Kane
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/rewards/AddTelsalerRequest.java
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
package com.cpic.xim.web.controllers.rewards;
import com.fasterxml.jackson.annotation.JsonProperty;
public class AddTelsalerRequest
{
public AddTelsalerRequest() {}
public AddTelsalerRequest( String rewardIndex, String telsalerName )
{
this.rewardIndex = rewardIndex;
this.telsalerName = telsalerName;
}
public String getRewardIndex()
{
return rewardIndex;
}
public void setRewardIndex( String rewardIndex )
{
this.rewardIndex = rewardIndex;
}
public String getTelsalerName()
{
return telsalerName;
}
public void setTelsalerName( String telsalerName )
{
this.telsalerName = telsalerName;
}
@Override
public String toString()
{
return "AddTelsalerRequest [rewardIndex=" + rewardIndex + ", telsalerName=" + telsalerName
+ "]";
}
@Override
public int hashCode()
{
final int prime = 31;
int result = 1;
result = prime * result + ((rewardIndex == null) ? 0 : rewardIndex.hashCode());
result = prime * result + ((telsalerName == null) ? 0 : telsalerName.hashCode());
return result;
}
@Override
public boolean equals( Object obj )
{
if ( this == obj )
return true;
if ( obj == null )
return false;
if ( getClass() != obj.getClass() )
return false;
AddTelsalerRequest other = (AddTelsalerRequest) obj;
if ( rewardIndex == null )
{
if ( other.rewardIndex != null )
return false;
} else if ( !rewardIndex.equals( other.rewardIndex ) )
return false;
if ( telsalerName == null )
{
if ( other.telsalerName != null )
return false;
} else if ( !telsalerName.equals( other.telsalerName ) )
return false;
return true;
}
@JsonProperty("rewardIndex")
private String rewardIndex;
@JsonProperty("telsalerName")
private String telsalerName;
}

View File

@@ -0,0 +1,25 @@
/*
* @Author: Kane
* @Date: 2023-09-21 11:35:57
* @LastEditors: Kane
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/rewards/AddTelsalerResponse.java
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
package com.cpic.xim.web.controllers.rewards;
import com.cpic.xim.web.controllers.QueryResponse;
public class AddTelsalerResponse extends QueryResponse
{
public AddTelsalerResponse()
{
super();
}
public AddTelsalerResponse( boolean success, String message )
{
super( success, message );
}
}

View File

@@ -0,0 +1,66 @@
/*
* @Author: Kane
* @Date: 2023-09-21 11:35:57
* @LastEditors: Kane
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/rewards/DeleteTelsalerRequest.java
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
package com.cpic.xim.web.controllers.rewards;
import java.util.Arrays;
import com.fasterxml.jackson.annotation.JsonProperty;
public class DeleteTelsalerRequest
{
public DeleteTelsalerRequest() {}
public DeleteTelsalerRequest( int[] recordID)
{
this.recordID = recordID;
}
@Override
public String toString()
{
return "DeleteTelsalerRequest [recordID=" + Arrays.toString( recordID ) + "]";
}
@Override
public int hashCode()
{
final int prime = 31;
int result = 1;
result = prime * result + Arrays.hashCode( recordID );
return result;
}
@Override
public boolean equals( Object obj )
{
if ( this == obj )
return true;
if ( obj == null )
return false;
if ( getClass() != obj.getClass() )
return false;
DeleteTelsalerRequest other = (DeleteTelsalerRequest) obj;
if ( !Arrays.equals( recordID, other.recordID ) )
return false;
return true;
}
public int[] getRecordID()
{
return recordID;
}
public void setRecordID( int[] recordID )
{
this.recordID = recordID;
}
@JsonProperty("recordID")
private int[] recordID;
}

View File

@@ -0,0 +1,25 @@
/*
* @Author: Kane
* @Date: 2023-09-21 11:35:57
* @LastEditors: Kane
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/rewards/AddTelsalerResponse.java
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
package com.cpic.xim.web.controllers.rewards;
import com.cpic.xim.web.controllers.QueryResponse;
public class DeleteTelsalerResponse extends QueryResponse
{
public DeleteTelsalerResponse()
{
super();
}
public DeleteTelsalerResponse( boolean success, String message )
{
super( success, message );
}
}

View File

@@ -11,11 +11,14 @@ package com.cpic.xim.web.controllers.rewards;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap;
import org.apache.ibatis.exceptions.PersistenceException;
import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSession;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.ResponseBody;
import com.cpic.xim.mybatis.mapper.RewardsMapper; import com.cpic.xim.mybatis.mapper.RewardsMapper;
@@ -42,7 +45,6 @@ public class RewardController
public RewardProjectsResponse queryRewardProjecrts() public RewardProjectsResponse queryRewardProjecrts()
{ {
RewardProjectsResponse response = new RewardProjectsResponse(); RewardProjectsResponse response = new RewardProjectsResponse();
SqlSession session = null; SqlSession session = null;
logger.debug( "查询奖项清单。" ); logger.debug( "查询奖项清单。" );
@@ -50,6 +52,7 @@ public class RewardController
try try
{ {
session = MybatisUtils.getSqlSession(); session = MybatisUtils.getSqlSession();
session.clearCache();
RewardsMapper mapper = session.getMapper( RewardsMapper.class ); RewardsMapper mapper = session.getMapper( RewardsMapper.class );
ArrayList<RewardProject> rewards = mapper.queryRewardProjects(); ArrayList<RewardProject> rewards = mapper.queryRewardProjects();
@@ -77,10 +80,12 @@ public class RewardController
RewardGainersResponse queryRewardGainers() RewardGainersResponse queryRewardGainers()
{ {
RewardGainersResponse response = new RewardGainersResponse(); RewardGainersResponse response = new RewardGainersResponse();
SqlSession session = null;
try try
{ {
SqlSession session = MybatisUtils.getSqlSession(); session = MybatisUtils.getSqlSession();
RewardsMapper mapper = session.getMapper( RewardsMapper.class ); RewardsMapper mapper = session.getMapper( RewardsMapper.class );
ArrayList<RewardGainer> gainers = mapper.queryRewardTelsaler(); ArrayList<RewardGainer> gainers = mapper.queryRewardTelsaler();
@@ -89,6 +94,12 @@ public class RewardController
response.setMessage( "查询成功!" ); response.setMessage( "查询成功!" );
response.setGainerList( gainers ); response.setGainerList( gainers );
} }
catch ( PersistenceException error )
{
response.setSuccess( false );
response.setMessage( "查询失败!" + error.getMessage() );
response.setGainerList( null );
}
catch ( IOException error ) catch ( IOException error )
{ {
response.setSuccess( false ); response.setSuccess( false );
@@ -98,4 +109,134 @@ public class RewardController
return response; return response;
} }
@PostMapping( "/add_telsaler_reward.do" )
@ResponseBody
public AddTelsalerResponse addTelsalerReward( @RequestBody AddTelsalerRequest request )
{
AddTelsalerResponse response = new AddTelsalerResponse();
SqlSession session = null;
try
{
session = MybatisUtils.getSqlSession();
RewardsMapper mapper = session.getMapper( RewardsMapper.class );
HashMap<String, Object> params = new HashMap<>( 3 );
params.put( "a_reward_index", request.getRewardIndex() );
params.put( "a_telsaler_name", request.getTelsalerName() );
mapper.addRewardTelSaler( params );
session.commit();
response.setSuccess( true );
response.setMessage( "添加成功!" );
}
catch ( PersistenceException error )
{
if ( session != null )
{
session.rollback();
}
logger.error( "添加获奖坐席失败,原因:" + error.getMessage() );
response.setSuccess( false );
response.setMessage( error.getMessage() );
}
catch ( IOException error )
{
logger.error( "添加获奖坐席失败,原因:" + error.getMessage() );
response.setSuccess( false );
response.setMessage( error.getMessage() );
}
return response;
}
@PostMapping( "/delete_telsaler_reward.do" )
@ResponseBody
public DeleteTelsalerResponse deleteTelsalerReward( @RequestBody DeleteTelsalerRequest request )
{
DeleteTelsalerResponse response = new DeleteTelsalerResponse();
SqlSession session = null;
try
{
session = MybatisUtils.getSqlSession();
RewardsMapper mapper = session.getMapper( RewardsMapper.class );
HashMap<String, Object> param = new HashMap<String, Object>( 3 );
int[] records = request.getRecordID();
for ( int index = 0; index < records.length; index++ )
{
param.put( "a_rec_id", records[index] );
mapper.deleteRewardTelSaler( param );
}
response.setSuccess( true );
response.setMessage( "删除成功!" );
}
catch ( IOException error )
{
logger.error( "删除获奖坐席失败,原因:" + error.getMessage() );
response.setSuccess( false );
response.setMessage( error.getMessage() );
}
catch ( PersistenceException error )
{
logger.error( "删除获奖坐席失败,原因:" + error.getMessage() );
response.setSuccess( false );
response.setMessage( error.getMessage() );
}
return response;
}
@PostMapping( "update_telsaler_reward.do" )
@ResponseBody
UpdateTelsalerResponse updateTelsalerReward( @RequestBody UpdateTelsalerRequest request )
{
UpdateTelsalerResponse response = new UpdateTelsalerResponse();
SqlSession session = null;
try
{
session = MybatisUtils.getSqlSession();
RewardsMapper mapper = session.getMapper( RewardsMapper.class );
HashMap<String, Object> params = new HashMap<>( 3 );
params.put( "a_rec_id", request.getRecordID() );
params.put( "a_telsaler_name", request.getTelsalerName() );
params.put( "a_reward_index", request.getRewardIndex() );
mapper.updateRewardTelSaler( params );
response.setSuccess( true );
response.setMessage( "更新成功!" );
}
catch ( IOException error )
{
logger.error( "更新获奖坐席失败,原因:" + error.getMessage() );
response.setSuccess( false );
response.setMessage( error.getMessage() );
}
catch ( PersistenceException error )
{
logger.error( "更新获奖坐席失败,原因:" + error.getMessage() );
response.setSuccess( false );
response.setMessage( error.getMessage() );
}
return response;
}
} }

View File

@@ -0,0 +1,109 @@
/*
* @Author: Kane
* @Date: 2023-09-21 16:01:51
* @LastEditors: Kane
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/rewards/UpdateTelsalerRequest.java
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
package com.cpic.xim.web.controllers.rewards;
import com.fasterxml.jackson.annotation.JsonProperty;
public class UpdateTelsalerRequest
{
public UpdateTelsalerRequest() {}
public UpdateTelsalerRequest( int recordID, String rewardIndex, String telsalerName )
{
this.recordID = recordID;
this.rewardIndex = rewardIndex;
this.telsalerName = telsalerName;
}
public String getRewardIndex()
{
return rewardIndex;
}
public void setRewardIndex( String rewardIndex )
{
this.rewardIndex = rewardIndex;
}
public String getTelsalerName()
{
return telsalerName;
}
public void setTelsalerName( String telsalerName )
{
this.telsalerName = telsalerName;
}
public int getRecordID()
{
return recordID;
}
public void setRecordID( int recordID )
{
this.recordID = recordID;
}
@Override
public String toString()
{
return "UpdateTelsalerRequest [recordID=" + recordID + ", rewardIndex=" + rewardIndex
+ ", telsalerName=" + telsalerName + "]";
}
@Override
public int hashCode()
{
final int prime = 31;
int result = 1;
result = prime * result + recordID;
result = prime * result + ((rewardIndex == null) ? 0 : rewardIndex.hashCode());
result = prime * result + ((telsalerName == null) ? 0 : telsalerName.hashCode());
return result;
}
@Override
public boolean equals( Object obj )
{
if ( this == obj )
return true;
if ( obj == null )
return false;
if ( getClass() != obj.getClass() )
return false;
UpdateTelsalerRequest other = (UpdateTelsalerRequest) obj;
if ( recordID != other.recordID )
return false;
if ( rewardIndex == null )
{
if ( other.rewardIndex != null )
return false;
} else if ( !rewardIndex.equals( other.rewardIndex ) )
return false;
if ( telsalerName == null )
{
if ( other.telsalerName != null )
return false;
} else if ( !telsalerName.equals( other.telsalerName ) )
return false;
return true;
}
@JsonProperty("recordID")
private int recordID;
@JsonProperty("rewardIndex")
private String rewardIndex;
@JsonProperty("telsalerName")
private String telsalerName;
}

View File

@@ -0,0 +1,25 @@
/*
* @Author: Kane
* @Date: 2023-09-21 11:35:57
* @LastEditors: Kane
* @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/rewards/UpdateTelsalerResponsense.java
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
package com.cpic.xim.web.controllers.rewards;
import com.cpic.xim.web.controllers.QueryResponse;
public class UpdateTelsalerResponse extends QueryResponse
{
public UpdateTelsalerResponse()
{
super();
}
public UpdateTelsalerResponse( boolean success, String message )
{
super( success, message );
}
}

View File

@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "https://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.cpic.xim.mybatis.mapper.ArchievementMapper"> <mapper namespace="com.cpic.xim.mybatis.mapper.ArchievementMapper">
<select id="getDepartmentArchievement" statementType="CALLABLE" parameterType="java.util.HashMap"> <select id="getDepartmentArchievement" flushCache="true" statementType="CALLABLE" parameterType="java.util.HashMap">
call telsale_archievement_pkg.department_archievement( call telsale_archievement_pkg.department_archievement(
#{a_department_code, mode=IN, jdbcType=VARCHAR}, #{a_department_code, mode=IN, jdbcType=VARCHAR},
#{a_attaching_rate, mode=OUT, jdbcType=VARCHAR}, #{a_attaching_rate, mode=OUT, jdbcType=VARCHAR},
@@ -9,7 +9,7 @@
#{a_total, mode=OUT, jdbcType=INTEGER, javaType=Integer}, #{a_total, mode=OUT, jdbcType=INTEGER, javaType=Integer},
#{a_mensual_cur, mode=OUT, jdbcType=CURSOR, resultMap=MensualArchievementMapper}) #{a_mensual_cur, mode=OUT, jdbcType=CURSOR, resultMap=MensualArchievementMapper})
</select> </select>
<select id="getCallerArchievement" statementType="CALLABLE" parameterType="java.util.HashMap"> <select id="getCallerArchievement" flushCache="true" statementType="CALLABLE" parameterType="java.util.HashMap">
call telsale_archievement_pkg.caller_archievement( call telsale_archievement_pkg.caller_archievement(
#{a_caller_code, mode=IN, jdbcType=VARCHAR}, #{a_caller_code, mode=IN, jdbcType=VARCHAR},
#{a_attaching_rate, mode=OUT, jdbcType=VARCHAR}, #{a_attaching_rate, mode=OUT, jdbcType=VARCHAR},

View File

@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "https://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.cpic.xim.mybatis.mapper.RankingListMapper"> <mapper namespace="com.cpic.xim.mybatis.mapper.RankingListMapper">
<select id="getRankingList" statementType="CALLABLE" parameterType="java.util.HashMap"> <select id="getRankingList" flushCache="true" statementType="CALLABLE" parameterType="java.util.HashMap">
call telsale_archievement_pkg.caller_arch_ranking_list( call telsale_archievement_pkg.caller_arch_ranking_list(
#{a_department_code,mode=IN,jdbcType=VARCHAR}, #{a_department_code,mode=IN,jdbcType=VARCHAR},
#{a_year,mode=IN,jdbcType=VARCHAR}, #{a_year,mode=IN,jdbcType=VARCHAR},

View File

@@ -2,14 +2,14 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "https://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.cpic.xim.mybatis.mapper.RewardsMapper"> <mapper namespace="com.cpic.xim.mybatis.mapper.RewardsMapper">
<select id="queryRewardProjects" resultMap="RewardProjectMap"> <select id="queryRewardProjects" resultMap="RewardProjectMap">
select reward_index, reward_name from reward_projects select reward_index, reward_name from reward_projects order by reward_index desc
</select> </select>
<resultMap id="RewardProjectMap" type="com.cpic.xim.mybatis.pojo.RewardProject"> <resultMap id="RewardProjectMap" type="com.cpic.xim.mybatis.pojo.RewardProject">
<id property="rewardCode" column="reward_index" /> <id property="rewardCode" column="reward_index" />
<result property="rewardName" column="reward_name" javaType="String"/> <result property="rewardName" column="reward_name" javaType="String"/>
</resultMap> </resultMap>
<select id="queryRewardTelsaler" resultMap="RewardGainerMapper"> <select id="queryRewardTelsaler" flushCache="true" resultMap="RewardGainerMapper">
SELECT hjr.rec_id rec_id, SELECT hjr.rec_id rec_id,
hjr.telsaler_name telsaler_name, hjr.telsaler_name telsaler_name,
hjr.telsaler_code telsaler_code, hjr.telsaler_code telsaler_code,
@@ -27,4 +27,24 @@
<result column="reward_name" property="rewardProjectName" /> <result column="reward_name" property="rewardProjectName" />
<result column="reward_index" property="rewardProjectCode" /> <result column="reward_index" property="rewardProjectCode" />
</resultMap> </resultMap>
<select id="addRewardTelSaler" flushCache="true" statementType="CALLABLE" parameterType="java.util.HashMap">
call telsaler_reward_pkg.add_telsaler_reward(
#{a_reward_index,mode=IN,jdbcType=VARCHAR},
#{a_telsaler_name,mode=IN,jdbcType=VARCHAR})
</select>
<!-- 删除获奖坐席记录 -->
<select id="deleteRewardTelSaler" flushCache="true" statementType="CALLABLE" parameterType="java.util.HashMap">
call telsaler_reward_pkg.delete_telsaler_reward(
#{a_rec_id,mode=IN,jdbcType=INTEGER})
</select>
<!-- 更新获奖坐席 -->
<select id="updateRewardTelSaler" statementType="CALLABLE" flushCache="true" parameterType="java.util.HashMap" >
call telsaler_reward_pkg.update_telsaler_reward(
#{a_rec_id,mode=IN,jdbcType=INTEGER},
#{a_telsaler_name,mode=IN,jdbcType=VARCHAR},
#{a_reward_index,mode=IN,jdbcType=VARCHAR})
</select>
</mapper> </mapper>