📄 order.cgi
字号:
elsif ($FORM{'rec_address'} eq "") {$LIB->Error('没有地址');}
elsif ($FORM{'rec_postcode'} eq "") {$LIB->Error('没有邮政编码');}
elsif ($FORM{'rec_contact'} eq "") {$LIB->Error('没有联系电话');}
elsif ($FORM{'rec_email'} eq "") {$LIB->Error('没有电子信箱');}
}
#用户验证
$sth=$LIB->MySQL_Query("select passwd,name,address,postcode,phone,email from userdata where id = '$FORM{'uid'}'");
$user_row = $sth->fetchrow_arrayref();
if (($LIB->crypt("$FORM{'pwd'}")) ne $user_row->[0]) {$LIB->Error("用户密码错误");}
my (@user_order,@user_count,@user_spec,$all_order_count);
if ($COOKIE{'order'} eq "") { $LIB->Error("在没有订购商品的情况下是无法发送定单");}
###读出订购商品
@user_order=$LIB->Shopping("$COOKIE{'order'}");
@user_count=$LIB->Shopping("$COOKIE{'count'}");
@user_spec=$LIB->Shopping("$COOKIE{'spec'}");
###########调整
my $dm_pro_list=0;
my $i=0;
my $all_price=0;
for ($i=0;$i<=$#user_order ;$i++) {
my (@spec_desc,@spec,$spec_price,$pro_value);
if ($user_order[$i] =~ /[0-9]/) {
if ($user_spec[$i] eq 'NULL') {$user_spec[$i]="";}
$sth=$LIB->MySQL_Query("select num,name,price,spec_desc,spec,pid from store where num = '$user_order[$i]'");
$row = $sth->fetchrow_arrayref();
if ($row->[3] ne "") {#在当产品有类型的情况下
@spec_desc=$LIB->Str_spec($row->[3]);
@spec=$LIB->Str_spec($row->[4]);
for(my $fsc=0;$fsc<=$#spec;$fsc++) {
#计算当前类型是否加价
$spec_price=$spec[$fsc] if ($spec_desc[$fsc] eq $user_spec[$i]);
}
}
#总加价(型号加价*附加费)
$spec_price=$spec_price*$user_count[$i];
#单总价(单种订购量*单价格)
$pro_value=$user_count[$i]*$row->[2]+$spec_price;
#计算总价(当前单种价+总价)
$all_price=$all_price+$pro_value;
#总数量(当前数量+单种数量)
$all_order_count=$all_order_count+$user_count[$i];
if ($row->[0] ne "") {
$dbs{'pro_list'}{"$dm_pro_list"}={
num => $row->[0],
name => $row->[1],
price => $row->[2],
pro_value => $pro_value,
spec_current => $user_spec[$i],
spec_price => $spec_price,
order_count => $user_count[$i],
pid => $row->[5],
};
$dm_pro_list++;
}
}
}
###########################
#格式化送货方式,与费用
#计算邮费
my (%send_man);
%send_man=&_count_postage($FORM{'rec_type'},$all_order_count);
my $pay_type_desc = $CON{parameter}{"pay_type$FORM{'pay_type'}"};
my ($rec_name,$rec_address,$rec_postcode,$rec_contact,$rec_email,$remark);
if ($FORM{'change_info'} eq '1') {
$rec_name = $FORM{'rec_name'};
$rec_address = $FORM{'rec_address'};
$rec_postcode = $FORM{'rec_postcode'};
$rec_contact = $FORM{'rec_contact'};
$rec_email = $FORM{'rec_email'};
}
else {
$rec_name = $user_row->[1];
$rec_address = $user_row->[2];
$rec_postcode = $user_row->[3];
$rec_contact = $user_row->[4];
$rec_email = $user_row->[5];
}
$remark = $FORM{'remark'};
$text = {
rec_type_value => $send_man{'value'},
rec_type_desc => $send_man{'name'},
rec_type => $FORM{'rec_type'},
all_price => $all_price+$send_man{'value'},
uid => $FORM{'uid'},
pwd => $FORM{'pwd'},
change_info => $FORM{'change_info'},
pay_type => $FORM{'pay_type'},
pay_type_desc => $pay_type_desc,
rec_name => $rec_name,
rec_address => $rec_address,
rec_postcode => $rec_postcode,
rec_contact => $rec_contact,
rec_email => $rec_email,
remark => $FORM{'remark'},
loop_pro_list => $dm_pro_list-1,
imgurl => $CON{path}{webimg},
cgiurl => $CON{path}{cgiurl},
};
print $LIB->Parse("check_send_order.htm",$text,%dbs);
#MySQL Disconnect And The END
$LIB->MySQL_Disconnect();$LIB->exit();
}
##############################################################
# 定单发送程序(代码比较复杂)
sub do_send_order
{
my ($text,$rec_name,$sender_mailto,$rec_address,$rec_postcode,$rec_contact,$rec_email,$remark,$pay_type,$rec_type,$all_price);
#用户验证
$sth=$LIB->MySQL_Query("select passwd,name,address,postcode,phone,email from userdata where id = '$FORM{'uid'}'");
$row = $sth->fetchrow_arrayref();
if (($LIB->crypt("$FORM{'pwd'}")) ne $row->[0]) {$LIB->Error("用户密码错误");}
#检测是否按照系统用户的地址发货,还是按照重新输入的地址
if ($FORM{'change_info'} eq 'yes') {
if ($FORM{'rec_name'} eq "") {$LIB->Error('没有收货人');}
elsif ($FORM{'rec_address'} eq "") {$LIB->Error('没有地址');}
elsif ($FORM{'rec_postcode'} eq "") {$LIB->Error('没有邮政编码');}
elsif ($FORM{'rec_contact'} eq "") {$LIB->Error('没有联系电话');}
elsif ($FORM{'rec_email'} eq "") {$LIB->Error('没有电子信箱');}
$pay_type =$LIB->MySQL_Quote("$FORM{'pay_type'}");
$rec_type =$LIB->MySQL_Quote("$FORM{'rec_type'}");
$rec_name =$LIB->MySQL_Quote("$FORM{'rec_name'}");
$rec_address =$LIB->MySQL_Quote("$FORM{'rec_address'}");
$rec_postcode =$LIB->MySQL_Quote("$FORM{'rec_postcode'}");
$rec_contact =$LIB->MySQL_Quote("$FORM{'rec_contact'}");
$rec_email =$LIB->MySQL_Quote("$FORM{'rec_email'}");
$remark =$LIB->MySQL_Quote("$FORM{'remark'}");
$sender_mailto =$FORM{'rec_email'};
}
else {
$pay_type =$LIB->MySQL_Quote("$FORM{'pay_type'}");
$rec_type =$LIB->MySQL_Quote("$FORM{'rec_type'}");
$rec_name =$LIB->MySQL_Quote("$row->[1]");
$rec_address =$LIB->MySQL_Quote("$row->[2]");
$rec_postcode =$LIB->MySQL_Quote("$row->[3]");
$rec_contact =$LIB->MySQL_Quote("$row->[4]");
$rec_email =$LIB->MySQL_Quote("$row->[5]");
$sender_mailto =$row->[5];
$remark =$LIB->MySQL_Quote("$FORM{'remark'}");
}
##########
#测试购物限制时间 最后一次购物时间 > 当前时间-允许时间
my @dtime = $LIB->ReadTime(0);
my $grand_min = $dtime[1]-$CON{parameter}{shoplimit};
$grand_min = 0 if ($grand_min <= 0);
$sth=$LIB->MySQL_Query("select num from choosed where cretime > '$dtime[5]-$dtime[4]-$dtime[3] $dtime[2]:$grand_min:$dtime[0]' and choosed_name ='$FORM{'uid'}'");
$row = $sth->fetchrow_arrayref();
if ($row->[0] ne '') {$LIB->Error("请勿反复提交定单,请继续购物$CON{parameter}{shoplimit}分钟之后再提交定单");}
##########
#定单顺序号
$sth=$LIB->MySQL_Query("select num from choosed order by num desc limit 1");
$row = $sth->fetchrow_arrayref();
my $choosed_num = $row->[0]+1;
my (@user_order,@user_count,@user_spec,@spec_desc,@spec,$spec_price);
###读出订购商品
@user_order=$LIB->Shopping("$COOKIE{'order'}");
@user_count=$LIB->Shopping("$COOKIE{'count'}");
@user_spec=$LIB->Shopping("$COOKIE{'spec'}");
my $choosedpro_num;
#逐个将商品放如订购后产品数据表
for (my $for_pro=0;$for_pro<=$#user_order ;$for_pro++) {
$user_count[$for_pro]=1 if ($user_count[$for_pro] =~ /[^0-9]/);#如果当前所订购产品数量不是0-9的字符就归0
##########
#产品订购表中的顺序号
$sth=$LIB->MySQL_Query("select num from choosed_pro order by num desc limit 1");
$row = $sth->fetchrow_arrayref();
$choosedpro_num = $row->[0]+1;
#读出所订购产品的特性
$sth=$LIB->MySQL_Query("select num,name,pid,price,spec_desc,spec,statmsg from store where num = '$user_order[$for_pro]'");
$row = $sth->fetchrow_arrayref();
if ($row->[0] ne '') {#有商品情况才记录
if ($row->[4] ne "") {#在当产品有类型的情况下
@spec_desc=$LIB->Str_spec($row->[4]);
@spec=$LIB->Str_spec($row->[5]);
for(my $fsc=0;$fsc<=$#spec;$fsc++) {
#计算当前类型是否加价
$spec_price=$spec[$fsc] if ($spec_desc[$fsc] eq $user_spec[$for_pro]);
}
}
#记录数据
$LIB->MySQL_Do("INSERT into choosed_pro(num,come_chose,pro_id,pro_name,pro_pid,pro_price,pro_count,spec,spec_desc,cretime,status)
values('$choosedpro_num','$choosed_num','$row->[0]','$row->[1]','$row->[2]','$row->[3]','$user_count[$for_pro]','$spec_price','$user_spec[$for_pro]',sysdate(),'0')
");
#设置此商品已订购数量
$LIB->MySQL_Do("UPDATE store SET choosed= choosed+$user_count[$for_pro] WHERE num='$row->[0]' AND pid='$row->[2]'");
}
}
#将本定单的所有产品均读出
$all_price=0;
my $all_count=0;
$sth=$LIB->MySQL_Query("select pro_price,pro_count,spec from choosed_pro where come_chose = '$choosed_num'");
while ($row = $sth->fetchrow_arrayref()) {
#计算所有订购商品的总价
$all_price = $all_price + ($row->[0]+$row->[2])*$row->[1];
$all_count = $all_count+$row->[1];
}
#计算邮费
my %send_man=&_count_postage($FORM{'rec_type'},$all_count);
#包含邮费的价格
$all_price=$all_price+$send_man{'value'};
$LIB->MySQL_Do("INSERT into choosed(num,cretime,all_price,gather,gather_desc,send,send_desc,choosed_name,pay_type,pay_channel,rec_type,rec_type_desc,rec_name,rec_address,rec_postcode,rec_contact,rec_email,remark)
values('$choosed_num',sysdate(),'$all_price','0','','0','','$FORM{'uid'}',$pay_type,'',$rec_type,'$send_man{'name'}$send_man{'value'}',$rec_name,$rec_address,$rec_postcode,$rec_contact,$rec_email,$remark)
");
#####格式化发给用户的邮件
my $mail_user = $LIB->Parse("mail2user.mlt",{
username => $FORM{'uid'},
choosed_num => $choosed_num,
rec_type => $send_man{'name'},
all_price => $all_price,
pay_type => $CON{parameter}{"pay_type$FORM{'pay_type'}"},
company_address => $CON{syscon}{company_address},
company_postcode => $CON{syscon}{company_postcode},
company_recuser => $CON{syscon}{company_recuser},
cgiurl => $CON{path}{cgiurl},
webname => $CON{syscon}{webname},
weburl => $CON{syscon}{weburl},
});
&_sendmail($CON{syscon}{support_from},$CON{syscon}{support_replayto},$sender_mailto,"ieBUY确认信件",$mail_user);
#####格式化发给管理员的邮件
my $mail_sys = $LIB->Parse("mail2sys.mlt",{
username => $FORM{'uid'},
choosed_num => $choosed_num,
all_price => $all_price,
all_count => $all_count,
});
&_sendmail($CON{syscon}{support_from},$CON{syscon}{support_replayto},$CON{syscon}{support_replayto},"ieBUY新定单",$mail_sys);
$text ={
cgiurl => $CON{path}{cgiurl},
imgurl => $CON{path}{webimg},
all_count => $all_count,
all_price => $all_price,
pay_type_desc => $CON{parameter}{"pay_type$FORM{'pay_type'}"},
rec_type_desc => $send_man{'name'},
company_address => $CON{syscon}{company_address},
company_postcode => $CON{syscon}{company_postcode},
company_recuser => $CON{syscon}{company_recuser},
choosed_num => $choosed_num,
};
###
print ("Set-Cookie: order=; path=/\n");
print ("Set-Cookie: count=; path=/\n");
print ("Set-Cookie: spec=; path=/\n");
print $LIB->Parse("send_order_done.htm",$text);
#MySQL Disconnect And The END
$LIB->MySQL_Disconnect();$LIB->exit();
}
sub _sendmail
{
my ($from,$replay,$to,$subject,$text)=@_;
#SendMail System
open( MAIL, "| $CON{path}{sendmail} -t" ) || die $LIB->Lost("不能给您发邮件");
print MAIL "To: $to\n";
print MAIL "From: $from\n";
print MAIL "Reply-to: $replay\n";
print MAIL "Subject: $subject\n\n";
print MAIL "$text","\n\n";
close MAIL;
return();
}
sub _count_postage
{
###########################
#目前支持两种,1为普通2为特快
my (%postage,$rec_type,$amount);
($rec_type,$amount)=@_;
if ($amount > $CON{parameter}{"rec_num_type$rec_type"}) {
$postage{'value'}=($amount-$CON{parameter}{"rec_num_type$rec_type"})*$CON{parameter}{"rec_addup_type$rec_type"}+$CON{parameter}{"rec_value_type$rec_type"};
}
else {
$postage{'value'}=$CON{parameter}{"rec_value_type$rec_type"};
}
$postage{'name'}=$CON{parameter}{"rec_type$rec_type"};
return(%postage);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -