B076-项目实战--宠物上下架 展示 领养 收购订单

目录

      • 上下架功能提供
        • 后台宠物列表实现
      • 前台展示
        • 前台宠物列表和详情展示
        • 店铺展示
      • 领养
        • 分析
        • 前台
        • 后端
          • PetController
          • PetServiceImpl
      • 订单
        • 需求分析
          • 可能产生订单的模块
          • 订单模块额外功能
        • 订单设计
          • 表设计
          • 流程设计
        • 集成基础代码
        • 收购订单
          • 创建订单
            • 前端
            • 后端

上下架功能提供

后台宠物列表实现

后端:拷贝product模块,替换大小写字母,调整字段名,时间显示格式等,
后台:拷贝资源中的pet.vue,配置路由,调整变量名,

前台展示

前台宠物列表和详情展示

前台拷贝product.html为pet.html,替换大小写字母,首页跳转过来,pet能跳转其他,
前台拷贝productDetail.html为petDetail.html,替换大小写字母,改预定须知为领养须知,
修改后端loadById查详情sql,前端取店名展示

    <resultMap id="petMap" type="Pet">
        <id property="id" column="id"></id>
        <result property="name" column="name"></result>
        <result property="resources" column="resources"></result>
        <result property="saleprice" column="saleprice"></result>
        <result property="costprice" column="costprice"></result>
        <result property="offsaletime" column="offsaletime"></result>
        <result property="onsaletime" column="onsaletime"></result>
        <result property="state" column="state"></result>
        <result property="createtime" column="createtime"></result>
        <!--private PetDetail detail = new PetDetail();-->
        <association property="detail" javaType="PetDetail">
            <id property="id" column="pdid"></id>
            <result property="intro" column="intro"></result>
            <result property="adoptNotice" column="adoptNotice"></result>
        </association>
        <association property="shop" javaType="Shop">
            <id property="id" column="sid"></id>
            <result property="name" column="sname"></result>
        </association>
    </resultMap>

    <select id="loadById" parameterType="long" resultMap="petMap">
        select
         p.*,
         pd.id pdid,pd.intro,pd.adoptNotice,
         s.id sid,s.name sname
         from t_pet p
        LEFT JOIN t_pet_detail pd on p.id = pd.pet_id
        LEFT join t_shop s on p.shop_id = s.id
        where p.id = #{id}
    </select>
                <!--名称-->
                <div class="tb-detail-hd">
                    <h1>
                        【{{pet.shop.name}}】 {{pet.name}}
                    </h1>
                </div>

店铺展示

petDetail页面的大包装右边展示店铺名称
通过:href="shopUrl"携带shopid跳往shop页面

<li class="qc last"><a :href="shopUrl" style="color: green">{{pet.shop.name}}</a></li>
shopUrl:"",
mounted(){
            let petId = parseUrlParams2Obj(location.href).petId;
            this.$http.get("/pet/"+petId)
                .then(result=>{
                    this.pet = result.data;
                    if(this.pet.resources){
                        this.resources = this.pet.resources.split(',');
                    }
                    this.shopUrl = "shop.html?shopId="+this.pet.shop.id;
                })
                .catch(result=>{
                    console.log(result);
                    alert("系统错误");
                })
        }

拷贝success页面为shop页面,替换引入路径,修改标题,引入vue和Axios,
写个div把body以内全包起来,发请求拿shop数据过来展示,

 <script type="text/javascript">
     new Vue({
         el:"#myShop",
         data:{
             shop:{}
         },
         methods:{
             getShop(){
                let shopId = parseUrlParams2Obj(location.href).shopId;
                this.$http.get("/shop/"+shopId)
                    .then(result=>{
                        this.shop = result.data;
                        $("#myTitle").html(this.shop.name);//自己去yyy
                    })
                    .catch(result=>{
                        console.log(result);
                        alert("系统错误");

                    })
             }
         },
         mounted(){
             this.getShop();
         }
     })
 </script>

领养

分析

领养即购买,立即领养进入领养流程,购物车可通过加一个表实现(包含userid和宠物信息),

点击立即购买后流程:
传入宠物信息,修改为下架,绑定购买者userid,生成订单和支付(这两个放到后面)

前台

petDetail页面把立即购买包进div里,
立即购买超链接绑定事件,发请求到后端进入处理流程,(扩展:处理完后进入个人中心-我的领养 展示宠物表中userId是自己的)

<a id="LikBuy" title="点此按钮到下一步确认购买信息" href="javascript:;" @click="adopt">立即购买</a>
		adopt(){
			let petId = this.pet.id;
			let flag = window.confirm("你确认领养吗?")
			if(flag){
				this.$http.get("/pet/adopt/"+petId)
					.then(result=>{
						result = result.data;
						if(result.success){
							alert("领养成功!");
							//本来应该跳转到个人中心,查案个人领养宠物信息
							//这里我们就跳转到首页
							location.href="index.html";
						}else{
							alert(result.message);
						}
					})
					.catch(result=>{
						alert("系统错误");
					})
			}
			//location.href="adoptOrder.html?petId="+this.pet.id;
		}

后端

PetController
    /**
     * 领养宠物
     */
    @GetMapping("/adopt/{petId}")
    public AjaxResult adopt(@PathVariable("petId") Long petId, HttpServletRequest request){
        try {
            Logininfo loginIn = LoginContext.getLoginIn(request);
            petService.adopt(petId,loginIn.getId());
            return AjaxResult.me();
        } catch (Exception e) {
            e.printStackTrace();
            return AjaxResult.me().setMessage("领养失败!"+e.getMessage());
        }
    }
PetServiceImpl
    @Override
    public void adopt(Long petId, Long loginInfoId) {
        //1.修改状态  下架
        Pet pet = petMapper.loadById(petId);
        pet.setState(0);
        pet.setOffsaletime(new Date());
        //2.绑定用户
        User user = userMapper.loadByloginInfoId(loginInfoId);
        pet.setUser(user);
        pet.setUser_id(user.getId());
        pet.setShop_id(pet.getShop().getId());
        //3.保存
        petMapper.update(pet);

        //@TODO 生成领养订单  + 支付
        System.out.println("领养成功!");
    }

订单

需求分析

可能产生订单的模块

1.宠物收购订单-店家给用户钱
垫付:用户立马就能获取到钱,员工定时报账。
余额支付:付款余额,用户可以提现。 平台相当于给了用户钱,店家用给平台钱。
银行转账:银行转账,店家财务依次给用户转账。
2.服务订单(多次消费)-用户给店家钱
3.领养订单(一次)-用户给店家钱
4.充值订单(一次)-用户充值平台,用户消费后,平台要给店铺打钱。
5.商品订单(多次)-用户给店家钱

特别说明一下:
大平台一般钱先到平台,用户确认后,平台才划账到店家。如果用户长时间不确认,自动确认。
我们小平台直接到店家,我们没有支付牌照。

每一类型的订单都要有独立的表来存

订单模块额外功能

1.系统报表、财务报表等
2.商家的账单下载(easyPOI的导入与导出)
3.系统对账服务(退款,支付异常等)
4.30分钟未支付取消订单(定时器)

订单设计

表设计

九张: 用户地址 订单地址 收购订单 领养订单 充值订单 商品订单 商品订单详情 服务订单 服务订单详情

我们需要关心的五张表:
t_user_address:用户地址,
t_order_address:订单地址,下单时的用户地址,绑定某个订单
t_order_pet_acquisition:收购订单,一次性,不需要存详情
t_order_adopt:领养订单,一次性,不需要存详情
t_order_product:服务订单,可多次消费,需要存详情
在这里插入图片描述

在这里插入图片描述

流程设计

用户付钱给商家,两个定时任务
在这里插入图片描述
商家付款给用户(收购订单)
在这里插入图片描述
工作人员上门,应该带一个手提电脑,处理完并下单。以后需要商家版App,可以在上面操作,不需要手提电脑。

集成基础代码

拷贝资源

收购订单

创建订单
前端

待处理消息处理窗口增加支付选项下拉框

后端

SearchMasterMsgController

    /**
     * 处理消息
     */
    @PutMapping("/handle")
    public AjaxResult handle(@RequestBody Pet pet,HttpServletRequest request){
        try {
            Logininfo loginIn = LoginContext.getLoginIn(request);
            seachMasterMsgService.handle(pet,loginIn.getId());
            return AjaxResult.me();
        } catch (Exception e) {
            e.printStackTrace();
            return AjaxResult.me().setMessage("处理失败!"+e.getMessage());
        }
    }

SearchMasterMsgServiceImpl

	/**
     * 处理消息
     */
    @Override
    public void handle(Pet pet,Long loginInfoId) {
        //1.改状态  --已处理
        searchMasterMsgMapper.updateStateForProcessed(pet.getSearch_master_msg_id());
        //2.生成宠物基本信息
        petMapper.save(pet);
        //3.宠物详情
        PetDetail detail = pet.getDetail();
        if(detail != null){
            detail.setPet_id(pet.getId());
            petDetailMapper.save(detail);
        }
        //4.生成订单
        Employee employee = employeeMapper.loadByLoginInfoId(loginInfoId);
        SearchMasterMsg searchMasterMsg = searchMasterMsgMapper.loadById(pet.getSearch_master_msg_id());
        PetAcquisitionOrder order = pet2order(pet, searchMasterMsg, employee.getId());
        petAcquisitionOrderMapper.save(order);
        //5.生成支付@TODO
    }

    private PetAcquisitionOrder pet2order(Pet pet, SearchMasterMsg adopt,Long employeeId) {
        PetAcquisitionOrder order = new PetAcquisitionOrder();
        order.setDigest("[摘要]对"+pet.getName()+"收购订单!");
        order.setState(0);//待支付
        order.setPrice(pet.getCostprice());
        order.setAddress(adopt.getAddress());
        String orderSn = CodeGenerateUtils.generateOrderSn(adopt.getUser_id());
        order.setOrderSn(orderSn);
        order.setPet_id(pet.getId());
        order.setUser_id(adopt.getUser_id());
        order.setPaytype(0);
        order.setShop_id(pet.getShop_id());
        order.setEmp_id(employeeId);
        return order;
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/54351.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

解决AttributeError: ‘DataParallel‘ object has no attribute ‘xxxx‘

问题描述 训练模型时&#xff0c;分阶段训练&#xff0c;第二阶段加载第一阶段训练好的模型的参数&#xff0c;接着训练 第一阶段训练&#xff0c;含有代码 if (train_on_gpu):if torch.cuda.device_count() > 1:net nn.DataParallel(net)net net.to(device)第二阶段训练…

数据结构-链表结构-单向链表

链表结构 说到链表结构就不得不提起数据结构&#xff0c;什么是数据结构&#xff1f;就是用来组织和存储数据的某种结构。那么到底是某种结构呢&#xff1f; 数据结构分为&#xff1a; 线性结构 数组&#xff0c;链表&#xff0c;栈&#xff0c;队列 树形结构 二叉树&#x…

P1219 [USACO1.5] 八皇后 Checker Challenge

题目 思路 非常经典的dfs题&#xff0c;需要一点点的剪枝 剪枝①&#xff1a;行、列&#xff0c;对角线的标记 剪枝②&#xff1a;记录每个皇后位置 代码 #include<bits/stdc.h> using namespace std; const int maxn105; int a[maxn];int n,ans; bool vis1[maxn],vis…

解决:请求的资源[/xxx/]不可用 描述 源服务器未能找到目标资源的表示或者是不愿公开一个已经存在的资源表示。

1. 复现错误 今天启动jsp servlet项目&#xff0c;却报出如下错误&#xff1a; 2. 分析问题 报出该错误&#xff0c;一般是tomcat无法访问webapp下的文件&#xff0c;特采用如下方法解决问题。 检查涉及到jdk的版本号是否一致&#xff0c;我的是1.8的版本&#xff0c;所以&am…

AI革命:揭开微软无与伦比的AI技术面纱

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 2023年7月25日&#xff0c;全球科技行业的领导者之一微软(MSFT)公布了其2023财年第四季度的财报。 除了举世闻名的Windows操作系统&#xff0c;微软还通过笔记本电脑、个人电脑和服务器等产品改变了世界&#xff0c;该公司…

QMessageBox类

QMessageBox类 静态方法例子 静态方法 调用这一些静态成员函数&#xff0c;就可以得到模态提示框 枚举值为&#xff1a; 例子 头文件&#xff1a; #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow> #include <QMessageBox>QT_BEGIN_NAMESPACE…

gorm基础

Gorm 官方文档&#xff1a;https://gorm.io/zh_CN/ 安装 go get -u github.com/jinzhu/gorm连接数据库 连接不同的数据库都需要导入对应数据的驱动程序&#xff0c;GORM已经贴心的为我们包装了一些驱动程序&#xff0c;只需要按如下方式导入需要的数据库驱动即可&#xff1…

Android Studio 关于BottomNavigationView 无法预览视图我的解决办法

一、前言&#xff1a;最近在尝试一步一步开发一个自己的软件&#xff0c;刚开始遇到的问题就是当我们引用 com.google.android.material.bottomnavigation.BottomNavigationView出现了无法预览视图的现象&#xff0c;我也在网上查了很多中解决方法&#xff0c;最后在执行了如下…

会议oa系统项目部署流程

目录 1.项目部署环境 2.初始化数据库 2.1获取数据库脚本 2.2创建数据库 1.创立数据库连接 2.创建数据库&#xff0c;命名 3.运行sql文件 4.查看导入数据 ​编辑 ​编辑 3项目环境部署 3.1导入项目资源 3.2加载框架 加载成功标志 服务器配置&#xff08;用来保存排…

glide加载content://com.android.contacts图片源码粗略梳理

获取链路是这样的&#xff1b; UriLoader类里定义了协议头&#xff1a; 里面有个内部类StreamFactory&#xff1a; 通过StreamLocalUriFetcher类的loadResource方法获取InputStream然后把流转换成为图片&#xff1b; 在这里作个草稿笔记给自己看

数字IC验证高频面试问题整理附答案(二)

近日后台有同学私信还想要验证的面试题目&#xff0c;这不就来了~ Q16.权重约束中”:”和”: /”的区别 : 操作符表示值范围内的每一个值的权重是相同的,比如[1:3]:40,表示1&#xff0c;2&#xff0c;3取到的概率为40/120&#xff1b; :&#xff0f;操作符表示权重要平均分到…

企业级开发中协同开发与持续集成持续部署

文章目录 1 创建代码仓库2 使用git协同开发2.1 独立团队开发2.2 多团队开发git工作流 2 持续集成和持续部署2.1 创建docker镜像2.2 使用coding构建 1 创建代码仓库 每个项目有唯一的代码仓库&#xff0c;所以不是每个开发者都需要创建一个代码仓库&#xff0c;一般都是项目负责…

力扣每日一题--2050. 并行课程 III(拓补排序例题)

题目传送门 题目描述&#xff1a; 给你一个整数 n &#xff0c;表示有 n 节课&#xff0c;课程编号从 1 到 n 。同时给你一个二维整数数组 relations &#xff0c;其中 r e l a t i o n s [ j ] [ p r e v C o u r s e j , n e x t C o u r s e j ] relations[j] [prevCours…

第五章 HL7 架构和可用工具 - 创建新的自定义架构

文章目录 第五章 HL7 架构和可用工具 - 创建新的自定义架构创建新的自定义架构定义新段 第五章 HL7 架构和可用工具 - 创建新的自定义架构 创建新的自定义架构 要从管理门户启动自定义架构编辑器&#xff0c;请从主页选择互操作性 > 互操作 > HL7 v2.x >HL7 v2.x 架…

Python-如何使用正则表达式

如何利用Python使用正则表达式 目录 正则表达式常用匹配规则 ​编辑re库的使用 match()方法&#xff1a; search()方法: findall()方法 : sub()方法: compile()方法; 通用匹配 贪婪与非贪婪匹配 贪婪匹配 非贪婪匹配 修饰符 转义匹配 正则表达式是处理字符的强大…

RabbitMQ 教程 | 第5章 RabbitMQ 管理

&#x1f468;&#x1f3fb;‍&#x1f4bb; 热爱摄影的程序员 &#x1f468;&#x1f3fb;‍&#x1f3a8; 喜欢编码的设计师 &#x1f9d5;&#x1f3fb; 擅长设计的剪辑师 &#x1f9d1;&#x1f3fb;‍&#x1f3eb; 一位高冷无情的编码爱好者 大家好&#xff0c;我是 DevO…

MATLAB | 如何绘制这样的描边散点图?

part.-1 前前言 最近略忙可能更新的内容会比较简单&#xff0c;见谅哇&#xff0c;今日更新内容&#xff1a; part.0 前言 看到gzhBYtools科研笔记(推荐大家可以去瞅瞅&#xff0c;有很多有意思的图形的R语言复现&#xff01;&#xff01;)做了这样一张图&#xff1a; 感觉很…

【论文阅读24】Better Few-Shot Text Classification with Pre-trained Language Model

论文相关 论文标题&#xff1a;论文标题&#xff1a;Label prompt for multi-label text classification&#xff08;基于预训练模型对少样本进行文本分类&#xff09; 发表时间&#xff1a;2021 领域&#xff1a;多标签文本分类 发表期刊&#xff1a;ICANN&#xff08;顶级会…

CASAIM自动化平面度检测设备3D扫描零部件形位公差尺寸测量

平面度是表面形状的度量&#xff0c;指示沿该表面的所有点是否在同一平面中&#xff0c;当两个表面需要连接在一起形成紧密连接时&#xff0c;平面度检测至关重要。 CASAIM自动化平面度检测设备通过搭载领先的激光三维测头和智能检测软件自动获取零部件高质量测量数据&#xf…

【LeetCode】最小路径和

最小路径和 题目描述算法流程编程代码 链接: 最小路径和 题目描述 算法流程 编程代码 class Solution { public:int minPathSum(vector<vector<int>>& grid) {int m grid.size();int n grid[0].size();vector<vector<int>> dp(m1,vector<in…