超市
This commit is contained in:
@ -16,7 +16,7 @@ import java.util.Objects;
|
||||
* @param <T> 数据泛型
|
||||
*/
|
||||
@Data
|
||||
public class StoreResult<T> implements Serializable {
|
||||
public class StoreResult<T> {
|
||||
|
||||
/**
|
||||
* 错误码
|
||||
@ -37,79 +37,29 @@ public class StoreResult<T> implements Serializable {
|
||||
|
||||
private Boolean success;
|
||||
|
||||
/**
|
||||
* 将传入的 result 对象,转换成另外一个泛型结果的对象
|
||||
*
|
||||
* 因为 A 方法返回的 CommonResult 对象,不满足调用其的 B 方法的返回,所以需要进行转换。
|
||||
*
|
||||
* @param result 传入的 result 对象
|
||||
* @param <T> 返回的泛型
|
||||
* @return 新的 CommonResult 对象
|
||||
*/
|
||||
public static <T> StoreResult<T> error(StoreResult<?> result) {
|
||||
return error(result.getStatusCode(), result.getMessage());
|
||||
}
|
||||
|
||||
public static <T> StoreResult<T> error(String code, String message) {
|
||||
Assert.isTrue(!GlobalErrorCodeConstants.SUCCESS.getCode().equals(code), "code 必须是错误的!");
|
||||
StoreResult<T> result = new StoreResult<>();
|
||||
result.statusCode = code;
|
||||
result.message = message;
|
||||
return result;
|
||||
}
|
||||
|
||||
public static <T> StoreResult<T> error(ErrorCode errorCode) {
|
||||
return error(errorCode.getCode().toString(), errorCode.getMsg());
|
||||
}
|
||||
|
||||
public static <T> StoreResult<T> success(T data) {
|
||||
StoreResult<T> result = new StoreResult<>();
|
||||
result.statusCode = "200";
|
||||
result.data = data;
|
||||
result.message = "";
|
||||
result.message = "操作成功";
|
||||
result.success = true;
|
||||
return result;
|
||||
}
|
||||
|
||||
public static boolean isSuccess(String code) {
|
||||
return Objects.equals(code, GlobalErrorCodeConstants.SUCCESS.getCode().toString());
|
||||
public static <T> StoreResult<T> fail(String message) {
|
||||
StoreResult<T> result = new StoreResult<>();
|
||||
result.statusCode = "300";
|
||||
result.message = message;
|
||||
result.success = false;
|
||||
return result;
|
||||
}
|
||||
|
||||
@JsonIgnore // 避免 jackson 序列化
|
||||
public boolean isSuccess() {
|
||||
return isSuccess(statusCode);
|
||||
}
|
||||
|
||||
@JsonIgnore // 避免 jackson 序列化
|
||||
public boolean isError() {
|
||||
return !isSuccess();
|
||||
}
|
||||
|
||||
// ========= 和 Exception 异常体系集成 =========
|
||||
|
||||
/**
|
||||
* 判断是否有异常。如果有,则抛出 {@link ServiceException} 异常
|
||||
*/
|
||||
public void checkError() throws ServiceException {
|
||||
if (isSuccess()) {
|
||||
return;
|
||||
}
|
||||
// 业务异常
|
||||
throw new ServiceException(Integer.valueOf(statusCode), message);
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断是否有异常。如果有,则抛出 {@link ServiceException} 异常
|
||||
* 如果没有,则返回 {@link #data} 数据
|
||||
*/
|
||||
@JsonIgnore // 避免 jackson 序列化
|
||||
public T getCheckedData() {
|
||||
checkError();
|
||||
return data;
|
||||
}
|
||||
|
||||
public static <T> StoreResult<T> error(ServiceException serviceException) {
|
||||
return error(serviceException.getCode().toString(), serviceException.getMessage());
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
@ -101,6 +101,10 @@ public interface ErrorCodeConstants {
|
||||
|
||||
ErrorCode STORE_SALE_GOODS_NOT_EXISTS = new ErrorCode(1_007_904_003, "售卖商品不存在");
|
||||
|
||||
ErrorCode STORE_SALE_GOODS_NOT_NULL = new ErrorCode(1_007_904_003, "售卖商品不能为空");
|
||||
ErrorCode STORE_SALE_GOODS_NOT_NULL = new ErrorCode(1_007_904_04, "售卖商品不能为空");
|
||||
|
||||
ErrorCode STORE_ORDER_NOT_EXISTS = new ErrorCode(1_007_904_005, "商品订单不存在");
|
||||
|
||||
ErrorCode STORE_ORDER_DETAIL_NOT_EXISTS = new ErrorCode(1_007_904_006,"商品订单详情不存在");
|
||||
}
|
||||
|
||||
|
@ -92,4 +92,11 @@ public class StoreGoodsTypeController {
|
||||
BeanUtils.toBean(list, StoreGoodsTypeRespVO.class));
|
||||
}
|
||||
|
||||
@GetMapping("/all")
|
||||
@Operation(summary = "获得商品类别分页")
|
||||
public CommonResult<List<StoreGoodsTypeRespVO>> getAll() {
|
||||
List<StoreGoodsTypeDO> all = storeGoodsTypeService.getAll();
|
||||
return success(BeanUtils.toBean(all, StoreGoodsTypeRespVO.class));
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,95 @@
|
||||
package cn.iocoder.yudao.module.member.controller.admin.storeorder;
|
||||
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import javax.annotation.Resource;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import io.swagger.v3.oas.annotations.Parameter;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
|
||||
import javax.validation.constraints.*;
|
||||
import javax.validation.*;
|
||||
import javax.servlet.http.*;
|
||||
import java.util.*;
|
||||
import java.io.IOException;
|
||||
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
||||
|
||||
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
|
||||
|
||||
import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
|
||||
import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.*;
|
||||
|
||||
import cn.iocoder.yudao.module.member.controller.admin.storeorder.vo.*;
|
||||
import cn.iocoder.yudao.module.member.dal.dataobject.storeorder.StoreOrderDO;
|
||||
import cn.iocoder.yudao.module.member.service.storeorder.StoreOrderService;
|
||||
|
||||
@Tag(name = "管理后台 - 商品订单")
|
||||
@RestController
|
||||
@RequestMapping("/member/store-order")
|
||||
@Validated
|
||||
public class StoreOrderController {
|
||||
|
||||
@Resource
|
||||
private StoreOrderService storeOrderService;
|
||||
|
||||
@PostMapping("/create")
|
||||
@Operation(summary = "创建商品订单")
|
||||
@PreAuthorize("@ss.hasPermission('member:store-order:create')")
|
||||
public CommonResult<Integer> createStoreOrder(@Valid @RequestBody StoreOrderSaveReqVO createReqVO) {
|
||||
return success(storeOrderService.createStoreOrder(createReqVO));
|
||||
}
|
||||
|
||||
@PutMapping("/update")
|
||||
@Operation(summary = "更新商品订单")
|
||||
@PreAuthorize("@ss.hasPermission('member:store-order:update')")
|
||||
public CommonResult<Boolean> updateStoreOrder(@Valid @RequestBody StoreOrderSaveReqVO updateReqVO) {
|
||||
storeOrderService.updateStoreOrder(updateReqVO);
|
||||
return success(true);
|
||||
}
|
||||
|
||||
@DeleteMapping("/delete")
|
||||
@Operation(summary = "删除商品订单")
|
||||
@Parameter(name = "id", description = "编号", required = true)
|
||||
@PreAuthorize("@ss.hasPermission('member:store-order:delete')")
|
||||
public CommonResult<Boolean> deleteStoreOrder(@RequestParam("id") Integer id) {
|
||||
storeOrderService.deleteStoreOrder(id);
|
||||
return success(true);
|
||||
}
|
||||
|
||||
@GetMapping("/get")
|
||||
@Operation(summary = "获得商品订单")
|
||||
@Parameter(name = "id", description = "编号", required = true, example = "1024")
|
||||
@PreAuthorize("@ss.hasPermission('member:store-order:query')")
|
||||
public CommonResult<StoreOrderRespVO> getStoreOrder(@RequestParam("id") Integer id) {
|
||||
StoreOrderDO storeOrder = storeOrderService.getStoreOrder(id);
|
||||
return success(BeanUtils.toBean(storeOrder, StoreOrderRespVO.class));
|
||||
}
|
||||
|
||||
@GetMapping("/page")
|
||||
@Operation(summary = "获得商品订单分页")
|
||||
@PreAuthorize("@ss.hasPermission('member:store-order:query')")
|
||||
public CommonResult<PageResult<StoreOrderRespVO>> getStoreOrderPage(@Valid StoreOrderPageReqVO pageReqVO) {
|
||||
PageResult<StoreOrderDO> pageResult = storeOrderService.getStoreOrderPage(pageReqVO);
|
||||
return success(BeanUtils.toBean(pageResult, StoreOrderRespVO.class));
|
||||
}
|
||||
|
||||
@GetMapping("/export-excel")
|
||||
@Operation(summary = "导出商品订单 Excel")
|
||||
@PreAuthorize("@ss.hasPermission('member:store-order:export')")
|
||||
@OperateLog(type = EXPORT)
|
||||
public void exportStoreOrderExcel(@Valid StoreOrderPageReqVO pageReqVO,
|
||||
HttpServletResponse response) throws IOException {
|
||||
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
|
||||
List<StoreOrderDO> list = storeOrderService.getStoreOrderPage(pageReqVO).getList();
|
||||
// 导出 Excel
|
||||
ExcelUtils.write(response, "商品订单.xls", "数据", StoreOrderRespVO.class,
|
||||
BeanUtils.toBean(list, StoreOrderRespVO.class));
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,40 @@
|
||||
package cn.iocoder.yudao.module.member.controller.admin.storeorder.vo;
|
||||
|
||||
import lombok.*;
|
||||
import java.util.*;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
|
||||
|
||||
@Schema(description = "管理后台 - 商品订单分页 Request VO")
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@ToString(callSuper = true)
|
||||
public class StoreOrderPageReqVO extends PageParam {
|
||||
|
||||
@Schema(description = "读取卡号")
|
||||
private String cardNumber;
|
||||
|
||||
@Schema(description = "人脸", example = "16087")
|
||||
private Integer openId;
|
||||
|
||||
@Schema(description = "数量")
|
||||
private Integer number;
|
||||
|
||||
@Schema(description = "设备ID")
|
||||
private String equipmentCode;
|
||||
|
||||
@Schema(description = "离线缓存ID", example = "11946")
|
||||
private String uuid;
|
||||
|
||||
@Schema(description = "总价钱", example = "1722")
|
||||
private Double totalPrice;
|
||||
|
||||
@Schema(description = "创建时间")
|
||||
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
|
||||
private LocalDateTime[] createTime;
|
||||
|
||||
}
|
@ -0,0 +1,48 @@
|
||||
package cn.iocoder.yudao.module.member.controller.admin.storeorder.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.*;
|
||||
import java.util.*;
|
||||
import java.util.*;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
import java.time.LocalDateTime;
|
||||
import com.alibaba.excel.annotation.*;
|
||||
|
||||
@Schema(description = "管理后台 - 商品订单 Response VO")
|
||||
@Data
|
||||
@ExcelIgnoreUnannotated
|
||||
public class StoreOrderRespVO {
|
||||
|
||||
@Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "22788")
|
||||
@ExcelProperty("编号")
|
||||
private Integer orderId;
|
||||
|
||||
@Schema(description = "读取卡号")
|
||||
@ExcelProperty("读取卡号")
|
||||
private String cardNumber;
|
||||
|
||||
@Schema(description = "人脸", example = "16087")
|
||||
@ExcelProperty("人脸")
|
||||
private Integer openId;
|
||||
|
||||
@Schema(description = "数量")
|
||||
@ExcelProperty("数量")
|
||||
private Integer number;
|
||||
|
||||
@Schema(description = "设备ID")
|
||||
@ExcelProperty("设备ID")
|
||||
private String equipmentCode;
|
||||
|
||||
@Schema(description = "离线缓存ID", example = "11946")
|
||||
@ExcelProperty("离线缓存ID")
|
||||
private String uuid;
|
||||
|
||||
@Schema(description = "总价钱", example = "1722")
|
||||
@ExcelProperty("总价钱")
|
||||
private Double totalPrice;
|
||||
|
||||
@Schema(description = "创建时间")
|
||||
@ExcelProperty("创建时间")
|
||||
private LocalDateTime createTime;
|
||||
|
||||
}
|
@ -0,0 +1,33 @@
|
||||
package cn.iocoder.yudao.module.member.controller.admin.storeorder.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.*;
|
||||
import java.util.*;
|
||||
import javax.validation.constraints.*;
|
||||
|
||||
@Schema(description = "管理后台 - 商品订单新增/修改 Request VO")
|
||||
@Data
|
||||
public class StoreOrderSaveReqVO {
|
||||
|
||||
@Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "22788")
|
||||
private Integer orderId;
|
||||
|
||||
@Schema(description = "读取卡号")
|
||||
private String cardNumber;
|
||||
|
||||
@Schema(description = "人脸", example = "16087")
|
||||
private Integer openId;
|
||||
|
||||
@Schema(description = "数量")
|
||||
private Integer number;
|
||||
|
||||
@Schema(description = "设备ID")
|
||||
private String equipmentCode;
|
||||
|
||||
@Schema(description = "离线缓存ID", example = "11946")
|
||||
private String uuid;
|
||||
|
||||
@Schema(description = "总价钱", example = "1722")
|
||||
private Double totalPrice;
|
||||
|
||||
}
|
@ -0,0 +1,95 @@
|
||||
package cn.iocoder.yudao.module.member.controller.admin.storeorderdetail;
|
||||
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import javax.annotation.Resource;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import io.swagger.v3.oas.annotations.Parameter;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
|
||||
import javax.validation.constraints.*;
|
||||
import javax.validation.*;
|
||||
import javax.servlet.http.*;
|
||||
import java.util.*;
|
||||
import java.io.IOException;
|
||||
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
||||
|
||||
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
|
||||
|
||||
import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
|
||||
import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.*;
|
||||
|
||||
import cn.iocoder.yudao.module.member.controller.admin.storeorderdetail.vo.*;
|
||||
import cn.iocoder.yudao.module.member.dal.dataobject.storeorderdetail.StoreOrderDetailDO;
|
||||
import cn.iocoder.yudao.module.member.service.storeorderdetail.StoreOrderDetailService;
|
||||
|
||||
@Tag(name = "管理后台 - 商品订单详情")
|
||||
@RestController
|
||||
@RequestMapping("/member/store-order-detail")
|
||||
@Validated
|
||||
public class StoreOrderDetailController {
|
||||
|
||||
@Resource
|
||||
private StoreOrderDetailService storeOrderDetailService;
|
||||
|
||||
@PostMapping("/create")
|
||||
@Operation(summary = "创建商品订单详情")
|
||||
@PreAuthorize("@ss.hasPermission('member:store-order-detail:create')")
|
||||
public CommonResult<Integer> createStoreOrderDetail(@Valid @RequestBody StoreOrderDetailSaveReqVO createReqVO) {
|
||||
return success(storeOrderDetailService.createStoreOrderDetail(createReqVO));
|
||||
}
|
||||
|
||||
@PutMapping("/update")
|
||||
@Operation(summary = "更新商品订单详情")
|
||||
@PreAuthorize("@ss.hasPermission('member:store-order-detail:update')")
|
||||
public CommonResult<Boolean> updateStoreOrderDetail(@Valid @RequestBody StoreOrderDetailSaveReqVO updateReqVO) {
|
||||
storeOrderDetailService.updateStoreOrderDetail(updateReqVO);
|
||||
return success(true);
|
||||
}
|
||||
|
||||
@DeleteMapping("/delete")
|
||||
@Operation(summary = "删除商品订单详情")
|
||||
@Parameter(name = "id", description = "编号", required = true)
|
||||
@PreAuthorize("@ss.hasPermission('member:store-order-detail:delete')")
|
||||
public CommonResult<Boolean> deleteStoreOrderDetail(@RequestParam("id") Integer id) {
|
||||
storeOrderDetailService.deleteStoreOrderDetail(id);
|
||||
return success(true);
|
||||
}
|
||||
|
||||
@GetMapping("/get")
|
||||
@Operation(summary = "获得商品订单详情")
|
||||
@Parameter(name = "id", description = "编号", required = true, example = "1024")
|
||||
@PreAuthorize("@ss.hasPermission('member:store-order-detail:query')")
|
||||
public CommonResult<StoreOrderDetailRespVO> getStoreOrderDetail(@RequestParam("id") Integer id) {
|
||||
StoreOrderDetailDO storeOrderDetail = storeOrderDetailService.getStoreOrderDetail(id);
|
||||
return success(BeanUtils.toBean(storeOrderDetail, StoreOrderDetailRespVO.class));
|
||||
}
|
||||
|
||||
@GetMapping("/page")
|
||||
@Operation(summary = "获得商品订单详情分页")
|
||||
@PreAuthorize("@ss.hasPermission('member:store-order-detail:query')")
|
||||
public CommonResult<PageResult<StoreOrderDetailRespVO>> getStoreOrderDetailPage(@Valid StoreOrderDetailPageReqVO pageReqVO) {
|
||||
PageResult<StoreOrderDetailDO> pageResult = storeOrderDetailService.getStoreOrderDetailPage(pageReqVO);
|
||||
return success(BeanUtils.toBean(pageResult, StoreOrderDetailRespVO.class));
|
||||
}
|
||||
|
||||
@GetMapping("/export-excel")
|
||||
@Operation(summary = "导出商品订单详情 Excel")
|
||||
@PreAuthorize("@ss.hasPermission('member:store-order-detail:export')")
|
||||
@OperateLog(type = EXPORT)
|
||||
public void exportStoreOrderDetailExcel(@Valid StoreOrderDetailPageReqVO pageReqVO,
|
||||
HttpServletResponse response) throws IOException {
|
||||
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
|
||||
List<StoreOrderDetailDO> list = storeOrderDetailService.getStoreOrderDetailPage(pageReqVO).getList();
|
||||
// 导出 Excel
|
||||
ExcelUtils.write(response, "商品订单详情.xls", "数据", StoreOrderDetailRespVO.class,
|
||||
BeanUtils.toBean(list, StoreOrderDetailRespVO.class));
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,34 @@
|
||||
package cn.iocoder.yudao.module.member.controller.admin.storeorderdetail.vo;
|
||||
|
||||
import lombok.*;
|
||||
import java.util.*;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
|
||||
|
||||
@Schema(description = "管理后台 - 商品订单详情分页 Request VO")
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@ToString(callSuper = true)
|
||||
public class StoreOrderDetailPageReqVO extends PageParam {
|
||||
|
||||
@Schema(description = "订单ID", example = "28297")
|
||||
private Integer orderId;
|
||||
|
||||
@Schema(description = "商品ID", example = "3312")
|
||||
private Integer goodsId;
|
||||
|
||||
@Schema(description = "单价", example = "8942")
|
||||
private Double customPrice;
|
||||
|
||||
@Schema(description = "数量")
|
||||
private Integer number;
|
||||
|
||||
@Schema(description = "创建时间")
|
||||
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
|
||||
private LocalDateTime[] createTime;
|
||||
|
||||
}
|
@ -0,0 +1,40 @@
|
||||
package cn.iocoder.yudao.module.member.controller.admin.storeorderdetail.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.*;
|
||||
import java.util.*;
|
||||
import java.util.*;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
import java.time.LocalDateTime;
|
||||
import com.alibaba.excel.annotation.*;
|
||||
|
||||
@Schema(description = "管理后台 - 商品订单详情 Response VO")
|
||||
@Data
|
||||
@ExcelIgnoreUnannotated
|
||||
public class StoreOrderDetailRespVO {
|
||||
|
||||
@Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "10028")
|
||||
@ExcelProperty("编号")
|
||||
private Integer id;
|
||||
|
||||
@Schema(description = "订单ID", example = "28297")
|
||||
@ExcelProperty("订单ID")
|
||||
private Integer orderId;
|
||||
|
||||
@Schema(description = "商品ID", example = "3312")
|
||||
@ExcelProperty("商品ID")
|
||||
private Integer goodsId;
|
||||
|
||||
@Schema(description = "单价", example = "8942")
|
||||
@ExcelProperty("单价")
|
||||
private Double customPrice;
|
||||
|
||||
@Schema(description = "数量")
|
||||
@ExcelProperty("数量")
|
||||
private Integer number;
|
||||
|
||||
@Schema(description = "创建时间")
|
||||
@ExcelProperty("创建时间")
|
||||
private LocalDateTime createTime;
|
||||
|
||||
}
|
@ -0,0 +1,27 @@
|
||||
package cn.iocoder.yudao.module.member.controller.admin.storeorderdetail.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.*;
|
||||
import java.util.*;
|
||||
import javax.validation.constraints.*;
|
||||
|
||||
@Schema(description = "管理后台 - 商品订单详情新增/修改 Request VO")
|
||||
@Data
|
||||
public class StoreOrderDetailSaveReqVO {
|
||||
|
||||
@Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "10028")
|
||||
private Integer id;
|
||||
|
||||
@Schema(description = "订单ID", example = "28297")
|
||||
private Integer orderId;
|
||||
|
||||
@Schema(description = "商品ID", example = "3312")
|
||||
private Integer goodsId;
|
||||
|
||||
@Schema(description = "单价", example = "8942")
|
||||
private Double customPrice;
|
||||
|
||||
@Schema(description = "数量")
|
||||
private Integer number;
|
||||
|
||||
}
|
@ -2,15 +2,17 @@ package cn.iocoder.yudao.module.member.controller.app.store;
|
||||
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import cn.iocoder.yudao.framework.common.pojo.StoreResult;
|
||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||
import cn.iocoder.yudao.framework.security.core.annotations.PreAuthenticated;
|
||||
import cn.iocoder.yudao.module.member.controller.app.store.dto.StoreBaseDto;
|
||||
import cn.iocoder.yudao.module.member.controller.app.store.dto.StoreSaleGoodsDto;
|
||||
import cn.iocoder.yudao.module.member.controller.app.store.dto.StoreUserDto;
|
||||
import cn.iocoder.yudao.module.member.controller.app.store.vo.StoreGoodsVo;
|
||||
import cn.iocoder.yudao.module.member.controller.app.store.vo.StoreUserVo;
|
||||
import cn.iocoder.yudao.module.member.controller.app.store.dto.*;
|
||||
import cn.iocoder.yudao.module.member.controller.app.store.vo.*;
|
||||
import cn.iocoder.yudao.module.member.dal.dataobject.storegoods.StoreGoodsDO;
|
||||
import cn.iocoder.yudao.module.member.dal.dataobject.storegoodstype.StoreGoodsTypeDO;
|
||||
import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO;
|
||||
import cn.iocoder.yudao.module.member.service.storegoods.StoreGoodsService;
|
||||
import cn.iocoder.yudao.module.member.service.storegoodstype.StoreGoodsTypeService;
|
||||
import cn.iocoder.yudao.module.member.service.storeorder.StoreOrderService;
|
||||
import cn.iocoder.yudao.module.member.service.storeorderdetail.StoreOrderDetailService;
|
||||
import cn.iocoder.yudao.module.member.service.storesalegoods.StoreSaleGoodsService;
|
||||
import cn.iocoder.yudao.module.member.service.user.MemberUserService;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
@ -22,7 +24,9 @@ import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.PostConstruct;
|
||||
import javax.annotation.Resource;
|
||||
import javax.annotation.security.PermitAll;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
@Tag(name = "用户 APP - 超市")
|
||||
@ -40,9 +44,14 @@ public class AppStoreController {
|
||||
private StoreGoodsTypeService goodsTypeService;
|
||||
@Resource
|
||||
private StoreSaleGoodsService saleGoodsService;
|
||||
@Resource
|
||||
private StoreOrderService orderService;
|
||||
@Resource
|
||||
private StoreOrderDetailService orderDetailService;
|
||||
|
||||
@GetMapping("/mgcr/memberUser/getMenberTwoList")
|
||||
@Operation(summary = "获取用户关联信息")
|
||||
@PermitAll
|
||||
public StoreResult<List<StoreUserVo>> getStoreUser(@RequestBody StoreUserDto dto) {
|
||||
List<MemberUserDO> list = userService.getStoreUser();
|
||||
return StoreResult.success(StoreUserVo.convert(list));
|
||||
@ -50,11 +59,18 @@ public class AppStoreController {
|
||||
|
||||
@GetMapping("/mgcr/equipment/goodsList")
|
||||
@Operation(summary = "获取菜品库所有菜品")
|
||||
public StoreResult<StoreGoodsVo> getGoods(@RequestBody StoreBaseDto dto) {
|
||||
StoreGoodsVo storeGoodsVo = new StoreGoodsVo();
|
||||
storeGoodsVo.setGoodsData(storeGoodsService.getAll(null));
|
||||
storeGoodsVo.setCategoryData(goodsTypeService.getAll());
|
||||
return StoreResult.success(storeGoodsVo);
|
||||
public GoodsResult getGoods(@RequestBody StoreBaseDto dto) {
|
||||
List<StoreGoodsDO> goodsDOS = storeGoodsService.getAll(null);
|
||||
List<StoreGoodsTypeDO> goodsTypeDOS = goodsTypeService.getAll();
|
||||
List<StoreGoodsListVo> goodData = BeanUtils.toBean(goodsDOS, StoreGoodsListVo.class);
|
||||
List<StoreGoodsTypeListVo> categoryData = BeanUtils.toBean(goodsTypeDOS, StoreGoodsTypeListVo.class);
|
||||
GoodsResult goodsResult = new GoodsResult();
|
||||
goodsResult.setStatusCode(200);
|
||||
goodsResult.setCategoryData(categoryData);
|
||||
goodsResult.setGoodsData(goodData);
|
||||
goodsResult.setSuccess(true);
|
||||
goodsResult.setMessage("操作成功");
|
||||
return goodsResult;
|
||||
}
|
||||
|
||||
@PostMapping("/mgcr/equipment/bindGoods")
|
||||
@ -76,17 +92,63 @@ public class AppStoreController {
|
||||
|
||||
@GetMapping("/mgcr/equipment/queryBindGoods")
|
||||
@Operation(summary = "获取营业菜品")
|
||||
public StoreResult<StoreGoodsVo> getSaleGoods(@RequestBody StoreBaseDto dto) {
|
||||
StoreGoodsVo storeGoodsVo = new StoreGoodsVo();
|
||||
public GoodsResult getSaleGoods(@RequestBody StoreBaseDto dto) {
|
||||
GoodsResult goodsResult = new GoodsResult();
|
||||
goodsResult.setStatusCode(200);
|
||||
goodsResult.setSuccess(true);
|
||||
goodsResult.setMessage("操作成功");
|
||||
|
||||
|
||||
List<Integer> goodsIds = saleGoodsService.getGoodsIds(dto.getEquipmentCode());
|
||||
if(CollectionUtil.isEmpty(goodsIds)){
|
||||
return StoreResult.success(storeGoodsVo);
|
||||
return goodsResult;
|
||||
}
|
||||
storeGoodsVo.setGoodsData(storeGoodsService.getAll(goodsIds));
|
||||
storeGoodsVo.setCategoryData(goodsTypeService.getAll());
|
||||
return StoreResult.success(storeGoodsVo);
|
||||
List<StoreGoodsDO> goodsDOS = storeGoodsService.getAll(null);
|
||||
List<StoreGoodsTypeDO> goodsTypeDOS = goodsTypeService.getAll();
|
||||
List<StoreGoodsListVo> goodData = BeanUtils.toBean(goodsDOS, StoreGoodsListVo.class);
|
||||
List<StoreGoodsTypeListVo> categoryData = BeanUtils.toBean(goodsTypeDOS, StoreGoodsTypeListVo.class);
|
||||
goodsResult.setCategoryData(categoryData);
|
||||
goodsResult.setGoodsData(goodData);
|
||||
return goodsResult;
|
||||
}
|
||||
|
||||
|
||||
@PostMapping("/mgcr/order/paymentCodePayOrder")
|
||||
@Operation(summary = "创建刷脸支付订单")
|
||||
public StoreResult<HashMap<String, Integer>> paymentCodePayOrder(@RequestBody StoreOrderDto dto) {
|
||||
Integer order = orderService.createOrder(dto).getOrderId();
|
||||
HashMap<String, Integer> map = new HashMap<>();
|
||||
map.put("orderId", order);
|
||||
return StoreResult.success(map);
|
||||
}
|
||||
|
||||
@PostMapping("/swipingFacePay")
|
||||
@Operation(summary = "提交刷脸支付")
|
||||
public StoreResult swipingFacePay(@RequestBody FacePayDto dto) {
|
||||
UserInfoVo userInfoVo = orderService.facePay(dto);
|
||||
if(userInfoVo.getBalance()>=0){
|
||||
return StoreResult.success(userInfoVo);
|
||||
}else {
|
||||
return StoreResult.fail("余额不足");
|
||||
}
|
||||
}
|
||||
|
||||
@PostMapping("/mgcr/order/payByCardOrder")
|
||||
@Operation(summary = "添加刷卡订单")
|
||||
public StoreResult<HashMap<String, Integer>> payByCardOrder(@RequestBody StoreOrderDto dto) {
|
||||
Boolean b = orderService.cardPay(dto);
|
||||
if(b){
|
||||
return StoreResult.success(null);
|
||||
}else {
|
||||
return StoreResult.fail("余额不足");
|
||||
}
|
||||
}
|
||||
|
||||
@PostMapping("/mgcr/order/batchCacheOrder")
|
||||
@Operation(summary = "缓存订单批量上传")
|
||||
public StoreResult<HashMap<String, Integer>> batchCacheOrder(@RequestBody StoreOrderUploadDto dto) {
|
||||
orderService.batchCacheOrder(dto);
|
||||
return StoreResult.success(null);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,11 @@
|
||||
package cn.iocoder.yudao.module.member.controller.app.store.dto;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class FacePayDto extends StoreBaseDto {
|
||||
|
||||
private Integer orderId;
|
||||
private String openId;
|
||||
|
||||
}
|
@ -7,4 +7,9 @@ public class StoreGoodsDto {
|
||||
private Integer goodsId;
|
||||
private Double customPrice;
|
||||
private Integer number;
|
||||
|
||||
|
||||
public double getTotalPrice() {
|
||||
return customPrice * number; // 总价 = 单价 * 数量
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,13 @@
|
||||
package cn.iocoder.yudao.module.member.controller.app.store.dto;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class StoreLocalOrderDto extends StoreOrderDto{
|
||||
|
||||
private String createTime;
|
||||
private String openId;
|
||||
private String uuid;
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,9 @@
|
||||
package cn.iocoder.yudao.module.member.controller.app.store.dto;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class StoreOrderDto extends StoreSaleGoodsDto{
|
||||
|
||||
private String cardNumber;
|
||||
}
|
@ -0,0 +1,10 @@
|
||||
package cn.iocoder.yudao.module.member.controller.app.store.dto;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
public class StoreOrderUploadDto {
|
||||
private List<StoreLocalOrderDto> mgcrCacheOrderVoList;
|
||||
}
|
@ -0,0 +1,40 @@
|
||||
package cn.iocoder.yudao.module.member.controller.app.store.vo;
|
||||
|
||||
import cn.iocoder.yudao.framework.common.exception.ErrorCode;
|
||||
import cn.iocoder.yudao.framework.common.exception.ServiceException;
|
||||
import cn.iocoder.yudao.framework.common.exception.enums.GlobalErrorCodeConstants;
|
||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||
import lombok.Data;
|
||||
import org.apache.poi.ss.formula.functions.T;
|
||||
import org.springframework.util.Assert;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* 通用返回
|
||||
*
|
||||
* @param <T> 数据泛型
|
||||
*/
|
||||
@Data
|
||||
public class GoodsResult{
|
||||
|
||||
/**
|
||||
* 错误码
|
||||
*
|
||||
* @see ErrorCode#getCode()
|
||||
*/
|
||||
private Integer statusCode;
|
||||
|
||||
/**
|
||||
* 错误提示,用户可阅读
|
||||
*
|
||||
* @see ErrorCode#getMsg() ()
|
||||
*/
|
||||
private String message;
|
||||
|
||||
private Boolean success;
|
||||
List<StoreGoodsListVo> goodsData;
|
||||
List<StoreGoodsTypeListVo> categoryData;
|
||||
}
|
@ -0,0 +1,23 @@
|
||||
package cn.iocoder.yudao.module.member.controller.app.store.vo;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class StoreGoodsListVo {
|
||||
|
||||
private Integer goodId;
|
||||
/**
|
||||
* 类别Id
|
||||
*/
|
||||
private Integer categoryId;
|
||||
/**
|
||||
* 商品名称
|
||||
*/
|
||||
private String goodsName;
|
||||
/**
|
||||
* 价格
|
||||
*/
|
||||
private Double price;
|
||||
|
||||
}
|
@ -0,0 +1,12 @@
|
||||
package cn.iocoder.yudao.module.member.controller.app.store.vo;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class StoreGoodsTypeListVo {
|
||||
private Integer id;
|
||||
/**
|
||||
* 类别名称
|
||||
*/
|
||||
private String categoryName;
|
||||
}
|
@ -9,7 +9,7 @@ import java.util.List;
|
||||
@Data
|
||||
public class StoreGoodsVo {
|
||||
|
||||
private List<StoreGoodsDO> goodsData;
|
||||
private List<StoreGoodsTypeDO> categoryData;
|
||||
private List<StoreGoodsListVo> goodsData;
|
||||
private List<StoreGoodsTypeListVo> categoryData;
|
||||
|
||||
}
|
||||
|
@ -30,8 +30,8 @@ public class StoreUserVo {
|
||||
vo.setUserId(memberUserDO.getId().intValue());
|
||||
vo.setUserName(memberUserDO.getNickname());
|
||||
vo.setCardNumber(memberUserDO.getCardId());
|
||||
vo.setFaceId(memberUserDO.getFaceId().toString());
|
||||
vo.setOpenId(memberUserDO.getFaceId().toString());
|
||||
vo.setFaceId(memberUserDO.getFaceId()==null?null:memberUserDO.getFaceId().toString());
|
||||
vo.setOpenId(memberUserDO.getFaceId()==null?null:memberUserDO.getFaceId().toString());
|
||||
voList.add(vo);
|
||||
}
|
||||
return voList;
|
||||
|
@ -0,0 +1,11 @@
|
||||
package cn.iocoder.yudao.module.member.controller.app.store.vo;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class UserInfoVo {
|
||||
private String userName;
|
||||
private String avatar;
|
||||
private Double balance;
|
||||
|
||||
}
|
@ -0,0 +1,55 @@
|
||||
package cn.iocoder.yudao.module.member.dal.dataobject.storeorder;
|
||||
|
||||
import lombok.*;
|
||||
import java.util.*;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.LocalDateTime;
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
|
||||
|
||||
/**
|
||||
* 商品订单 DO
|
||||
*
|
||||
* @author 管理员
|
||||
*/
|
||||
@TableName("member_store_order")
|
||||
@KeySequence("member_store_order_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@ToString(callSuper = true)
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class StoreOrderDO extends BaseDO {
|
||||
|
||||
/**
|
||||
* 编号
|
||||
*/
|
||||
@TableId
|
||||
private Integer orderId;
|
||||
/**
|
||||
* 读取卡号
|
||||
*/
|
||||
private String cardNumber;
|
||||
/**
|
||||
* 人脸
|
||||
*/
|
||||
private String openId;
|
||||
/**
|
||||
* 数量
|
||||
*/
|
||||
private Integer number;
|
||||
/**
|
||||
* 设备ID
|
||||
*/
|
||||
private String equipmentCode;
|
||||
/**
|
||||
* 离线缓存ID
|
||||
*/
|
||||
private String uuid;
|
||||
/**
|
||||
* 总价钱
|
||||
*/
|
||||
private Double totalPrice;
|
||||
|
||||
}
|
@ -0,0 +1,47 @@
|
||||
package cn.iocoder.yudao.module.member.dal.dataobject.storeorderdetail;
|
||||
|
||||
import lombok.*;
|
||||
import java.util.*;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.LocalDateTime;
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
|
||||
|
||||
/**
|
||||
* 商品订单详情 DO
|
||||
*
|
||||
* @author 管理员
|
||||
*/
|
||||
@TableName("member_store_order_detail")
|
||||
@KeySequence("member_store_order_detail_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@ToString(callSuper = true)
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class StoreOrderDetailDO extends BaseDO {
|
||||
|
||||
/**
|
||||
* 编号
|
||||
*/
|
||||
@TableId
|
||||
private Integer id;
|
||||
/**
|
||||
* 订单ID
|
||||
*/
|
||||
private Integer orderId;
|
||||
/**
|
||||
* 商品ID
|
||||
*/
|
||||
private Integer goodsId;
|
||||
/**
|
||||
* 单价
|
||||
*/
|
||||
private Double customPrice;
|
||||
/**
|
||||
* 数量
|
||||
*/
|
||||
private Integer number;
|
||||
|
||||
}
|
@ -0,0 +1,32 @@
|
||||
package cn.iocoder.yudao.module.member.dal.mysql.storeorder;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
|
||||
import cn.iocoder.yudao.module.member.dal.dataobject.storeorder.StoreOrderDO;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import cn.iocoder.yudao.module.member.controller.admin.storeorder.vo.*;
|
||||
|
||||
/**
|
||||
* 商品订单 Mapper
|
||||
*
|
||||
* @author 管理员
|
||||
*/
|
||||
@Mapper
|
||||
public interface StoreOrderMapper extends BaseMapperX<StoreOrderDO> {
|
||||
|
||||
default PageResult<StoreOrderDO> selectPage(StoreOrderPageReqVO reqVO) {
|
||||
return selectPage(reqVO, new LambdaQueryWrapperX<StoreOrderDO>()
|
||||
.eqIfPresent(StoreOrderDO::getCardNumber, reqVO.getCardNumber())
|
||||
.eqIfPresent(StoreOrderDO::getOpenId, reqVO.getOpenId())
|
||||
.eqIfPresent(StoreOrderDO::getNumber, reqVO.getNumber())
|
||||
.eqIfPresent(StoreOrderDO::getEquipmentCode, reqVO.getEquipmentCode())
|
||||
.eqIfPresent(StoreOrderDO::getUuid, reqVO.getUuid())
|
||||
.eqIfPresent(StoreOrderDO::getTotalPrice, reqVO.getTotalPrice())
|
||||
.betweenIfPresent(StoreOrderDO::getCreateTime, reqVO.getCreateTime())
|
||||
.orderByDesc(StoreOrderDO::getOrderId));
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,30 @@
|
||||
package cn.iocoder.yudao.module.member.dal.mysql.storeorderdetail;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
|
||||
import cn.iocoder.yudao.module.member.dal.dataobject.storeorderdetail.StoreOrderDetailDO;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import cn.iocoder.yudao.module.member.controller.admin.storeorderdetail.vo.*;
|
||||
|
||||
/**
|
||||
* 商品订单详情 Mapper
|
||||
*
|
||||
* @author 管理员
|
||||
*/
|
||||
@Mapper
|
||||
public interface StoreOrderDetailMapper extends BaseMapperX<StoreOrderDetailDO> {
|
||||
|
||||
default PageResult<StoreOrderDetailDO> selectPage(StoreOrderDetailPageReqVO reqVO) {
|
||||
return selectPage(reqVO, new LambdaQueryWrapperX<StoreOrderDetailDO>()
|
||||
.eqIfPresent(StoreOrderDetailDO::getOrderId, reqVO.getOrderId())
|
||||
.eqIfPresent(StoreOrderDetailDO::getGoodsId, reqVO.getGoodsId())
|
||||
.eqIfPresent(StoreOrderDetailDO::getCustomPrice, reqVO.getCustomPrice())
|
||||
.eqIfPresent(StoreOrderDetailDO::getNumber, reqVO.getNumber())
|
||||
.betweenIfPresent(StoreOrderDetailDO::getCreateTime, reqVO.getCreateTime())
|
||||
.orderByDesc(StoreOrderDetailDO::getId));
|
||||
}
|
||||
|
||||
}
|
@ -20,6 +20,7 @@ public enum CostTypeEnum {
|
||||
REFUND("6","退款"),
|
||||
WITHDRAW("7","微信提现"),
|
||||
CASH_WITHDRAW("8","现金提现"),
|
||||
SHOPPING("9","购物"),
|
||||
;
|
||||
|
||||
/**
|
||||
|
@ -0,0 +1,67 @@
|
||||
package cn.iocoder.yudao.module.member.service.storeorder;
|
||||
|
||||
import java.util.*;
|
||||
import javax.validation.*;
|
||||
import cn.iocoder.yudao.module.member.controller.admin.storeorder.vo.*;
|
||||
import cn.iocoder.yudao.module.member.controller.app.store.dto.FacePayDto;
|
||||
import cn.iocoder.yudao.module.member.controller.app.store.dto.StoreOrderDto;
|
||||
import cn.iocoder.yudao.module.member.controller.app.store.dto.StoreOrderUploadDto;
|
||||
import cn.iocoder.yudao.module.member.controller.app.store.vo.UserInfoVo;
|
||||
import cn.iocoder.yudao.module.member.dal.dataobject.storeorder.StoreOrderDO;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
|
||||
/**
|
||||
* 商品订单 Service 接口
|
||||
*
|
||||
* @author 管理员
|
||||
*/
|
||||
public interface StoreOrderService {
|
||||
|
||||
/**
|
||||
* 创建商品订单
|
||||
*
|
||||
* @param createReqVO 创建信息
|
||||
* @return 编号
|
||||
*/
|
||||
Integer createStoreOrder(@Valid StoreOrderSaveReqVO createReqVO);
|
||||
|
||||
/**
|
||||
* 更新商品订单
|
||||
*
|
||||
* @param updateReqVO 更新信息
|
||||
*/
|
||||
void updateStoreOrder(@Valid StoreOrderSaveReqVO updateReqVO);
|
||||
|
||||
/**
|
||||
* 删除商品订单
|
||||
*
|
||||
* @param id 编号
|
||||
*/
|
||||
void deleteStoreOrder(Integer id);
|
||||
|
||||
/**
|
||||
* 获得商品订单
|
||||
*
|
||||
* @param id 编号
|
||||
* @return 商品订单
|
||||
*/
|
||||
StoreOrderDO getStoreOrder(Integer id);
|
||||
|
||||
/**
|
||||
* 获得商品订单分页
|
||||
*
|
||||
* @param pageReqVO 分页查询
|
||||
* @return 商品订单分页
|
||||
*/
|
||||
PageResult<StoreOrderDO> getStoreOrderPage(StoreOrderPageReqVO pageReqVO);
|
||||
|
||||
StoreOrderDO createOrder(StoreOrderDto dto);
|
||||
|
||||
UserInfoVo facePay(FacePayDto dto);
|
||||
|
||||
Boolean cardPay(StoreOrderDto dto);
|
||||
|
||||
void batchCacheOrder(StoreOrderUploadDto dto);
|
||||
}
|
@ -0,0 +1,232 @@
|
||||
package cn.iocoder.yudao.module.member.service.storeorder;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.math.Money;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.iocoder.yudao.framework.common.exception.ServiceException;
|
||||
import cn.iocoder.yudao.module.member.controller.app.store.dto.*;
|
||||
import cn.iocoder.yudao.module.member.controller.app.store.vo.UserInfoVo;
|
||||
import cn.iocoder.yudao.module.member.dal.dataobject.card.CardDO;
|
||||
import cn.iocoder.yudao.module.member.dal.dataobject.diningplates.DiningPlatesDO;
|
||||
import cn.iocoder.yudao.module.member.dal.dataobject.order.DishOrderDO;
|
||||
import cn.iocoder.yudao.module.member.dal.dataobject.storeorderdetail.StoreOrderDetailDO;
|
||||
import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO;
|
||||
import cn.iocoder.yudao.module.member.dal.mysql.card.CardMapper;
|
||||
import cn.iocoder.yudao.module.member.enums.CostTypeEnum;
|
||||
import cn.iocoder.yudao.module.member.enums.TimePeriodEnum;
|
||||
import cn.iocoder.yudao.module.member.service.card.CardService;
|
||||
import cn.iocoder.yudao.module.member.service.storeorderdetail.StoreOrderDetailService;
|
||||
import cn.iocoder.yudao.module.member.service.user.MemberUserService;
|
||||
import com.sun.org.apache.regexp.internal.RE;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import cn.iocoder.yudao.module.member.controller.admin.storeorder.vo.*;
|
||||
import cn.iocoder.yudao.module.member.dal.dataobject.storeorder.StoreOrderDO;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||
|
||||
import cn.iocoder.yudao.module.member.dal.mysql.storeorder.StoreOrderMapper;
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||
import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.*;
|
||||
|
||||
/**
|
||||
* 商品订单 Service 实现类
|
||||
*
|
||||
* @author 管理员
|
||||
*/
|
||||
@Service
|
||||
@Validated
|
||||
public class StoreOrderServiceImpl implements StoreOrderService {
|
||||
|
||||
@Resource
|
||||
private StoreOrderMapper storeOrderMapper;
|
||||
|
||||
@Resource
|
||||
private StoreOrderDetailService orderDetailService;
|
||||
|
||||
@Resource
|
||||
private CardService cardService;
|
||||
|
||||
@Resource
|
||||
private MemberUserService userService;
|
||||
|
||||
@Override
|
||||
public Integer createStoreOrder(StoreOrderSaveReqVO createReqVO) {
|
||||
// 插入
|
||||
StoreOrderDO storeOrder = BeanUtils.toBean(createReqVO, StoreOrderDO.class);
|
||||
storeOrderMapper.insert(storeOrder);
|
||||
// 返回
|
||||
return storeOrder.getOrderId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateStoreOrder(StoreOrderSaveReqVO updateReqVO) {
|
||||
// 校验存在
|
||||
validateStoreOrderExists(updateReqVO.getOrderId());
|
||||
// 更新
|
||||
StoreOrderDO updateObj = BeanUtils.toBean(updateReqVO, StoreOrderDO.class);
|
||||
storeOrderMapper.updateById(updateObj);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteStoreOrder(Integer id) {
|
||||
// 校验存在
|
||||
validateStoreOrderExists(id);
|
||||
// 删除
|
||||
storeOrderMapper.deleteById(id);
|
||||
}
|
||||
|
||||
private void validateStoreOrderExists(Integer id) {
|
||||
if (storeOrderMapper.selectById(id) == null) {
|
||||
throw exception(STORE_ORDER_NOT_EXISTS);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public StoreOrderDO getStoreOrder(Integer id) {
|
||||
return storeOrderMapper.selectById(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PageResult<StoreOrderDO> getStoreOrderPage(StoreOrderPageReqVO pageReqVO) {
|
||||
return storeOrderMapper.selectPage(pageReqVO);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public StoreOrderDO createOrder(StoreOrderDto dto) {
|
||||
StoreOrderDO storeOrderDO = new StoreOrderDO();
|
||||
BeanUtil.copyProperties(dto, storeOrderDO);
|
||||
List<StoreGoodsDto> equipmentGoodsCustoms = dto.getEquipmentGoodsCustoms();
|
||||
double sum = equipmentGoodsCustoms.stream()
|
||||
.mapToDouble(StoreGoodsDto::getTotalPrice)
|
||||
.sum();
|
||||
storeOrderDO.setTotalPrice(sum);
|
||||
storeOrderMapper.insert(storeOrderDO);
|
||||
ArrayList<StoreOrderDetailDO> detailDOS = new ArrayList<>();
|
||||
for (StoreGoodsDto storeGoodsDto : equipmentGoodsCustoms) {
|
||||
StoreOrderDetailDO storeOrderDetailDO = new StoreOrderDetailDO();
|
||||
BeanUtil.copyProperties(storeGoodsDto, storeOrderDetailDO);
|
||||
storeOrderDetailDO.setOrderId(storeOrderDO.getOrderId());
|
||||
detailDOS.add(storeOrderDetailDO);
|
||||
}
|
||||
orderDetailService.saveBatch(detailDOS);
|
||||
return storeOrderDO;
|
||||
}
|
||||
|
||||
@Override
|
||||
public UserInfoVo facePay(FacePayDto dto) {
|
||||
StoreOrderDO storeOrderDO = storeOrderMapper.selectById(dto.getOrderId());
|
||||
storeOrderDO.setOpenId(dto.getOpenId());
|
||||
storeOrderMapper.updateById(storeOrderDO);
|
||||
Double totalPrice = storeOrderDO.getTotalPrice();
|
||||
BigDecimal total = BigDecimal.valueOf(totalPrice).setScale(2, RoundingMode.HALF_UP);
|
||||
MemberUserDO userDO = userService.getByFaceId(Long.valueOf(dto.getOpenId()));
|
||||
BigDecimal compute = compute(total, userDO.getId());
|
||||
UserInfoVo userInfoVo = new UserInfoVo();
|
||||
userInfoVo.setUserName(userDO.getNickname());
|
||||
userInfoVo.setAvatar("https://yclhit.com:8896"+userDO.getAvatar());
|
||||
userInfoVo.setBalance(compute.doubleValue());
|
||||
return userInfoVo;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Boolean cardPay(StoreOrderDto dto) {
|
||||
Double totalPrice = createOrder(dto).getTotalPrice();
|
||||
BigDecimal total = BigDecimal.valueOf(totalPrice).setScale(2, RoundingMode.HALF_UP);
|
||||
MemberUserDO userDO = userService.getByCardId(dto.getCardNumber());
|
||||
if (ObjectUtil.isEmpty(userDO)){
|
||||
throw new ServiceException(CARD_NOT_BIND_USER);
|
||||
}
|
||||
BigDecimal compute = compute(total, userDO.getId());
|
||||
if (compute.compareTo(BigDecimal.ZERO) < 0) {
|
||||
return false;
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void batchCacheOrder(StoreOrderUploadDto dto) {
|
||||
for (StoreLocalOrderDto orderDto :dto.getMgcrCacheOrderVoList()){
|
||||
StoreOrderDO storeOrderDO = new StoreOrderDO();
|
||||
BeanUtil.copyProperties(orderDto, storeOrderDO,"createTime");
|
||||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
||||
storeOrderDO.setCreateTime(LocalDateTime.parse(orderDto.getCreateTime(), formatter));
|
||||
|
||||
List<StoreGoodsDto> equipmentGoodsCustoms = orderDto.getEquipmentGoodsCustoms();
|
||||
double sum = equipmentGoodsCustoms.stream()
|
||||
.mapToDouble(StoreGoodsDto::getTotalPrice)
|
||||
.sum();
|
||||
storeOrderDO.setTotalPrice(sum);
|
||||
storeOrderMapper.insert(storeOrderDO);
|
||||
ArrayList<StoreOrderDetailDO> detailDOS = new ArrayList<>();
|
||||
for (StoreGoodsDto storeGoodsDto : equipmentGoodsCustoms) {
|
||||
StoreOrderDetailDO storeOrderDetailDO = new StoreOrderDetailDO();
|
||||
BeanUtil.copyProperties(storeGoodsDto, storeOrderDetailDO);
|
||||
storeOrderDetailDO.setOrderId(storeOrderDO.getOrderId());
|
||||
detailDOS.add(storeOrderDetailDO);
|
||||
}
|
||||
orderDetailService.saveBatch(detailDOS);
|
||||
}
|
||||
//todo:订单结算
|
||||
}
|
||||
|
||||
public BigDecimal compute(BigDecimal total, Long userId) {
|
||||
//新的总价
|
||||
CardDO cardDO = new CardDO();
|
||||
cardDO.setType(CostTypeEnum.SHOPPING.getCode());
|
||||
CardDO oldCardDO = cardService.getCardDoByUserId(userId);
|
||||
|
||||
|
||||
BigDecimal money = oldCardDO.getMoney();
|
||||
|
||||
if (total.compareTo(money) > 0) {
|
||||
return money.subtract(total);
|
||||
}
|
||||
|
||||
|
||||
BigDecimal wxAmount = oldCardDO.getWxAmount();
|
||||
BigDecimal giftAmount = oldCardDO.getGiftAmount();
|
||||
BigDecimal cashAmount = oldCardDO.getCashAmount();
|
||||
cardDO.setMoney(money.subtract(total).setScale(2, BigDecimal.ROUND_HALF_UP));
|
||||
|
||||
//计算金额
|
||||
if (total.compareTo(wxAmount) <= 0) {
|
||||
cardDO.setWxAmount(wxAmount.subtract(total).setScale(2, BigDecimal.ROUND_HALF_UP));
|
||||
} else {
|
||||
cardDO.setWxAmount(BigDecimal.ZERO);
|
||||
BigDecimal total1 = total.subtract(wxAmount).setScale(2, BigDecimal.ROUND_HALF_UP);
|
||||
if (total1.compareTo(cashAmount) <= 0) {
|
||||
cardDO.setCashAmount(cashAmount.subtract(total1).setScale(2, BigDecimal.ROUND_HALF_UP));
|
||||
} else {
|
||||
cardDO.setCashAmount(BigDecimal.ZERO);
|
||||
BigDecimal total2 = total1.subtract(cashAmount).setScale(2, BigDecimal.ROUND_HALF_UP);
|
||||
cardDO.setGiftAmount(giftAmount.subtract(total2).setScale(2, BigDecimal.ROUND_HALF_UP));
|
||||
}
|
||||
}
|
||||
|
||||
cardDO.setUserId(userId);
|
||||
cardDO.setChangeMoney(total);
|
||||
cardDO.setFlag(CardDO.MINUS);
|
||||
cardService.insertOne(cardDO);
|
||||
|
||||
return cardDO.getMoney();
|
||||
}
|
||||
}
|
@ -0,0 +1,56 @@
|
||||
package cn.iocoder.yudao.module.member.service.storeorderdetail;
|
||||
|
||||
import java.util.*;
|
||||
import javax.validation.*;
|
||||
import cn.iocoder.yudao.module.member.controller.admin.storeorderdetail.vo.*;
|
||||
import cn.iocoder.yudao.module.member.dal.dataobject.storeorderdetail.StoreOrderDetailDO;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
||||
|
||||
/**
|
||||
* 商品订单详情 Service 接口
|
||||
*
|
||||
* @author 管理员
|
||||
*/
|
||||
public interface StoreOrderDetailService {
|
||||
|
||||
/**
|
||||
* 创建商品订单详情
|
||||
*
|
||||
* @param createReqVO 创建信息
|
||||
* @return 编号
|
||||
*/
|
||||
Integer createStoreOrderDetail(@Valid StoreOrderDetailSaveReqVO createReqVO);
|
||||
|
||||
/**
|
||||
* 更新商品订单详情
|
||||
*
|
||||
* @param updateReqVO 更新信息
|
||||
*/
|
||||
void updateStoreOrderDetail(@Valid StoreOrderDetailSaveReqVO updateReqVO);
|
||||
|
||||
/**
|
||||
* 删除商品订单详情
|
||||
*
|
||||
* @param id 编号
|
||||
*/
|
||||
void deleteStoreOrderDetail(Integer id);
|
||||
|
||||
/**
|
||||
* 获得商品订单详情
|
||||
*
|
||||
* @param id 编号
|
||||
* @return 商品订单详情
|
||||
*/
|
||||
StoreOrderDetailDO getStoreOrderDetail(Integer id);
|
||||
|
||||
/**
|
||||
* 获得商品订单详情分页
|
||||
*
|
||||
* @param pageReqVO 分页查询
|
||||
* @return 商品订单详情分页
|
||||
*/
|
||||
PageResult<StoreOrderDetailDO> getStoreOrderDetailPage(StoreOrderDetailPageReqVO pageReqVO);
|
||||
|
||||
void saveBatch(List<StoreOrderDetailDO> list);
|
||||
}
|
@ -0,0 +1,78 @@
|
||||
package cn.iocoder.yudao.module.member.service.storeorderdetail;
|
||||
|
||||
import org.springframework.stereotype.Service;
|
||||
import javax.annotation.Resource;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.*;
|
||||
import cn.iocoder.yudao.module.member.controller.admin.storeorderdetail.vo.*;
|
||||
import cn.iocoder.yudao.module.member.dal.dataobject.storeorderdetail.StoreOrderDetailDO;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||
|
||||
import cn.iocoder.yudao.module.member.dal.mysql.storeorderdetail.StoreOrderDetailMapper;
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||
import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.*;
|
||||
|
||||
/**
|
||||
* 商品订单详情 Service 实现类
|
||||
*
|
||||
* @author 管理员
|
||||
*/
|
||||
@Service
|
||||
@Validated
|
||||
public class StoreOrderDetailServiceImpl implements StoreOrderDetailService {
|
||||
|
||||
@Resource
|
||||
private StoreOrderDetailMapper storeOrderDetailMapper;
|
||||
|
||||
@Override
|
||||
public Integer createStoreOrderDetail(StoreOrderDetailSaveReqVO createReqVO) {
|
||||
// 插入
|
||||
StoreOrderDetailDO storeOrderDetail = BeanUtils.toBean(createReqVO, StoreOrderDetailDO.class);
|
||||
storeOrderDetailMapper.insert(storeOrderDetail);
|
||||
// 返回
|
||||
return storeOrderDetail.getId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateStoreOrderDetail(StoreOrderDetailSaveReqVO updateReqVO) {
|
||||
// 校验存在
|
||||
validateStoreOrderDetailExists(updateReqVO.getId());
|
||||
// 更新
|
||||
StoreOrderDetailDO updateObj = BeanUtils.toBean(updateReqVO, StoreOrderDetailDO.class);
|
||||
storeOrderDetailMapper.updateById(updateObj);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteStoreOrderDetail(Integer id) {
|
||||
// 校验存在
|
||||
validateStoreOrderDetailExists(id);
|
||||
// 删除
|
||||
storeOrderDetailMapper.deleteById(id);
|
||||
}
|
||||
|
||||
private void validateStoreOrderDetailExists(Integer id) {
|
||||
if (storeOrderDetailMapper.selectById(id) == null) {
|
||||
throw exception(STORE_ORDER_DETAIL_NOT_EXISTS);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public StoreOrderDetailDO getStoreOrderDetail(Integer id) {
|
||||
return storeOrderDetailMapper.selectById(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PageResult<StoreOrderDetailDO> getStoreOrderDetailPage(StoreOrderDetailPageReqVO pageReqVO) {
|
||||
return storeOrderDetailMapper.selectPage(pageReqVO);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void saveBatch(List<StoreOrderDetailDO> list) {
|
||||
storeOrderDetailMapper.insertBatch(list);
|
||||
}
|
||||
}
|
@ -248,4 +248,8 @@ public interface MemberUserService {
|
||||
String getFaceUrl(Long userId);
|
||||
|
||||
List<MemberUserDO> getStoreUser();
|
||||
|
||||
MemberUserDO getByFaceId(Long faceId);
|
||||
|
||||
MemberUserDO getByCardId(String cardId);
|
||||
}
|
||||
|
@ -58,6 +58,8 @@ import cn.iocoder.yudao.module.system.api.sms.dto.code.SmsCodeUseReqDTO;
|
||||
import cn.iocoder.yudao.module.system.api.social.SocialClientApi;
|
||||
import cn.iocoder.yudao.module.system.api.social.dto.SocialWxPhoneNumberInfoRespDTO;
|
||||
import cn.iocoder.yudao.module.system.enums.sms.SmsSceneEnum;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.google.common.annotations.VisibleForTesting;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
@ -779,6 +781,16 @@ public class MemberUserServiceImpl implements MemberUserService {
|
||||
return memberUserMapper.selectList();
|
||||
}
|
||||
|
||||
@Override
|
||||
public MemberUserDO getByFaceId(Long faceId) {
|
||||
return memberUserMapper.selectOne(new LambdaQueryWrapper<MemberUserDO>().eq(MemberUserDO::getFaceId,faceId).last("limit 1"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public MemberUserDO getByCardId(String cardId) {
|
||||
return memberUserMapper.selectOne(new LambdaQueryWrapper<MemberUserDO>().eq(MemberUserDO::getCardId,cardId).last("limit 1"));
|
||||
}
|
||||
|
||||
public BigDecimal countAmount(MemberTagDO memberTagDO, BigDecimal money, String timePeriod ){
|
||||
if(memberTagDO.getType().equals("1")){
|
||||
if (memberTagDO.getTimeFlag().equals("0")){
|
||||
|
Reference in New Issue
Block a user