Merge branch 'refs/heads/分账重构'

This commit is contained in:
seesaw
2024-09-27 18:19:41 +08:00
34 changed files with 1263 additions and 80 deletions

View File

@ -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());
}
}

View File

@ -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,"商品订单详情不存在");
}

View File

@ -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));
}
}

View File

@ -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));
}
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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));
}
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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);
}
}

View File

@ -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;
}

View File

@ -7,4 +7,9 @@ public class StoreGoodsDto {
private Integer goodsId;
private Double customPrice;
private Integer number;
public double getTotalPrice() {
return customPrice * number; // 总价 = 单价 * 数量
}
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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));
}
}

View File

@ -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));
}
}

View File

@ -20,6 +20,7 @@ public enum CostTypeEnum {
REFUND("6","退款"),
WITHDRAW("7","微信提现"),
CASH_WITHDRAW("8","现金提现"),
SHOPPING("9","购物"),
;
/**

View File

@ -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);
}

View File

@ -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();
}
}

View File

@ -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);
}

View File

@ -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);
}
}

View File

@ -248,4 +248,8 @@ public interface MemberUserService {
String getFaceUrl(Long userId);
List<MemberUserDO> getStoreUser();
MemberUserDO getByFaceId(Long faceId);
MemberUserDO getByCardId(String cardId);
}

View File

@ -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")){