From 4822a1ed3af9932736d644cb2c8cc779310013b8 Mon Sep 17 00:00:00 2001 From: gxwebsoft Date: Fri, 31 May 2024 21:05:19 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=EF=BC=9A=E4=BC=9A=E5=91=98?= =?UTF-8?q?=E5=8D=A1=E4=BD=BF=E7=94=A8=E6=98=8E=E7=BB=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/UserCardController.java | 25 ++++ .../controller/UserCardLogController.java | 115 ++++++++++++++++++ .../gxwebsoft/booking/entity/UserCard.java | 3 + .../gxwebsoft/booking/entity/UserCardLog.java | 86 +++++++++++++ .../booking/mapper/UserCardLogMapper.java | 37 ++++++ .../booking/mapper/xml/UserCardLogMapper.xml | 78 ++++++++++++ .../booking/param/UserCardLogParam.java | 78 ++++++++++++ .../booking/param/UserCardParam.java | 4 + .../booking/service/UserCardLogService.java | 42 +++++++ .../service/impl/UserCardLogServiceImpl.java | 47 +++++++ .../shop/controller/OrderController.java | 26 ++-- .../java/com/gxwebsoft/shop/entity/Order.java | 2 +- .../gxwebsoft/shop/service/OrderService.java | 2 + .../shop/service/impl/OrderServiceImpl.java | 63 +++++++++- .../gxwebsoft/generator/BookingGenerator.java | 3 +- 15 files changed, 598 insertions(+), 13 deletions(-) create mode 100644 src/main/java/com/gxwebsoft/booking/controller/UserCardLogController.java create mode 100644 src/main/java/com/gxwebsoft/booking/entity/UserCardLog.java create mode 100644 src/main/java/com/gxwebsoft/booking/mapper/UserCardLogMapper.java create mode 100644 src/main/java/com/gxwebsoft/booking/mapper/xml/UserCardLogMapper.xml create mode 100644 src/main/java/com/gxwebsoft/booking/param/UserCardLogParam.java create mode 100644 src/main/java/com/gxwebsoft/booking/service/UserCardLogService.java create mode 100644 src/main/java/com/gxwebsoft/booking/service/impl/UserCardLogServiceImpl.java diff --git a/src/main/java/com/gxwebsoft/booking/controller/UserCardController.java b/src/main/java/com/gxwebsoft/booking/controller/UserCardController.java index f049002..c074f98 100644 --- a/src/main/java/com/gxwebsoft/booking/controller/UserCardController.java +++ b/src/main/java/com/gxwebsoft/booking/controller/UserCardController.java @@ -1,5 +1,7 @@ package com.gxwebsoft.booking.controller; +import cn.hutool.core.date.DateUtil; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.gxwebsoft.common.core.web.BaseController; import com.gxwebsoft.booking.service.UserCardService; import com.gxwebsoft.booking.entity.UserCard; @@ -10,6 +12,8 @@ import com.gxwebsoft.common.core.web.PageParam; import com.gxwebsoft.common.core.web.BatchParam; import com.gxwebsoft.common.core.annotation.OperationLog; import com.gxwebsoft.common.system.entity.User; +import com.gxwebsoft.shop.entity.Order; +import com.gxwebsoft.shop.param.OrderParam; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.security.access.prepost.PreAuthorize; @@ -31,6 +35,27 @@ public class UserCardController extends BaseController { @Resource private UserCardService userCardService; + @ApiOperation("查询可用的会员卡") + @GetMapping("/findUseCard") + public ApiResult findUseCard(UserCardParam param) { + final User loginUser = getLoginUser(); + if(loginUser == null){ + return fail("请先登录",null); + } + // 查询可用的会员卡 + LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>(); + + wrapper.eq(UserCard::getUserId, loginUser.getUserId()) + .like(UserCard::getSid, param.getSid()) + .eq(UserCard::getPayStatus,1) + .gt(UserCard::getExpirationTime, DateUtil.date()) + .last("limit 1"); + + final UserCard userCard = userCardService.getOne(wrapper); + + return success(userCard); + } + @ApiOperation("分页查询会员卡") @GetMapping("/page") public ApiResult> page(UserCardParam param) { diff --git a/src/main/java/com/gxwebsoft/booking/controller/UserCardLogController.java b/src/main/java/com/gxwebsoft/booking/controller/UserCardLogController.java new file mode 100644 index 0000000..28b1a13 --- /dev/null +++ b/src/main/java/com/gxwebsoft/booking/controller/UserCardLogController.java @@ -0,0 +1,115 @@ +package com.gxwebsoft.booking.controller; + +import com.gxwebsoft.common.core.web.BaseController; +import com.gxwebsoft.booking.service.UserCardLogService; +import com.gxwebsoft.booking.entity.UserCardLog; +import com.gxwebsoft.booking.param.UserCardLogParam; +import com.gxwebsoft.common.core.web.ApiResult; +import com.gxwebsoft.common.core.web.PageResult; +import com.gxwebsoft.common.core.web.PageParam; +import com.gxwebsoft.common.core.web.BatchParam; +import com.gxwebsoft.common.core.annotation.OperationLog; +import com.gxwebsoft.common.system.entity.User; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +/** + * 明细表控制器 + * + * @author 科技小王子 + * @since 2024-05-31 17:15:10 + */ +@Api(tags = "明细表管理") +@RestController +@RequestMapping("/api/booking/user-card-log") +public class UserCardLogController extends BaseController { + @Resource + private UserCardLogService userCardLogService; + + @ApiOperation("分页查询明细表") + @GetMapping("/page") + public ApiResult> page(UserCardLogParam param) { + // 使用关联查询 + return success(userCardLogService.pageRel(param)); + } + + @ApiOperation("查询全部明细表") + @GetMapping() + public ApiResult> list(UserCardLogParam param) { + // 使用关联查询 + return success(userCardLogService.listRel(param)); + } + + @PreAuthorize("hasAuthority('booking:userCardLog:list')") + @ApiOperation("根据id查询明细表") + @GetMapping("/{id}") + public ApiResult get(@PathVariable("id") Integer id) { + // 使用关联查询 + return success(userCardLogService.getByIdRel(id)); + } + + @ApiOperation("添加明细表") + @PostMapping() + public ApiResult save(@RequestBody UserCardLog userCardLog) { + // 记录当前登录用户id + User loginUser = getLoginUser(); + if (loginUser != null) { + userCardLog.setUserId(loginUser.getUserId()); + } + if (userCardLogService.save(userCardLog)) { + return success("添加成功"); + } + return fail("添加失败"); + } + + @ApiOperation("修改明细表") + @PutMapping() + public ApiResult update(@RequestBody UserCardLog userCardLog) { + if (userCardLogService.updateById(userCardLog)) { + return success("修改成功"); + } + return fail("修改失败"); + } + + @ApiOperation("删除明细表") + @DeleteMapping("/{id}") + public ApiResult remove(@PathVariable("id") Integer id) { + if (userCardLogService.removeById(id)) { + return success("删除成功"); + } + return fail("删除失败"); + } + + @ApiOperation("批量添加明细表") + @PostMapping("/batch") + public ApiResult saveBatch(@RequestBody List list) { + if (userCardLogService.saveBatch(list)) { + return success("添加成功"); + } + return fail("添加失败"); + } + + @ApiOperation("批量修改明细表") + @PutMapping("/batch") + public ApiResult removeBatch(@RequestBody BatchParam batchParam) { + if (batchParam.update(userCardLogService, "log_id")) { + return success("修改成功"); + } + return fail("修改失败"); + } + + @ApiOperation("批量删除明细表") + @DeleteMapping("/batch") + public ApiResult removeBatch(@RequestBody List ids) { + if (userCardLogService.removeByIds(ids)) { + return success("删除成功"); + } + return fail("删除失败"); + } + +} diff --git a/src/main/java/com/gxwebsoft/booking/entity/UserCard.java b/src/main/java/com/gxwebsoft/booking/entity/UserCard.java index 24ac286..a0f2de4 100644 --- a/src/main/java/com/gxwebsoft/booking/entity/UserCard.java +++ b/src/main/java/com/gxwebsoft/booking/entity/UserCard.java @@ -113,6 +113,9 @@ public class UserCard implements Serializable { @ApiModelProperty(value = "1微信支付,2支付宝支付,3现金,4POS机刷卡,15平安健康卡") private Integer payType; + @ApiModelProperty(value = "0待支付,1已支付") + private Integer payStatus; + @ApiModelProperty(value = "是否赠送积分:1赠送,2不赠送") private Integer isIntegral; diff --git a/src/main/java/com/gxwebsoft/booking/entity/UserCardLog.java b/src/main/java/com/gxwebsoft/booking/entity/UserCardLog.java new file mode 100644 index 0000000..a591750 --- /dev/null +++ b/src/main/java/com/gxwebsoft/booking/entity/UserCardLog.java @@ -0,0 +1,86 @@ +package com.gxwebsoft.booking.entity; + +import java.math.BigDecimal; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.TableLogic; +import java.io.Serializable; +import java.util.Date; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 明细表 + * + * @author 科技小王子 + * @since 2024-05-31 17:15:10 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@ApiModel(value = "UserCardLog对象", description = "明细表") +@TableName("booking_user_card_log") +public class UserCardLog implements Serializable { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键ID") + @TableId(value = "log_id", type = IdType.AUTO) + private Integer logId; + + @ApiModelProperty(value = "用户ID") + private Integer userId; + + @ApiModelProperty(value = "IC卡类型:1年卡,2次卡,3月卡,4会员IC卡,5充值卡 ") + private Integer type; + + @ApiModelProperty(value = "变动金额") + private BigDecimal money; + + @ApiModelProperty(value = "变动后余额") + private BigDecimal balance; + + @ApiModelProperty(value = "剩余使用次数") + private Integer num; + + @ApiModelProperty(value = "管理员备注") + private String remark; + + @ApiModelProperty(value = "订单编号") + private String orderNo; + + @ApiModelProperty(value = "操作人ID") + private Integer adminId; + + @ApiModelProperty(value = "排序(数字越小越靠前)") + private Integer sortNumber; + + @ApiModelProperty(value = "备注") + private String comments; + + @ApiModelProperty(value = "状态, 0正常, 1冻结") + private Integer status; + + @ApiModelProperty(value = "是否删除, 0否, 1是") + @TableLogic + private Integer deleted; + + @ApiModelProperty(value = "商户ID") + private Integer merchantId; + + @ApiModelProperty(value = "商户编码") + private String merchantCode; + + @ApiModelProperty(value = "租户id") + private Integer tenantId; + + @ApiModelProperty(value = "注册时间") + private Date createTime; + + @ApiModelProperty(value = "修改时间") + private Date updateTime; + +} diff --git a/src/main/java/com/gxwebsoft/booking/mapper/UserCardLogMapper.java b/src/main/java/com/gxwebsoft/booking/mapper/UserCardLogMapper.java new file mode 100644 index 0000000..f0948cf --- /dev/null +++ b/src/main/java/com/gxwebsoft/booking/mapper/UserCardLogMapper.java @@ -0,0 +1,37 @@ +package com.gxwebsoft.booking.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.gxwebsoft.booking.entity.UserCardLog; +import com.gxwebsoft.booking.param.UserCardLogParam; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 明细表Mapper + * + * @author 科技小王子 + * @since 2024-05-31 17:15:10 + */ +public interface UserCardLogMapper extends BaseMapper { + + /** + * 分页查询 + * + * @param page 分页对象 + * @param param 查询参数 + * @return List + */ + List selectPageRel(@Param("page") IPage page, + @Param("param") UserCardLogParam param); + + /** + * 查询全部 + * + * @param param 查询参数 + * @return List + */ + List selectListRel(@Param("param") UserCardLogParam param); + +} diff --git a/src/main/java/com/gxwebsoft/booking/mapper/xml/UserCardLogMapper.xml b/src/main/java/com/gxwebsoft/booking/mapper/xml/UserCardLogMapper.xml new file mode 100644 index 0000000..e3ebcf8 --- /dev/null +++ b/src/main/java/com/gxwebsoft/booking/mapper/xml/UserCardLogMapper.xml @@ -0,0 +1,78 @@ + + + + + + + SELECT a.* + FROM booking_user_card_log a + + + AND a.log_id = #{param.logId} + + + AND a.user_id = #{param.userId} + + + AND a.type = #{param.type} + + + AND a.money = #{param.money} + + + AND a.balance = #{param.balance} + + + AND a.remark LIKE CONCAT('%', #{param.remark}, '%') + + + AND a.order_no LIKE CONCAT('%', #{param.orderNo}, '%') + + + AND a.admin_id = #{param.adminId} + + + AND a.sort_number = #{param.sortNumber} + + + AND a.comments LIKE CONCAT('%', #{param.comments}, '%') + + + AND a.status = #{param.status} + + + AND a.deleted = #{param.deleted} + + + AND a.deleted = 0 + + + AND a.merchant_id = #{param.merchantId} + + + AND a.merchant_code LIKE CONCAT('%', #{param.merchantCode}, '%') + + + AND a.create_time >= #{param.createTimeStart} + + + AND a.create_time <= #{param.createTimeEnd} + + + AND (a.comments LIKE CONCAT('%', #{param.keywords}, '%') + ) + + + + + + + + + + + diff --git a/src/main/java/com/gxwebsoft/booking/param/UserCardLogParam.java b/src/main/java/com/gxwebsoft/booking/param/UserCardLogParam.java new file mode 100644 index 0000000..15527d0 --- /dev/null +++ b/src/main/java/com/gxwebsoft/booking/param/UserCardLogParam.java @@ -0,0 +1,78 @@ +package com.gxwebsoft.booking.param; + +import java.math.BigDecimal; +import com.gxwebsoft.common.core.annotation.QueryField; +import com.gxwebsoft.common.core.annotation.QueryType; +import com.gxwebsoft.common.core.web.BaseParam; +import com.fasterxml.jackson.annotation.JsonInclude; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 明细表查询参数 + * + * @author 科技小王子 + * @since 2024-05-31 17:15:09 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@JsonInclude(JsonInclude.Include.NON_NULL) +@ApiModel(value = "UserCardLogParam对象", description = "明细表查询参数") +public class UserCardLogParam extends BaseParam { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键ID") + @QueryField(type = QueryType.EQ) + private Integer logId; + + @ApiModelProperty(value = "用户ID") + @QueryField(type = QueryType.EQ) + private Integer userId; + + @ApiModelProperty(value = "IC卡类型:1年卡,2次卡,3月卡,4会员IC卡,5充值卡 ") + @QueryField(type = QueryType.EQ) + private Integer type; + + @ApiModelProperty(value = "变动金额") + @QueryField(type = QueryType.EQ) + private BigDecimal money; + + @ApiModelProperty(value = "变动后余额") + @QueryField(type = QueryType.EQ) + private BigDecimal balance; + + @ApiModelProperty(value = "管理员备注") + private String remark; + + @ApiModelProperty(value = "订单编号") + private String orderNo; + + @ApiModelProperty(value = "操作人ID") + @QueryField(type = QueryType.EQ) + private Integer adminId; + + @ApiModelProperty(value = "排序(数字越小越靠前)") + @QueryField(type = QueryType.EQ) + private Integer sortNumber; + + @ApiModelProperty(value = "备注") + private String comments; + + @ApiModelProperty(value = "状态, 0正常, 1冻结") + @QueryField(type = QueryType.EQ) + private Integer status; + + @ApiModelProperty(value = "是否删除, 0否, 1是") + @QueryField(type = QueryType.EQ) + private Integer deleted; + + @ApiModelProperty(value = "商户ID") + @QueryField(type = QueryType.EQ) + private Integer merchantId; + + @ApiModelProperty(value = "商户编码") + private String merchantCode; + +} diff --git a/src/main/java/com/gxwebsoft/booking/param/UserCardParam.java b/src/main/java/com/gxwebsoft/booking/param/UserCardParam.java index 2f12348..060ef00 100644 --- a/src/main/java/com/gxwebsoft/booking/param/UserCardParam.java +++ b/src/main/java/com/gxwebsoft/booking/param/UserCardParam.java @@ -128,6 +128,10 @@ public class UserCardParam extends BaseParam { @QueryField(type = QueryType.EQ) private Integer payType; + @ApiModelProperty(value = "0待支付,1已支付") + @QueryField(type = QueryType.EQ) + private Integer payStatus; + @ApiModelProperty(value = "是否赠送积分:1赠送,2不赠送") @QueryField(type = QueryType.EQ) private Integer isIntegral; diff --git a/src/main/java/com/gxwebsoft/booking/service/UserCardLogService.java b/src/main/java/com/gxwebsoft/booking/service/UserCardLogService.java new file mode 100644 index 0000000..dbf61f6 --- /dev/null +++ b/src/main/java/com/gxwebsoft/booking/service/UserCardLogService.java @@ -0,0 +1,42 @@ +package com.gxwebsoft.booking.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.gxwebsoft.common.core.web.PageResult; +import com.gxwebsoft.booking.entity.UserCardLog; +import com.gxwebsoft.booking.param.UserCardLogParam; + +import java.util.List; + +/** + * 明细表Service + * + * @author 科技小王子 + * @since 2024-05-31 17:15:10 + */ +public interface UserCardLogService extends IService { + + /** + * 分页关联查询 + * + * @param param 查询参数 + * @return PageResult + */ + PageResult pageRel(UserCardLogParam param); + + /** + * 关联查询全部 + * + * @param param 查询参数 + * @return List + */ + List listRel(UserCardLogParam param); + + /** + * 根据id查询 + * + * @param logId 主键ID + * @return UserCardLog + */ + UserCardLog getByIdRel(Integer logId); + +} diff --git a/src/main/java/com/gxwebsoft/booking/service/impl/UserCardLogServiceImpl.java b/src/main/java/com/gxwebsoft/booking/service/impl/UserCardLogServiceImpl.java new file mode 100644 index 0000000..15350ed --- /dev/null +++ b/src/main/java/com/gxwebsoft/booking/service/impl/UserCardLogServiceImpl.java @@ -0,0 +1,47 @@ +package com.gxwebsoft.booking.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.gxwebsoft.booking.mapper.UserCardLogMapper; +import com.gxwebsoft.booking.service.UserCardLogService; +import com.gxwebsoft.booking.entity.UserCardLog; +import com.gxwebsoft.booking.param.UserCardLogParam; +import com.gxwebsoft.common.core.web.PageParam; +import com.gxwebsoft.common.core.web.PageResult; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 明细表Service实现 + * + * @author 科技小王子 + * @since 2024-05-31 17:15:10 + */ +@Service +public class UserCardLogServiceImpl extends ServiceImpl implements UserCardLogService { + + @Override + public PageResult pageRel(UserCardLogParam param) { + PageParam page = new PageParam<>(param); + page.setDefaultOrder("sort_number asc, create_time desc"); + List list = baseMapper.selectPageRel(page, param); + return new PageResult<>(list, page.getTotal()); + } + + @Override + public List listRel(UserCardLogParam param) { + List list = baseMapper.selectListRel(param); + // 排序 + PageParam page = new PageParam<>(); + page.setDefaultOrder("sort_number asc, create_time desc"); + return page.sortRecords(list); + } + + @Override + public UserCardLog getByIdRel(Integer logId) { + UserCardLogParam param = new UserCardLogParam(); + param.setLogId(logId); + return param.getOne(baseMapper.selectListRel(param)); + } + +} diff --git a/src/main/java/com/gxwebsoft/shop/controller/OrderController.java b/src/main/java/com/gxwebsoft/shop/controller/OrderController.java index 1ce15ff..b8c4123 100644 --- a/src/main/java/com/gxwebsoft/shop/controller/OrderController.java +++ b/src/main/java/com/gxwebsoft/shop/controller/OrderController.java @@ -129,8 +129,8 @@ public class OrderController extends BaseController { order.setPhone(loginUser.getPhone()); order.setUserId(loginUser.getUserId()); order.setExpirationTime(DateUtil.offset(DateUtil.date(), DateField.MINUTE, 10)); - if (order.getOrderInfoList() != null) { - order.setTotalNum(order.getOrderInfoList().size()); + if (order.getOrderInfo() != null) { + order.setTotalNum(order.getOrderInfo().size()); } if (order.getGoodsList() != null) { order.setTotalNum(order.getGoodsList().size()); @@ -151,7 +151,7 @@ public class OrderController extends BaseController { } // 预定订单 if (order.getType().equals(1)) { - order.getOrderInfoList().forEach(d -> { + order.getOrderInfo().forEach(d -> { d.setOrderId(order.getOrderId()); d.setTimeFlag(timeMillis); d.setVersion(10); @@ -159,7 +159,7 @@ public class OrderController extends BaseController { d.setDateTime(d.getDateTime()); d.setExpirationTime(order.getExpirationTime()); }); - orderInfoService.saveBatch(order.getOrderInfoList()); + orderInfoService.saveBatch(order.getOrderInfo()); } // 会员卡订单 if (order.getType().equals(2)) { @@ -178,6 +178,7 @@ public class OrderController extends BaseController { userCard.setCardDesc(card.getCardDesc()); userCard.setInfo(card.getComments()); userCard.setUid(loginUser.getUserId()); + userCard.setRemainingMoney(card.getPrice()); userCard.setVid(0); userCard.setAid(0); userCard.setCode(CommonUtil.randomUUID8()); @@ -192,17 +193,24 @@ public class OrderController extends BaseController { userCardService.save(userCard); } - // 微信统一下单接口 - if (order.getPayType().equals(1)) { - return success("下单成功", orderService.createWxOrder(order)); - } - // 余额支付 if (order.getPayType().equals(0)) { order.setAccessToken(access_token); order.setLoginUser(loginUser); return success("下单成功", orderService.payByBalance(order)); } + + // 微信统一下单接口 + if (order.getPayType().equals(1)) { + return success("下单成功", orderService.createWxOrder(order)); + } + + // 会员卡支付 + if(!Integer.valueOf(order.getCardId()).equals(0)){ + order.setAccessToken(access_token); + order.setLoginUser(loginUser); + return success("下单成功", orderService.payByUserCard(order)); + } } return fail("下单失败"); } diff --git a/src/main/java/com/gxwebsoft/shop/entity/Order.java b/src/main/java/com/gxwebsoft/shop/entity/Order.java index aa33ead..a426724 100644 --- a/src/main/java/com/gxwebsoft/shop/entity/Order.java +++ b/src/main/java/com/gxwebsoft/shop/entity/Order.java @@ -205,7 +205,7 @@ public class Order implements Serializable { @ApiModelProperty(value = "预定信息") @TableField(exist = false) - private List orderInfoList; + private List orderInfo; @ApiModelProperty(value = "商品信息") @TableField(exist = false) diff --git a/src/main/java/com/gxwebsoft/shop/service/OrderService.java b/src/main/java/com/gxwebsoft/shop/service/OrderService.java index ae3671d..301b3cd 100644 --- a/src/main/java/com/gxwebsoft/shop/service/OrderService.java +++ b/src/main/java/com/gxwebsoft/shop/service/OrderService.java @@ -48,4 +48,6 @@ public interface OrderService extends IService { void updateByOutTradeNo(Order order); Boolean payByBalance(Order order); + + Boolean payByUserCard(Order order); } diff --git a/src/main/java/com/gxwebsoft/shop/service/impl/OrderServiceImpl.java b/src/main/java/com/gxwebsoft/shop/service/impl/OrderServiceImpl.java index ad5f09e..2f53c74 100644 --- a/src/main/java/com/gxwebsoft/shop/service/impl/OrderServiceImpl.java +++ b/src/main/java/com/gxwebsoft/shop/service/impl/OrderServiceImpl.java @@ -1,11 +1,16 @@ package com.gxwebsoft.shop.service.impl; +import cn.hutool.core.date.DateField; import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.gxwebsoft.booking.entity.UserCard; +import com.gxwebsoft.booking.entity.UserCardLog; +import com.gxwebsoft.booking.service.UserCardLogService; +import com.gxwebsoft.booking.service.UserCardService; import com.gxwebsoft.common.core.config.ConfigProperties; import com.gxwebsoft.common.core.exception.BusinessException; import com.gxwebsoft.common.core.security.JwtUtil; @@ -72,6 +77,12 @@ public class OrderServiceImpl extends ServiceImpl implements @Resource private UserService userService; @Resource + private OrderService orderService; + @Resource + private UserCardService userCardService; + @Resource + private UserCardLogService userCardLogService; + @Resource private UserBalanceLogService userBalanceLogService; @Resource private RedisUtil redisUtil; @@ -100,7 +111,7 @@ public class OrderServiceImpl extends ServiceImpl implements if (!collect.isEmpty()) { final List orderInfos = collect.get(d.getOrderId()); if (!CollectionUtils.isEmpty(orderInfos)) { - d.setOrderInfoList(orderInfos); + d.setOrderInfo(orderInfos); } } }); @@ -143,7 +154,7 @@ public class OrderServiceImpl extends ServiceImpl implements Order order = param.getOne(baseMapper.selectListRel(param)); if (order != null) { final List list = orderInfoService.list(new LambdaQueryWrapper().eq(OrderInfo::getOrderId, orderId)); - order.setOrderInfoList(list); + order.setOrderInfo(list); if (!CollectionUtils.isEmpty(list)) { final OrderInfo orderInfo = list.get(0); final int i = orderInfo.getDateTime().compareTo(DateUtil.today()); @@ -276,9 +287,57 @@ public class OrderServiceImpl extends ServiceImpl implements balanceLog.setRemark(order.getComments()); balanceLog.setMerchantId(order.getMerchantId()); userBalanceLogService.save(balanceLog); + // 修改订单状态 + order.setPayStatus(1); + order.setPayTime(DateUtil.date()); + order.setExpirationTime(DateUtil.offset(DateUtil.date(), DateField.YEAR, 10)); + orderService.updateById(order); return true; } return false; } + @Override + @Transactional(rollbackFor = {Exception.class}) + public Boolean payByUserCard(Order order) { + final User loginUser = order.getLoginUser(); + final UserCardLog userCardLog = new UserCardLog(); + // 查询会员卡信息 + final UserCard userCard = userCardService.getById(order.getCardId()); + + // IC卡类型:1年卡,3月卡,5充值卡 + if (userCard.getType().equals(1) || userCard.getType().equals(3) || userCard.getType().equals(5)) { + if (userCard.getRemainingMoney().compareTo(order.getPayPrice()) < 0) { + throw new BusinessException("会员卡余额不足"); + } + final BigDecimal subtract = userCard.getRemainingMoney().subtract(order.getPayPrice()); + userCardLog.setBalance(subtract); + userCard.setRemainingMoney(subtract); + } + + // IC卡类型:2次卡 + if (userCard.getType().equals(2)) { + if (userCard.getNum() <= 0) { + throw new BusinessException("剩余次数不足"); + } + userCardLog.setNum(userCard.getNum()-1); + } + userCardService.updateById(userCard); + + // 记录明细 + userCardLog.setUserId(order.getUserId()); + userCardLog.setType(userCard.getType()); + userCardLog.setMoney(order.getPayPrice()); + userCardLog.setOrderNo(order.getOrderNo()); + userCardLog.setMerchantId(order.getMerchantId()); + userCardLog.setMerchantCode(order.getMerchantCode()); + userCardLogService.save(userCardLog); + // 修改订单状态 + order.setPayStatus(1); + order.setPayTime(DateUtil.date()); + order.setExpirationTime(DateUtil.offset(DateUtil.date(), DateField.YEAR, 10)); + orderService.updateById(order); + return true; + } + } diff --git a/src/test/java/com/gxwebsoft/generator/BookingGenerator.java b/src/test/java/com/gxwebsoft/generator/BookingGenerator.java index 0f7e29c..23fb8d2 100644 --- a/src/test/java/com/gxwebsoft/generator/BookingGenerator.java +++ b/src/test/java/com/gxwebsoft/generator/BookingGenerator.java @@ -59,7 +59,8 @@ public class BookingGenerator { // "booking_emergency", // "booking_user_coupon", // "booking_user_invoice", - "booking_user_card", +// "booking_user_card", + "booking_user_card_log" }; // 需要去除的表前缀 private static final String[] TABLE_PREFIX = new String[]{