购物车提交和订单查询接口

This commit is contained in:
liang.chao 2024-11-26 17:52:44 +08:00
parent 62c81d8fa0
commit 6432a0c004
7 changed files with 428 additions and 0 deletions

View File

@ -0,0 +1,51 @@
package com.bonus.material.order.controller;
import com.bonus.common.core.web.controller.BaseController;
import com.bonus.common.core.web.domain.AjaxResult;
import com.bonus.material.book.domain.BookCarInfoDto;
import com.bonus.material.order.domain.OrderDetailDto;
import com.bonus.material.order.domain.OrderInfoDto;
import com.bonus.material.order.service.OrderService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
/**
* @Authorliang.chao
* @Date2024/11/26 - 10:04
*/
@Api(value = "订单模块", tags = {"订单模块"})
@RestController
@RequestMapping("/order")
public class OrderController extends BaseController {
@Resource
private OrderService orderService;
/**
* 提交预约车到订单
*/
@ApiOperation(value = "提交预约车到订单")
@PostMapping("/submitBookCar")
public AjaxResult submitBookCar(@RequestBody OrderInfoDto orderInfoDto) {
Integer i = orderService.submitOrderInfo(orderInfoDto);
if (i > 0) {
return success("下单成功");
} else {
return error("下单失败");
}
}
/**
* 提交预约车到订单
*/
@ApiOperation(value = "获取订单详情")
@GetMapping("/getOrderDetails")
public AjaxResult getOrderDetails(OrderInfoDto orderInfoDto) {
return AjaxResult.success(orderService.getOrderDetails(orderInfoDto));
}
}

View File

@ -0,0 +1,53 @@
package com.bonus.material.order.domain;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
/**
* @Authorliang.chao
* @Date2024/11/26 - 10:28
*/
@Data
public class OrderDetailDto {
@ApiModelProperty(value = "主键id")
private Integer id;
@ApiModelProperty(value = "订单id")
private Integer orderId;
@ApiModelProperty(value = "设备id")
private Integer maId;
@ApiModelProperty(value = "租期开始时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date rentBeginTime;
@ApiModelProperty(value = "租期结束时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date rentEndTime;
@ApiModelProperty(value = "天数")
private String days;
@ApiModelProperty(value = "数量")
private Integer num;
@ApiModelProperty(value = "总金额")
private BigDecimal costs;
@ApiModelProperty(value = "设备类型0编码 1数量")
private String manageType;
@ApiModelProperty(value = "创建日期")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
@ApiModelProperty(value = "修改日期")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date updateTime;
}

View File

@ -0,0 +1,82 @@
package com.bonus.material.order.domain;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
/**
* @Authorliang.chao
* @Date2024/11/26 - 10:28
*/
@Data
public class OrderInfoDto {
@ApiModelProperty(value = "主键id")
private Integer orderId;
@ApiModelProperty(value = "父id续租原订单")
private Integer pId;
@ApiModelProperty(value = "订单编号")
private String code;
@ApiModelProperty(value = "订单日期")
private Date orderTime;
@ApiModelProperty(value = "开始日期")
private Date startTime;
@ApiModelProperty(value = "结束日期")
private Date endTime;
@ApiModelProperty(value = "订单金额")
private BigDecimal cost;
@ApiModelProperty(value = " 订单状态")
private String orderStatus;
@ApiModelProperty(value = " 装备名称")
private String deviceName;
@ApiModelProperty(value = "下单地址")
private String address;
@ApiModelProperty(value = "下单用户id")
private Long orderUser;
@ApiModelProperty(value = "创建人")
private Long creater;
@ApiModelProperty(value = "创建日期")
private Date createTime;
@ApiModelProperty(value = "修改人")
private Long updater;
@ApiModelProperty(value = "修改日期")
private Date updateTime;
private List<OrderDetailDto> detailsList;
@ApiModelProperty(value = "承租方公司名称")
private String companyName;
@ApiModelProperty(value = "出租方公司名称")
private String czcompanyName;
@ApiModelProperty(value = "出租方联系电话")
private String personPhone;
@ApiModelProperty(value = "承租方联系电话")
private String phoneNumber;
@ApiModelProperty(value = "租金区间字段")
private BigDecimal lowerBound;
private BigDecimal upperBound;
private String ids;
}

View File

@ -0,0 +1,27 @@
package com.bonus.material.order.mapper;
import com.bonus.material.device.domain.DevInfo;
import com.bonus.material.order.domain.OrderDetailDto;
import com.bonus.material.order.domain.OrderInfoDto;
import java.util.List;
/**
* @Authorliang.chao
* @Date2024/11/26 - 10:36
*/
public interface OrderMapper {
Integer insertOrderInfo(OrderInfoDto orderInfoDto);
Integer insertOrderDetail(OrderDetailDto orderDetailDto);
DevInfo getdeviceCount(OrderDetailDto orderDetailDto);
Integer updateDeviceStatus(OrderDetailDto orderDetailDto);
List<OrderInfoDto> getOrderDetails(OrderInfoDto orderInfoDto);
OrderDetailDto selectOrderDetailsById(String id);
void updateMaStatus(OrderDetailDto orderDetailDto);
}

View File

@ -0,0 +1,17 @@
package com.bonus.material.order.service;
import com.bonus.material.order.domain.OrderDetailDto;
import com.bonus.material.order.domain.OrderInfoDto;
import java.util.List;
/**
* @Authorliang.chao
* @Date2024/11/26 - 10:34
*/
public interface OrderService {
Integer submitOrderInfo(OrderInfoDto orderInfoDto);
List<OrderInfoDto> getOrderDetails(OrderInfoDto orderInfoDto);
}

View File

@ -0,0 +1,78 @@
package com.bonus.material.order.service.impl;
import com.bonus.common.security.utils.SecurityUtils;
import com.bonus.material.device.domain.DevInfo;
import com.bonus.material.order.domain.OrderDetailDto;
import com.bonus.material.order.domain.OrderInfoDto;
import com.bonus.material.order.mapper.OrderMapper;
import com.bonus.material.order.service.OrderService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
/**
* @Authorliang.chao
* @Date2024/11/26 - 10:34
*/
@Service
public class OrderServiceImpl implements OrderService {
@Resource
private OrderMapper orderMapper;
@Override
@Transactional
public Integer submitOrderInfo(OrderInfoDto orderInfoDto) {
// 首先判断库存是否足够
List<OrderDetailDto> orderDetailDtos = orderInfoDto.getDetailsList();
for (OrderDetailDto orderDetailDto : orderDetailDtos) {
// 如果是数量设备 改库存
if ("1".equals(orderDetailDto.getManageType())) {
// 先查询库存是否足够
DevInfo devInfo = orderMapper.getdeviceCount(orderDetailDto);
if (devInfo.getDeviceCount() < orderDetailDto.getNum()) {
throw new RuntimeException(devInfo.getDeviceName() + "库存不足");
}
} else {
//如果是编码设备改设备状态为在租
orderMapper.updateDeviceStatus(orderDetailDto);
}
// 更改购物车状态为已下单
orderMapper.updateMaStatus(orderDetailDto);
}
//生成订单信息
String code = "D" + System.currentTimeMillis();
orderInfoDto.setOrderStatus("2");
orderInfoDto.setCode(code);
Long userid = SecurityUtils.getLoginUser().getUserid();
orderInfoDto.setOrderUser(userid);
orderInfoDto.setCreater(userid);
Integer i = orderMapper.insertOrderInfo(orderInfoDto);
if (i > 0) {
for (OrderDetailDto orderDetailDto : orderDetailDtos) {
orderDetailDto.setOrderId(orderInfoDto.getOrderId());
orderMapper.insertOrderDetail(orderDetailDto);
}
}
return i;
}
@Override
public List<OrderInfoDto> getOrderDetails(OrderInfoDto orderInfoDto) {
List<OrderDetailDto> list = new ArrayList();
List<OrderInfoDto> orderInfoDtos = orderMapper.getOrderDetails(orderInfoDto);
for (OrderInfoDto dto : orderInfoDtos) {
String ids = dto.getIds();
for (String id : ids.split(",")) {
OrderDetailDto orderDetailDto = orderMapper.selectOrderDetailsById(id);
list.add(orderDetailDto);
}
dto.setDetailsList(list);
}
return orderInfoDtos;
}
}

View File

@ -0,0 +1,120 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.bonus.material.order.mapper.OrderMapper">
<insert id="insertOrderInfo" parameterType="com.bonus.material.order.domain.OrderInfoDto" useGeneratedKeys="true" keyProperty="orderId">
insert into ma_order_info (code, order_time, cost, order_status, order_user, address, creater, create_time)
values
(#{code}, now(), #{cost}, #{orderStatus}, #{orderUser}, #{address}, #{creater}, now())
</insert>
<insert id="insertOrderDetail">
INSERT INTO `ma_order_details` (
`order_id`,
`ma_id`,
`rent_begin_time`,
`rent_end_time`,
`days`,
`num`,
`costs`,
`create_time`,
`update_time`
) VALUES (
#{orderId},
#{maId},
#{rentBeginTime},
#{rentEndTime},
#{days},
#{num},
#{costs},
now(),
#{updateTime})
</insert>
<update id="updateDeviceStatus">
update ma_dev_info set ma_status = 3 where ma_id = #{maId} and is_active = 1
</update>
<update id="updateMaStatus">
update book_car_detail set order_status = 1 where id = #{id}
</update>
<select id="getdeviceCount" resultType="com.bonus.material.device.domain.DevInfo">
select device_count,device_name from ma_dev_info where ma_id = #{maId} and is_active = 1
</select>
<select id="getOrderDetails" resultType="com.bonus.material.order.domain.OrderInfoDto">
SELECT
moi.code AS code,
GROUP_CONCAT(hh.id) AS ids,
moi.order_time,
c.company_name AS czcompanyName,
mdi.person_phone AS personPhone,
su.phonenumber AS phoneNumber,
moi.address,
dept.companyName
FROM
ma_order_details hh
LEFT JOIN ma_order_info moi ON moi.order_id = hh.order_id
LEFT JOIN ma_dev_info mdi ON hh.ma_id = mdi.ma_id
LEFT JOIN bm_company_info c ON mdi.own_co = c.company_id
LEFT JOIN ma_type mt ON mdi.type_id = mt.type_id
LEFT JOIN sys_user su ON su.user_id = moi.order_user
LEFT JOIN (
SELECT
sd.dept_name AS companyName,
sd.dept_id AS deptId
FROM
sys_dept sd
JOIN (
SELECT
SUBSTRING_INDEX(ancestors, ',', 1) AS first_ancestor,
dept_id
FROM
sys_dept
) AS subquery
ON sd.dept_id = subquery.dept_id
AND sd.dept_id = subquery.first_ancestor
) dept ON dept.deptId = su.dept_id
WHERE
mt.del_flag = '0'
<if test="deviceName != null and deviceName != ''">
AND mdi.device_name like concat('%',#{deviceName},'%')
</if>
<if test="orderStatus != null">
AND moi.order_status = #{orderStatus}
</if>
<if test="startTime != null and startTime != '' and endTime != null and endTime != '' ">
AND moi.order_time BETWEEN CONCAT(#{startTime}, ' 00:00:00') AND CONCAT(#{endTime}, ' 23:59:59')
</if>
<if test="czcompanyName != null and czcompanyName != ''">
AND c.company_name like concat('%',#{czcompanyName},'%')
</if>
<if test="companyName != null and companyName != ''">
AND dept.companyName like concat('%',#{companyName},'%')
</if>
<if test="companyName != null and companyName != ''">
AND mdi.month_lease_price BETWEEN #{lowerBound} AND #{upperBound}
</if>
GROUP BY
c.company_id,
moi.`code`,
su.phonenumber,
moi.address,
moi.order_time
</select>
<select id="selectOrderDetailsById" resultType="com.bonus.material.order.domain.OrderDetailDto">
SELECT
mdi.device_name,
mdi.day_lease_price,
moi.order_status,
hh.days,
hh.num,
hh.costs,
hh.rent_begin_time,
hh.rent_end_time
FROM
ma_order_details hh
LEFT JOIN ma_order_info moi on hh.order_id = moi.order_id
LEFT JOIN ma_dev_info mdi ON hh.ma_id = mdi.ma_id
WHERE
id = 1
</select>
</mapper>