当本店的技术不足或其他原因导致钟表不能在本店维修,那么就要进行工单外派的操作了,工单外派可以外派到其他门店进行维修,当维修好了再返回到本店中。
实现思路:
第一选择外派合作商,第二选择快递并填写单号,第三选择要外派的工单。保存后在数据库的外派表中插入一条外派单,并且修改外派的单据状态为外派中,当外派的单据外派返店后,单据的状态变为外派完成。
界面效果图:
2.2.6(图1)
第一步:数据库
表与关系
2.2.6(图2)
表1:工单外派(pw_GongDanWaiPai)
存外派的单据信息
列名 | 类型 | 主外键 | 说明 |
GongDaoWaiPaiID | int | 主键 | 工单外派ID |
GongDanLuRuID | int | 外键 | 工单录入ID |
CaoZhuYuanID | int | 外键 | 录入员ID |
WaiPaiQianGongDanZhuangTaiID | int | 外键 | 外派时工单状态ID |
FangDianJieShouRenID | int | 外键 | 返店录入员ID |
FangHuiKuaiID | int | 外键 | 返店快递ID |
ShouJianRenID | int | 外键 | 收件人ID |
KuaiDiID | int | 外键 | 外派快递ID |
WaiPaiDanJuHao | nchar(50) |
| 外派单据号 |
WaiPaiShiJian | date |
| 外派时间 |
KuaiDiDanHao | nchar(50) |
| 快递单号 |
SunHuaiMiaoShu | text |
| 损坏描述 |
FangDianShiJian | date |
| 返店时间 |
FanDianKuaiDiDanHao | nchar(50) |
| 返店快递单号 |
GenXinShiJian | datetime |
| 更新时间 |
YouXiaoFou | bit |
| 有效 |
表2:员工表(sys_YuanGong)
列名 | 数据类型 | 主外键 | 说明 |
YuanGongID | int | 主键 | 员工ID |
LuRuYuanID | int | 外键 | 录入员ID |
JueSeID | int | 外键 | 角色ID |
YuanGongZhuangTaiID | int | 外键 | 员工状态ID |
MenDianID | int | 外键 | 门店ID |
YuanGongBianHao | nchar(50) |
| 员工编号 |
YuanGongXingMing | nchar(50) |
| 员工姓名 |
XingBie | nchar(50) |
| 性别 |
JiGuan | nchar(50) |
| 籍贯 |
XueLi | nchar(50) |
| 学历 |
ChuShengRiQi | date |
| 出生日期 |
ShenFenZhengHao | nchar(50) |
| 身份证号 |
RuZhiRiQi | date |
| 入职日期 |
RuZhiDiDian | nchar(50) |
| 入职地址 |
YiDongShouJi | nchar(50) |
| 移动手机 |
JiaTingDianHua | nchar(50) |
| 家庭电话 |
DiXin | nchar(50) |
| 底薪 |
DianZiYouXiang | nchar(50) |
| 电子邮箱 |
TongXunDiZhi | nchar(100) |
| 通讯地址 |
BeiZhu | nchar(100) |
| 备注 |
GengXinShiJian | datetime |
| 更新时间 |
YouXiaoFou | bit |
| 有效否 |
MiMa |
|
| 密码 |
表3:属性明细表(sys_ShuXingMingXi)
列名 | 数据类型 | 主外键 | 说明 |
ShuXingMingXiID | int | 主键 | 属性明细ID |
LuRuYuanID | int | 外键 | 录入员ID |
ShuXingJiHeID | int | 外键 |
|
ShuXingMingXiMingCheng | nchar(50) |
|
|
GengXinShiJian | datetime |
|
|
YouXiaoFou | bit |
|
|
BeiZhu | nchar(50) |
|
|
表4:工单录入表(pw_GongDianLuRu)
用于存放钟表录入的信息
列名 | 数据类型 | 主键/外键 | 说明 |
GongDanLuRuID | int | 主键 | 工单录入ID |
YuanShiDanHaoID | int | 外键 | 原始单号ID |
GongDanZhuanTaiID | int | 外键 | 工单状态ID |
JinEZhuangTaiID | int | 外键 | 金额状态ID |
GongDanLeiXingID | int | 外键 | 工单类型ID |
KeHuID | int | 外键 | 客户ID |
JianXiuLeiXingID | int | 外键 | 检修类型ID |
PinPaiID | int | 外键 | 品牌ID |
GongDanRiQi | date |
| 工单日期 |
GongDanBianHao | nchar(50) |
| 工单编号 |
SongXiuRiQi | data |
| 送修日期 |
YuFanRiQi | data |
| 预返日期 |
FenYongJinE | decimal(18, 4) |
| 费用金额 |
ZhongBiaoLeiXing | nchar(10) |
| 钟表类型 |
BiaoKuan | nchar(10) |
| 表款 |
GuiGe | text |
| 规格/名称 |
XiuPeiJiLu | text |
| 修配记录 |
JiXinXingHao | nchar(50) |
| 机芯号 |
BiaoXingHao | nchar(50) |
| 表型号 |
BiaoShenHao | nchar(50) |
| 表身号 |
BiaoDaiJieShu | nchar(50) |
| 表带节数 |
ZhongBiaoQiTaoMiaoShu | varchar(400) |
| 钟表其他描述 |
WaiGuan | text |
| 外观 |
KeHuZhiShu | varchar(400) |
| 客户自述 |
YouXiaoFou | Bit |
| 有效否 |
表5:属性集合表(sys_ShuXingJiHe)
列名 | 数据类型 | 主键/外键 | 说明 |
ShuXingJiHeID | int | 主键 | 属性集合ID |
ShuXingJiHeMingCheng | nchar(50) |
| 属性集合名称 |
表6:外派合作商表(sys_WaiPaiHeZuoShang)
列名 | 数据类型 | 主外键 | 说明 |
WaiPaiHeZuoShangID | int | 主键 | 外派合作商ID |
LuRuYuanID | int | 外键 | 录入员ID |
HeZuoShangMingCheng | nchar(50) |
| 合作商名称 |
LiangXiRen | nchar(50) |
| 联系人 |
LianXiDianHuan | nchar(50) |
| 联系电话 |
DiZhi | nchar(100) |
| 地址 |
| nchar(50) |
| |
WeiXin | nchar(50) |
| 微信 |
GengXinShiJian | datetime |
| 更新时间 |
YouXiaoFou | bit |
| 有效否 |
第二步:导入信息
一、 外派合作商:
效果截图:
2.2.6 (图3)
点击2.2.6(图3)红圈的按钮弹出选择外派合作商的弹窗,单击外派合作商再点击确定按钮或双击外派合作商可以选择外派合作商。
选择外派合作商的功能实现:
外派合作商弹窗的html代码:
@*外派合作商*@
<div id="frmHeZuoShang" class="reveal-modal" style="width: 705px; height: 340px;background-color:White">
<center>
<table>
<tr>
<td>关键字:<input id="txtMoHu" style="width: 200px;" class="easyui-textbox" /></td>
<td><a class="goodButton" οnclick="ChaXunHeZuoShangPage()" style="width: 80px; height: 20px">查询</a></td>
<td><a class="goodButton" οnclick="parent.addTab('外派合作商', '/JiChuZiLiao/WaiPaiHeZuoShang');" style="width: 80px; height: 20px">新增</a></td>
<td><a class="goodButton" οnclick="XuanZheHeZuoShang()" style="width: 80px; height: 20px">确定</a></td>
</tr>
</table>
<table id="dgvHeZuoShang" class="easyui-datagrid" style="width: 705px; height: 308px"
data-options="singleSelect:true,onDblClickRow:XuanZheHeZuoShang,footer:'#_PartnersPaging'">
<thead>
<tr>
<th data-options="field:'WaiPaiHeZuoShangID',width:80,hidden:true">
外派合作商ID
</th>
<th data-options="field:'HeZuoShangMingCheng',width:120" align="center">
合作商名称
</th>
<th data-options="field:'LiangXiRen',width:90" align="center">
联系人
</th>
<th data-options="field:'LianXiDianHuan',width:120" align="center">
联系电话
</th>
<th data-options="field:'DiZhi',width:150" align="center">
地址
</th>
<th data-options="field:'QQ',width:110" align="center">
QQ
</th>
<th data-options="field:'WeiXin',width:110" align="center">
微信
</th>
</tr>
</thead>
</table>
<div class="_Paging" id="_PartnersPaging">
<center>
<table class="_Layout">
<tr>
<td><a href="javascript:;" class="_HomePage" title="首页" οnclick="PartnersShouYe()"></a></td>
<td><a href="javascript:;" class="_PreviousPage" title="上一页" οnclick="PartnersShangYiYe()"></a></td>
<td><input class="_Skip" id="txtPartnersTiaoZhuan" title="回车跳转" οnkeypress="PartnersTiaoZhuan(event)" οnkeyup="value=value.replace(/[^\d]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))" /></td>
<td>/<label id="lblPartnersZongYeShu"></label></td>
<td><a href="javascript:;" class="_NextPage" title="下一页" οnclick="PartnersXiaYiYe()"></a></td>
<td><a href="javascript:;" class="_TrailerPage" title="尾页" οnclick="PartnersWeiYe()"></a></td>
<td>|</td>
<td>
总记录数:<label class = "_Totals" id="lblPartnersZongJiLuShu"></label>条
</td>
</tr>
</table>
</center>
</div>
</center>
<a class="close-reveal-modal">×</a>
</div><span style="font-size:18px;">
</span>
外派合作商jQuery代码:
// 选择合作商
function XuanZheHeZuoShang() {
var Row = $('#dgvHeZuoShang').datagrid("getSelected");//获取选中的外派合作商
if (Row) {
$('#HeZuoShangID').val(Row.WaiPaiHeZuoShangID);
$('#txtLianXiRen').textbox('setValue', $.trim(Row.LiangXiRen));
$('#txtLianXiDianHua').textbox('setValue', $.trim(Row.LianXiDianHuan));
$('#txtShouJianDanWei').textbox('setValue', $.trim(Row.HeZuoShangMingCheng));
$('#txtShouJianDiZhi').textbox('setValue', $.trim(Row.DiZhi));
$('#frmHeZuoShang').css('visibility', 'hidden');
$('.reveal-modal-bg').css('display', 'none');
}
else {
alert("请选中您要选择的合作商");
}
}<span style="font-size:18px;">
</span>
二、 外派工单
界面效果图:
2.2.6 (图4)
选择外派工单与选择外派合作商的方法一样。
第三步:保存外派单据
控制器提交保存代码:
#region 提交单据外派表单
public ActionResult InsertWaiPaiDanJu(Models.pw_GongDaoWaiPai GongDanWaiPai)
{
<span style="white-space:pre"> </span>GongDanWaiPai.GenXinShiJian = DateTime.Now;//获取当前时间
GongDanWaiPai.YouXiaoFou = true;
myMdl.pw_GongDaoWaiPai.AddObject(GongDanWaiPai);//保存界面传过来的表单
if (myMdl.SaveChanges() > 0)
{
XiuGaiGongDanZhuangTai(80, Convert.ToInt32(GongDanWaiPai.GongDanLuRuID));//调用自定义的修改工单状态方法
return Json("提交成功", JsonRequestBehavior.AllowGet);
}
else
{
return Json("提交失败", JsonRequestBehavior.AllowGet);
}
}
//修改工单状态
private int XiuGaiGongDanZhuangTai(int intGongDanZhuangTaiID, int GongDanID)
{
var varGongDan = (from dtGongDan in myMdl.pw_GongDianLuRu
where dtGongDan.GongDanLuRuID == GongDanID
select dtGongDan).Single<Models.pw_GongDianLuRu>();//查询要修改状态的单据
varGongDan.GongDanZhuanTaiID = intGongDanZhuangTaiID;//修改
return myMdl.SaveChanges();//保存
}
#endregion<span style="font-size:18px;">
</span>
第四步:打开界面层(View)
提交表单的jQuery代码:
//提交表单
function BaoCunWaiPaiDan() {
if ($('#txtLianXiRen').val() == "") {
alert("请选择联系人"); return;
}
if ($('#txtKuaiDiDanHao').val() == "") {
alert("请填写快递单号"); return;
}
if ($('#txtGongDan').val() == "") {
alert("请选择工单"); return;
}
$.getJSON("/WeiXiuGuanLi/ShengChengDanHao", function (data) {
$('#txtWaiPaiDanHao').val(data);
if (data) {
if ($('#txtWaiPaiDanHao').val() == "") { alert("单据号获取失败"); return; }
if (confirm("是否进行保存操作?")) {
$.ajax({
type: 'post',
url: '../WeiXiuGuanLi/InsertWaiPaiDanJu',
data: $('#formWaiPai').serialize(),
success: function (type) {
alert(type + ",单据号为:" + $('#txtWaiPaiDanHao').val());
window.location.href = "";//刷新当前页面
}
});
}
}
});
}<span style="font-size:18px;">
</span>
提交保修后我们可以点击
按钮转到查看外单的界面
界面效果图:
2.2.6(图5)
当外派的单据返回到店里时我们可以选中回店的单据,然后点击外派返店按钮,点击后弹出一个弹窗如2.2.6(图6):
2.2.6(图6)
填写相应的信息后点击提交按钮完成返店操作。
第一步:数据库
表与关系
表1:工单外派(pw_GongDanWaiPai)
存外派的单据信息
列名 | 类型 | 主外键 | 说明 |
GongDaoWaiPaiID | int | 主键 | 工单外派ID |
GongDanLuRuID | int | 外键 | 工单录入ID |
CaoZhuYuanID | int | 外键 | 录入员ID |
WaiPaiQianGongDanZhuangTaiID | int | 外键 | 外派时工单状态ID |
FangDianJieShouRenID | int | 外键 | 返店录入员ID |
FangHuiKuaiID | int | 外键 | 返店快递ID |
ShouJianRenID | int | 外键 | 收件人ID |
KuaiDiID | int | 外键 | 外派快递ID |
WaiPaiDanJuHao | nchar(50) |
| 外派单据号 |
WaiPaiShiJian | date |
| 外派时间 |
KuaiDiDanHao | nchar(50) |
| 快递单号 |
SunHuaiMiaoShu | text |
| 损坏描述 |
FangDianShiJian | date |
| 返店时间 |
FanDianKuaiDiDanHao | nchar(50) |
| 返店快递单号 |
GenXinShiJian | datetime |
| 更新时间 |
YouXiaoFou | bit |
| 有效 |
表2:员工表(sys_YuanGong)
列名 | 数据类型 | 主外键 | 说明 |
YuanGongID | int | 主键 | 员工ID |
LuRuYuanID | int | 外键 | 录入员ID |
JueSeID | int | 外键 | 角色ID |
YuanGongZhuangTaiID | int | 外键 | 员工状态ID |
MenDianID | int | 外键 | 门店ID |
YuanGongBianHao | nchar(50) |
| 员工编号 |
YuanGongXingMing | nchar(50) |
| 员工姓名 |
XingBie | nchar(50) |
| 性别 |
JiGuan | nchar(50) |
| 籍贯 |
XueLi | nchar(50) |
| 学历 |
ChuShengRiQi | date |
| 出生日期 |
ShenFenZhengHao | nchar(50) |
| 身份证号 |
RuZhiRiQi | date |
| 入职日期 |
RuZhiDiDian | nchar(50) |
| 入职地址 |
YiDongShouJi | nchar(50) |
| 移动手机 |
JiaTingDianHua | nchar(50) |
| 家庭电话 |
DiXin | nchar(50) |
| 底薪 |
DianZiYouXiang | nchar(50) |
| 电子邮箱 |
TongXunDiZhi | nchar(100) |
| 通讯地址 |
BeiZhu | nchar(100) |
| 备注 |
GengXinShiJian | datetime |
| 更新时间 |
YouXiaoFou | bit |
| 有效否 |
MiMa |
|
| 密码 |
表3:属性明细表(sys_ShuXingMingXi)
列名 | 数据类型 | 主外键 | 说明 |
ShuXingMingXiID | int | 主键 | 属性明细ID |
LuRuYuanID | int | 外键 | 录入员ID |
ShuXingJiHeID | int | 外键 |
|
ShuXingMingXiMingCheng | nchar(50) |
|
|
GengXinShiJian | datetime |
|
|
YouXiaoFou | bit |
|
|
BeiZhu | nchar(50) |
|
|
表4:工单录入表(pw_GongDianLuRu)
用于存放钟表录入的信息
列名 | 数据类型 | 主键/外键 | 说明 |
GongDanLuRuID | int | 主键 | 工单录入ID |
YuanShiDanHaoID | int | 外键 | 原始单号ID |
GongDanZhuanTaiID | int | 外键 | 工单状态ID |
JinEZhuangTaiID | int | 外键 | 金额状态ID |
GongDanLeiXingID | int | 外键 | 工单类型ID |
KeHuID | int | 外键 | 客户ID |
JianXiuLeiXingID | int | 外键 | 检修类型ID |
PinPaiID | int | 外键 | 品牌ID |
GongDanRiQi | date |
| 工单日期 |
GongDanBianHao | nchar(50) |
| 工单编号 |
SongXiuRiQi | data |
| 送修日期 |
YuFanRiQi | data |
| 预返日期 |
FenYongJinE | decimal(18, 4) |
| 费用金额 |
ZhongBiaoLeiXing | nchar(10) |
| 钟表类型 |
BiaoKuan | nchar(10) |
| 表款 |
GuiGe | text |
| 规格/名称 |
XiuPeiJiLu | text |
| 修配记录 |
JiXinXingHao | nchar(50) |
| 机芯号 |
BiaoXingHao | nchar(50) |
| 表型号 |
BiaoShenHao | nchar(50) |
| 表身号 |
BiaoDaiJieShu | nchar(50) |
| 表带节数 |
ZhongBiaoQiTaoMiaoShu | varchar(400) |
| 钟表其他描述 |
WaiGuan | text |
| 外观 |
KeHuZhiShu | varchar(400) |
| 客户自述 |
YouXiaoFou | Bit |
| 有效否 |
表5:外派合作商表(sys_WaiPaiHeZuoShang)
列名 | 数据类型 | 主外键 | 说明 |
WaiPaiHeZuoShangID | int | 主键 | 外派合作商ID |
LuRuYuanID | int | 外键 | 录入员ID |
HeZuoShangMingCheng | nchar(50) |
| 合作商名称 |
LiangXiRen | nchar(50) |
| 联系人 |
LianXiDianHuan | nchar(50) |
| 联系电话 |
DiZhi | nchar(100) |
| 地址 |
| nchar(50) |
| |
WeiXin | nchar(50) |
| 微信 |
GengXinShiJian | datetime |
| 更新时间 |
YouXiaoFou | bit |
| 有效否 |
第二步:打开控制器
提交返店信息控制器代码:
<span style="white-space:pre"> </span>#region 外派返店
/// <param name="dtWaiPaiDan">返店信息表单</param>
/// <param name="intWaiPaiDanJuID">外派单据ID</param>
/// <param name="intCaoZuoYuanID">操作员ID</param>
/// <returns></returns>
public ActionResult WaiPaiFanDian(Models.pw_GongDaoWaiPai dtWaiPaiDan, int intWaiPaiDanJuID, int intCaoZuoYuanID)
{
#region 录入返店信息
var varWaiPai = (from dtWaiPai in myMdl.pw_GongDaoWaiPai
where dtWaiPai.GongDaoWaiPaiID == intWaiPaiDanJuID
select dtWaiPai).Single<Models.pw_GongDaoWaiPai>();
varWaiPai.FangHuiKuaiID = dtWaiPaiDan.FangHuiKuaiID;
varWaiPai.FangDianJieShouRenID = intCaoZuoYuanID;
varWaiPai.FangDianShiJian = dtWaiPaiDan.FangDianShiJian;
varWaiPai.FanDianKuaiDiDanHao = dtWaiPaiDan.FanDianKuaiDiDanHao;
int i = myMdl.SaveChanges();
#endregion
if (i > 0)
{
#region 修改工单状态
var varGongDan = (from dtGongDan in myMdl.pw_GongDianLuRu
where dtGongDan.GongDanLuRuID == dtWaiPaiDan.GongDanLuRuID
select dtGongDan).Single<Models.pw_GongDianLuRu>();
varGongDan.GongDanZhuanTaiID = 81;
myMdl.SaveChanges();
#endregion
return Json(true, JsonRequestBehavior.AllowGet);
}
else
{
return Json(false, JsonRequestBehavior.AllowGet);
}
}
#endregion<span style="font-size:18px;">
</span>
第三步:打开视图层
打开弹窗jQuery代码:
//打开外派返店弹窗
function WaiPaiFanDian() {
$('#formFanDian').form("clear");
var varFanDian = $('#dgvWaiPaiDan').datagrid("getSelected");
if (varFanDian) {
if (varFanDian.FangDianJieShouRen == "未返店") {
$('#WaiPaiFanDian').reveal($(this).data());//打开弹窗
$('#lblGongDanBianHao').html(varFanDian.GongDanBianHao);
$('#lblWaiPaiDanHao').html(varFanDian.WaiPaiDanJuHao);
$('#lblWaiPaiShiJian').html(varFanDian.WaiPaiShiJian);
$('#GonDanID').val(varFanDian.GongDanLuRuID);
}
else {
alert("当前单据已返店");
}
}
else {
alert("请选择返店的单据");
}
}<span style="font-size:18px;">
</span>
提交返店信息jQuery代码:
//提交返店信息
function TiJiaoFanDian() {
if ($('#cboKuaiDi').combobox("getValue") == "" && $('#cboKuaiDi').combobox("getText") !="员工自带") {
alert("请选择快递"); return;
}
if ($('#txtKaiDiDanHao').val() == "" ) {
alert("请填写快递单号"); return;
}
var maintenance_cost_Date = $("#lblWaiPaiShiJian").html(); //获取日期
var predict_return_Date = $("#dtpFanDianShiJian").datebox("getValue");
var d1 = new Date(maintenance_cost_Date.replace(/\-/g, "\/")); //通过正则表达转化
var d2 = new Date(predict_return_Date.replace(/\-/g, "\/"));
if(d1>d2)
{
alert("返店时间不能早于外派时间!");
return;
}
$.ajax({
type: 'post',
url: '/WeiXiuGuanLi/WaiPaiFanDian?intWaiPaiDanJuID=' + $('#dgvWaiPaiDan').datagrid("getSelected").GongDaoWaiPaiID
+ "&" + "intCaoZuoYuanID=" + parent.ParentID,
data: $('#formFanDian').serialize(),
success: function (Dt) {
if (Dt) {
alert("提交成功");
$('#WaiPaiFanDian').css('visibility', 'hidden');
$('.reveal-modal-bg').css('display', 'none');
ChaXun();
}
else {
alert("提交失败");
}
}
});
}<span style="font-size:18px;">
</span>