【畅购商城】订单模块之添加联系人

╰+哭是因爲堅強的太久メ 2024-03-31 14:08 221阅读 0赞

目录

构建订单服务:8100

收货人列表

接口

后端实现:JavaBean

后端实现:

前端实现

添加联系人

需求

显示添加表单

接口

后端实现

前端实现

构建订单服务:8100

步骤一:构建项目,changgou4-service-orders

步骤二:修改pom.xml文件,添加依赖

  1. <dependencies>
  2. <!--自定义项目-->
  3. <dependency>
  4. <groupId>com.czxy.changgou</groupId>
  5. <artifactId>changgou4-common-db</artifactId>
  6. </dependency>
  7. <dependency>
  8. <groupId>com.czxy.changgou</groupId>
  9. <artifactId>changgou4-common-auth</artifactId>
  10. </dependency>
  11. <dependency>
  12. <groupId>com.czxy.changgou</groupId>
  13. <artifactId>changgou4-pojo</artifactId>
  14. </dependency>
  15. <!--web起步依赖-->
  16. <dependency>
  17. <groupId>org.springframework.boot</groupId>
  18. <artifactId>spring-boot-starter-web</artifactId>
  19. </dependency>
  20. <!-- nacos 客户端 -->
  21. <dependency>
  22. <groupId>com.alibaba.nacos</groupId>
  23. <artifactId>nacos-client</artifactId>
  24. </dependency>
  25. <!-- nacos 服务发现 -->
  26. <dependency>
  27. <groupId>com.alibaba.cloud</groupId>
  28. <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
  29. </dependency>
  30. <!--redis-->
  31. <dependency>
  32. <groupId>org.springframework.boot</groupId>
  33. <artifactId>spring-boot-starter-data-redis</artifactId>
  34. </dependency>
  35. <dependency>
  36. <groupId>redis.clients</groupId>
  37. <artifactId>jedis</artifactId>
  38. </dependency>
  39. <!-- openfeign 远程调用 -->
  40. <dependency>
  41. <groupId>org.springframework.cloud</groupId>
  42. <artifactId>spring-cloud-starter-openfeign</artifactId>
  43. </dependency>
  44. <!--swagger2-->
  45. <dependency>
  46. <groupId>io.springfox</groupId>
  47. <artifactId>springfox-swagger2</artifactId>
  48. </dependency>
  49. <dependency>
  50. <groupId>io.springfox</groupId>
  51. <artifactId>springfox-swagger-ui</artifactId>
  52. </dependency>
  53. <!--fastjson-->
  54. <dependency>
  55. <groupId>com.alibaba</groupId>
  56. <artifactId>fastjson</artifactId>
  57. </dependency>
  58. <!--微信支付-->
  59. <dependency>
  60. <groupId>com.github.wxpay</groupId>
  61. <artifactId>wxpay-sdk</artifactId>
  62. <version>0.0.3</version>
  63. </dependency>
  64. </dependencies>

步骤三:修改yml 文件

  1. server:
  2. port: 8100
  3. spring:
  4. application:
  5. name: order-service
  6. datasource:
  7. url: jdbc:mysql://127.0.0.1:3306/changgou_db?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
  8. username: root
  9. password: 1234
  10. driver-class-name: com.mysql.jdbc.Driver
  11. druid:
  12. initial-size: 5
  13. min-idle: 5
  14. max-active: 20
  15. max-wait: 1000
  16. test-on-borrow: true
  17. redis:
  18. database: 0
  19. host: 127.0.0.1
  20. port: 6379
  21. cloud:
  22. nacos:
  23. discovery:
  24. server-addr: 127.0.0.1:8848 #nacos服务地址
  25. sc:
  26. worker:
  27. workerId: 1
  28. datacenterId: 1
  29. jwt:
  30. secret: sc@Login(Auth}*^31)&czxy% # 登录校验的密钥
  31. pubKeyPath: D:/rsa/rsa.pub # 公钥地址
  32. priKeyPath: D:/rsa/rsa.pri # 私钥地址
  33. expire: 360 # 过期时间,单位分钟
  34. pay:
  35. appID: wx8397f8696b538317
  36. mchID: 1473426802
  37. key: T6m9iK73b0kn9g5v426MKfHQH7X8rKwb
  38. httpConnectTimeoutMs: 5000
  39. httpReadTimeoutMs: 10000

步骤四:启动类

  1. package com.czxy.changgou4;
  2. import org.springframework.boot.SpringApplication;
  3. import org.springframework.boot.autoconfigure.SpringBootApplication;
  4. import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
  5. import org.springframework.cloud.openfeign.EnableFeignClients;
  6. @SpringBootApplication
  7. @EnableDiscoveryClient
  8. @EnableFeignClients
  9. public class CGOrderServiceApplication {
  10. public static void main(String[] args) {
  11. SpringApplication.run(CGOrderServiceApplication.class, args);
  12. }
  13. }

步骤五:配置类

b52b107cc1174d91a9cd9a54039b73df.png

收货人列表

#

接口

  1. GET http://localhost:10010/order-service/address
  2. {
  3. "code": 20000,
  4. "message": "查询成功",
  5. "data": [
  6. {
  7. "id": 1,
  8. "userId": 1,
  9. "shr_name": "小明",
  10. "shr_mobile": "13344445555",
  11. "shr_province": "江苏省",
  12. "shr_city": "宿迁市",
  13. "shr_area": "沭阳县",
  14. "shr_address": "常州路57号",
  15. "isdefault": 0
  16. }
  17. ],
  18. "other": {}
  19. }

#

后端实现:JavaBean

步骤一:创建Address地址对象

d9c10927358f40aea40df1bce828dfe8.png

步骤二:根据表结构和接口规范,编写内容

  1. package com.czxy.changgou4.pojo;
  2. import com.baomidou.mybatisplus.annotation.IdType;
  3. import com.baomidou.mybatisplus.annotation.TableField;
  4. import com.baomidou.mybatisplus.annotation.TableId;
  5. import com.baomidou.mybatisplus.annotation.TableName;
  6. import com.fasterxml.jackson.annotation.JsonProperty;
  7. import lombok.Data;
  8. /**
  9. * Created by liangtong.
  10. */
  11. @TableName("tb_address")
  12. @Data
  13. public class Address {
  14. @TableId(type = IdType.AUTO)
  15. private Integer id;
  16. //用户ID
  17. @TableField(value = "user_id")
  18. private Integer userId;
  19. //收货人姓名
  20. @TableField(value = "shr_name")
  21. @JsonProperty("shr_name")
  22. private String shrName;
  23. //收货人手机
  24. @TableField(value = "shr_mobile")
  25. @JsonProperty("shr_mobile")
  26. private String shrMobile;
  27. //收货人省份
  28. @TableField(value = "shr_province")
  29. @JsonProperty("shr_province")
  30. private String shrProvince;
  31. //收货人城市
  32. @TableField(value = "shr_city")
  33. @JsonProperty("shr_city")
  34. private String shrCity;
  35. //收货人地区
  36. @TableField(value = "shr_area")
  37. @JsonProperty("shr_area")
  38. private String shrArea;
  39. //收货人详情地址
  40. @TableField(value = "shr_address")
  41. @JsonProperty("shr_address")
  42. private String shrAddress;
  43. //1:默认;0:不是
  44. @TableField(value = "isdefault")
  45. @JsonProperty("isdefault")
  46. private Integer isdefault;
  47. }

后端实现:

需求:查询当前登录用户收货人列表

需要通过token获得用户信息

步骤一:拷贝配置类

a6158ba3956d456e814e3d22861a0aa0.png

步骤二:编写mapper,使用通用mapper即可

cf46bf46603e4bdb947ff79b124acf53.png

步骤三:编写service接口,编写findAllByUserId 方法完成功能

  1. package com.czxy.changgou4.service;
  2. import com.baomidou.mybatisplus.extension.service.IService;
  3. import com.czxy.changgou4.pojo.Address;
  4. import java.util.List;
  5. public interface AddressService extends IService<Address> {
  6. /**
  7. * 查询指定用户的所有地址
  8. * @param userId
  9. * @return
  10. */
  11. public List<Address> findAllByUserId(Long userId) ;
  12. }

步骤四:编写service实现

  1. package com.czxy.changgou4.service.impl;
  2. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  3. import com.czxy.changgou4.mapper.AddressMapper;
  4. import com.czxy.changgou4.pojo.Address;
  5. import com.czxy.changgou4.pojo.User;
  6. import com.czxy.changgou4.service.AddressService;
  7. import org.springframework.stereotype.Service;
  8. import org.springframework.transaction.annotation.Transactional;
  9. import java.util.List;
  10. @Service
  11. @Transactional
  12. public class AddressServiceImpl extends ServiceImpl<AddressMapper, Address> implements AddressService {
  13. @Override
  14. public List<Address> findAllByUserId(Long userId) {
  15. return baseMapper.findAllByUserId(userId);
  16. }
  17. }

步骤五:编写controller

  1. package com.czxy.changgou4.controller;
  2. import com.czxy.changgou4.config.JwtProperties;
  3. import com.czxy.changgou4.pojo.Address;
  4. import com.czxy.changgou4.pojo.User;
  5. import com.czxy.changgou4.service.AddressService;
  6. import com.czxy.changgou4.utils.JwtUtils;
  7. import com.czxy.changgou4.vo.BaseResult;
  8. import org.springframework.web.bind.annotation.GetMapping;
  9. import org.springframework.web.bind.annotation.RequestMapping;
  10. import org.springframework.web.bind.annotation.RestController;
  11. import javax.annotation.Resource;
  12. import javax.servlet.http.HttpServletRequest;
  13. import java.util.List;
  14. @RestController
  15. @RequestMapping("/address")
  16. public class AddressController {
  17. @Resource
  18. private AddressService addressService;
  19. @Resource
  20. private JwtProperties jwtProperties;
  21. @Resource
  22. private HttpServletRequest request;
  23. @GetMapping
  24. public BaseResult queryAddress(){
  25. //1 获得用户信息
  26. // 1.1 获得token
  27. String token = request.getHeader("Authorization");
  28. // 1.2 解析token
  29. User loginUser = null;
  30. try {
  31. loginUser = JwtUtils.getObjectFromToken(token, jwtProperties.getPublicKey(),User.class);
  32. } catch (Exception e) {
  33. return BaseResult.error("token失效或未登录");
  34. }
  35. //2 查询
  36. List<Address> list = this.addressService.findAllByUserId( loginUser.getId() );
  37. return BaseResult.ok("查询成功", list );
  38. }
  39. }

前端实现

需求:查询所有的收货人地址

为了操作方便,需要使用filter过滤默认地址

68c2db0e246a4bc5bd8e59b7b91789c0.png

步骤一:修改 apiclient.js ,添加查询收货人列表函数

92453a84c7024687866dccddf667eb47.png

步骤二:修改 flow2.vue 组件,页面加载成功,查询当前登录用户所有的收货人地址

同时过滤默认地址数据

  1. mounted() {
  2. // 查询收获人地址
  3. this.getAddressFn()
  4. },
  5. data() {
  6. return {
  7. addressList: [], //所有的地址
  8. defaultAddress: {}, //默认地址
  9. }
  10. },
  11. methods: {
  12. async getAddressFn() {
  13. let { data } = await this.$request.getAddress()
  14. // 所有收获人地址
  15. this.addressList = data.data
  16. //默认地址
  17. this.defaultAddress = this.addressList.filter(item => item.isdefault == 1)[0];
  18. }
  19. },

步骤三:修改 flow2.vue 组件,显示默认地址

986eb94b116a47a19e9685336ebbf64b.png

  1. <div class="address_info">
  2. <!-- 默认地址 -->
  3. <p>{
  4. {defaultAddress.shr_name}} {
  5. {defaultAddress.shr_mobile}} </p>
  6. <p>{
  7. {defaultAddress.shr_province}} {
  8. {defaultAddress.shr_city}} {
  9. {defaultAddress.shr_area}} {
  10. {defaultAddress.shr_address}} </p>
  11. </div>

步骤四:修改flow2.vue,显示收货人地址列表

489f52cdb38244b2aa5020adf09c2d96.png

  1. <!-- 列表页面 -->
  2. <li :class="{'cur': addr.isdefault == 1}" v-for="(addr,index) in addressList" :key="index">
  3. <input type="radio" name="address" checked="addr.isdefault == 1" />
  4. {
  5. {addr.shr_name}} {
  6. {addr.shr_province}} {
  7. {addr.shr_city}} {
  8. {addr.shr_area}} {
  9. {addr.shr_address}} {
  10. {addr.shr_mobile}}
  11. <a href="" v-if="addr.isdefault == 0">设为默认地址</a>
  12. <a href="">编辑</a>
  13. <a href="">删除</a>
  14. </li>

添加联系人

需求

需求:新添加的联系人为默认联系人

19a22cc6616c4cd9acdd08d3d72d6058.png

显示添加表单

修改flow2.vue,显示添加表单

79732f438dca49668e13ec7f69489db8.png

  1. data() {
  2. return {
  3. addressList: [], //所有的地址
  4. defaultAddress: {}, //默认地址
  5. showNew: false, //是否显示新地址
  6. }
  7. },

使用变量,控制添加表单的显示与隐藏

328ff0b082fd4582a2b9501a900fbc69.png

  1. <!-- 列表页面 -->
  2. <li :class="{'cur': showNew==false && addr.isdefault == 1}" v-for="(addr,index) in addressList" :key="index">
  3. <input type="radio" name="address" checked="addr.isdefault == 1" @click="clickRadio(addr)" />
  4. {
  5. {addr.shr_name}} {
  6. {addr.shr_province}} {
  7. {addr.shr_city}} {
  8. {addr.shr_area}} {
  9. {addr.shr_address}} {
  10. {addr.shr_mobile}}
  11. <a href="" v-if="addr.isdefault == 0">设为默认地址</a>
  12. <a href="">编辑</a>
  13. <a href="">删除{
  14. {showNew==false && addr.isdefault == 1}} </a>
  15. </li>
  16. <li :class="{'cur': showNew==true}"><input type="radio" name="address" class="new_address" @click="showNew=true" />使用新地址</li>
  17. </ul>
  18. <form action="" v-show="showNew" class="none" name="address_form">

#

接口

  1. POST http://localhost:10010/order-service/address
  2. {
  3. "shr_name": "张三",
  4. "shr_mobile": "13344445555",
  5. "shr_province": "江苏省",
  6. "shr_city": "宿迁市",
  7. "shr_area": "沭阳县",
  8. "shr_address": "常州路57号"
  9. }

#

后端实现

步骤一:修改mapper,添加指定用户的地址默认状态

f0dac67a865a4162bb16998f7b5eaf2a.png

  1. package com.czxy.changgou4.mapper;
  2. import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  3. import com.czxy.changgou4.pojo.Address;
  4. import org.apache.ibatis.annotations.Mapper;
  5. import org.apache.ibatis.annotations.Param;
  6. import org.apache.ibatis.annotations.Update;
  7. @Mapper
  8. public interface AddressMapper extends BaseMapper<Address> {
  9. /**
  10. * 修改用户默认地址
  11. * @param userId
  12. * @param defaultValue
  13. */
  14. @Update("update tb_address set isdefault = #{defaultValue} where user_id = #{userId}")
  15. public void updateDefault(@Param("userId") Integer userId, @Param("defaultValue") int defaultValue);
  16. }

步骤二:修改service,添加地址,并将新地址设置成默认地址。

31adb965449448a59f7008ce8b8df058.png

  1. /**
  2. * 添加新地址,并设置成默认地址
  3. * @param address
  4. */
  5. public void addAddress(Address address) ;

步骤三:修改service实现

  1. /**
  2. * 添加新地址,并设置成默认地址
  3. * @param address
  4. */
  5. public void addAddress(Address address) {
  6. //修改指定用户的状态
  7. this.addressMapper.updateDefault(address.getUserId(),0);
  8. //添加新地址,默认
  9. address.setIsdefault(1);
  10. this.addressMapper.insert(address);
  11. }

c5f664487e4548a99468740e590495b0.png

步骤四:修改controller

  1. @PostMapping
  2. public BaseResult addAddress(@RequestBody Address address){
  3. //1 获得用户信息
  4. // 1.1 获得token
  5. String token = request.getHeader("Authorization");
  6. // 1.2 解析token
  7. User loginUser = null;
  8. try {
  9. loginUser = JwtUtils.getObjectFromToken(token, jwtProperties.getPublicKey(),User.class);
  10. } catch (Exception e) {
  11. return BaseResult.error("token失效或未登录");
  12. }
  13. address.setUserId(loginUser.getId().intValue());
  14. this.addressService.addAddress(address);
  15. return BaseResult.ok("添加成功");
  16. }

#

前端实现

步骤一:修改apiclient.js,添加函数

5522a04b473248a0b6864d493ca74023.png

  1. addNewAddress : ( params ) => {
  2. return axios.post("/order-service/address" , params )
  3. },

步骤二:修改 flow2.vue ,添加成员变量

  1. data() {
  2. return {
  3. addressList: [], //所有的地址
  4. defaultAddress: {}, //默认地址
  5. showNew : false, //是否显示添加
  6. newAddress : { //新地址,需要与表单进行数据绑定
  7. shr_name:"",
  8. shr_mobile:"",
  9. shr_province:"",
  10. shr_city:"",
  11. shr_area:"",
  12. shr_address:""
  13. },
  14. }
  15. },

e3d34607a61548d293b1b908324d45f0.png

步骤三:表单元素绑定

66c315e3b1aa461ebbeac130d5ca1b15.png

步骤四:绑定提交事件

1870074e3397451093c8fa333fe9e4f5.png

  1. methods: {
  2. async getAddressFn() {
  3. let { data } = await this.$request.getAddress()
  4. // 所有收获人地址
  5. this.addressList = data.data
  6. //默认地址
  7. this.defaultAddress = this.addressList.filter(item => item.isdefault == 1)[0];
  8. },
  9. async addAddresssFn (){
  10. let {data } = await this.$request.addNewAddress(this.newAddress)
  11. if(data.code == 1){
  12. // 重新查询
  13. this.getAddressFn()
  14. // 表单隐藏,数据清空
  15. this.showNew = false;
  16. this.newAddress = {
  17. shr_name:"",
  18. shr_mobile:"",
  19. shr_province:"",
  20. shr_city:"",
  21. shr_area:"",
  22. shr_address:""
  23. }
  24. }
  25. },
  26. },

发表评论

表情:
评论列表 (有 0 条评论,221人围观)

还没有评论,来说两句吧...

相关阅读