保存进度!

This commit is contained in:
Kane Wang 2023-09-13 18:01:07 +08:00
parent 31d5e1622c
commit 4deed356f5
12 changed files with 308 additions and 184 deletions

View File

@ -0,0 +1,17 @@
drop table telsaler_reward;
create table telsaler_reward
(
rec_id integer not null,
reward_index integer not null,
telsaler_name varchar2(100) not null,
telsaler_code varchar2(20)
);
CREATE OR REPLACE TRIGGER telsaler_reward_id
BEFORE INSERT ON telsaler_reward
FOR EACH ROW
BEGIN
SELECT desktop_archievement_seq.nextval
INTO :new.rec_id
FROM dual;
END;

View File

@ -26,7 +26,7 @@ interface RewardProjectResponse
interface RewardGainer
{
acquiredDate: string;
recID: number;
callerName: string;
callerCode: string;
rewardProjectCode: string;
@ -37,7 +37,7 @@ interface RewardGainerResponse
{
success: boolean;
message: string;
gainerList: RewardGainer[];
gainerList: RewardGainer[] | null;
}
/**
@ -108,7 +108,7 @@ function requestRewardGainers( handler: any ): void
rewardResponse.success = data.success;
rewardResponse.message = data.message;
rewardResponse.gainerList = data.gainerList;
rewardResponse.gainerList = checkRewardGainers( data.gainerList );
handler( rewardResponse, null );
})
@ -158,12 +158,14 @@ function checkRewardGainers( gainers: any[]): RewardGainer[] | null
gainers.forEach(( item: RewardGainer ): void =>
{
const gainer: RewardGainer = {
acquiredDate: item.acquiredDate ?? "",
recID: item.recID ?? "",
callerName: item.callerName ?? "",
callerCode: item.callerCode ?? "",
rewardProjectCode: item.rewardProjectCode ?? "",
rewardProjectName: item.rewardProjectName ?? "",
};
gainerList.push( gainer );
});
return gainerList;

View File

@ -53,7 +53,7 @@
<template #default="rewardGainer">
<span
class="reward-gainer-td"
@dblclick="onEditRewardGainer(rewardGainer.row.callerName, rewardGainer.row.rewardProjectName)"
@dblclick="onEditRewardGainer(rewardGainer.row.recID, rewardGainer.row.callerName, rewardGainer.row.rewardProjectCode)"
>{{ rewardGainer.row.callerName }}</span>
</template>
</el-table-column>
@ -64,7 +64,7 @@
<template #default="rewardGainer">
<span
class="reward-gainer-td"
@dblclick="onEditRewardGainer(rewardGainer.row.callerName, rewardGainer.row.rewardProjectName)"
@dblclick="onEditRewardGainer( rewardGainer.row.recID, rewardGainer.row.callerName, rewardGainer.row.rewardProjectCode)"
>{{ rewardGainer.row.rewardProjectName }}</span>
</template>
</el-table-column>
@ -78,20 +78,27 @@
:page-size="ui.tablePageSize"
:page-sizes="[10, 20, 50, 100]"
layout="total, sizes, prev, pager, next, jumper"
:total="ui.rewardGainerList.length"
:total="(ui.rewardGainerList ?? []).length"
@current-change="onCurrentPageIndexChange"
@size-change="onTablePageSizeChange"
/>
</div>
</div>
</div>
<div class="dialog-wrapper">
<div
v-if="ui.showEditRewardGainerDialog"
class="dialog-wrapper"
>
<el-dialog
title="编辑获奖人员"
v-model="ui.showEditRewardGainerDialog"
title="编辑获奖人员"
width="400px"
>
<RewardGainerDialog />
<RewardGainerDialog
:selected-rec-id="(ui.selectedRecID ?? -9999)"
:selected-reward-project-code="ui.selectedRewardProjectCode"
:selected-telsaler-name="ui.selectedTelsalerName"
/>
</el-dialog>
</div>
</div>
@ -107,15 +114,18 @@ import {
requestRewardGainers
} from "@/utils/reward.js";
import { ElMessageBox } from "element-plus";
import RewardGainerDialog from "@/views/reward/RewardGainer.vue";
import RewardGainerDialog from "@/views/reward/RewardTelsaler.vue";
interface UI
{
showUI: boolean;
showEditRewardGainerDialog: boolean;
rewardGainerList: RewardGainer[];
rewardGainerList: RewardGainer[] | null;
tablePageIndex: number;
tablePageSize: number;
selectedRecID: number | null;
selectedTelsalerName: string;
selectedRewardProjectCode: number;
}
export default {
@ -126,9 +136,12 @@ export default {
const ui: UI = reactive({
showUI: true,
showEditRewardGainerDialog: false,
rewardGainerList: [],
rewardGainerList: null,
tablePageIndex: 1,
tablePageSize: 10,
selectedRecID: null,
selectedTelsalerName: "",
selectedRewardProjectCode: -999,
});
/** 请求数据相关 ***************************/
@ -160,8 +173,17 @@ export default {
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 );
@ -182,10 +204,18 @@ export default {
};
//
const onEditRewardGainer = ( callerName: string, rewardProjectName: string ): void =>
/**
* 响应用户在表格中的双击
* @param telsalerName
* @param rewardProjectName
*/
const onEditRewardGainer = ( recID: number, telsalerName: string, rewardProjectCode: number ): void =>
{
console.log( "编辑获奖清单", callerName, rewardProjectName );
console.log( "编辑获奖清单", recID, telsalerName, rewardProjectCode );
ui.selectedRecID = recID;
ui.selectedTelsalerName = telsalerName;
ui.selectedRewardProjectCode = rewardProjectCode;
ui.showEditRewardGainerDialog = true;
};

View File

@ -1,110 +0,0 @@
<!--
* @Author: Kane
* @Date: 2023-09-12 10:43:39
* @LastEditors: Kane
* @FilePath: /task_schedule/src/views/reward/RewardGainer.vue
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
-->
<template>
<div class="reward-gainer-wrapper">
<el-row :gutter="10">
<el-col :span="8">
<span>奖励类型</span>
</el-col>
<el-col :span="16">
<el-select v-model="ui.selectedRewardProject">
<el-option
v-for="item in ui.rewardProjectList"
:key="item.rewardCode"
:label="item.rewardName"
:value="item.rewardCode"
/>
</el-select>
</el-col>
</el-row>
<el-row :gutter="10">
<el-col :span="8">
<span>坐席名称</span>
</el-col>
<el-col :span="16">
<el-input v-model.trim.lazy="ui.rewardCallerName" />
</el-col>
</el-row>
</div>
</template>
<script lang="ts">
import { reactive, onBeforeMount } from "vue";
import
{
type RewardProject,
type RewardGainer,
type RewardProjectResponse,
type RewardGainerResponse,
requestRewardPorjectsList,
requestRewardGainers
} from "@/utils/reward.js";
import { ElMessageBox } from "element-plus";
interface RewardGainerUI
{
showEditRewardGainerDialog: boolean;
rewardProjectList: RewardProject[] | null;
selectedRewardProject: number | undefined;
rewardCallerName: string;
}
export default {
name: "RewardGainer",
setup()
{
const ui: RewardGainerUI = reactive({
showEditRewardGainerDialog: false,
rewardProjectList: [],
selectedRewardProject: undefined,
rewardCallerName: "",
});
const applyRewardProjectsData = ( response: RewardProjectResponse, error: any ): void =>
{
if ( !response.success )
{
ElMessageBox({
message: "请求奖励项目失败,请查看日志!",
type: "error",
})
.then((): void => {})
.catch((): void => {});
console.log( "请求奖励项目失败:", error );
return;
}
ui.rewardProjectList = response.rewardList;
};
const refresh = (): void =>
{
requestRewardPorjectsList( applyRewardProjectsData );
};
onBeforeMount((): void =>
{
refresh();
});
return { ui, };
},
};
</script>
<style lang="scss" scoped>
@import "@/assets/css/public/_public.scss";
.reward-gainer-wrapper {
width: 300px;
@include query-box-wrap;
}
</style>

View File

@ -0,0 +1,183 @@
<!--
* @Author: Kane
* @Date: 2023-09-12 10:43:39
* @LastEditors: Kane
* @FilePath: /task_schedule/src/views/reward/RewardTelsaler.vue
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
-->
<template>
<div
v-if="ui.showUI"
class="reward-gainer-wrapper"
>
<el-row :gutter="10">
<el-col :span="8">
<span>奖励类型</span>
</el-col>
<el-col :span="16">
<el-select
v-model="ui.selectedRewardProjectCode"
value-key="rewardCode"
>
<el-option
v-for="item in ui.rewardProjectList"
:key="item.rewardCode"
:label="item.rewardName"
:value="item.rewardCode"
/>
</el-select>
</el-col>
</el-row>
<el-row :gutter="10">
<el-col :span="8">
<span>坐席名称</span>
</el-col>
<el-col :span="16">
<el-input v-model.trim.lazy="ui.selectedRewardTelsalerName" />
</el-col>
</el-row>
<!-- <el-row :gutter="10">
<el-col :span="8">
<span>测试</span>
</el-col>
<el-col :span="16">
<el-input v-model.trim.lazy.number="ui.selectedRewardProjectCode" />
</el-col>
</el-row> -->
</div>
</template>
<script lang="ts">
import { reactive, onBeforeMount, onBeforeUpdate, ref } from "vue";
import
{
type RewardProject,
type RewardGainer,
type RewardProjectResponse,
type RewardGainerResponse,
requestRewardPorjectsList,
requestRewardGainers
} from "@/utils/reward.js";
import { ElMessageBox } from "element-plus";
import { number } from "echarts";
interface RewardGainerUI
{
showUI: boolean;
showEditRewardGainerDialog: boolean;
rewardProjectList: RewardProject[] | null;
selectedRewardProjectCode: number | undefined;
selectedRewardTelsalerName: string;
selectedRecID: number;
}
export default {
name: "RewardTelsaler",
props: {
selectedRecId: {
type: Number,
require: true,
default: (): number => -9999,
},
selectedRewardProjectCode: {
type: Number,
require: true,
default: (): number => -999,
},
selectedTelsalerName: {
type: String,
require: true,
default: (): string => "",
},
},
setup( props )
{
const ui: RewardGainerUI = reactive({
showUI: true,
showEditRewardGainerDialog: false,
// rewardProjectList: ref([
// {
// rewardCode: 1,
// rewardName: "90",
// },
// {
// rewardCode: 2,
// rewardName: "90",
// },
// {
// rewardCode: 3,
// rewardName: "90",
// },
// ]),
rewardProjectList: [],
selectedRewardProjectCode: 1,
selectedRewardTelsalerName: "",
selectedRecID: 0,
});
const applyRewardProjectsData = ( response: RewardProjectResponse, error: any ): void =>
{
if ( !response.success )
{
ElMessageBox({
message: "请求奖励项目失败,请查看日志!",
type: "error",
})
.then((): void => {})
.catch((): void => {});
console.log( "请求奖励项目失败:", error );
return;
}
console.log( "请求奖励项目结果", response.rewardList );
ui.rewardProjectList = response.rewardList;
// ui.selectedRewardProjectCode = props.selectedRewardProjectCode;
// ui.selectedRewardTelsalerName = props.selectedTelsalerName;
// ui.selectedRecID = props.selectedRecId;
ui.showUI = false;
setTimeout((): void =>
{
ui.showUI = true;
}, 0 );
};
const refresh = (): void =>
{
requestRewardPorjectsList( applyRewardProjectsData );
};
onBeforeMount((): void =>
{
ui.selectedRewardProjectCode = props.selectedRewardProjectCode;
ui.selectedRewardTelsalerName = props.selectedTelsalerName;
ui.selectedRecID = props.selectedRecId;
refresh();
console.log( props.selectedRewardProjectCode );
});
// onBeforeUpdate((): void =>
// {
// refresh();
// });
return { ui, };
},
};
</script>
<style lang="scss" scoped>
@import "@/assets/css/public/_public.scss";
.reward-gainer-wrapper {
width: 300px;
@include query-box-wrap;
}
</style>

View File

@ -122,10 +122,19 @@
<artifactId>mybatis</artifactId>
<version>3.5.13</version>
</dependency>
</dependencies>
<build>
<finalName>desktop_archievement_backend</finalName>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>

View File

@ -18,7 +18,7 @@ public interface RewardsMapper
{
public ArrayList<RewardProject> queryRewardProjects();
public ArrayList<RewardGainer> queryRewardGainers();
public ArrayList<RewardGainer> queryRewardTelsaler();
}

View File

@ -13,12 +13,13 @@ import com.fasterxml.jackson.annotation.JsonProperty;
public class RewardGainer
{
public RewardGainer() {}
public RewardGainer()
{}
public RewardGainer( String acquiredDate, String callerName, String callerCode,
String rewardProjectCode, String rewardProjectName)
public RewardGainer( int recID, String callerName, String callerCode, int rewardProjectCode,
String rewardProjectName)
{
this.acquiredDate = acquiredDate;
this.recID = recID;
this.callerName = callerName;
this.callerCode = callerCode;
this.rewardProjectCode = rewardProjectCode;
@ -28,9 +29,9 @@ public class RewardGainer
@Override
public String toString()
{
return "RewardGainer [acquiredDate=" + acquiredDate + ", callerName=" + callerName
+ ", callerCode=" + callerCode + ", rewardProjectCode=" + rewardProjectCode
+ ", rewardProjectName=" + rewardProjectName + "]";
return "RewardGainer [recID=" + recID + ", callerName=" + callerName + ", callerCode="
+ callerCode + ", rewardProjectCode=" + rewardProjectCode + ", rewardProjectName="
+ rewardProjectName + "]";
}
@Override
@ -38,14 +39,14 @@ public class RewardGainer
{
final int prime = 31;
int result = 1;
result = prime * result + ((acquiredDate == null) ? 0 : acquiredDate.hashCode());
result = prime * result + recID;
result = prime * result + ((callerName == null) ? 0 : callerName.hashCode());
result = prime * result + ((callerCode == null) ? 0 : callerCode.hashCode());
result = prime * result + ((rewardProjectCode == null) ? 0 : rewardProjectCode.hashCode());
result = prime * result + rewardProjectCode;
result = prime * result + ((rewardProjectName == null) ? 0 : rewardProjectName.hashCode());
return result;
}
@Override
public boolean equals( Object obj )
{
@ -56,11 +57,7 @@ public class RewardGainer
if ( getClass() != obj.getClass() )
return false;
RewardGainer other = (RewardGainer) obj;
if ( acquiredDate == null )
{
if ( other.acquiredDate != null )
return false;
} else if ( !acquiredDate.equals( other.acquiredDate ) )
if ( recID != other.recID )
return false;
if ( callerName == null )
{
@ -74,11 +71,7 @@ public class RewardGainer
return false;
} else if ( !callerCode.equals( other.callerCode ) )
return false;
if ( rewardProjectCode == null )
{
if ( other.rewardProjectCode != null )
return false;
} else if ( !rewardProjectCode.equals( other.rewardProjectCode ) )
if ( rewardProjectCode != other.rewardProjectCode )
return false;
if ( rewardProjectName == null )
{
@ -89,14 +82,14 @@ public class RewardGainer
return true;
}
public String getAcquiredDate()
public int getRecID()
{
return acquiredDate;
return recID;
}
public void setAcquiredDate( String acquiredDate )
public void setRecID( int recID )
{
this.acquiredDate = acquiredDate;
this.recID = recID;
}
public String getCallerName()
@ -119,12 +112,12 @@ public class RewardGainer
this.callerCode = callerCode;
}
public String getRewardProjectCode()
public int getRewardProjectCode()
{
return rewardProjectCode;
}
public void setRewardProjectCode( String rewardProjectCode )
public void setRewardProjectCode( int rewardProjectCode )
{
this.rewardProjectCode = rewardProjectCode;
}
@ -139,8 +132,8 @@ public class RewardGainer
this.rewardProjectName = rewardProjectName;
}
@JsonProperty( "acquiredDate" )
private String acquiredDate;
@JsonProperty( "recID" )
private int recID;
@JsonProperty( "callerName" )
private String callerName;
@ -149,7 +142,7 @@ public class RewardGainer
private String callerCode;
@JsonProperty( "rewardProjectCode" )
private String rewardProjectCode;
private int rewardProjectCode;
@JsonProperty( "rewardProjectName" )
private String rewardProjectName;

View File

@ -21,18 +21,17 @@ public class MybatisUtils
{
private static HashMap<String, SqlSession> SessionMap = new HashMap<>();
private static String DEFAULT_CONFIGFILE = "mybatis/mybatis-config.xml";
/**
*
* @param configFile
* @return
* @throws IOException
*/
public static SqlSession getSqlSession(String configFile )
throws IOException
public static SqlSession getSqlSession( String configFile ) throws IOException
{
// 根据配置文件的路径查找是否已经创建了对应的session
SqlSession session = SessionMap.get(configFile);
SqlSession session = SessionMap.get( configFile );
// 找到就直接返回
if ( session != null )
@ -41,21 +40,20 @@ public class MybatisUtils
}
// 没找到就创建一个
InputStream configIS = Resources.getResourceAsStream(configFile);
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(configIS);
InputStream configIS = Resources.getResourceAsStream( configFile );
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build( configIS );
session = factory.openSession();
// 保存
SessionMap.put(configFile, session);
SessionMap.put( configFile, session );
return session;
}
public static SqlSession getSqlSession()
throws IOException
public static SqlSession getSqlSession() throws IOException
{
// 根据配置文件的路径查找是否已经创建了对应的session
SqlSession session = SessionMap.get(DEFAULT_CONFIGFILE);
SqlSession session = SessionMap.get( DEFAULT_CONFIGFILE );
// 找到就直接返回
if ( session != null )
@ -64,13 +62,13 @@ public class MybatisUtils
}
// 没找到就创建一个
InputStream configIS = Resources.getResourceAsStream(DEFAULT_CONFIGFILE);
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(configIS);
InputStream configIS = Resources.getResourceAsStream( DEFAULT_CONFIGFILE );
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build( configIS );
session = factory.openSession();
// 保存
SessionMap.put(DEFAULT_CONFIGFILE, session);
SessionMap.put( DEFAULT_CONFIGFILE, session );
return session;
}
}
}
}

View File

@ -83,7 +83,7 @@ public class RewardController
SqlSession session = MybatisUtils.getSqlSession();
RewardsMapper mapper = session.getMapper( RewardsMapper.class );
ArrayList<RewardGainer> gainers = mapper.queryRewardGainers();
ArrayList<RewardGainer> gainers = mapper.queryRewardTelsaler();
response.setSuccess( true );
response.setMessage( "查询成功!" );

View File

@ -9,20 +9,21 @@
<result property="rewardName" column="reward_name" javaType="String"/>
</resultMap>
<select id="queryRewardGainers" resultMap="RewardGainerMapper">
SELECT hjr.award_date award_date,
hjr.gainer_name gainer_name,
hjr.gainer_code gainer_code,
<select id="queryRewardTelsaler" resultMap="RewardGainerMapper">
SELECT hjr.rec_id rec_id,
hjr.telsaler_name telsaler_name,
hjr.telsaler_code telsaler_code,
xm.reward_name reward_name,
xm.reward_index
FROM reward_gainers hjr,
reward_projects xm
xm.reward_index reward_index
FROM telsaler_reward hjr,
reward_projects xm
WHERE hjr.reward_index = xm.reward_index
order by xm.reward_index desc
</select>
<resultMap id="RewardGainerMapper" type="com.cpic.xim.mybatis.pojo.RewardGainer">
<result column="gainer_name" property="callerName" />
<result column="gainer_code" property="callerCode" />
<result column="award_date" property="acquiredDate" />
<id column="rec_id" property="recID" />
<result column="telsaler_name" property="callerName" />
<result column="telsaler_code" property="callerCode" />
<result column="reward_name" property="rewardProjectName" />
<result column="reward_index" property="rewardProjectCode" />
</resultMap>

View File

@ -147,7 +147,7 @@ public class DesktopArchievementTest
session = MybatisUtils.getSqlSession();
RewardsMapper mapper = session.getMapper( RewardsMapper.class );
ArrayList<RewardGainer> gainers = mapper.queryRewardGainers();
ArrayList<RewardGainer> gainers = mapper.queryRewardTelsaler();
System.out.println( gainers );
@ -155,6 +155,7 @@ public class DesktopArchievementTest
}
catch ( IOException error )
{
System.out.println( error.getMessage() );
assert (false);
}
}