package com.webshoprsmex.controller;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import com.alibaba.fastjson.JSONObject;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.internal.util.AlipaySignature;
import com.alipay.api.request.AlipayTradePagePayRequest;
import com.alipay.api.request.AlipayTradeRefundRequest;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.webshoprsmex.config.AlipayConfig;
import com.webshoprsmex.model.Cart;
import com.webshoprsmex.model.Item;
import com.webshoprsmex.model.Order;
import com.webshoprsmex.model.Orderitem;
import com.webshoprsmex.model.Payrecord;
import com.webshoprsmex.model.User;
import com.webshoprsmex.service.CartService;
import com.webshoprsmex.service.ItemService;
import com.webshoprsmex.service.OrderService;
import com.webshoprsmex.service.OrderitemService;
import com.webshoprsmex.service.PayrecordService;
import com.webshoprsmex.service.RefundrecordService;
import com.webshoprsmex.util.Constant;
import com.webshoprsmex.util.DateUtil;
/**
* 前台订单控制器
*/
@Controller
@Scope("prototype")
@RequestMapping(value = "front/order")
public class FrontOrderController extends BaseController{
@Autowired
private ItemService itemService;//注入商品业务类
@Autowired
private CartService cartService;//注入购物车业务类
@Autowired
private OrderService orderService;//注入订单业务类
@Autowired
private OrderitemService orderitemService;//注入订单详情业务类
@Autowired
private PayrecordService payrecordService;//注入支付记录业务类
@Autowired
private RefundrecordService refundrecordService;//注入退款记录业务类
/**
* 分页带参数查询,我的订单
* @param map
* @param pageNum
* @param pageSize
* @return
*/
@RequestMapping("/list")
public String list(ModelMap map,
@RequestParam(value="pageNum", defaultValue="1") int pageNum,
@RequestParam(value="pageSize", defaultValue = Constant.pageSize) int pageSize){
PageHelper.startPage(pageNum, pageSize);
//查询参数集合
params.add(new Object[]{"userid","=",getCurrentUser().getId()});
List<Order> list = orderService.find(params);
PageInfo<Order> pageInfo = new PageInfo<Order>(list);
map.put("pageBean", pageInfo);
return "front/order/list";
}
/**
* 跳转到支付页面
* @param orderid
* @return
*/
@RequestMapping("/pay")
public String pay(Integer orderid,Model model){
Order order = orderService.selectByPrimaryKey(orderid);
if(order!=null && order.getUserid()==getCurrentUser().getId() && order.getState()==1){
params.add(new Object[]{"oi.orderid","=",orderid});
List<Orderitem> orderitemList = orderitemService.findJoin(params);
model.addAttribute("order",order);
model.addAttribute("orderitemList",orderitemList);
}
return "front/order/pay";
}
/**
* 支付,跳转到支付宝支付页面
* @param orderid 订单编号
* @param bankname 支付方式
* @param banknum 支付账号
* @return 返回字符串(html格式,是一个表单和一个提交表单的js)
* @throws Exception
*/
@RequestMapping(value = "/doPay", produces = "text/html; charset=UTF-8")
@ResponseBody
public String doPay(Integer orderid,String bankname,String banknum) throws Exception{
//查询订单,只有在订单未支付状态才允许支付
Order order = orderService.selectByPrimaryKey(orderid);
if(order!=null && order.getUserid()==getCurrentUser().getId() && order.getState()==1){
//修改订单的 支付方式和支付账号
order.setBankname(bankname);
order.setBanknum(banknum);
orderService.updateByPrimaryKeySelective(order);
//获得初始化的AlipayClient
AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.gatewayUrl,
AlipayConfig.app_id, AlipayConfig.merchant_private_key, "json",
AlipayConfig.charset, AlipayConfig.alipay_public_key, AlipayConfig.sign_type);
//设置请求参数
AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();
alipayRequest.setReturnUrl(AlipayConfig.return_url);
alipayRequest.setNotifyUrl(AlipayConfig.notify_url);
//商户订单号,商户网站订单系统中唯一订单号,必填
String out_trade_no = new String(String.valueOf(orderid).getBytes("ISO-8859-1"),"UTF-8");
//付款金额,必填
String total_amount = new String(order.getTotalprice().getBytes("ISO-8859-1"),"UTF-8");
//商品名称,必填,长度256
String subject = "购物订单!" + DateUtil.getCurrentDate();
//商品描述,可空
String body = "";
//请求设置参数
alipayRequest.setBizContent("{\"out_trade_no\":\""+ out_trade_no +"\","
+ "\"total_amount\":\""+ total_amount +"\","
+ "\"subject\":\""+ subject +"\","
+ "\"body\":\""+ body +"\","
+ "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");
//请求
String result = alipayClient.pageExecute(alipayRequest).getBody();
return result;
}else{
return "操作异常!";
}
}
/**
* 支付宝支付成功后返回接口
* @return
* @throws Exception
*/
@RequestMapping("/doPayReturn")
public String doPayReturn(ModelMap modelMap) throws Exception{
int success = 0;//支付成功或者失败标记,大于0:成功,0:失败
String message = "";//操作成功或者失败提示
//获取支付宝GET过来反馈信息
Map<String,String> params = new HashMap<String,String>();
Map<String,String[]> requestParams = request.getParameterMap();
//遍历响应信息
for (Iterator<String> iter = requestParams.keySet().iterator(); iter.hasNext();) {
String name = (String) iter.next();
String[] values = (String[]) requestParams.get(name);
String valueStr = "";
for (int i = 0; i < values.length; i++) {
valueStr = (i == values.length - 1) ? valueStr + values[i]
: valueStr + values[i] + ",";
}
//乱码解决,这段代码在出现乱码时使用
valueStr = new String(valueStr.getBytes("ISO-8859-1"), "utf-8");
params.put(name, valueStr);
}
System.out.println(params);
boolean signVerified = false;
try{
//调用SDK验证签名
signVerified = AlipaySignature.rsaCheckV1(params, AlipayConfig.alipay_public_key,
AlipayConfig.charset, AlipayConfig.sign_type);
}catch(Exception exception){
exception.printStackTrace();
}
//验证签名
if(signVerified) {
//商户订单号trade_no
String out_trade_no = new String(request.getParameter("out_trade_no").getBytes("ISO-8859-1"),"UTF-8");
//支付宝交易号out_trade_no
String trade_no = new String(request.getParameter("trade_no").getBytes("ISO-8859-1"),"UTF-8");
//付款金额total_amount
String total_amount = new String(request.getParameter("total_amount").getBytes("ISO-8859-1"),"UTF-8");
//保存返回数据
modelMap.put("out_trade_no", out_trade_no);
modelMap.put("trade_no", trade_no);
modelMap.put("total_amount", total_amount);
//修改订单状态并添加支付记录
Integer orderid = Integer.parseInt(out_trade_no);
success = orderService.doPay(orderid, total_amount, trade_no);
}else {
//验签失败
message = "验签失败!请联系管理员!";
}
modelMa
没有合适的资源?快使用搜索试试~ 我知道了~
毕业设计-基于协同过滤算法SSM个性化推荐购物商城源码+文档说明
共685个文件
png:92个
js:86个
class:79个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
5星 · 超过95%的资源 3 下载量 41 浏览量
2023-11-03
02:01:55
上传
评论 3
收藏 41.02MB ZIP 举报
温馨提示
此网站是一个全品类的购物商城系统,然后在传统的购物商城的基础上面加入了协同过滤算法,包括了基于用户的协同过滤算法和基于商品的协同过滤算法。用户协同过滤算法的核心思想在于根据用户评分矩阵计算用户余弦相似度,然后推荐相似用户喜欢的商品;物品协同过滤算法也是根据用户的订单记录构建了用户物品矩阵,通过jaccard系数计算物品相似度,具体实现可以参考代码。网站一共有2个身份包括用户和管理,用户没登录之前在首页可以查询热门推荐商品,用户注册登录后可以根据协同过滤算法给用户个性化推荐,用户可以根据关键词查询商品,查看商品详情和评论商品,可以收藏商品和给商品评分,加入商品到购物车提交订单结算,其中订单的结算对接了支付宝在线支付接口,用户可以在个人中心修改个人信息,查询自己的订单记录、评分记录和支付记录,用户也可以申请退款,可以管理自己发布的评论,可以查询自己的商品收藏记录;管理员登录后台后可以查询各种统计信息,可以发布和管理商品信息包括商品分类信息,管理注册用户信息,查询用户订单和发货等。--------------------------------------------------------
资源推荐
资源详情
资源评论
收起资源包目录
毕业设计-基于协同过滤算法SSM个性化推荐购物商城源码+文档说明 (685个子文件)
FrontOrderController.class 15KB
CFUtil.class 8KB
FrontItemController.class 7KB
AdminIndexController.class 6KB
FrontIndexController.class 5KB
FrontUserController.class 5KB
CommonController.class 5KB
FrontCommentController.class 4KB
MailUtil.class 4KB
FrontCartController.class 4KB
CFDataModelUtil.class 4KB
AdminItemController.class 4KB
AuthInterceptor.class 4KB
CFPrintUtil.class 4KB
FrontScorerecordController.class 4KB
AdminOrderController.class 3KB
AdminTypeController.class 3KB
Order.class 3KB
FrontCollectController.class 3KB
AdminCommentController.class 3KB
AdminUserController.class 3KB
FrontRefundrecordController.class 3KB
FrontPayrecordController.class 3KB
AdminScorerecordController.class 3KB
FrontLoginController.class 3KB
AlipayConfig.class 3KB
AdminCollectController.class 3KB
ItemService.class 3KB
TypeService.class 3KB
OrderService.class 3KB
BaseService.class 3KB
Orderitem.class 2KB
FrontRegisterController.class 2KB
AdminRefundrecordController.class 2KB
Refundrecord.class 2KB
Payrecord.class 2KB
AdminPayrecordController.class 2KB
Item.class 2KB
AdminOrderitemController.class 2KB
FrontOrderitemController.class 2KB
Comment.class 2KB
Scorerecord.class 2KB
Collect.class 2KB
User.class 2KB
ScoreAnalysis.class 2KB
Cart.class 2KB
BaseController.class 1KB
InitAppListener.class 1KB
Constant.class 1KB
CurScoreAnalysis.class 1KB
Admin.class 1KB
DateUtil.class 1KB
OrderitemService.class 1019B
ValcodeModel.class 1007B
CartService.class 995B
ScorerecordService.class 956B
BaseMapper.class 940B
Type.class 905B
ItemMapper.class 607B
RefundrecordService.class 535B
CommonUtil.class 530B
PayrecordService.class 523B
CollectService.class 515B
CommentService.class 515B
AdminService.class 507B
UserService.class 503B
OrderitemMapper.class 454B
CFConstantUtil.class 443B
ScorerecordMapper.class 408B
CartMapper.class 380B
RefundrecordMapper.class 299B
BaseModel.class 298B
PayrecordMapper.class 290B
CollectMapper.class 284B
CommentMapper.class 284B
AdminMapper.class 278B
OrderMapper.class 278B
TypeMapper.class 275B
UserMapper.class 275B
.classpath 889B
org.eclipse.wst.common.component 568B
org.eclipse.wst.jsdt.ui.superType.container 49B
plugins.css 202KB
bootstrap.min.css 152KB
bootstrap.css 117KB
style.css 106KB
animate.min.css 57KB
ionicons.css 56KB
main.css 50KB
ueditor.css 44KB
font-awesome.min.css 35KB
ueditor.min.css 34KB
jquery-ui.min.css 31KB
video-js.css 21KB
image.css 19KB
video.css 15KB
attachment.css 15KB
layer.css 14KB
swiper-bundle.min.css 13KB
video-js.min.css 11KB
共 685 条
- 1
- 2
- 3
- 4
- 5
- 6
- 7
资源评论
- qq_588822982024-06-01资源内容详尽,对我有使用价值,谢谢资源主的分享。
- )闲云野鹤(2024-03-18这个资源对我启发很大,受益匪浅,学到了很多,谢谢分享~
- 2301_772263552024-04-15资源很赞,希望多一些这类资源。
机智的程序员zero
- 粉丝: 2458
- 资源: 4700
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Python_交互式深度学习书籍,包含多框架代码数学和讨论,被斯坦福、麻省理工、哈佛和剑桥等70个国家的500所大学采.zip
- Python_经典技术书籍推荐持续更新.zip
- Python_经典编程书籍大全涵盖计算机系统与网络系统架构算法与数据结构前端开发后端开发移动开发数据库测试项目与团队程.zip
- Python_经典软件开发资源的中文翻译.zip
- Python_具有任务调度的并行计算.zip
- Python_卡尔曼滤波书使用Jupyter笔记本侧重于建立直觉和经验,而不是正式的证明包括卡尔曼滤波器扩展卡尔曼滤波.zip
- WordPress网创知识付费美化以及更新自动同步插件.zip
- Python_具有研究友好特征的深度强化学习算法PPO DQN C51 DDPG TD3 SAC PPG的高质量单文件.zip
- Python_开源AIML平台.zip
- Python_开发者优先的错误跟踪和性能监控.zip
- Python_开放机器学习课程.zip
- Python_开源的自托管web归档采用URLsbrowser historybookmarkspoketpinboa.zip
- Python_开源功能标记和远程配置服务主机或使用我们的托管版本在.zip
- Python_开源JIRA Linear Monday和Asana Alternative Plane可以帮助您以最简.zip
- abaqus微动磨损仿真,UMESHMOTION子程序,循环载荷下磨损深度变化情况
- Python_开源开发者平台,为您的整个基础设施提供动力,并将脚本转换为webhook工作流和ui的最快工作流引擎,与.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功