外星人公司(狗头)委托我开发一个一个专门的外星人商城(模仿京东、天猫),出售外星人电子产品以及周边,实现了以下功能。
本项目已经搭载了服务器,网址给定:
链接: 外星人官方网站.
持久层:依据业务要求规划相关的SQL语句,以及进行配置
业务层:核心功能控制、业务操作以及异常处理
控制层:接受请求,处理响应
前端开发:JS、JQuery、Ajax
单元测试:junit
CREATE TABLE t_order
(oid INT AUTO_INCREMENT COMMENT '订单id',uid INT NOT NULL COMMENT '用户id',recv_name VARCHAR(20) NOT NULL COMMENT '收件人姓名',recv_phone VARCHAR(20) COMMENT '�ջ��˵绰',recv_province VARCHAR(15) COMMENT '�ջ�������ʡ',recv_city VARCHAR(15) COMMENT '�ջ���������',recv_area VARCHAR(15) COMMENT '�ջ���������',recv_address VARCHAR(50) COMMENT '�ջ���ϸ��ַ',total_price BIGINT COMMENT '总价',STATUS INT COMMENT '״̬��0-δ֧����1-��֧����2-��ȡ����3-�ѹرգ�4-�����',order_time DATETIME COMMENT '�µ�ʱ��',pay_time DATETIME COMMENT '֧��ʱ��',created_user VARCHAR(20) COMMENT '������',created_time DATETIME COMMENT '����ʱ��',modified_user VARCHAR(20) COMMENT '����',modified_time DATETIME COMMENT '��ʱ��',PRIMARY KEY (oid)
) ENGINE = INNODBDEFAULT CHARSET = utf8;CREATE TABLE t_order_item
(id INT AUTO_INCREMENT COMMENT '订单中的商品记录id',oid INT NOT NULL COMMENT '�������Ķ�����id',pid INT NOT NULL COMMENT '��Ʒ��id',title VARCHAR(100) NOT NULL COMMENT '��Ʒ����',image VARCHAR(500) COMMENT '商品图片',price BIGINT COMMENT '商品价格',num INT COMMENT '��������',created_user VARCHAR(20) COMMENT '������',created_time DATETIME COMMENT '����ʱ��',modified_user VARCHAR(20) COMMENT '����',modified_time DATETIME COMMENT '��ʱ��',PRIMARY KEY (id)
) ENGINE = INNODBDEFAULT CHARSET = utf8;
/** 购物车数据的实体类 */
public class Cart extends BaseEntity implements Serializable {private Integer cid;private Integer uid;private Integer pid;private Long price;private Integer num;
/** 处理购物车数据的持久层接口 */
public interface CartMapper {/*** 插入购物车数据* @param cart 购物车数据* @return 受影响的行数*/Integer insert(Cart cart);/*** 修改购物车数据中商品的数量* @param cid 购物车数据的id* @param num 新的数量* @param modifiedUser 修改执行人* @param modifiedTime 修改时间* @return 受影响的行数*/Integer updateNumByCid(@Param("cid") Integer cid,@Param("num") Integer num,@Param("modifiedUser") String modifiedUser,@Param("modifiedTime") Date modifiedTime);/*** 根据用户id和商品id查询购物车中的数据* @param uid 用户id* @param pid 商品id* @return 匹配的购物车数据,如果该用户的购物车中并没有该商品,则返回null*/Cart findByUidAndPid(@Param("uid") Integer uid,@Param("pid") Integer pid);/*** 查询某用户的购物车数据* @param uid 用户id* @return 该用户的购物车数据的列表*/List<CartVO> findVOByUid(Integer uid);/*** 根据购物车数据id查询购物车数据详情* @param cid 购物车数据id* @return 匹配的购物车数据详情,如果没有匹配的数据则返回null*/Cart findByCid(Integer cid);/*** 根据若干个购物车数据id查询详情的列表* @param cids 若干个购物车数据id* @return 匹配的购物车数据详情的列表*/List<CartVO> findVOByCids(Integer[] cids);Integer remove(Integer cid);
}
<!-- 插入购物车数据:Integer insert(Cart cart) --><insert id="insert" useGeneratedKeys="true" keyProperty="cid">INSERT INTO compution.t_cart (uid, pid, price, num, created_user, created_time, modified_user, modified_time)VALUES (#{uid}, #{pid}, #{price}, #{num}, #{createdUser}, #{createdTime}, #{modifiedUser}, #{modifiedTime})</insert><!-- 修改购物车数据中商品的数量:Integer updateNumByCid(@Param("cid") Integer cid,@Param("num") Integer num,@Param("modifiedUser") String modifiedUser,@Param("modifiedTime") Date modifiedTime) --><update id="updateNumByCid">UPDATEcompution.t_cartSETnum=#{num},modified_user=#{modifiedUser},modified_time=#{modifiedTime}WHEREcid=#{cid}</update><!-- 根据用户id和商品id查询购物车中的数据:Cart findByUidAndPid(@Param("uid") Integer uid,@Param("pid") Integer pid) --><select id="findByUidAndPid" resultMap="CartEntityMap">SELECT*FROMcompution.t_cartWHEREuid=#{uid} AND pid=#{pid}</select><!-- 查询某用户的购物车数据:List<CartVO> findVOByUid(Integer uid) --><select id="findVOByUid" resultType=store.vo.CartVO">SELECTcid,uid,pid,t_cart.price,t_cart.num,t_product.title,t_product.price AS realPrice,t_product.imageFROMcompution.t_cartLEFT JOIN compution.t_product ON t_cart.pid = t_product.idWHEREuid = #{uid}ORDER ated_time DESC</select><!-- 根据购物车数据id查询购物车数据详情:Cart findByCid(Integer cid) --><select id="findByCid" resultMap="CartEntityMap">SELECT*FROMcompution.t_cartWHEREcid = #{cid}</select><!-- 根据若干个购物车数据id查询详情的列表:List<CartVO> findVOByCids(Integer[] cids) --><select id="findVOByCids" resultType=store.vo.CartVO">SELECTcid,uid,pid,t_cart.price,t_cart.num,t_product.title,t_product.price AS realPrice,t_product.imageFROMcompution.t_cartLEFT JOIN compution.t_product ON t_cart.pid = t_product.idWHEREcid IN (<foreach collection="array" item="cid" separator=",">#{cid}</foreach>)ORDER ated_time DESC</select><!--删--><delete id="remove" parameterType="Integer">deleteFROMcompution.t_cartWHEREcid = #{cid}</delete>
/** 处理订单和订单数据的业务层接口 */
public interface IOrderService {/*** 创建订单* @param aid 收货地址的id* @param cids 即将购买的商品数据在购物车表中的id* @param uid 当前登录的用户的id* @param username 当前登录的用户名* @return 成功创建的订单数据*/Order create(Integer aid, Integer[] cids, Integer uid, String username);
}
/** 处理订单和订单数据的业务层实现类 */
@Service
public class OrderServiceImpl implements IOrderService {@Autowiredprivate OrderMapper orderMapper;@Autowiredprivate IAddressService addressService;@Autowiredprivate ICartService cartService;@Transactional@Overridepublic Order create(Integer aid, Integer[] cids, Integer uid, String username) {// 创建当前时间对象Date now = new Date();// 根据cids查询所勾选的购物车列表中的数据List<CartVO> carts = VOByCids(uid, cids);// 计算这些商品的总价long totalPrice = 0;for (CartVO cart : carts) {totalPrice += RealPrice() * Num();}// 创建订单数据对象Order order = new Order();// 补全数据:uidorder.setUid(uid);// 查询收货地址数据Address address = ByAid(aid, uid);// 补全数据:收货地址相关的6项order.Name());order.Phone());order.ProvinceName());order.CityName());order.AreaName());order.Address());// 补全数据:totalPriceorder.setTotalPrice(totalPrice);// 补全数据:statusorder.setStatus(0);// 补全数据:下单时间order.setOrderTime(now);// 补全数据:日志order.setCreatedUser(username);order.setCreatedTime(now);order.setModifiedUser(username);order.setModifiedTime(now);// 插入订单数据Integer rows1 = orderMapper.insertOrder(order);if (rows1 != 1) {throw new InsertException("插入订单数据时出现未知错误,请联系系统管理员");}// 遍历carts,循环插入订单商品数据for (CartVO cart : carts) {// 创建订单商品数据OrderItem item = new OrderItem();// 补全数据:Oid())item.Oid());// 补全数据:pid, title, image, price, numitem.Pid());item.Title());item.Image());item.RealPrice());item.Num());// 补全数据:4项日志item.setCreatedUser(username);item.setCreatedTime(now);item.setModifiedUser(username);item.setModifiedTime(now);// 插入订单商品数据Integer rows2 = orderMapper.insertOrderItem(item);if (rows2 != 1) {throw new InsertException("插入订单商品数据时出现未知错误,请联系系统管理员");}}// 返回return order;}
}
@RestController
@RequestMapping("orders")
public class OrderController extends BaseController {@Autowiredprivate IOrderService orderService;@RequestMapping("create")public JsonResult<Order> create(Integer aid, Integer[] cids, HttpSession session) {// 从Session中取出uid和usernameInteger uid = getUidFromSession(session);String username = getUsernameFromSession(session);// 调用业务对象执行业务Order data = ate(aid, cids, uid, username);// 返回成功与数据return new JsonResult<Order>(OK, data);}
}
添加一个点击时间事件;
对于需要支付的商品列表进行输出;
<script>$("#btn-create-order").click(function() {$.ajax({url: "/orders/create",data: $("#form-create-order").serialize(),type: "POST",dataType: "JSON",success: function(json) {if (json.state == 200) {alert("创建订单成功!");console.log(json.data);} else {alert("创建订单失败!" + ssage);}},error: function(xhr) {alert("您的登录信息已经过期,请重新登录!HTTP响应码:" + xhr.status);location.href = "login.html";}});});
</script>
本文发布于:2024-02-04 12:43:08,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170707509455674.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |