后端创建订单

package com.java1234.entity;import io.jsonwebtoken.Claims;/*** jwt验证信息* @author java1234_小锋* @site www.java1234.com* @company Java知识分享网* @create 2019-08-13 上午 10:00*/
public class CheckResult {private int errCode;private boolean success;private Claims claims;public int getErrCode() {return errCode;}public void setErrCode(int errCode) {this.errCode = errCode;}public boolean isSuccess() {return success;}public void setSuccess(boolean success) {this.success = success;}public Claims getClaims() {return claims;}public void setClaims(Claims claims) {this.claims = claims;}}
package com.java1234.entity;import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import lombok.Data;import java.math.BigDecimal;
import java.util.Date;/*** 订单主表* @author java1234_小锋* @site www.java1234.com* @company 南通小锋网络科技有限公司* @create 2022-01-12 10:13*/
@TableName("t_order")
@Data
public class Order {private Integer id; // 编号private String orderNo; // 订单号private String userId; // openId微信用户ID@TableField(select = false)private WxUserInfo wxUserInfo; // 微信用户private BigDecimal totalPrice; // 总价private String address; // 收货地址private String consignee; // 收货人private String telNumber; // 联系电话@JsonSerialize(using=CustomDateTimeSerializer.class)private Date createDate; // 订单创建日期@JsonSerialize(using=CustomDateTimeSerializer.class)private Date payDate; // 订单支付日期private Integer status=1; // 订单状态 1 未支付 2 已经支付/待收货 3 退款/退货@TableField(select = false,exist = false)private OrderDetail[] goods; // 订单商品详情}
package com.java1234.entity;import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;import java.math.BigDecimal;/*** 订单详细表* @author java1234_小锋* @site www.java1234.com* @company 南通小锋网络科技有限公司* @create 2022-01-12 10:19*/
@TableName("t_order_detail")
@Data
public class OrderDetail {private Integer id; // 编号private Integer mId; // 订单主表Idprivate Integer goodsId; // 商品IDprivate Integer goodsNumber; // 商品购买数量private BigDecimal goodsPrice; // 商品单价private String goodsName; // 商品名称private String goodsPic; // 商品图片}
/*
SQLyog Ultimate v11.33 (64 bit)
MySQL - 5.7.18-log 
*********************************************************************
*/
/*!40101 SET NAMES utf8 */;create table `t_order_detail` (`id` int (11),`mId` int (11),`goodsId` int (11),`goodsNumber` int (11),`goodsPrice` Decimal (10),`goodsName` varchar (300),`goodsPic` varchar (765)
); 
insert into `t_order_detail` (`id`, `mId`, `goodsId`, `goodsNumber`, `goodsPrice`, `goodsName`, `goodsPic`) values('121','82','14','1','2599.00','Xiaomi Civi','9.png');
insert into `t_order_detail` (`id`, `mId`, `goodsId`, `goodsNumber`, `goodsPrice`, `goodsName`, `goodsPic`) values('122','83','14','2','2599.00','Xiaomi Civi','9.png');
insert into `t_order_detail` (`id`, `mId`, `goodsId`, `goodsNumber`, `goodsPrice`, `goodsName`, `goodsPic`) values('123','97','14','1','2599.00','Xiaomi Civi','9.png');
insert into `t_order_detail` (`id`, `mId`, `goodsId`, `goodsNumber`, `goodsPrice`, `goodsName`, `goodsPic`) values('124','98','14','2','2599.00','Xiaomi Civi','9.png');
insert into `t_order_detail` (`id`, `mId`, `goodsId`, `goodsNumber`, `goodsPrice`, `goodsName`, `goodsPic`) values('125','99','4','1','3799.00','Xiaomi 11','6.png');
insert into `t_order_detail` (`id`, `mId`, `goodsId`, `goodsNumber`, `goodsPrice`, `goodsName`, `goodsPic`) values('126','100','14','1','2599.00','Xiaomi Civi','9.png');
insert into `t_order_detail` (`id`, `mId`, `goodsId`, `goodsNumber`, `goodsPrice`, `goodsName`, `goodsPic`) values('127','101','14','1','2599.00','Xiaomi Civi','9.png');
insert into `t_order_detail` (`id`, `mId`, `goodsId`, `goodsNumber`, `goodsPrice`, `goodsName`, `goodsPic`) values('128','102','4','1','3799.00','Xiaomi 11','6.png');
insert into `t_order_detail` (`id`, `mId`, `goodsId`, `goodsNumber`, `goodsPrice`, `goodsName`, `goodsPic`) values('129','103','14','1','2599.00','Xiaomi Civi','9.png');
insert into `t_order_detail` (`id`, `mId`, `goodsId`, `goodsNumber`, `goodsPrice`, `goodsName`, `goodsPic`) values('130','104','14','1','2599.00','Xiaomi Civi','9.png');
insert into `t_order_detail` (`id`, `mId`, `goodsId`, `goodsNumber`, `goodsPrice`, `goodsName`, `goodsPic`) values('131','105','14','2','2599.00','Xiaomi Civi','9.png');
insert into `t_order_detail` (`id`, `mId`, `goodsId`, `goodsNumber`, `goodsPrice`, `goodsName`, `goodsPic`) values('132','105','4','1','3799.00','Xiaomi 11','6.png');
insert into `t_order_detail` (`id`, `mId`, `goodsId`, `goodsNumber`, `goodsPrice`, `goodsName`, `goodsPic`) values('133','105','16','2','1999.00','小米平板5','13.png');
insert into `t_order_detail` (`id`, `mId`, `goodsId`, `goodsNumber`, `goodsPrice`, `goodsName`, `goodsPic`) values('134','105','6','1','4499.00','Xiaomi 11 Pro','1.png');
insert into `t_order_detail` (`id`, `mId`, `goodsId`, `goodsNumber`, `goodsPrice`, `goodsName`, `goodsPic`) values('135','106','5','1','2299.00','Redmi K40 游戏增强版','11.png');
insert into `t_order_detail` (`id`, `mId`, `goodsId`, `goodsNumber`, `goodsPrice`, `goodsName`, `goodsPic`) values('136','106','14','2','2599.00','Xiaomi Civi','9.png');
insert into `t_order_detail` (`id`, `mId`, `goodsId`, `goodsNumber`, `goodsPrice`, `goodsName`, `goodsPic`) values('137','107','14','3','2599.00','Xiaomi Civi','9.png');
insert into `t_order_detail` (`id`, `mId`, `goodsId`, `goodsNumber`, `goodsPrice`, `goodsName`, `goodsPic`) values('138','107','1','2','10999.00','小米电视大师 82英寸','21.png');
insert into `t_order_detail` (`id`, `mId`, `goodsId`, `goodsNumber`, `goodsPrice`, `goodsName`, `goodsPic`) values('139','107','16','1','1999.00','小米平板5','13.png');
insert into `t_order_detail` (`id`, `mId`, `goodsId`, `goodsNumber`, `goodsPrice`, `goodsName`, `goodsPic`) values('140','108','14','2','2599.00','Xiaomi Civi','9.png');
insert into `t_order_detail` (`id`, `mId`, `goodsId`, `goodsNumber`, `goodsPrice`, `goodsName`, `goodsPic`) values('141','108','16','1','1999.00','小米平板5','13.png');
insert into `t_order_detail` (`id`, `mId`, `goodsId`, `goodsNumber`, `goodsPrice`, `goodsName`, `goodsPic`) values('142','108','11','1','2499.00','黑鲨4','7.png');
insert into `t_order_detail` (`id`, `mId`, `goodsId`, `goodsNumber`, `goodsPrice`, `goodsName`, `goodsPic`) values('143','109','14','1','2599.00','Xiaomi Civi','9.png');
insert into `t_order_detail` (`id`, `mId`, `goodsId`, `goodsNumber`, `goodsPrice`, `goodsName`, `goodsPic`) values('144','110','14','1','2599.00','Xiaomi Civi','9.png');
insert into `t_order_detail` (`id`, `mId`, `goodsId`, `goodsNumber`, `goodsPrice`, `goodsName`, `goodsPic`) values('145','111','14','1','2599.00','Xiaomi Civi','9.png');
insert into `t_order_detail` (`id`, `mId`, `goodsId`, `goodsNumber`, `goodsPrice`, `goodsName`, `goodsPic`) values('146','112','14','1','2599.00','Xiaomi Civi','9.png');
insert into `t_order_detail` (`id`, `mId`, `goodsId`, `goodsNumber`, `goodsPrice`, `goodsName`, `goodsPic`) values('147','113','14','1','2599.00','Xiaomi Civi','9.png');
insert into `t_order_detail` (`id`, `mId`, `goodsId`, `goodsNumber`, `goodsPrice`, `goodsName`, `goodsPic`) values('148','114','14','3','2599.00','Xiaomi Civi','9.png');
insert into `t_order_detail` (`id`, `mId`, `goodsId`, `goodsNumber`, `goodsPrice`, `goodsName`, `goodsPic`) values('149','114','9','2','2999.00','Xiaomi 10S','4.png');
/*
SQLyog Ultimate v11.33 (64 bit)
MySQL - 5.7.18-log 
*********************************************************************
*/
/*!40101 SET NAMES utf8 */;create table `t_order` (`id` int (11),`orderNo` varchar (300),`userId` varchar (600),`totalPrice` Decimal (10),`address` varchar (900),`consignee` varchar (60),`telNumber` varchar (60),`createDate` datetime ,`payDate` datetime ,`status` int (11)
); 
insert into `t_order` (`id`, `orderNo`, `userId`, `totalPrice`, `address`, `consignee`, `telNumber`, `createDate`, `payDate`, `status`) values('82','JAVA20220127032849000000201','o30ur5JpAsAUyGBkR0uW4IxvahR8','2599.00','广东省广州市海珠区新港中路397号','张三','020-81167888','2022-01-27 15:28:49','2022-01-27 15:29:06','1');
insert into `t_order` (`id`, `orderNo`, `userId`, `totalPrice`, `address`, `consignee`, `telNumber`, `createDate`, `payDate`, `status`) values('83','JAVA20220129103913000000494','o30ur5JpAsAUyGBkR0uW4IxvahR8','5198.00','广东省广州市海珠区新港中路397号','张三','020-81167888','2022-01-29 10:39:13','2022-01-27 15:29:06','1');
insert into `t_order` (`id`, `orderNo`, `userId`, `totalPrice`, `address`, `consignee`, `telNumber`, `createDate`, `payDate`, `status`) values('84','JAVA20220129103913000001494','o30ur5JpAsAUyGBkR0uW4IxvahR8','5198.00','广东省广州市海珠区新港中路397号','张三','020-81167888','2022-01-29 10:39:13','2022-01-27 15:29:06','1');
insert into `t_order` (`id`, `orderNo`, `userId`, `totalPrice`, `address`, `consignee`, `telNumber`, `createDate`, `payDate`, `status`) values('85','JAVA20220129103913000002494','o30ur5JpAsAUyGBkR0uW4IxvahR8','5198.00','广东省广州市海珠区新港中路397号','张三','020-81167888','2022-01-29 10:39:13','2022-01-27 15:29:06','1');
insert into `t_order` (`id`, `orderNo`, `userId`, `totalPrice`, `address`, `consignee`, `telNumber`, `createDate`, `payDate`, `status`) values('86','JAVA20220129103913000003494','o30ur5JpAsAUyGBkR0uW4IxvahR8','5198.00','广东省广州市海珠区新港中路397号','张三','020-81167888','2022-01-29 10:39:13','2022-01-27 15:29:06','1');
insert into `t_order` (`id`, `orderNo`, `userId`, `totalPrice`, `address`, `consignee`, `telNumber`, `createDate`, `payDate`, `status`) values('87','JAVA20220129103913000004494','o30ur5JpAsAUyGBkR0uW4IxvahR8','5198.00','广东省广州市海珠区新港中路397号','张三','020-81167888','2022-01-29 10:39:13','2022-01-27 15:29:06','1');
insert into `t_order` (`id`, `orderNo`, `userId`, `totalPrice`, `address`, `consignee`, `telNumber`, `createDate`, `payDate`, `status`) values('88','JAVA20220129103913000005494','o30ur5JpAsAUyGBkR0uW4IxvahR8','5198.00','广东省广州市海珠区新港中路397号','张三','020-81167888','2022-01-29 10:39:13','2022-01-27 15:29:06','2');
insert into `t_order` (`id`, `orderNo`, `userId`, `totalPrice`, `address`, `consignee`, `telNumber`, `createDate`, `payDate`, `status`) values('89','JAVA20220129103913000006494','o30ur5JpAsAUyGBkR0uW4IxvahR8','5198.00','广东省广州市海珠区新港中路397号','张三','020-81167888','2022-01-29 10:39:13','2022-01-27 15:29:06','2');
insert into `t_order` (`id`, `orderNo`, `userId`, `totalPrice`, `address`, `consignee`, `telNumber`, `createDate`, `payDate`, `status`) values('90','JAVA20220129103913000007494','o30ur5JpAsAUyGBkR0uW4IxvahR8','5198.00','广东省广州市海珠区新港中路397号','张三','020-81167888','2022-01-29 10:39:13','2022-01-27 15:29:06','2');
insert into `t_order` (`id`, `orderNo`, `userId`, `totalPrice`, `address`, `consignee`, `telNumber`, `createDate`, `payDate`, `status`) values('91','JAVA20220129103913000008494','o30ur5JpAsAUyGBkR0uW4IxvahR8','5198.00','广东省广州市海珠区新港中路397号','张三','020-81167888','2022-01-29 10:39:13','2022-01-27 15:29:06','2');
insert into `t_order` (`id`, `orderNo`, `userId`, `totalPrice`, `address`, `consignee`, `telNumber`, `createDate`, `payDate`, `status`) values('92','JAVA20220129103913000009494','o30ur5JpAsAUyGBkR0uW4IxvahR8','5198.00','广东省广州市海珠区新港中路397号','张三','020-81167888','2022-01-29 10:39:13','2022-01-27 15:29:06','2');
insert into `t_order` (`id`, `orderNo`, `userId`, `totalPrice`, `address`, `consignee`, `telNumber`, `createDate`, `payDate`, `status`) values('93','JAVA20220129103913000010494','o30ur5JpAsAUyGBkR0uW4IxvahR8','5198.00','广东省广州市海珠区新港中路397号','张三','020-81167888','2022-01-29 10:39:13','2022-01-27 15:29:06','2');
insert into `t_order` (`id`, `orderNo`, `userId`, `totalPrice`, `address`, `consignee`, `telNumber`, `createDate`, `payDate`, `status`) values('94','JAVA20220129103913000011494','o30ur5JpAsAUyGBkR0uW4IxvahR8','5198.00','广东省广州市海珠区新港中路397号','张三','020-81167888','2022-01-29 10:39:13','2022-01-27 15:29:06','2');
insert into `t_order` (`id`, `orderNo`, `userId`, `totalPrice`, `address`, `consignee`, `telNumber`, `createDate`, `payDate`, `status`) values('95','JAVA20220129103913000012494','o30ur5JpAsAUyGBkR0uW4IxvahR8','5198.00','广东省广州市海珠区新港中路397号','张三','020-81167888','2022-01-29 10:39:13','2022-01-27 15:29:06','2');
insert into `t_order` (`id`, `orderNo`, `userId`, `totalPrice`, `address`, `consignee`, `telNumber`, `createDate`, `payDate`, `status`) values('96','JAVA20220129103913000013494','o30ur5JpAsAUyGBkR0uW4IxvahR8','5198.00','广东省广州市海珠区新港中路397号','张三','020-81167888','2022-01-29 10:39:13','2022-01-27 15:29:06','3');
insert into `t_order` (`id`, `orderNo`, `userId`, `totalPrice`, `address`, `consignee`, `telNumber`, `createDate`, `payDate`, `status`) values('97','JAVA20220129035805000000052','o30ur5JpAsAUyGBkR0uW4IxvahR8','2599.00','广东省广州市海珠区新港中路397号','张三','020-81167888','2022-01-29 15:58:05','2022-01-29 16:12:26','2');
insert into `t_order` (`id`, `orderNo`, `userId`, `totalPrice`, `address`, `consignee`, `telNumber`, `createDate`, `payDate`, `status`) values('98','JAVA20220129035946000000595','o30ur5JpAsAUyGBkR0uW4IxvahR8','5198.00','广东省广州市海珠区新港中路397号','张三','020-81167888','2022-01-29 15:59:47','2022-01-29 16:14:07','2');
insert into `t_order` (`id`, `orderNo`, `userId`, `totalPrice`, `address`, `consignee`, `telNumber`, `createDate`, `payDate`, `status`) values('99','JAVA20220129040547000000824','o30ur5JpAsAUyGBkR0uW4IxvahR8','3799.00','广东省广州市海珠区新港中路397号','张三','020-81167888','2022-01-29 16:05:48','2022-01-29 16:20:08','2');
insert into `t_order` (`id`, `orderNo`, `userId`, `totalPrice`, `address`, `consignee`, `telNumber`, `createDate`, `payDate`, `status`) values('100','JAVA20220129040836000000654','o30ur5JpAsAUyGBkR0uW4IxvahR8','2599.00','广东省广州市海珠区新港中路397号','张三','020-81167888','2022-01-29 16:08:37','2022-01-29 16:12:52','3');
insert into `t_order` (`id`, `orderNo`, `userId`, `totalPrice`, `address`, `consignee`, `telNumber`, `createDate`, `payDate`, `status`) values('101','JAVA20220129041124000000758','o30ur5JpAsAUyGBkR0uW4IxvahR8','2599.00','广东省广州市海珠区新港中路397号','张三','020-81167888','2022-01-29 16:11:25','2022-01-29 16:11:36','2');
insert into `t_order` (`id`, `orderNo`, `userId`, `totalPrice`, `address`, `consignee`, `telNumber`, `createDate`, `payDate`, `status`) values('102','JAVA20220129043412000000133','o30ur5JpAsAUyGBkR0uW4IxvahR8','3799.00','广东省广州市海珠区新港中路397号','张三','020-81167888','2022-01-29 16:34:12','2022-01-29 16:34:26','2');
insert into `t_order` (`id`, `orderNo`, `userId`, `totalPrice`, `address`, `consignee`, `telNumber`, `createDate`, `payDate`, `status`) values('103','JAVA20220217071851000000421','o30ur5JpAsAUyGBkR0uW4IxvahR8','2599.00','广东省广州市海珠区新港中路397号','张三','020-81167888','2022-02-17 19:18:51',NULL,'1');
insert into `t_order` (`id`, `orderNo`, `userId`, `totalPrice`, `address`, `consignee`, `telNumber`, `createDate`, `payDate`, `status`) values('104','JAVA20220217072440000000734','o30ur5JpAsAUyGBkR0uW4IxvahR8','2599.00','广东省广州市海珠区新港中路397号','张三','020-81167888','2022-02-17 19:24:41',NULL,'4');
insert into `t_order` (`id`, `orderNo`, `userId`, `totalPrice`, `address`, `consignee`, `telNumber`, `createDate`, `payDate`, `status`) values('105','JAVA20220217072709000000080','o30ur5JpAsAUyGBkR0uW4IxvahR8','17494.00','广东省广州市海珠区新港中路397号','张三','020-81167888','2022-02-17 19:27:09',NULL,'3');
insert into `t_order` (`id`, `orderNo`, `userId`, `totalPrice`, `address`, `consignee`, `telNumber`, `createDate`, `payDate`, `status`) values('106','JAVA20220221080859000000097','o30ur5JpAsAUyGBkR0uW4IxvahR8','7497.00','广东省广州市海珠区新港中路397号','张三','020-81167888','2022-02-21 08:08:59','2022-02-21 08:09:24','2');
insert into `t_order` (`id`, `orderNo`, `userId`, `totalPrice`, `address`, `consignee`, `telNumber`, `createDate`, `payDate`, `status`) values('107','JAVA20220221082558000000449','o30ur5JpAsAUyGBkR0uW4IxvahR8','31794.00','广东省广州市海珠区新港中路397号','张三','020-81167888','2022-02-21 08:25:58','2022-02-21 08:26:15','3');
insert into `t_order` (`id`, `orderNo`, `userId`, `totalPrice`, `address`, `consignee`, `telNumber`, `createDate`, `payDate`, `status`) values('108','JAVA20220226112352000000844','o30ur5JpAsAUyGBkR0uW4IxvahR8','9696.00','北京市北京市西城区新街口街道楼','咯','458698866','2022-02-26 11:23:53','2022-02-26 11:24:03','2');
insert into `t_order` (`id`, `orderNo`, `userId`, `totalPrice`, `address`, `consignee`, `telNumber`, `createDate`, `payDate`, `status`) values('109','JAVA20220226113103000000063','o30ur5JpAsAUyGBkR0uW4IxvahR8','2599.00','广东省广州市海珠区新港中路397号','张三','020-81167888','2022-02-26 11:31:03',NULL,'1');
insert into `t_order` (`id`, `orderNo`, `userId`, `totalPrice`, `address`, `consignee`, `telNumber`, `createDate`, `payDate`, `status`) values('110','JAVA20220226114127000000088','o30ur5JpAsAUyGBkR0uW4IxvahR8','2599.00','广东省广州市海珠区新港中路397号','张三','020-81167888','2022-02-26 11:41:27','2022-02-26 11:41:43','2');
insert into `t_order` (`id`, `orderNo`, `userId`, `totalPrice`, `address`, `consignee`, `telNumber`, `createDate`, `payDate`, `status`) values('111','JAVA20220226120649000000157','o30ur5JpAsAUyGBkR0uW4IxvahR8','2599.00','广东省广州市海珠区新港中路397号','张三','020-81167888','2022-02-26 12:06:49','2022-02-26 12:07:03','2');
insert into `t_order` (`id`, `orderNo`, `userId`, `totalPrice`, `address`, `consignee`, `telNumber`, `createDate`, `payDate`, `status`) values('112','JAVA20220226121701000000063','o30ur5JpAsAUyGBkR0uW4IxvahR8','2599.00','广东省广州市海珠区新港中路397号','张三','020-81167888','2022-02-26 12:17:01',NULL,'1');
insert into `t_order` (`id`, `orderNo`, `userId`, `totalPrice`, `address`, `consignee`, `telNumber`, `createDate`, `payDate`, `status`) values('113','JAVA20220226121703000000888','o30ur5JpAsAUyGBkR0uW4IxvahR8','2599.00','广东省广州市海珠区新港中路397号','张三','020-81167888','2022-02-26 12:17:04','2022-02-26 12:17:18','2');
insert into `t_order` (`id`, `orderNo`, `userId`, `totalPrice`, `address`, `consignee`, `telNumber`, `createDate`, `payDate`, `status`) values('114','JAVA20220226124930000000901','o30ur5JpAsAUyGBkR0uW4IxvahR8','13795.00','江苏省南通市通州区万科大都会11栋11-11室','小锋','18862857105','2022-02-26 12:49:31','2022-02-26 12:49:43','2');
package com.java1234.util;import java.util.ArrayList;
import java.util.List;
import java.util.Random;/*** 字符串工具类* @author **/
public class StringUtil {/*** 判断是否是空* @param str* @return*/public static boolean isEmpty(String str){if(str==null||"".equals(str.trim())){return true;}else{return false;}}/*** 判断是否不是空* @param str* @return*/public static boolean isNotEmpty(String str){if((str!=null)&&!"".equals(str.trim())){return true;}else{return false;}}/*** 格式化模糊查询* @param str* @return*/public static String formatLike(String str){if(isNotEmpty(str)){return "%"+str+"%";}else{return null;}}/*** 过滤掉集合里的空格* @param list* @return*/public static List<String> filterWhite(List<String> list){List<String> resultList=new ArrayList<String>();for(String l:list){if(isNotEmpty(l)){resultList.add(l);}}return resultList;}/*** 去除html标签*/public static String stripHtml(String content) { // <p>段落替换为换行 content = content.replaceAll("<p .*?>", "\r\n"); // <br><br/>替换为换行 content = content.replaceAll("<br\\s*/?>", "\r\n"); // 去掉其它的<>之间的东西 content = content.replaceAll("\\<.*?>", ""); // 去掉空格 content = content.replaceAll(" ", ""); return content;   }/*** 生成六位随机数* @return*/public static String genSixRandomNum(){Random random = new Random();String result="";for (int i=0;i<6;i++){result+=random.nextInt(10);}return result;}/*** 生成由[A-Z,0-9]生成的随机字符串* @param length  欲生成的字符串长度* @return*/public static String getRandomString(int length){Random random = new Random();StringBuffer sb = new StringBuffer();for(int i = 0; i < length; ++i){int number = random.nextInt(2);long result = 0;switch(number){case 0:result = Math.round(Math.random() * 25 + 65);sb.append(String.valueOf((char)result));break;case 1:sb.append(String.valueOf(new Random().nextInt(10)));break;}}return sb.toString();}}
package com.java1234.util;import java.text.SimpleDateFormat;
import java.util.Date;/*** 日期工具类* @author Administrator**/
public class DateUtil {/*** 日期对象转字符串* @param date* @param format* @return*/public static String formatDate(Date date,String format){String result="";SimpleDateFormat sdf=new SimpleDateFormat(format);if(date!=null){result=sdf.format(date);}return result;}/*** 字符串转日期对象* @param str* @param format* @return* @throws Exception*/public static Date formatString(String str,String format) throws Exception{if(StringUtil.isEmpty(str)){return null;}SimpleDateFormat sdf=new SimpleDateFormat(format);return sdf.parse(str);}public static String getCurrentDateStr(){Date date=new Date();SimpleDateFormat sdf=new SimpleDateFormat("yyyyMMddhhmmssSSSSSSSSS");return sdf.format(date);}public static String getCurrentDatePath()throws Exception{Date date=new Date();SimpleDateFormat sdf=new SimpleDateFormat("yyyy/MM/dd/");return sdf.format(date);}public static void main(String[] args) {try {System.out.println(getCurrentDateStr());} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}
}
package com.java1234.constant;/*** 系统级静态变量* @author java1234_小锋* @site www.java1234.com* @company Java知识分享网* @create 2019-08-13 上午 9:51*/
public class SystemConstant {/*** token*/public static final int JWT_ERRCODE_NULL = 4000;			//Token不存在public static final int JWT_ERRCODE_EXPIRE = 4001;			//Token过期public static final int JWT_ERRCODE_FAIL = 4002;			//验证不通过/*** JWT*/public static final String JWT_SECERT = "8677df7fc3a34e26a61c034d5ec8245d";			//密匙public static final long JWT_TTL = 24*60 * 60 * 1000;									//token有效时间
}
package com.java1234.util;import com.java1234.constant.SystemConstant;
import com.java1234.entity.CheckResult;
import io.jsonwebtoken.*;
import org.bouncycastle.util.encoders.Base64;import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.util.Date;/*** jwt加密和解密的工具类* @author java1234_小锋* @site www.java1234.com* @company Java知识分享网* @create 2019-08-13 上午 10:06*/
public class JwtUtils {/*** 签发JWT* @param id* @param subject 可以是JSON数据 尽可能少* @param ttlMillis* @return*/public static String createJWT(String id, String subject, long ttlMillis) {SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;long nowMillis = System.currentTimeMillis();Date now = new Date(nowMillis);SecretKey secretKey = generalKey();JwtBuilder builder = Jwts.builder().setId(id).setSubject(subject)   // 主题.setIssuer("Java1234")     // 签发者.setIssuedAt(now)      // 签发时间.signWith(signatureAlgorithm, secretKey); // 签名算法以及密匙if (ttlMillis >= 0) {long expMillis = nowMillis + ttlMillis;Date expDate = new Date(expMillis);builder.setExpiration(expDate); // 过期时间}return builder.compact();}/*** 验证JWT* @param jwtStr* @return*/public static CheckResult validateJWT(String jwtStr) {CheckResult checkResult = new CheckResult();Claims claims = null;try {claims = parseJWT(jwtStr);checkResult.setSuccess(true);checkResult.setClaims(claims);} catch (ExpiredJwtException e) {checkResult.setErrCode(SystemConstant.JWT_ERRCODE_EXPIRE);checkResult.setSuccess(false);} catch (SignatureException e) {checkResult.setErrCode(SystemConstant.JWT_ERRCODE_FAIL);checkResult.setSuccess(false);} catch (Exception e) {checkResult.setErrCode(SystemConstant.JWT_ERRCODE_FAIL);checkResult.setSuccess(false);}return checkResult;}/*** 生成加密Key* @return*/public static SecretKey generalKey() {byte[] encodedKey = Base64.decode(SystemConstant.JWT_SECERT);SecretKey key = new SecretKeySpec(encodedKey, 0, encodedKey.length, "AES");return key;}/*** 解析JWT字符串* @param jwt* @return* @throws Exception*/public static Claims parseJWT(String jwt) throws Exception {SecretKey secretKey = generalKey();return Jwts.parser().setSigningKey(secretKey).parseClaimsJws(jwt).getBody();}public static void main(String[] args) throws InterruptedException {//小明失效 10sString sc = createJWT("1","小明", 60 * 60 * 1000);System.out.println(sc);System.out.println(validateJWT(sc).getErrCode());System.out.println(validateJWT(sc).getClaims().getId());System.out.println(validateJWT(sc).getClaims().getSubject());//Thread.sleep(3000);System.out.println(validateJWT(sc).getClaims());Claims claims = validateJWT(sc).getClaims();String sc2 = createJWT(claims.getId(),claims.getSubject(), SystemConstant.JWT_TTL);System.out.println(sc2);}}
package com.java1234.util;import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.conn.ssl.DefaultHostnameVerifier;
import org.apache.http.conn.util.PublicSuffixMatcher;
import org.apache.http.conn.util.PublicSuffixMatcherLoader;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.springframework.stereotype.Component;import java.io.*;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;/*** httpClient 工具类* @author java1234_小锋* @site www.java1234.com* @company Java知识分享网* @create 2019-02-10 下午 2:49*/
@Component
public class HttpClientUtil {/*** 默认参数设置* setConnectTimeout:设置连接超时时间,单位毫秒。* setConnectionRequestTimeout:设置从connect Manager获取Connection 超时时间,单位毫秒。* setSocketTimeout:请求获取数据的超时时间,单位毫秒。访问一个接口,多少时间内无法返回数据,就直接放弃此次调用。 暂时定义15分钟*/private RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(600000).setConnectTimeout(600000).setConnectionRequestTimeout(600000).build();/*** 静态内部类---作用:单例产生类的实例* @author Administrator**/private static class LazyHolder {    private static final HttpClientUtil INSTANCE = new HttpClientUtil();    }  private HttpClientUtil(){}public static HttpClientUtil getInstance(){return LazyHolder.INSTANCE;    }/*** 发送 post请求* @param httpUrl 地址*/public String sendHttpPost(String httpUrl) {HttpPost httpPost = new HttpPost(httpUrl);// 创建httpPost  return sendHttpPost(httpPost);}/*** 发送 post请求* @param httpUrl 地址* @param params 参数(格式:key1=value1&key2=value2)*/public String sendHttpPost(String httpUrl, String params) {HttpPost httpPost = new HttpPost(httpUrl);// 创建httpPost  try {//设置参数StringEntity stringEntity = new StringEntity(params, "UTF-8");stringEntity.setContentType("application/x-www-form-urlencoded");httpPost.setEntity(stringEntity);} catch (Exception e) {e.printStackTrace();}return sendHttpPost(httpPost);}/*** 发送 post请求* @param httpUrl 地址* @param maps 参数*/public String sendHttpPost(String httpUrl, Map<String, String> maps) {HttpPost httpPost = new HttpPost(httpUrl);// 创建httpPost  // 创建参数队列  List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();for (String key : maps.keySet()) {nameValuePairs.add(new BasicNameValuePair(key, maps.get(key)));}try {httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs, "UTF-8"));} catch (Exception e) {e.printStackTrace();}return sendHttpPost(httpPost);}/*** 发送Post请求* @param httpPost* @return*/private String sendHttpPost(HttpPost httpPost) {CloseableHttpClient httpClient = null;CloseableHttpResponse response = null;HttpEntity entity = null;String responseContent = null;try {// 创建默认的httpClient实例httpClient = HttpClients.createDefault();httpPost.setConfig(requestConfig);// 执行请求long execStart = System.currentTimeMillis();response = httpClient.execute(httpPost);long execEnd = System.currentTimeMillis();System.out.println("=================执行post请求耗时:"+(execEnd-execStart)+"ms");long getStart = System.currentTimeMillis();entity = response.getEntity();responseContent = EntityUtils.toString(entity, "UTF-8");long getEnd = System.currentTimeMillis();System.out.println("=================获取响应结果耗时:"+(getEnd-getStart)+"ms");} catch (Exception e) {e.printStackTrace();} finally {try {// 关闭连接,释放资源if (response != null) {response.close();}if (httpClient != null) {httpClient.close();}} catch (IOException e) {e.printStackTrace();}}return responseContent;}/*** 发送 get请求* @param httpUrl*/public String sendHttpGet(String httpUrl) {HttpGet httpGet = new HttpGet(httpUrl);// 创建get请求return sendHttpGet(httpGet);}/*** 发送 get请求Https* @param httpUrl*/public String sendHttpsGet(String httpUrl) {HttpGet httpGet = new HttpGet(httpUrl);// 创建get请求return sendHttpsGet(httpGet);}/*** 发送Get请求* @param httpGet* @return*/private String sendHttpGet(HttpGet httpGet) {CloseableHttpClient httpClient = null;CloseableHttpResponse response = null;HttpEntity entity = null;String responseContent = null;try {// 创建默认的httpClient实例.httpClient = HttpClients.createDefault();httpGet.setConfig(requestConfig);// 执行请求response = httpClient.execute(httpGet);entity = response.getEntity();responseContent = EntityUtils.toString(entity, "UTF-8");} catch (Exception e) {e.printStackTrace();} finally {try {// 关闭连接,释放资源if (response != null) {response.close();}if (httpClient != null) {httpClient.close();}} catch (IOException e) {e.printStackTrace();}}return responseContent;}/*** 发送Get请求Https* @param httpGet* @return*/private String sendHttpsGet(HttpGet httpGet) {CloseableHttpClient httpClient = null;CloseableHttpResponse response = null;HttpEntity entity = null;String responseContent = null;try {// 创建默认的httpClient实例.PublicSuffixMatcher publicSuffixMatcher = PublicSuffixMatcherLoader.load(new URL(httpGet.getURI().toString()));DefaultHostnameVerifier hostnameVerifier = new DefaultHostnameVerifier(publicSuffixMatcher);httpClient = HttpClients.custom().setSSLHostnameVerifier(hostnameVerifier).build();httpGet.setConfig(requestConfig);// 执行请求response = httpClient.execute(httpGet);entity = response.getEntity();responseContent = EntityUtils.toString(entity, "UTF-8");} catch (Exception e) {e.printStackTrace();} finally {try {// 关闭连接,释放资源if (response != null) {response.close();}if (httpClient != null) {httpClient.close();}} catch (IOException e) {e.printStackTrace();}}return responseContent;}/*** 发送xml数据* @param url* @param xmlData* @return* @throws ClientProtocolException* @throws IOException*/public static HttpResponse sendXMLDataByPost(String url, String xmlData)throws ClientProtocolException, IOException {HttpClient httpClient = HttpClients.createDefault();HttpPost httppost = new HttpPost(url);StringEntity entity = new StringEntity(xmlData);httppost.setEntity(entity);httppost.setHeader("Content-Type", "text/xml;charset=UTF-8");HttpResponse response = httpClient.execute(httppost);return response;}/*** 获得响应HTTP实体内容** @param response* @return* @throws IOException* @throws UnsupportedEncodingException*/public static String getHttpEntityContent(HttpResponse response) throws IOException, UnsupportedEncodingException {HttpEntity entity = response.getEntity();if (entity != null) {InputStream is = entity.getContent();BufferedReader br = new BufferedReader(new InputStreamReader(is, "UTF-8"));String line = br.readLine();StringBuilder sb = new StringBuilder();while (line != null) {sb.append(line + "\n");line = br.readLine();}return sb.toString();}return "";}}
package com.java1234.mapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.java1234.entity.BigType;
import com.java1234.entity.WxUserInfo;/*** 微信用户Mapper接口* @author java1234_小锋* @site www.java1234.com* @company 南通小锋网络科技有限公司* @create 2022-02-23 22:00*/
public interface WxUserInfoMapper extends BaseMapper<WxUserInfo> {
}
package com.java1234.mapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.java1234.entity.Order;/*** 订单Mapper接口* @author java1234_小锋* @site www.java1234.com* @company 南通小锋网络科技有限公司* @create 2022-02-23 22:00*/
public interface OrderMapper extends BaseMapper<Order> {
}
package com.java1234.mapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.java1234.entity.OrderDetail;/*** 订单详情Mapper接口* @author java1234_小锋* @site www.java1234.com* @company 南通小锋网络科技有限公司* @create 2022-02-23 22:00*/
public interface OrderDetailMapper extends BaseMapper<OrderDetail> {
}
package com.java1234.service;import com.baomidou.mybatisplus.extension.service.IService;
import com.java1234.entity.WxUserInfo;/*** 微信用户Service接口* @author java1234_小锋* @site www.java1234.com* @company 南通小锋网络科技有限公司* @create 2022-02-23 22:01*/
public interface IWxUserInfoService extends IService<WxUserInfo> {
}
package com.java1234.service;import com.baomidou.mybatisplus.extension.service.IService;
import com.java1234.entity.Order;/*** 订单Service接口* @author java1234_小锋* @site www.java1234.com* @company 南通小锋网络科技有限公司* @create 2022-02-23 22:01*/
public interface IOrderService extends IService<Order> {
}
package com.java1234.service;import com.baomidou.mybatisplus.extension.service.IService;
import com.java1234.entity.OrderDetail;/*** 订单详情Service接口* @author java1234_小锋* @site www.java1234.com* @company 南通小锋网络科技有限公司* @create 2022-02-23 22:01*/
public interface IOrderDetailService extends IService<OrderDetail> {
}
package com.java1234.service.impl;import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.java1234.entity.OrderDetail;
import com.java1234.mapper.OrderDetailMapper;
import com.java1234.service.IOrderDetailService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;/*** 订单详情Service实现类* @author java1234_小锋* @site www.java1234.com* @company 南通小锋网络科技有限公司* @create 2022-02-23 22:02*/
@Service("orderDetailService")
public class IOrderDetailServiceImpl extends ServiceImpl<OrderDetailMapper,OrderDetail> implements IOrderDetailService {@Autowiredprivate OrderDetailMapper orderDetailMapper;
}
package com.java1234.service.impl;import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.java1234.entity.Order;
import com.java1234.mapper.OrderMapper;
import com.java1234.service.IOrderService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;/*** 订单Service实现类* @author java1234_小锋* @site www.java1234.com* @company 南通小锋网络科技有限公司* @create 2022-02-23 22:02*/
@Service("orderService")
public class IOrderServiceImpl extends ServiceImpl<OrderMapper,Order> implements IOrderService {@Autowiredprivate OrderMapper orderMapper;
}
package com.java1234.service.impl;import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.java1234.entity.WxUserInfo;
import com.java1234.mapper.WxUserInfoMapper;
import com.java1234.service.IWxUserInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;/*** 微信用户Service实现类* @author java1234_小锋* @site www.java1234.com* @company 南通小锋网络科技有限公司* @create 2022-02-23 22:02*/
@Service("wxUserInfoService")
public class IWxUserInfoServiceImpl extends ServiceImpl<WxUserInfoMapper,WxUserInfo> implements IWxUserInfoService {@Autowiredprivate WxUserInfoMapper wxUserInfoMapper;
}
package com.java1234.controller;import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.java1234.constant.SystemConstant;
import com.java1234.entity.R;
import com.java1234.entity.WxUserInfo;
import com.java1234.properties.WeixinProperties;
import com.java1234.service.IWxUserInfoService;
import com.java1234.util.HttpClientUtil;
import com.java1234.util.JwtUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.Date;
import java.util.HashMap;
import java.util.Map;/*** 微信用户Controller* @author java1234_小锋* @site www.java1234.com* @company 南通小锋网络科技有限公司* @create 2022-04-02 9:12*/
@RestController
@RequestMapping("/user")
public class UserController {@Autowiredprivate WeixinProperties weixinProperties;@Autowiredprivate HttpClientUtil httpClientUtil;@Autowiredprivate IWxUserInfoService wxUserInfoService;/*** 微信用户登录* @return*/@RequestMapping("/wxlogin")public R wxLogin(@RequestBody WxUserInfo wxUserInfo){System.out.println(wxUserInfo.getCode());String jscode2sessionUrl=weixinProperties.getJscode2sessionUrl()+"?appid="+weixinProperties.getAppid()+"&secret="+weixinProperties.getSecret()+"&js_code="+wxUserInfo.getCode()+"&grant_type=authorization_code";System.out.println(jscode2sessionUrl);String result = httpClientUtil.sendHttpGet(jscode2sessionUrl);System.out.println(result);JSONObject jsonObject= JSON.parseObject(result);String openid = jsonObject.get("openid").toString();System.out.println(openid);// 插入用户到数据库  假如说 用户不存在 我们插入用户  如果用户存在 我们更新用户WxUserInfo resultWxUserInfo = wxUserInfoService.getOne(new QueryWrapper<WxUserInfo>().eq("openid", openid));if(resultWxUserInfo==null){System.out.println("不存在 插入用户");wxUserInfo.setOpenid(openid);wxUserInfo.setRegisterDate(new Date());wxUserInfo.setLastLoginDate(new Date());wxUserInfoService.save(wxUserInfo);}else{System.out.println("存在 更新用户");resultWxUserInfo.setNickName(wxUserInfo.getNickName());resultWxUserInfo.setAvatarUrl(wxUserInfo.getAvatarUrl());resultWxUserInfo.setLastLoginDate(new Date());wxUserInfoService.updateById(resultWxUserInfo);}// 利用jwt生成token返回到前端String token = JwtUtils.createJWT(openid, wxUserInfo.getNickName(), SystemConstant.JWT_TTL);Map<String,Object> resultMap=new HashMap<>();resultMap.put("token",token);return R.ok(resultMap);}
}
package com.java1234.controller;import com.java1234.constant.SystemConstant;
import com.java1234.entity.Order;
import com.java1234.entity.OrderDetail;
import com.java1234.entity.R;
import com.java1234.service.IOrderDetailService;
import com.java1234.service.IOrderService;
import com.java1234.util.DateUtil;
import com.java1234.util.JwtUtils;
import io.jsonwebtoken.Claims;
import javafx.scene.input.TouchEvent;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.Date;
import java.util.HashMap;
import java.util.Map;/*** 订单Controller控制器* @author java1234_小锋* @site www.java1234.com* @company 南通小锋网络科技有限公司* @create 2022-04-05 9:26*/
@RestController
@RequestMapping("/my/order")
public class OrderController {@Autowiredprivate IOrderService orderService;@Autowiredprivate IOrderDetailService orderDetailService;/*** 创建订单,返回订单号* @param token* @return*/@RequestMapping("/create")@Transactionalpublic R create(@RequestBody Order order, @RequestHeader(value = "token")String token){// 通过token获取openidSystem.out.println("token="+token);System.out.println("order="+order);// 添加订单到数据库Claims claims = JwtUtils.validateJWT(token).getClaims();if(claims!=null){System.out.println("openid="+claims.getId());order.setUserId(claims.getId());}order.setOrderNo("JAVA"+DateUtil.getCurrentDateStr());order.setCreateDate(new Date());OrderDetail[] goods = order.getGoods();orderService.save(order);// 添加订单详情到数据库for(int i=0;i<goods.length;i++){OrderDetail orderDetail=goods[i];orderDetail.setMId(order.getId());orderDetailService.save(orderDetail);}Map<String,Object> resultMap=new HashMap<>();resultMap.put("orderNo",order.getOrderNo());return R.ok(resultMap);}
}

requestUtil.js封装 对于/my/请求,header里面加token

//定义请求根路径baseUrl
const baseUrl="http://localhost:8080";//同时发送异步代码的次数
let ajaxTimes=0;/*** 返回请求根路径baseUrl*/
export const getBaseUrl=()=>{return baseUrl;
}/*** wx login 封装* @param {*} params */
export const getWxLogin=()=>{return new Promise((resolve,reject)=>{wx.login({timeout: 5000,success: (res) => {resolve(res)},fail:(err)=>{reject(err)}})});
}/*** promise形式的 小程序微信支付* */
export const requestPay=(pay)=>{return new Promise((resolve,reject)=>{wx.requestPayment({...pay,success:(res)=>{resolve(res)},fail:(err)=>{reject(err)}})});
}
/*** wx getUserProfile封装* @param {*} params */
export const getUserProfile=()=>{return new Promise((resolve,reject)=>{wx.getUserProfile({desc: '获取用户信息',success:(res)=>{resolve(res)},fail:(err)=>{reject(err)}})});
}/*** 后端请求工具类* @param {*} params */
export const requestUtil=(params)=>{var start=new Date().getTime();console.log("ajaxTimes="+ajaxTimes)ajaxTimes++;//显示加载效果wx.showLoading({title: '加载中',mask:true})//模拟网络延迟加载while(true) if(new Date().getTime()-start > 1 * 100)break;return new Promise((resolve,reject)=>{wx.request({...params,url:baseUrl+params.url,success:(result)=>{resolve(result.data)},fail:(err)=>{reject(err)},complete:()=>{ajaxTimes--;if(ajaxTimes==0){//关闭正在等待的图标wx.hideLoading();}}})});
}

//定义请求根路径baseUrl
const baseUrl="http://localhost:8080";//同时发送异步代码的次数
let ajaxTimes=0;/*** 返回请求根路径baseUrl*/
export const getBaseUrl=()=>{return baseUrl;
}/*** wx login 封装* @param {*} params */
export const getWxLogin=()=>{return new Promise((resolve,reject)=>{wx.login({timeout: 5000,success: (res) => {resolve(res)},fail:(err)=>{reject(err)}})});
}/*** promise形式的 小程序微信支付* */
export const requestPay=(pay)=>{return new Promise((resolve,reject)=>{wx.requestPayment({...pay,success:(res)=>{resolve(res)},fail:(err)=>{reject(err)}})});
}
/*** wx getUserProfile封装* @param {*} params */
export const getUserProfile=()=>{return new Promise((resolve,reject)=>{wx.getUserProfile({desc: '获取用户信息',success:(res)=>{resolve(res)},fail:(err)=>{reject(err)}})});
}/*** 后端请求工具类* @param {*} params */
export const requestUtil=(params)=>{var start=new Date().getTime();console.log("ajaxTimes="+ajaxTimes)ajaxTimes++;//显示加载效果wx.showLoading({title: '加载中',mask:true})//模拟网络延迟加载while(true) if(new Date().getTime()-start > 1 * 100)break;return new Promise((resolve,reject)=>{wx.request({...params,header,url:baseUrl+params.url,success:(result)=>{resolve(result.data)},fail:(err)=>{reject(err)},complete:()=>{ajaxTimes--;if(ajaxTimes==0){//关闭正在等待的图标wx.hideLoading();}}})});
}

在这里插入图片描述
前端

/*** 创建订单*/async createOrder(){const totalPrice=this.data.totalPrice; // 请求体 总价const address=this.data.address.provinceName+this.data.address.cityName+this.data.address.countyName+this.data.address.detailInfo; // 请求体  收货地址const consignee=this.data.address.userName; // 请求体 收货人const telNumber=this.data.address.telNumber; // 请求体 联系电话let goods=[];this.data.cart.forEach(v=>goods.push({goodsId:v.id,goodsNumber:v.num,goodsPrice:v.price,goodsName:v.name,goodsPic:v.proPic}))const orderParam={totalPrice,address,consignee,telNumber,goods}const res=await requestUtil({url:"/my/order/create",method:"POST",data:orderParam})console.log(res.orderNo);},

后端:(加下事务)

    /*** 创建订单,返回订单号* @param order* @param token* @return*/@RequestMapping("/create")@Transactionalpublic R create(@RequestBody Order order, @RequestHeader(value="token") String token){System.out.println("token:"+token);// 通过token获取openidClaims claims = JwtUtils.validateJWT(token).getClaims();if(claims!=null){System.out.println("openid="+claims.getId());order.setUserId(claims.getId());}order.setOrderNo("JAVA"+DateUtil.getCurrentDateStr());order.setCreateDate(new Date());OrderDetail[] goods = order.getGoods();// 添加订单到数据库orderService.save(order);// 添加订单详情到数据库for(int i=0;i<goods.length;i++){OrderDetail orderDetail=goods[i];orderDetail.setMId(order.getId());orderDetailService.save(orderDetail);}Map<String,Object> resultMap=new HashMap<>();resultMap.put("orderNo",order.getOrderNo());return R.ok(resultMap);}
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端JavaScript篇之数组的遍历方法有哪些?forEach和map方法有什么区别?

目录 数组的遍历方法有哪些&#xff1f;forEach和map方法有什么区别&#xff1f;forEach()map()filter()for…ofevery() 和 some()find() 和 findIndex()reduce() 和 reduceRight()forEach和map方法有什么区别总结 数组的遍历方法有哪些&#xff1f;forEach和map方法有什么区别…

【Unity】QFramework通用背包系统优化:使用Odin优化编辑器

前言 在学习凉鞋老师的课程《QFramework系统设计&#xff1a;通用背包系统》第四章时&#xff0c;笔者使用了Odin插件&#xff0c;对Item和ItemDatabase的SO文件进行了一些优化&#xff0c;使物品页面更加紧凑、更易拓展。 核心逻辑和功能没有改动&#xff0c;整体代码量减少…

深度学习(15)--PyTorch构建卷积神经网络

目录 一.PyTorch构建卷积神经网络(CNN)详细流程 二.graphviz torchviz使PyTorch网络可视化 2.1.可视化经典网络vgg16 2.2.可视化自己定义的网络 一.PyTorch构建卷积神经网络(CNN)详细流程 卷积神经网络&#xff08;Convolutional Neural Networks&#xff09;是一种深度学…

PHP入门指南:进阶篇

PHP入门指南&#xff1a;进阶篇 PHP入门指南&#xff1a;进阶篇1. 面向对象编程&#xff08;OOP&#xff09;1.1 类和对象的基本概念1.2 构造函数和析构函数1.3 属性和方法的访问控制1.4 继承与多态 2. 错误和异常处理2.1 错误处理机制2.2 异常处理机制2.3 自定义异常类 3. PHP…

Hadoop搭建(完全分布式)

节点分布&#xff1a; bigdata-masterbigdata-slave1bigdata-salve2 NameNode NodeManager NodeManager SecondaryNameNodeDataNodeDataNodeResourceManagerNodeManagerDataNode 目录 一、jdk安装&#xff1a; 二、hadoop安装 一、jdk安装&#xff1a; jdk-8u212链接&am…

信息隐藏研究新动向

信息隐藏有三十年的研究历史&#xff0c;在隐写、数字水印、可逆数据隐藏等方面&#xff0c;国内外发展了一系列新技术与新方法。随着深度学习时代的来临&#xff0c;信息隐藏研究出现了新的变化。一方面&#xff0c;深度学习技术在信息隐藏的发展中发挥了重要作用&#xff1b;…

94.网游逆向分析与插件开发-游戏窗口化助手-地图数据获取的逆向分析与C++代码还原

内容参考于&#xff1a;易道云信息技术研究院VIP课 上一个内容&#xff1a;升级经验数据获取的逆向分析 码云地址&#xff08;游戏窗口化助手 分支&#xff09;&#xff1a;https://gitee.com/dye_your_fingers/sro_-ex.git 码云版本号&#xff1a;c4351a5b346d8953a1a8e3ec…

SpringCloud-Eureka原理分析

Eureka是Netflix开源的一款用于实现服务注册与发现的工具。在微服务架构中&#xff0c;服务的动态注册和发现是必不可少的组成部分&#xff0c;而Eureka正是为了解决这一问题而诞生的。 一、为何需要Eureka 在微服务架构中&#xff0c;服务之间的协同合作和高效通信是至关重要…

CentOS下安装vlc

一、引言 vlc是一跨多媒体播放器&#xff0c;可以播放本地媒体文件和网络串流&#xff0c;帮助我们排查音视频开发过程中遇到的问题。大部分情况下&#xff0c;我们只需要在Windows系统下安装vlc就可以了。但有一种情况是需要在Linux下安装vlc的&#xff1a;我们的音视频拉流软…

华为配置内部人员接入WLAN网络示例(802.1X认证)

配置内部人员接入WLAN网络示例&#xff08;802.1X认证&#xff09; 组网图形 图1 配置802.1X认证组网图 业务需求组网需求数据规划配置思路配置注意事项操作步骤配置文件 业务需求 用户接入WLAN网络&#xff0c;使用802.1X客户端进行认证&#xff0c;输入正确的用户名和密…

Day10案例演示

Day10案例演示 在 AppInfoScanner所在的文件中运行cmd&#xff0c;输入 python -m pip install -r requirements.txt安装环境 具体用法可移步&#xff1a;https://github.com/kelvinBen/AppInfoScanner 以下仅以android类型示范 python app.py android -i <Your apk fil…

【Git版本控制 02】分支管理

目录 一、创建分支 二、切换分支 三、合并分支 四、删除分支 五、合并冲突 六、分支策略 七、bug分支 一、创建分支 # 当前仓库只有 master 一个主分支 # 可通过 git branch 是进行分支管理的命令&#xff0c;可通过不同参数对分支进行查看、创建、删除(base) [rootloc…

第一个 Angular 项目 - 静态页面

第一个 Angular 项目 - 静态页面 之前的笔记&#xff1a; [Angular 基础] - Angular 渲染过程 & 组件的创建 [Angular 基础] - 数据绑定(databinding) [Angular 基础] - 指令(directives) 这是在学完了上面这三个内容后能够完成的项目&#xff0c;目前因为还没有学到数…

Asp .Net Core 系列:Asp .Net Core 集成 Panda.DynamicWebApi

文章目录 简介Asp .Net Core 集成 Panda.DynamicWebApi配置原理什么是POCO Controller&#xff1f;POCO控制器原理ControllerFeatureProvider实现自定义判断规则IApplicationModelConventionPanda.DynamicWebApi中的实现ConfigureApiExplorer()ConfigureSelector()ConfigurePar…

S7-1200PLC通讯问题总结

文章目录 一、硬件1.串口通信RS232RS485RS422 2.网口通信 二、协议1.串口通信协议2.网口通信协议 三、程序编写1.S7通信PUTGET 2.开放式以太网通信 一、硬件 可分为PLC与PLC通信&#xff0c;PLC与上位机通信&#xff0c;PLC与变频器通信&#xff0c;PLC与仪器仪表通信&#xf…

兼容ARM 32位架构的edgeConnector产品为用户提供新的部署选项

Softing工业将ARM 32位兼容性集成到了edgeConnector产品中&#xff0c;以满足用户对ARM处理器的边缘设备日益增长的使用需求。 &#xff08;兼容ARM 32位架构的edgeConnector产品扩展了其应用部署范围&#xff09; 用户对采用ARM处理器的紧凑型边缘设备的需求正在大幅增长&…

使用 Docker 镜像预热提升容器启动效率详解

概要 在容器化部署中,Docker 镜像的加载速度直接影响到服务的启动时间和扩展效率。本文将深入探讨 Docker 镜像预热的概念、必要性以及实现方法。通过详细的操作示例和实践建议,读者将了解如何有效地实现镜像预热,以加快容器启动速度,提高服务的响应能力。 Docker 镜像预热…

使用influxdb+Grafana+nmon2influxdb+nmon实时监控vps性能

Grafana可以用来实时查看linux系统的各种性能数据。 1、安装环境&#xff1a; centos 7influxdb1.7.6grafana-4.6.3-1nmon2influxdb-2.1.7nmon-16m 2、安装influxdb&#xff1a; 下载rpm包&#xff1a; influxdb官网&#xff1a;https://docs.influxdata.com/influxdb/v2.0…

【Git版本控制 01】基本操作

目录 一、初始配置 二、添加文件 三、查看日志 四、修改文件 五、版本回退 六、撤销修改 七、删除文件 一、初始配置 Git版本控制器&#xff1a;记录每次的修改以及版本迭代的一个管理系统。 # 初始化本地仓库&#xff1a;git init(base) [rootlocalhost gitcode]# gi…

NLP_语言模型的雏形 N-Gram 模型

文章目录 N-Gram 模型1.将给定的文本分割成连续的N个词的组合(N-Gram)2.统计每个N-Gram在文本中出现的次数&#xff0c;也就是词频3.为了得到一个词在给定上下文中出现的概率&#xff0c;我们可以利用条件概率公式计算。具体来讲&#xff0c;就是计算给定前N-1个词时&#xff0…