diff --git a/src/main/java/com/gxwebsoft/booking/controller/EmergencyController.java b/src/main/java/com/gxwebsoft/booking/controller/EmergencyController.java new file mode 100644 index 0000000..f6ecd47 --- /dev/null +++ b/src/main/java/com/gxwebsoft/booking/controller/EmergencyController.java @@ -0,0 +1,114 @@ +package com.gxwebsoft.booking.controller; + +import com.gxwebsoft.common.core.web.BaseController; +import com.gxwebsoft.booking.service.EmergencyService; +import com.gxwebsoft.booking.entity.Emergency; +import com.gxwebsoft.booking.param.EmergencyParam; +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-22 21:25:00 + */ +@Api(tags = "紧急联系人管理管理") +@RestController +@RequestMapping("/api/booking/emergency") +public class EmergencyController extends BaseController { + @Resource + private EmergencyService emergencyService; + + @ApiOperation("分页查询紧急联系人管理") + @GetMapping("/page") + public ApiResult> page(EmergencyParam param) { + // 使用关联查询 + return success(emergencyService.pageRel(param)); + } + + @ApiOperation("查询全部紧急联系人管理") + @GetMapping() + public ApiResult> list(EmergencyParam param) { + // 使用关联查询 + return success(emergencyService.listRel(param)); + } + + @ApiOperation("根据id查询紧急联系人管理") + @GetMapping("/{id}") + public ApiResult get(@PathVariable("id") Integer id) { + // 使用关联查询 + return success(emergencyService.getByIdRel(id)); + } + + @ApiOperation("添加紧急联系人管理") + @PostMapping() + public ApiResult save(@RequestBody Emergency emergency) { + // 记录当前登录用户id + User loginUser = getLoginUser(); + if (loginUser != null) { + emergency.setUserId(loginUser.getUserId()); + } + if (emergencyService.save(emergency)) { + return success("添加成功"); + } + return fail("添加失败"); + } + + @ApiOperation("修改紧急联系人管理") + @PutMapping() + public ApiResult update(@RequestBody Emergency emergency) { + if (emergencyService.updateById(emergency)) { + return success("修改成功"); + } + return fail("修改失败"); + } + + @ApiOperation("删除紧急联系人管理") + @DeleteMapping("/{id}") + public ApiResult remove(@PathVariable("id") Integer id) { + if (emergencyService.removeById(id)) { + return success("删除成功"); + } + return fail("删除失败"); + } + + @ApiOperation("批量添加紧急联系人管理") + @PostMapping("/batch") + public ApiResult saveBatch(@RequestBody List list) { + if (emergencyService.saveBatch(list)) { + return success("添加成功"); + } + return fail("添加失败"); + } + + @ApiOperation("批量修改紧急联系人管理") + @PutMapping("/batch") + public ApiResult removeBatch(@RequestBody BatchParam batchParam) { + if (batchParam.update(emergencyService, "emergency_id")) { + return success("修改成功"); + } + return fail("修改失败"); + } + + @ApiOperation("批量删除紧急联系人管理") + @DeleteMapping("/batch") + public ApiResult removeBatch(@RequestBody List ids) { + if (emergencyService.removeByIds(ids)) { + return success("删除成功"); + } + return fail("删除失败"); + } + +} diff --git a/src/main/java/com/gxwebsoft/booking/controller/PeriodController.java b/src/main/java/com/gxwebsoft/booking/controller/PeriodController.java index b4aaa2c..9ddf8ac 100644 --- a/src/main/java/com/gxwebsoft/booking/controller/PeriodController.java +++ b/src/main/java/com/gxwebsoft/booking/controller/PeriodController.java @@ -6,6 +6,9 @@ import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.github.yulichang.toolkit.JoinWrappers; +import com.github.yulichang.wrapper.MPJLambdaWrapper; import com.gxwebsoft.booking.entity.Field; import com.gxwebsoft.booking.param.FieldParam; import com.gxwebsoft.booking.service.FieldService; @@ -20,8 +23,10 @@ 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.ChatConversation; import com.gxwebsoft.shop.entity.Order; import com.gxwebsoft.shop.entity.OrderInfo; +import com.gxwebsoft.shop.param.OrderInfoParam; import com.gxwebsoft.shop.service.OrderInfoService; import com.gxwebsoft.shop.service.OrderService; import io.swagger.annotations.Api; @@ -88,7 +93,8 @@ public class PeriodController extends BaseController { // 今日订单信息 按Key分组(组合规则:日期+时间段+场馆id+场地id) Map> collectKey; - List orderInfoList = orderInfoService.list(new LambdaQueryWrapper().eq(OrderInfo::getDateTime, param.getDateTime()).eq(OrderInfo::getMerchantId,param.getMerchantId()).gt(OrderInfo::getExpirationTime, LocalDateTime.now())); + List orderInfoList = orderInfoService.getTodayOrder(param); +// List orderInfoList = orderInfoService.list(new LambdaQueryWrapper().eq(OrderInfo::getDateTime, param.getDateTime()).eq(OrderInfo::getMerchantId,param.getMerchantId()).gt(OrderInfo::getExpirationTime, LocalDateTime.now())); collectKey = orderInfoList.stream().collect(Collectors.groupingBy(OrderInfo::getOrderCode)); // 查询是否含有未支付订单 @@ -104,9 +110,9 @@ public class PeriodController extends BaseController { fieldParam.setIsStatus(param.getIsStatus()); fieldParam.setMerchantId(param.getMerchantId()); fieldParam.setIsHalf(param.getHalf()); - System.out.println("fieldParam = " + fieldParam); +// System.out.println("fieldParam = " + fieldParam); List fields = fieldService.listRel(fieldParam); - System.out.println("fields = " + fields); +// System.out.println("fields = " + fields); // 为空处理 if (CollectionUtils.isEmpty(fields)) { @@ -123,10 +129,13 @@ public class PeriodController extends BaseController { fieldList.forEach(f -> { final String key = getKey(param.getDateTime().concat(d.getTimePeriod().concat(d.getMerchantId().toString()).concat(f.getFieldId().toString()))); final List orderInfos = collectKey.get(key); + System.out.println("orderInfos = " + orderInfos); if (!CollectionUtils.isEmpty(orderInfos)) { final OrderInfo orderInfo = orderInfos.get(0); if (orderInfo.getOrderCode().equals(key)) { f.setSold(true); + f.setOrderInfoList(orderInfos); + f.setOrderId(orderInfo.getOrderId()); } } f.setOrderKey(key); diff --git a/src/main/java/com/gxwebsoft/booking/controller/UserCouponController.java b/src/main/java/com/gxwebsoft/booking/controller/UserCouponController.java new file mode 100644 index 0000000..51f11c5 --- /dev/null +++ b/src/main/java/com/gxwebsoft/booking/controller/UserCouponController.java @@ -0,0 +1,127 @@ +package com.gxwebsoft.booking.controller; + +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.gxwebsoft.booking.vo.UserCouponVO; +import com.gxwebsoft.common.core.web.BaseController; +import com.gxwebsoft.booking.service.UserCouponService; +import com.gxwebsoft.booking.entity.UserCoupon; +import com.gxwebsoft.booking.param.UserCouponParam; +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-22 22:41:17 + */ +@Api(tags = "我的优惠券管理") +@RestController +@RequestMapping("/api/booking/user-coupon") +public class UserCouponController extends BaseController { + @Resource + private UserCouponService userCouponService; + + @ApiOperation("统计分析") + @GetMapping("/data") + public ApiResult data(){ + final UserCouponVO.Payload payload = new UserCouponVO.Payload(); + payload.setToBeUsed(userCouponService.count(new LambdaUpdateWrapper().eq(UserCoupon::getUserId,getLoginUserId()).eq(UserCoupon::getStatus,0))); + payload.setUsed(userCouponService.count(new LambdaUpdateWrapper().eq(UserCoupon::getUserId,getLoginUserId()).eq(UserCoupon::getStatus,1))); + payload.setInvalid(userCouponService.count(new LambdaUpdateWrapper().eq(UserCoupon::getUserId,getLoginUserId()).eq(UserCoupon::getStatus,2))); + return success(payload); + } + + @ApiOperation("分页查询我的优惠券") + @GetMapping("/page") + public ApiResult> page(UserCouponParam param) { + // 使用关联查询 + return success(userCouponService.pageRel(param)); + } + + @ApiOperation("查询全部我的优惠券") + @GetMapping() + public ApiResult> list(UserCouponParam param) { + // 使用关联查询 + return success(userCouponService.listRel(param)); + } + + @PreAuthorize("hasAuthority('booking:userCoupon:list')") + @ApiOperation("根据id查询我的优惠券") + @GetMapping("/{id}") + public ApiResult get(@PathVariable("id") Integer id) { + // 使用关联查询 + return success(userCouponService.getByIdRel(id)); + } + + @ApiOperation("添加我的优惠券") + @PostMapping() + public ApiResult save(@RequestBody UserCoupon userCoupon) { + // 记录当前登录用户id + User loginUser = getLoginUser(); + if (loginUser != null) { + userCoupon.setUserId(loginUser.getUserId()); + } + if (userCouponService.save(userCoupon)) { + return success("添加成功"); + } + return fail("添加失败"); + } + + @ApiOperation("修改我的优惠券") + @PutMapping() + public ApiResult update(@RequestBody UserCoupon userCoupon) { + if (userCouponService.updateById(userCoupon)) { + return success("修改成功"); + } + return fail("修改失败"); + } + + @ApiOperation("删除我的优惠券") + @DeleteMapping("/{id}") + public ApiResult remove(@PathVariable("id") Integer id) { + if (userCouponService.removeById(id)) { + return success("删除成功"); + } + return fail("删除失败"); + } + + @ApiOperation("批量添加我的优惠券") + @PostMapping("/batch") + public ApiResult saveBatch(@RequestBody List list) { + if (userCouponService.saveBatch(list)) { + return success("添加成功"); + } + return fail("添加失败"); + } + + @ApiOperation("批量修改我的优惠券") + @PutMapping("/batch") + public ApiResult removeBatch(@RequestBody BatchParam batchParam) { + if (batchParam.update(userCouponService, "id")) { + return success("修改成功"); + } + return fail("修改失败"); + } + + @ApiOperation("批量删除我的优惠券") + @DeleteMapping("/batch") + public ApiResult removeBatch(@RequestBody List ids) { + if (userCouponService.removeByIds(ids)) { + return success("删除成功"); + } + return fail("删除失败"); + } + +} diff --git a/src/main/java/com/gxwebsoft/booking/entity/Emergency.java b/src/main/java/com/gxwebsoft/booking/entity/Emergency.java new file mode 100644 index 0000000..994592c --- /dev/null +++ b/src/main/java/com/gxwebsoft/booking/entity/Emergency.java @@ -0,0 +1,59 @@ +package com.gxwebsoft.booking.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import java.time.LocalDateTime; +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-22 21:24:59 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@ApiModel(value = "Emergency对象", description = "紧急联系人管理") +@TableName("booking_emergency") +public class Emergency implements Serializable { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "ID") + @TableId(value = "emergency_id", type = IdType.AUTO) + private Integer emergencyId; + + @ApiModelProperty(value = "姓名") + private String name; + + @ApiModelProperty(value = "手机号") + private String phone; + + @ApiModelProperty(value = "关联用户") + private Integer userId; + + @ApiModelProperty(value = "商户ID") + private Integer merchantId; + + @ApiModelProperty(value = "备注") + private String comments; + + @ApiModelProperty(value = "状态") + private Integer status; + + @ApiModelProperty(value = "排序号") + private Integer sortNumber; + + @ApiModelProperty(value = "租户id") + private Integer tenantId; + + @ApiModelProperty(value = "创建时间") + private Date createTime; + +} diff --git a/src/main/java/com/gxwebsoft/booking/entity/Field.java b/src/main/java/com/gxwebsoft/booking/entity/Field.java index c3670d4..f8f67ee 100644 --- a/src/main/java/com/gxwebsoft/booking/entity/Field.java +++ b/src/main/java/com/gxwebsoft/booking/entity/Field.java @@ -104,4 +104,8 @@ public class Field extends CloneSupport implements Serializable { @TableField(exist = false) private BigDecimal price; + @ApiModelProperty(value = "被预定的订单号") + @TableField(exist = false) + private Integer orderId; + } diff --git a/src/main/java/com/gxwebsoft/booking/entity/UserCoupon.java b/src/main/java/com/gxwebsoft/booking/entity/UserCoupon.java new file mode 100644 index 0000000..05833de --- /dev/null +++ b/src/main/java/com/gxwebsoft/booking/entity/UserCoupon.java @@ -0,0 +1,96 @@ +package com.gxwebsoft.booking.entity; + +import java.math.BigDecimal; +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-22 22:41:17 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@ApiModel(value = "UserCoupon对象", description = "我的优惠券") +public class UserCoupon implements Serializable { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "id") + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + @ApiModelProperty(value = "优惠劵id") + private Integer couponId; + + @ApiModelProperty(value = "优惠券名称") + private String name; + + @ApiModelProperty(value = "优惠券类型(10满减券 20折扣券)") + private Integer type; + + @ApiModelProperty(value = "满减券-减免金额") + private BigDecimal reducePrice; + + @ApiModelProperty(value = "折扣券-折扣率(0-100)") + private Integer discount; + + @ApiModelProperty(value = "最低消费金额") + private BigDecimal minPrice; + + @ApiModelProperty(value = "到期类型(10领取后生效 20固定时间)") + private Integer expireType; + + @ApiModelProperty(value = "领取后生效-有效天数") + private Integer expireDay; + + @ApiModelProperty(value = "有效期开始时间") + private Date startTime; + + @ApiModelProperty(value = "有效期结束时间") + private Date endTime; + + @ApiModelProperty(value = "适用范围(10全部商品 20指定商品)") + private Integer applyRange; + + @ApiModelProperty(value = "适用范围配置(json格式)") + private String applyRangeConfig; + + @ApiModelProperty(value = "是否过期(0未过期 1已过期)") + private Integer isExpire; + + @ApiModelProperty(value = "是否已使用(0未使用 1已使用)") + private Integer isUse; + + @ApiModelProperty(value = "排序(数字越小越靠前)") + private Integer sortNumber; + + @ApiModelProperty(value = "状态, 0待使用, 1已使用, 2已失效") + private Integer status; + + @ApiModelProperty(value = "是否删除, 0否, 1是") + @TableLogic + private Integer deleted; + + @ApiModelProperty(value = "用户ID") + private Integer userId; + + @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/EmergencyMapper.java b/src/main/java/com/gxwebsoft/booking/mapper/EmergencyMapper.java new file mode 100644 index 0000000..d9988d5 --- /dev/null +++ b/src/main/java/com/gxwebsoft/booking/mapper/EmergencyMapper.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.Emergency; +import com.gxwebsoft.booking.param.EmergencyParam; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 紧急联系人管理Mapper + * + * @author 科技小王子 + * @since 2024-05-22 21:24:59 + */ +public interface EmergencyMapper extends BaseMapper { + + /** + * 分页查询 + * + * @param page 分页对象 + * @param param 查询参数 + * @return List + */ + List selectPageRel(@Param("page") IPage page, + @Param("param") EmergencyParam param); + + /** + * 查询全部 + * + * @param param 查询参数 + * @return List + */ + List selectListRel(@Param("param") EmergencyParam param); + +} diff --git a/src/main/java/com/gxwebsoft/booking/mapper/UserCouponMapper.java b/src/main/java/com/gxwebsoft/booking/mapper/UserCouponMapper.java new file mode 100644 index 0000000..60a5a74 --- /dev/null +++ b/src/main/java/com/gxwebsoft/booking/mapper/UserCouponMapper.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.UserCoupon; +import com.gxwebsoft.booking.param.UserCouponParam; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 我的优惠券Mapper + * + * @author 科技小王子 + * @since 2024-05-22 22:41:17 + */ +public interface UserCouponMapper extends BaseMapper { + + /** + * 分页查询 + * + * @param page 分页对象 + * @param param 查询参数 + * @return List + */ + List selectPageRel(@Param("page") IPage page, + @Param("param") UserCouponParam param); + + /** + * 查询全部 + * + * @param param 查询参数 + * @return List + */ + List selectListRel(@Param("param") UserCouponParam param); + +} diff --git a/src/main/java/com/gxwebsoft/booking/mapper/xml/EmergencyMapper.xml b/src/main/java/com/gxwebsoft/booking/mapper/xml/EmergencyMapper.xml new file mode 100644 index 0000000..9d609bf --- /dev/null +++ b/src/main/java/com/gxwebsoft/booking/mapper/xml/EmergencyMapper.xml @@ -0,0 +1,57 @@ + + + + + + + SELECT a.* + FROM booking_emergency a + + + AND a.emergency_id = #{param.emergencyId} + + + AND a.name LIKE CONCAT('%', #{param.name}, '%') + + + AND a.phone LIKE CONCAT('%', #{param.phone}, '%') + + + AND a.user_id = #{param.userId} + + + AND a.merchant_id = #{param.merchantId} + + + AND a.comments LIKE CONCAT('%', #{param.comments}, '%') + + + AND a.status = #{param.status} + + + AND a.sort_number = #{param.sortNumber} + + + 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/mapper/xml/PeriodMapper.xml b/src/main/java/com/gxwebsoft/booking/mapper/xml/PeriodMapper.xml index 8bd6df8..7631dc8 100644 --- a/src/main/java/com/gxwebsoft/booking/mapper/xml/PeriodMapper.xml +++ b/src/main/java/com/gxwebsoft/booking/mapper/xml/PeriodMapper.xml @@ -4,8 +4,9 @@ - SELECT a.* + SELECT a.*,b.merchant_code FROM booking_period a + LEFT JOIN shop_merchant b ON a.merchant_id = b.merchant_id AND a.period_id = #{param.periodId} @@ -37,6 +38,9 @@ AND a.merchant_id = #{param.merchantId} + + AND b.merchant_code = #{param.merchantCode} + AND a.is_status = #{param.isStatus} diff --git a/src/main/java/com/gxwebsoft/booking/mapper/xml/UserCouponMapper.xml b/src/main/java/com/gxwebsoft/booking/mapper/xml/UserCouponMapper.xml new file mode 100644 index 0000000..198a295 --- /dev/null +++ b/src/main/java/com/gxwebsoft/booking/mapper/xml/UserCouponMapper.xml @@ -0,0 +1,93 @@ + + + + + + + SELECT a.* + FROM user_coupon a + + + AND a.id = #{param.id} + + + AND a.coupon_id = #{param.couponId} + + + AND a.name LIKE CONCAT('%', #{param.name}, '%') + + + AND a.type = #{param.type} + + + AND a.reduce_price = #{param.reducePrice} + + + AND a.discount = #{param.discount} + + + AND a.min_price = #{param.minPrice} + + + AND a.expire_type = #{param.expireType} + + + AND a.expire_day = #{param.expireDay} + + + AND a.start_time = #{param.startTime} + + + AND a.end_time = #{param.endTime} + + + AND a.apply_range = #{param.applyRange} + + + AND a.apply_range_config LIKE CONCAT('%', #{param.applyRangeConfig}, '%') + + + AND a.is_expire = #{param.isExpire} + + + AND a.is_use = #{param.isUse} + + + AND a.sort_number = #{param.sortNumber} + + + AND a.status = #{param.status} + + + AND a.deleted = #{param.deleted} + + + AND a.deleted = 0 + + + AND a.user_id = #{param.userId} + + + 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/EmergencyParam.java b/src/main/java/com/gxwebsoft/booking/param/EmergencyParam.java new file mode 100644 index 0000000..cb22017 --- /dev/null +++ b/src/main/java/com/gxwebsoft/booking/param/EmergencyParam.java @@ -0,0 +1,55 @@ +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-22 21:24:59 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@JsonInclude(JsonInclude.Include.NON_NULL) +@ApiModel(value = "EmergencyParam对象", description = "紧急联系人管理查询参数") +public class EmergencyParam extends BaseParam { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "ID") + @QueryField(type = QueryType.EQ) + private Integer emergencyId; + + @ApiModelProperty(value = "姓名") + private String name; + + @ApiModelProperty(value = "手机号") + private String phone; + + @ApiModelProperty(value = "关联用户") + @QueryField(type = QueryType.EQ) + private Integer userId; + + @ApiModelProperty(value = "商户ID") + @QueryField(type = QueryType.EQ) + private Integer merchantId; + + @ApiModelProperty(value = "备注") + private String comments; + + @ApiModelProperty(value = "状态") + @QueryField(type = QueryType.EQ) + private Integer status; + + @ApiModelProperty(value = "排序号") + @QueryField(type = QueryType.EQ) + private Integer sortNumber; + +} diff --git a/src/main/java/com/gxwebsoft/booking/param/PeriodParam.java b/src/main/java/com/gxwebsoft/booking/param/PeriodParam.java index 442c1e1..9b93a6e 100644 --- a/src/main/java/com/gxwebsoft/booking/param/PeriodParam.java +++ b/src/main/java/com/gxwebsoft/booking/param/PeriodParam.java @@ -84,4 +84,8 @@ public class PeriodParam extends BaseParam { @QueryField(type = QueryType.EQ) private Integer half; + @ApiModelProperty(value = "商户编号") + @QueryField(type = QueryType.EQ) + private String merchantCode; + } diff --git a/src/main/java/com/gxwebsoft/booking/param/UserCouponParam.java b/src/main/java/com/gxwebsoft/booking/param/UserCouponParam.java new file mode 100644 index 0000000..02f1b52 --- /dev/null +++ b/src/main/java/com/gxwebsoft/booking/param/UserCouponParam.java @@ -0,0 +1,100 @@ +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-22 22:41:17 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@JsonInclude(JsonInclude.Include.NON_NULL) +@ApiModel(value = "UserCouponParam对象", description = "我的优惠券查询参数") +public class UserCouponParam extends BaseParam { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "id") + @QueryField(type = QueryType.EQ) + private Integer id; + + @ApiModelProperty(value = "优惠劵id") + @QueryField(type = QueryType.EQ) + private Integer couponId; + + @ApiModelProperty(value = "优惠券名称") + private String name; + + @ApiModelProperty(value = "优惠券类型(10满减券 20折扣券)") + @QueryField(type = QueryType.EQ) + private Integer type; + + @ApiModelProperty(value = "满减券-减免金额") + @QueryField(type = QueryType.EQ) + private BigDecimal reducePrice; + + @ApiModelProperty(value = "折扣券-折扣率(0-100)") + @QueryField(type = QueryType.EQ) + private Integer discount; + + @ApiModelProperty(value = "最低消费金额") + @QueryField(type = QueryType.EQ) + private BigDecimal minPrice; + + @ApiModelProperty(value = "到期类型(10领取后生效 20固定时间)") + @QueryField(type = QueryType.EQ) + private Integer expireType; + + @ApiModelProperty(value = "领取后生效-有效天数") + @QueryField(type = QueryType.EQ) + private Integer expireDay; + + @ApiModelProperty(value = "有效期开始时间") + @QueryField(type = QueryType.EQ) + private Integer startTime; + + @ApiModelProperty(value = "有效期结束时间") + @QueryField(type = QueryType.EQ) + private Integer endTime; + + @ApiModelProperty(value = "适用范围(10全部商品 20指定商品)") + @QueryField(type = QueryType.EQ) + private Integer applyRange; + + @ApiModelProperty(value = "适用范围配置(json格式)") + private String applyRangeConfig; + + @ApiModelProperty(value = "是否过期(0未过期 1已过期)") + @QueryField(type = QueryType.EQ) + private Integer isExpire; + + @ApiModelProperty(value = "是否已使用(0未使用 1已使用)") + @QueryField(type = QueryType.EQ) + private Integer isUse; + + @ApiModelProperty(value = "排序(数字越小越靠前)") + @QueryField(type = QueryType.EQ) + private Integer sortNumber; + + @ApiModelProperty(value = "状态, 0待使用, 1已使用, 2已失效") + @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 userId; + +} diff --git a/src/main/java/com/gxwebsoft/booking/service/EmergencyService.java b/src/main/java/com/gxwebsoft/booking/service/EmergencyService.java new file mode 100644 index 0000000..c8b683d --- /dev/null +++ b/src/main/java/com/gxwebsoft/booking/service/EmergencyService.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.Emergency; +import com.gxwebsoft.booking.param.EmergencyParam; + +import java.util.List; + +/** + * 紧急联系人管理Service + * + * @author 科技小王子 + * @since 2024-05-22 21:24:59 + */ +public interface EmergencyService extends IService { + + /** + * 分页关联查询 + * + * @param param 查询参数 + * @return PageResult + */ + PageResult pageRel(EmergencyParam param); + + /** + * 关联查询全部 + * + * @param param 查询参数 + * @return List + */ + List listRel(EmergencyParam param); + + /** + * 根据id查询 + * + * @param emergencyId ID + * @return Emergency + */ + Emergency getByIdRel(Integer emergencyId); + +} diff --git a/src/main/java/com/gxwebsoft/booking/service/UserCouponService.java b/src/main/java/com/gxwebsoft/booking/service/UserCouponService.java new file mode 100644 index 0000000..3c4c506 --- /dev/null +++ b/src/main/java/com/gxwebsoft/booking/service/UserCouponService.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.UserCoupon; +import com.gxwebsoft.booking.param.UserCouponParam; + +import java.util.List; + +/** + * 我的优惠券Service + * + * @author 科技小王子 + * @since 2024-05-22 22:41:17 + */ +public interface UserCouponService extends IService { + + /** + * 分页关联查询 + * + * @param param 查询参数 + * @return PageResult + */ + PageResult pageRel(UserCouponParam param); + + /** + * 关联查询全部 + * + * @param param 查询参数 + * @return List + */ + List listRel(UserCouponParam param); + + /** + * 根据id查询 + * + * @param id id + * @return UserCoupon + */ + UserCoupon getByIdRel(Integer id); + +} diff --git a/src/main/java/com/gxwebsoft/booking/service/impl/EmergencyServiceImpl.java b/src/main/java/com/gxwebsoft/booking/service/impl/EmergencyServiceImpl.java new file mode 100644 index 0000000..f94cbe0 --- /dev/null +++ b/src/main/java/com/gxwebsoft/booking/service/impl/EmergencyServiceImpl.java @@ -0,0 +1,47 @@ +package com.gxwebsoft.booking.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.gxwebsoft.booking.mapper.EmergencyMapper; +import com.gxwebsoft.booking.service.EmergencyService; +import com.gxwebsoft.booking.entity.Emergency; +import com.gxwebsoft.booking.param.EmergencyParam; +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-22 21:24:59 + */ +@Service +public class EmergencyServiceImpl extends ServiceImpl implements EmergencyService { + + @Override + public PageResult pageRel(EmergencyParam 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(EmergencyParam param) { + List list = baseMapper.selectListRel(param); + // 排序 + PageParam page = new PageParam<>(); + page.setDefaultOrder("sort_number asc, create_time desc"); + return page.sortRecords(list); + } + + @Override + public Emergency getByIdRel(Integer emergencyId) { + EmergencyParam param = new EmergencyParam(); + param.setEmergencyId(emergencyId); + return param.getOne(baseMapper.selectListRel(param)); + } + +} diff --git a/src/main/java/com/gxwebsoft/booking/service/impl/FieldServiceImpl.java b/src/main/java/com/gxwebsoft/booking/service/impl/FieldServiceImpl.java index b8e9331..cdb4cf5 100644 --- a/src/main/java/com/gxwebsoft/booking/service/impl/FieldServiceImpl.java +++ b/src/main/java/com/gxwebsoft/booking/service/impl/FieldServiceImpl.java @@ -1,6 +1,7 @@ package com.gxwebsoft.booking.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.gxwebsoft.booking.entity.Field; import com.gxwebsoft.booking.entity.Period; @@ -16,6 +17,7 @@ import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import javax.annotation.Resource; +import java.time.LocalDateTime; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -48,6 +50,18 @@ public class FieldServiceImpl extends ServiceImpl implements // 排序 PageParam page = new PageParam<>(); page.setDefaultOrder("sort_number desc, create_time desc"); + + // 是否查询场地预定信息 +// if (param.getSceneType() != null && param.getSceneType().equals("showSoldStatus")) { +// final List orderInfoList = orderInfoService.list(new LambdaUpdateWrapper().eq(OrderInfo::getExpirationTime, LocalDateTime.now()).eq(OrderInfo::getDateTime, param.getDateTime())); +// Map> collect = orderInfoList.stream().collect(Collectors.groupingBy(OrderInfo::getFieldId)); +// list.forEach(d -> { +// List orderInfos = collect.get(d.getFieldId()); +// if (!CollectionUtils.isEmpty(orderInfos)) { +// d.setSold(true); +// } +// }); +// } return page.sortRecords(list); } diff --git a/src/main/java/com/gxwebsoft/booking/service/impl/UserCouponServiceImpl.java b/src/main/java/com/gxwebsoft/booking/service/impl/UserCouponServiceImpl.java new file mode 100644 index 0000000..ab78a1d --- /dev/null +++ b/src/main/java/com/gxwebsoft/booking/service/impl/UserCouponServiceImpl.java @@ -0,0 +1,47 @@ +package com.gxwebsoft.booking.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.gxwebsoft.booking.mapper.UserCouponMapper; +import com.gxwebsoft.booking.service.UserCouponService; +import com.gxwebsoft.booking.entity.UserCoupon; +import com.gxwebsoft.booking.param.UserCouponParam; +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-22 22:41:17 + */ +@Service +public class UserCouponServiceImpl extends ServiceImpl implements UserCouponService { + + @Override + public PageResult pageRel(UserCouponParam 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(UserCouponParam param) { + List list = baseMapper.selectListRel(param); + // 排序 + PageParam page = new PageParam<>(); + page.setDefaultOrder("sort_number asc, create_time desc"); + return page.sortRecords(list); + } + + @Override + public UserCoupon getByIdRel(Integer id) { + UserCouponParam param = new UserCouponParam(); + param.setId(id); + return param.getOne(baseMapper.selectListRel(param)); + } + +} diff --git a/src/main/java/com/gxwebsoft/booking/vo/PushMessageVO.java b/src/main/java/com/gxwebsoft/booking/vo/PushMessageVO.java new file mode 100644 index 0000000..291b6ef --- /dev/null +++ b/src/main/java/com/gxwebsoft/booking/vo/PushMessageVO.java @@ -0,0 +1,36 @@ +package com.gxwebsoft.booking.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Builder; +import lombok.Data; + +import java.io.Serializable; +import java.util.Set; + +@Data +@Builder +public class PushMessageVO implements Serializable { + + @ApiModelProperty("推送消息") + private String title; + + @ApiModelProperty("推送消息内容") + private String content; + + private Set userIds; + + + @ApiModelProperty("推送透传数据obj格式") + private Payload payload; + + + private Set push_clientid; + + + @Data + public static class Payload { + private String type; + private Object data; + } + +} diff --git a/src/main/java/com/gxwebsoft/booking/vo/UserCouponVO.java b/src/main/java/com/gxwebsoft/booking/vo/UserCouponVO.java new file mode 100644 index 0000000..c585314 --- /dev/null +++ b/src/main/java/com/gxwebsoft/booking/vo/UserCouponVO.java @@ -0,0 +1,28 @@ +package com.gxwebsoft.booking.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Builder; +import lombok.Data; + +import java.io.Serializable; +import java.util.Set; + +@Data +@Builder +public class UserCouponVO implements Serializable { + + @ApiModelProperty("待使用数量") + private Integer toBeUsed; + + @ApiModelProperty("已使用数量") + private Integer used; + + @ApiModelProperty("已失效数量") + private Integer invalid; + @Data + public static class Payload { + private Integer toBeUsed; + private Integer used; + private Integer invalid; + } +} diff --git a/src/main/java/com/gxwebsoft/common/core/config/MybatisPlusConfig.java b/src/main/java/com/gxwebsoft/common/core/config/MybatisPlusConfig.java index f9d893a..1136b48 100644 --- a/src/main/java/com/gxwebsoft/common/core/config/MybatisPlusConfig.java +++ b/src/main/java/com/gxwebsoft/common/core/config/MybatisPlusConfig.java @@ -63,7 +63,9 @@ public class MybatisPlusConfig { "sys_tenant", "sys_dictionary", "sys_dictionary_data", - "apps_test_data" + "apps_test_data", + "shop_order", + "shop_order_info" ).contains(tableName); } }; diff --git a/src/main/java/com/gxwebsoft/shop/controller/OrderController.java b/src/main/java/com/gxwebsoft/shop/controller/OrderController.java index 7b6400a..a8c2761 100644 --- a/src/main/java/com/gxwebsoft/shop/controller/OrderController.java +++ b/src/main/java/com/gxwebsoft/shop/controller/OrderController.java @@ -4,6 +4,8 @@ import cn.hutool.core.date.DateField; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.gxwebsoft.common.core.web.BaseController; import com.gxwebsoft.shop.entity.OrderInfo; import com.gxwebsoft.shop.service.OrderInfoService; @@ -18,6 +20,7 @@ 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.aspectj.weaver.ast.Or; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; @@ -91,6 +94,7 @@ public class OrderController extends BaseController { if(order.getOrderId() != null){ Order order1 = orderService.getByIdRel(order.getOrderId()); order1.setOpenid(loginUser.getOpenid()); + order.setOrderNo(Long.toString(IdUtil.getSnowflakeNextId())); System.out.println("已下过订单 = " + order1); // 微信统一下单接口 if (order.getPayType().equals(1)) { @@ -133,6 +137,10 @@ public class OrderController extends BaseController { @ApiOperation("修改订单") @PutMapping() public ApiResult update(@RequestBody Order order) { + if(order.getOrderStatus().equals(2)){ + order.setExpirationTime(DateUtil.date()); + orderInfoService.update(new LambdaUpdateWrapper().eq(OrderInfo::getOrderId,order.getOrderId()).set(OrderInfo::getExpirationTime,DateUtil.date())); + } if (orderService.updateById(order)) { return success("操作成功"); } diff --git a/src/main/java/com/gxwebsoft/shop/controller/WxPayNotifyController.java b/src/main/java/com/gxwebsoft/shop/controller/WxPayNotifyController.java index a54a4fb..8705bb3 100644 --- a/src/main/java/com/gxwebsoft/shop/controller/WxPayNotifyController.java +++ b/src/main/java/com/gxwebsoft/shop/controller/WxPayNotifyController.java @@ -1,12 +1,18 @@ package com.gxwebsoft.shop.controller; +import cn.hutool.core.date.DateField; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.gxwebsoft.common.core.config.ConfigProperties; import com.gxwebsoft.common.core.utils.RedisUtil; import com.gxwebsoft.common.core.web.BaseController; import com.gxwebsoft.shop.entity.Order; +import com.gxwebsoft.shop.entity.OrderInfo; import com.gxwebsoft.shop.entity.Payment; +import com.gxwebsoft.shop.service.OrderInfoService; import com.gxwebsoft.shop.service.OrderService; import com.wechat.pay.java.core.notification.NotificationConfig; import com.wechat.pay.java.core.notification.NotificationParser; @@ -20,6 +26,7 @@ import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.math.BigDecimal; import java.text.DecimalFormat; +import java.util.List; import java.util.Map; /** @@ -37,6 +44,8 @@ public class WxPayNotifyController extends BaseController { @Resource private OrderService orderService; @Resource + private OrderInfoService orderInfoService; + @Resource private RedisUtil redisUtil; @Resource private ConfigProperties conf; @@ -100,24 +109,21 @@ public class WxPayNotifyController extends BaseController { // 1. 查询要处理的订单 Order order = orderService.getByOutTradeNo(outTradeNo); // 2. 已支付则跳过 - if (order.getPayStatus().equals(true)) { + if (order.getPayStatus().equals(1)) { return "SUCCESS"; } // 2. 未支付则处理更新订单状态 - if (order.getPayStatus().equals(false)) { + if (order.getPayStatus().equals(0)) { // 5. TODO 处理订单状态 order.setPayTime(DateUtil.date()); order.setPayStatus(1); order.setTransactionId(transactionId); - // 实际付款金额:Integer除以100后转BigDecimal - DecimalFormat df = new DecimalFormat("0.00"); - final String format = df.format(total / 100); - order.setPayPrice(new BigDecimal(format)); - System.out.println("实际付款金额 = " + order); + order.setPayPrice(new BigDecimal(NumberUtil.decimalFormat("0.00", total * 0.01))); + order.setExpirationTime(DateUtil.offset(DateUtil.date(), DateField.YEAR, 10)); + System.out.println("实际付款金额 = " + order.getPayPrice()); orderService.updateByOutTradeNo(order); // 6. TODO 同步更新订单明细的支付状态 - - + orderInfoService.updateByOutTradeNo(order); return "SUCCESS"; } } diff --git a/src/main/java/com/gxwebsoft/shop/entity/Order.java b/src/main/java/com/gxwebsoft/shop/entity/Order.java index 6f595ec..f91788d 100644 --- a/src/main/java/com/gxwebsoft/shop/entity/Order.java +++ b/src/main/java/com/gxwebsoft/shop/entity/Order.java @@ -30,6 +30,9 @@ public class Order implements Serializable { @TableId(value = "order_id", type = IdType.AUTO) private Integer orderId; + @ApiModelProperty(value = "订单类型,0商城订单 1客户预定 2俱乐部训练场 3活动订场") + private Integer type; + @ApiModelProperty(value = "订单编号") private String orderNo; diff --git a/src/main/java/com/gxwebsoft/shop/entity/OrderInfo.java b/src/main/java/com/gxwebsoft/shop/entity/OrderInfo.java index ddfc553..eb37932 100644 --- a/src/main/java/com/gxwebsoft/shop/entity/OrderInfo.java +++ b/src/main/java/com/gxwebsoft/shop/entity/OrderInfo.java @@ -37,6 +37,10 @@ public class OrderInfo implements Serializable { @ApiModelProperty(value = "关联订单表id") private Integer orderId; + @ApiModelProperty(value = "订单编号") + @TableField(exist = false) + private String orderNo; + @ApiModelProperty(value = "组合数据:日期+时间段+场馆id+场地id") private String orderCode; @@ -67,6 +71,10 @@ public class OrderInfo implements Serializable { @ApiModelProperty(value = "0 未付款 1已付款,2无需付款或占用状态") private Integer payStatus; + @ApiModelProperty(value = "0未使用,1已完成,2已取消,3取消中,4退款申请中,5退款被拒绝,6退款成功,7客户端申请退款") + @TableField(exist = false) + private Integer orderStatus; + @ApiModelProperty(value = "是否免费:0收费、1免费") private Boolean isFree; diff --git a/src/main/java/com/gxwebsoft/shop/entity/Users.java b/src/main/java/com/gxwebsoft/shop/entity/Users.java index 8eee8a8..17f5459 100644 --- a/src/main/java/com/gxwebsoft/shop/entity/Users.java +++ b/src/main/java/com/gxwebsoft/shop/entity/Users.java @@ -28,7 +28,7 @@ public class Users implements Serializable { private static final long serialVersionUID = 1L; @TableId(value = "user_id", type = IdType.AUTO) - private Integer userId; + private Integer uid; @ApiModelProperty(value = "用户唯一小程序id") private String openid; diff --git a/src/main/java/com/gxwebsoft/shop/mapper/OrderInfoMapper.java b/src/main/java/com/gxwebsoft/shop/mapper/OrderInfoMapper.java index 5aa9dea..e27b470 100644 --- a/src/main/java/com/gxwebsoft/shop/mapper/OrderInfoMapper.java +++ b/src/main/java/com/gxwebsoft/shop/mapper/OrderInfoMapper.java @@ -1,9 +1,13 @@ package com.gxwebsoft.shop.mapper; +import com.baomidou.mybatisplus.annotation.InterceptorIgnore; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; +import com.github.yulichang.base.MPJBaseMapper; +import com.gxwebsoft.shop.entity.Order; import com.gxwebsoft.shop.entity.OrderInfo; import com.gxwebsoft.shop.param.OrderInfoParam; +import com.gxwebsoft.shop.param.OrderParam; import org.apache.ibatis.annotations.Param; import java.util.List; @@ -14,7 +18,7 @@ import java.util.List; * @author 科技小王子 * @since 2024-05-14 13:20:04 */ -public interface OrderInfoMapper extends BaseMapper { +public interface OrderInfoMapper extends MPJBaseMapper { /** * 分页查询 @@ -34,4 +38,7 @@ public interface OrderInfoMapper extends BaseMapper { */ List selectListRel(@Param("param") OrderInfoParam param); + @InterceptorIgnore(tenantLine = "true") + void updateByOutTradeNo(@Param("param") Order order); + } diff --git a/src/main/java/com/gxwebsoft/shop/mapper/xml/OrderInfoMapper.xml b/src/main/java/com/gxwebsoft/shop/mapper/xml/OrderInfoMapper.xml index 0e40748..a9eea17 100644 --- a/src/main/java/com/gxwebsoft/shop/mapper/xml/OrderInfoMapper.xml +++ b/src/main/java/com/gxwebsoft/shop/mapper/xml/OrderInfoMapper.xml @@ -4,7 +4,7 @@ - SELECT a.*, b.pay_status + SELECT a.*, b.pay_status,b.order_status,b.order_no FROM shop_order_info a LEFT JOIN shop_order b ON a.order_id = b.order_id @@ -103,4 +103,9 @@ + + + diff --git a/src/main/java/com/gxwebsoft/shop/mapper/xml/OrderMapper.xml b/src/main/java/com/gxwebsoft/shop/mapper/xml/OrderMapper.xml index 5e518df..c04650e 100644 --- a/src/main/java/com/gxwebsoft/shop/mapper/xml/OrderMapper.xml +++ b/src/main/java/com/gxwebsoft/shop/mapper/xml/OrderMapper.xml @@ -172,7 +172,7 @@ diff --git a/src/main/java/com/gxwebsoft/shop/mapper/xml/UsersMapper.xml b/src/main/java/com/gxwebsoft/shop/mapper/xml/UsersMapper.xml index d0cef28..027b136 100644 --- a/src/main/java/com/gxwebsoft/shop/mapper/xml/UsersMapper.xml +++ b/src/main/java/com/gxwebsoft/shop/mapper/xml/UsersMapper.xml @@ -7,8 +7,8 @@ SELECT a.* FROM shop_users a - - AND a.user_id = #{param.userId} + + AND a.uid = #{param.uid} AND a.openid LIKE CONCAT('%', #{param.openid}, '%') diff --git a/src/main/java/com/gxwebsoft/shop/param/OrderInfoParam.java b/src/main/java/com/gxwebsoft/shop/param/OrderInfoParam.java index c2e3a48..9d04e24 100644 --- a/src/main/java/com/gxwebsoft/shop/param/OrderInfoParam.java +++ b/src/main/java/com/gxwebsoft/shop/param/OrderInfoParam.java @@ -1,6 +1,8 @@ package com.gxwebsoft.shop.param; import java.math.BigDecimal; +import java.util.Date; + import com.gxwebsoft.common.core.annotation.QueryField; import com.gxwebsoft.common.core.annotation.QueryType; import com.gxwebsoft.common.core.web.BaseParam; @@ -106,4 +108,8 @@ public class OrderInfoParam extends BaseParam { @QueryField(type = QueryType.EQ) private Integer userId; + @ApiModelProperty(value = "当前时间") + @QueryField(type = QueryType.GT) + private Date expirationTime; + } diff --git a/src/main/java/com/gxwebsoft/shop/param/OrderParam.java b/src/main/java/com/gxwebsoft/shop/param/OrderParam.java index 798318f..97aacb3 100644 --- a/src/main/java/com/gxwebsoft/shop/param/OrderParam.java +++ b/src/main/java/com/gxwebsoft/shop/param/OrderParam.java @@ -29,6 +29,9 @@ public class OrderParam extends BaseParam { @QueryField(type = QueryType.EQ) private Integer orderId; + @ApiModelProperty(value = "订单类型,0商城订单 1客户预定 2俱乐部训练场 3活动订场") + private Integer type; + @ApiModelProperty(value = "订单编号") @QueryField(type = QueryType.EQ) private String orderNo; diff --git a/src/main/java/com/gxwebsoft/shop/param/UsersParam.java b/src/main/java/com/gxwebsoft/shop/param/UsersParam.java index bde2ae0..c9d8397 100644 --- a/src/main/java/com/gxwebsoft/shop/param/UsersParam.java +++ b/src/main/java/com/gxwebsoft/shop/param/UsersParam.java @@ -24,7 +24,7 @@ public class UsersParam extends BaseParam { private static final long serialVersionUID = 1L; @QueryField(type = QueryType.EQ) - private Integer userId; + private Integer uid; @ApiModelProperty(value = "用户唯一小程序id") private String openid; diff --git a/src/main/java/com/gxwebsoft/shop/service/OrderInfoService.java b/src/main/java/com/gxwebsoft/shop/service/OrderInfoService.java index 53109f9..54b8426 100644 --- a/src/main/java/com/gxwebsoft/shop/service/OrderInfoService.java +++ b/src/main/java/com/gxwebsoft/shop/service/OrderInfoService.java @@ -1,7 +1,9 @@ package com.gxwebsoft.shop.service; import com.baomidou.mybatisplus.extension.service.IService; +import com.gxwebsoft.booking.param.PeriodParam; import com.gxwebsoft.common.core.web.PageResult; +import com.gxwebsoft.shop.entity.Order; import com.gxwebsoft.shop.entity.OrderInfo; import com.gxwebsoft.shop.param.OrderInfoParam; @@ -39,4 +41,8 @@ public interface OrderInfoService extends IService { */ OrderInfo getByIdRel(Integer id); + void updateByOutTradeNo(Order order); + + List getTodayOrder(PeriodParam param); + } diff --git a/src/main/java/com/gxwebsoft/shop/service/impl/OrderInfoServiceImpl.java b/src/main/java/com/gxwebsoft/shop/service/impl/OrderInfoServiceImpl.java index 8d1b0f7..5468fd4 100644 --- a/src/main/java/com/gxwebsoft/shop/service/impl/OrderInfoServiceImpl.java +++ b/src/main/java/com/gxwebsoft/shop/service/impl/OrderInfoServiceImpl.java @@ -1,6 +1,12 @@ package com.gxwebsoft.shop.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.github.yulichang.toolkit.JoinWrappers; +import com.github.yulichang.wrapper.MPJLambdaWrapper; +import com.gxwebsoft.booking.param.PeriodParam; +import com.gxwebsoft.common.system.entity.User; +import com.gxwebsoft.shop.entity.ChatConversation; +import com.gxwebsoft.shop.entity.Order; import com.gxwebsoft.shop.mapper.OrderInfoMapper; import com.gxwebsoft.shop.service.OrderInfoService; import com.gxwebsoft.shop.entity.OrderInfo; @@ -9,6 +15,7 @@ import com.gxwebsoft.common.core.web.PageParam; import com.gxwebsoft.common.core.web.PageResult; import org.springframework.stereotype.Service; +import java.time.LocalDateTime; import java.util.List; /** @@ -44,4 +51,24 @@ public class OrderInfoServiceImpl extends ServiceImpl getTodayOrder(PeriodParam param) { + // 多表查询 + MPJLambdaWrapper mpjLambdaWrapper = new MPJLambdaWrapper<>(); + mpjLambdaWrapper.selectAll(OrderInfo.class) + .select(Order::getOrderNo) + .select(Order::getOrderStatus) + .leftJoin(Order.class,Order::getOrderId,OrderInfo::getOrderId) + .eq(OrderInfo::getDateTime,param.getDateTime()) + .eq(OrderInfo::getMerchantId,param.getMerchantId()) + .eq(Order::getOrderStatus,0) + .gt(OrderInfo::getExpirationTime, LocalDateTime.now()); + return baseMapper.selectJoinList(OrderInfo.class, mpjLambdaWrapper); + } + } 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 22efe4c..d288841 100644 --- a/src/main/java/com/gxwebsoft/shop/service/impl/OrderServiceImpl.java +++ b/src/main/java/com/gxwebsoft/shop/service/impl/OrderServiceImpl.java @@ -86,30 +86,38 @@ public class OrderServiceImpl extends ServiceImpl implements return new PageResult<>(list, page.getTotal()); } - @Override - public List listRel(OrderParam param) { - List list = baseMapper.selectListRel(param); - // 排序 - PageParam page = new PageParam<>(); - page.setDefaultOrder("sort_number asc, create_time desc"); - return page.sortRecords(list); - } + @Override + public List listRel(OrderParam param) { + List list = baseMapper.selectListRel(param); + // 排序 + PageParam page = new PageParam<>(); + page.setDefaultOrder("sort_number asc, create_time desc"); + return page.sortRecords(list); + } - @Override - public Order getByIdRel(Integer orderId) { - OrderParam param = new OrderParam(); - param.setOrderId(orderId); - Order order = param.getOne(baseMapper.selectListRel(param)); - if(order != null){ - final OrderInfoParam orderInfoParam = new OrderInfoParam(); - orderInfoParam.setOrderId(orderId); - order.setOrderInfoList(orderInfoService.listRel(orderInfoParam)); - } + @Override + public Order getByIdRel(Integer orderId) { + OrderParam param = new OrderParam(); + param.setOrderId(orderId); + Order order = param.getOne(baseMapper.selectListRel(param)); + if (order != null) { + final List list = orderInfoService.list(new LambdaQueryWrapper().eq(OrderInfo::getOrderId, orderId)); + order.setOrderInfoList(list); + if (!CollectionUtils.isEmpty(list)) { + final OrderInfo orderInfo = list.get(0); + final int i = orderInfo.getDateTime().compareTo(DateUtil.today()); + System.out.println("order = " + orderInfo.getDateTime()); + System.out.println("DateUtil.today() = " + DateUtil.today()); + System.out.println("iiiiiiii = " + i); + } return order; } + return null; + } /** * 创建微信支付 + * * @param order * @return */ @@ -131,7 +139,7 @@ public class OrderServiceImpl extends ServiceImpl implements String privateKey = uploadPath.concat("/file").concat(payment.getApiclientKey()); // 秘钥证书 String apiclientCert = uploadPath.concat("/file").concat(payment.getApiclientCert()); // 开发环境配置 - if(active.equals("dev")){ + if (active.equals("dev")) { privateKey = privateKeyPath; apiclientCert = wechatpayCertPath; } @@ -160,21 +168,22 @@ public class OrderServiceImpl extends ServiceImpl implements payer.setOpenid(order.getOpenid()); request.setPayer(payer); // 测试环境 - if(active.equals("dev")){ + if (active.equals("dev")) { amount.setTotal(1); request.setAmount(amount); - request.setNotifyUrl("https://server.gxwebsoft.com/api/system/wx-pay/notify/" + order.getTenantId()); // 默认回调地址 + request.setNotifyUrl("http://jimei-api.natapp1.cc/api/shop/wx-pay/notify/" + order.getTenantId()); // 默认回调地址 } // 生成环境 - if(active.equals("prod")){ - amount.setTotal(10); + if (active.equals("prod")) { + amount.setTotal(2); request.setAmount(amount); - request.setNotifyUrl("https://server.gxwebsoft.com/api/system/wx-pay/notify/" + order.getTenantId()); // 默认回调地址 + request.setNotifyUrl("https://modules.gxwebsoft.com/api/shop/wx-pay/notify/" + order.getTenantId()); // 默认回调地址 } if (StrUtil.isNotBlank(payment.getNotifyUrl())) { // 后台配置的回调地址 request.setNotifyUrl(payment.getNotifyUrl().concat("/").concat(order.getTenantId().toString())); } + System.out.println("request = " + request); PrepayWithRequestPaymentResponse response = service.prepayWithRequestPayment(request); orderInfo.put("provider", "wxpay"); orderInfo.put("timeStamp", response.getTimeStamp()); diff --git a/src/main/java/com/gxwebsoft/shop/service/impl/UsersServiceImpl.java b/src/main/java/com/gxwebsoft/shop/service/impl/UsersServiceImpl.java index a5d8448..b0cdc0a 100644 --- a/src/main/java/com/gxwebsoft/shop/service/impl/UsersServiceImpl.java +++ b/src/main/java/com/gxwebsoft/shop/service/impl/UsersServiceImpl.java @@ -37,9 +37,9 @@ public class UsersServiceImpl extends ServiceImpl implements } @Override - public Users getByIdRel(Integer userId) { + public Users getByIdRel(Integer uid) { UsersParam param = new UsersParam(); - param.setUserId(userId); + param.setUid(uid); return param.getOne(baseMapper.selectListRel(param)); } diff --git a/src/main/java/com/gxwebsoft/shop/task/OrderInfoTask.java b/src/main/java/com/gxwebsoft/shop/task/OrderInfoTask.java new file mode 100644 index 0000000..5cee700 --- /dev/null +++ b/src/main/java/com/gxwebsoft/shop/task/OrderInfoTask.java @@ -0,0 +1,43 @@ +package com.gxwebsoft.shop.task; + +import cn.hutool.core.date.DateUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.gxwebsoft.cms.entity.ServerTimeVO; +import com.gxwebsoft.common.core.web.BaseController; +import com.gxwebsoft.shop.entity.Order; +import com.gxwebsoft.shop.entity.OrderInfo; +import com.gxwebsoft.shop.mapper.OrderMapper; +import com.gxwebsoft.shop.param.OrderParam; +import com.gxwebsoft.shop.service.OrderInfoService; +import io.swagger.annotations.Api; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import java.util.List; + +/** + * 订单结算任务 + * + * @author 科技小王子 + * @since 2024-05-14 13:20:04 + */ +@Api(tags = "订单结算任务") +@RestController +@RequestMapping("/api/shop/order-info") +public class OrderInfoTask extends BaseController { + @Resource + private OrderInfoService orderInfoService; + /** + * 自动处理过期订单任务 + */ +// @Scheduled(cron="*/10 * * * * *") +// @Transactional(rollbackFor = {Exception.class}) + public void settledExpirationOrder() { +// final List list = orderInfoService.list(new LambdaQueryWrapper().eq(OrderInfo::getOrderStatus, 0)); + + } +} diff --git a/src/main/java/com/gxwebsoft/shop/controller/OrderTaskController.java b/src/main/java/com/gxwebsoft/shop/task/OrderTask.java similarity index 73% rename from src/main/java/com/gxwebsoft/shop/controller/OrderTaskController.java rename to src/main/java/com/gxwebsoft/shop/task/OrderTask.java index beec244..69a9e57 100644 --- a/src/main/java/com/gxwebsoft/shop/controller/OrderTaskController.java +++ b/src/main/java/com/gxwebsoft/shop/task/OrderTask.java @@ -1,13 +1,10 @@ -package com.gxwebsoft.shop.controller; +package com.gxwebsoft.shop.task; import cn.hutool.core.date.DateUtil; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.gxwebsoft.common.core.web.BaseController; import com.gxwebsoft.shop.entity.Order; import com.gxwebsoft.shop.mapper.OrderMapper; import com.gxwebsoft.shop.param.OrderParam; -import com.gxwebsoft.shop.service.OrderInfoService; -import com.gxwebsoft.shop.service.OrderService; import io.swagger.annotations.Api; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.transaction.annotation.Transactional; @@ -26,25 +23,22 @@ import java.util.List; @Api(tags = "订单结算任务") @RestController @RequestMapping("/api/shop/order") -public class OrderTaskController extends BaseController { +public class OrderTask extends BaseController { @Resource private OrderMapper orderMapper; - @Resource - private OrderInfoService orderInfoService; /** * 自动处理过期订单任务 */ @Scheduled(fixedDelay = 2000, initialDelay = 2000) @Transactional(rollbackFor = {Exception.class}) - public void settledUserPlanLog() { + public void settledExpirationOrder() { final OrderParam p = new OrderParam(); p.setOrderStatus(0); p.setExpirationTime(DateUtil.date()); final List list = orderMapper.selectExpirationOrder(p); list.forEach(d -> { - System.out.println("自动处理过期订单任务 = " + d); + System.out.println("任务1:处理未支付订单超时自动关闭 = " + d); orderMapper.updateExpirationOrder(d.getOrderId()); }); } - } diff --git a/src/test/java/com/gxwebsoft/TestMain.java b/src/test/java/com/gxwebsoft/TestMain.java index c3a88d8..0b07275 100644 --- a/src/test/java/com/gxwebsoft/TestMain.java +++ b/src/test/java/com/gxwebsoft/TestMain.java @@ -1,8 +1,14 @@ package com.gxwebsoft; +import cn.hutool.core.util.NumberUtil; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; +import java.math.BigDecimal; +import java.text.DecimalFormat; +import java.text.NumberFormat; +import java.text.ParseException; + /** * Created by WebSoft on 2020-03-23 23:37 */ @@ -13,6 +19,9 @@ public class TestMain { */ @Test public void testGenJwtKey() { + + BigDecimal bigDecimal = new BigDecimal(NumberUtil.decimalFormat("0.00", 1 * 0.01)); + System.out.println("实际付款金额 = " + bigDecimal); // System.out.println(JwtUtil.encodeKey(JwtUtil.randomKey())); // final String encrypt = CommonUtil.encrypt("123456"); @@ -21,4 +30,20 @@ public class TestMain { // final String decrypt = CommonUtil.decrypt(encrypt); // System.out.println("decrypt = " + decrypt); } + + + private String fenToYuan(String amount){ + NumberFormat format = NumberFormat.getInstance(); + try{ + Number number = format.parse(amount); + double temp = number.doubleValue() / 100.0; + format.setGroupingUsed(false); + // 设置返回的小数部分所允许的最大位数 + format.setMaximumFractionDigits(2); + amount = format.format(temp); + } catch (ParseException e){ + e.printStackTrace(); + } + return amount; + } } diff --git a/src/test/java/com/gxwebsoft/generator/BookingGenerator.java b/src/test/java/com/gxwebsoft/generator/BookingGenerator.java index 26c7365..17d5997 100644 --- a/src/test/java/com/gxwebsoft/generator/BookingGenerator.java +++ b/src/test/java/com/gxwebsoft/generator/BookingGenerator.java @@ -56,6 +56,8 @@ public class BookingGenerator { // "booking_integral", // "booking_integral_log" // "booking_order" +// "booking_emergency", + "user_coupon" }; // 需要去除的表前缀 private static final String[] TABLE_PREFIX = new String[]{ diff --git a/src/test/java/com/gxwebsoft/generator/templates/controller.java.btl b/src/test/java/com/gxwebsoft/generator/templates/controller.java.btl index 4a68f75..7506b53 100644 --- a/src/test/java/com/gxwebsoft/generator/templates/controller.java.btl +++ b/src/test/java/com/gxwebsoft/generator/templates/controller.java.btl @@ -132,10 +132,10 @@ public class ${table.controllerName} { @PostMapping() public ApiResult save(@RequestBody ${entity} ${table.entityPath}) { // 记录当前登录用户id - // User loginUser = getLoginUser(); - // if (loginUser != null) { - // ${table.entityPath}.setUserId(loginUser.getUserId()); - // } + User loginUser = getLoginUser(); + if (loginUser != null) { + ${table.entityPath}.setUserId(loginUser.getUserId()); + } if (${serviceIns}.save(${table.entityPath})) { return success("添加成功"); }