diff --git a/src/main/java/com/gxwebsoft/booking/controller/PeriodController.java b/src/main/java/com/gxwebsoft/booking/controller/PeriodController.java index 512b4e6..380d5b5 100644 --- a/src/main/java/com/gxwebsoft/booking/controller/PeriodController.java +++ b/src/main/java/com/gxwebsoft/booking/controller/PeriodController.java @@ -1,5 +1,6 @@ package com.gxwebsoft.booking.controller; +import cn.hutool.core.date.DateUtil; import com.gxwebsoft.common.core.web.BaseController; import com.gxwebsoft.booking.service.PeriodService; import com.gxwebsoft.booking.entity.Period; @@ -41,7 +42,13 @@ public class PeriodController extends BaseController { @ApiOperation("查询全部场地时段") @GetMapping() public ApiResult> list(PeriodParam param) { - // 使用关联查询 + // 采用服务器时间 + if (param.getStartTime() != null) { + final int hour = DateUtil.hour(DateUtil.date(), true); + final int minute = DateUtil.minute(DateUtil.date()); + final String startTime = String.format("%02d", hour).concat(String.format("%02d", minute)); + param.setStartTime(startTime); + } return success(periodService.listRel(param)); } 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 73ba2b2..8bd6df8 100644 --- a/src/main/java/com/gxwebsoft/booking/mapper/xml/PeriodMapper.xml +++ b/src/main/java/com/gxwebsoft/booking/mapper/xml/PeriodMapper.xml @@ -44,7 +44,7 @@ AND a.is_free = #{param.isFree} - AND a.start_time LIKE CONCAT('%', #{param.startTime}, '%') + AND a.start_time >= #{param.startTime} AND a.comments LIKE CONCAT('%', #{param.comments}, '%') diff --git a/src/main/java/com/gxwebsoft/booking/param/FieldParam.java b/src/main/java/com/gxwebsoft/booking/param/FieldParam.java index 7934943..964186f 100644 --- a/src/main/java/com/gxwebsoft/booking/param/FieldParam.java +++ b/src/main/java/com/gxwebsoft/booking/param/FieldParam.java @@ -31,23 +31,23 @@ public class FieldParam extends BaseParam { @ApiModelProperty(value = "是否有卫生间,1有,2没有") @QueryField(type = QueryType.EQ) - private Boolean isToilet; + private Integer isToilet; @ApiModelProperty(value = "是否关闭,1开启,2关闭") @QueryField(type = QueryType.EQ) - private Boolean isStatus; + private Integer isStatus; @ApiModelProperty(value = "是否重复预订,1可以,2不可以") @QueryField(type = QueryType.EQ) - private Boolean isRepeat; + private Integer isRepeat; @ApiModelProperty(value = "是否可预定半场,1可以,2不可以") @QueryField(type = QueryType.EQ) - private Boolean isHalf; + private Integer isHalf; @ApiModelProperty(value = "是否支持儿童价:1支持,2不支持") @QueryField(type = QueryType.EQ) - private Boolean isChildren; + private Integer isChildren; @ApiModelProperty(value = "可重复预订次数") @QueryField(type = QueryType.EQ) @@ -55,7 +55,7 @@ public class FieldParam extends BaseParam { @ApiModelProperty(value = "显示在第几行") @QueryField(type = QueryType.EQ) - private Boolean row; + private Integer row; @ApiModelProperty(value = "商户ID") @QueryField(type = QueryType.EQ) diff --git a/src/main/java/com/gxwebsoft/cms/controller/WebsiteController.java b/src/main/java/com/gxwebsoft/cms/controller/WebsiteController.java index 88492d5..8736a2a 100644 --- a/src/main/java/com/gxwebsoft/cms/controller/WebsiteController.java +++ b/src/main/java/com/gxwebsoft/cms/controller/WebsiteController.java @@ -1,6 +1,7 @@ package com.gxwebsoft.cms.controller; import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUnit; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.http.HttpRequest; @@ -23,14 +24,21 @@ import com.gxwebsoft.shop.service.MerchantAccountService; import com.gxwebsoft.shop.service.MerchantService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import org.apache.commons.lang3.time.DateUtils; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; -import java.util.HashMap; -import java.util.List; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.time.DayOfWeek; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.util.*; import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; +import java.util.stream.IntStream; /** * 网站信息记录表控制器 @@ -77,7 +85,9 @@ public class WebsiteController extends BaseController { final String siteInfo = redisUtil.get(key); String access_token = JwtUtil.getAccessToken(request); System.out.println("access_token = " + access_token); - + redisUtil.set("Domain:ffai.cn",10157); + redisUtil.set("Domain:www.xn--15qx69a6lbn8t0tlmve.com",10157); + redisUtil.set("Domain:xn--15qx69a6lbn8t0tlmve.com",10157); // 从缓存读取信息 if(StrUtil.isNotBlank(siteInfo)){ return success(JSONObject.parseObject(siteInfo,Website.class)); @@ -257,7 +267,6 @@ public class WebsiteController extends BaseController { website.setUserInfo(user); } - // 授权信息 HashMap config = new HashMap<>(); config.put("LICENSE_CODE", ""); @@ -289,6 +298,68 @@ public class WebsiteController extends BaseController { return success(website); } + @ApiOperation("获取服务器时间") + @GetMapping("/getServerTime") + public ApiResult getServerTime(){ + // 服务器时间 + final ServerTimeVO vo = new ServerTimeVO(); + final int hour = DateUtil.hour(DateUtil.date(), true); + final int minute = DateUtil.minute(DateUtil.date()); + vo.setDate(DateUtil.date()); + vo.setToday(DateUtil.today()); + vo.setHour(hour); + vo.setMinute(minute); + vo.setHourMinute(String.format("%02d", hour).concat(String.format("%02d", minute))); + final int compare = Integer.compare(Integer.valueOf(vo.getHourMinute()), 900); + vo.setIsAfter(compare); +// vo.setHourMinute(String.valueOf(hour).concat(String.valueOf(minute))); + System.out.println("hour = " + hour); +// DateUtil.between(DateUtil.date(), , DateUnit.DAY); + +// HashMap serverTime = new HashMap<>(); +// // 今天日期 +// DateTime date = DateUtil.date(); +// String today= DateUtil.today(); +// // 明天日期 +// final DateTime dateTime = DateUtil.tomorrow(); +// String tomorrow = DateUtil.format(dateTime, "yyyy-MM-dd"); +// // 后天日期 +// final DateTime dateTime2 = DateUtil.offsetDay(date, 2); +// final String afterDay = DateUtil.format(dateTime2, "yyyy-MM-dd"); +// // 今天星期几 +// final int week = DateUtil.thisDayOfWeek(); +// final DateTime nextWeek = DateUtil.nextWeek(); +// serverTime.put("now",DateUtil.now()); +// serverTime.put("today",today); +// serverTime.put("tomorrow",tomorrow); +// serverTime.put("afterDay",afterDay); +// serverTime.put("week",week); +// serverTime.put("nextWeek",nextWeek); + return success(vo); + } + + @ApiOperation("获取未来一周的日期") + @GetMapping("/getNext7day") + public ApiResult getNext7day(){ + List dateList = new ArrayList<>(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + SimpleDateFormat sdf2 = new SimpleDateFormat("MM-dd"); + for (int i = 0; i < 7; i++) { + Date date = DateUtils.addDays(new Date(), +i); + String formatDate = sdf.format(date); + String dateTime = sdf2.format(date); + final Next7dayVO vo = new Next7dayVO(); + vo.setDate(dateTime); + vo.setDateTime(formatDate); + final DateTime parse = DateUtil.parse(formatDate); + int dayOfWeek = DateUtil.dayOfWeek(parse); + vo.setWeek(dayOfWeek - 1); + dateList.add(vo); + } + + return success(dateList); + } + @PreAuthorize("hasAuthority('cms:website:remove')") @ApiOperation("清除缓存") @DeleteMapping("/clearSiteInfo/{key}") diff --git a/src/main/java/com/gxwebsoft/cms/entity/Next7dayVO.java b/src/main/java/com/gxwebsoft/cms/entity/Next7dayVO.java new file mode 100644 index 0000000..6e478a5 --- /dev/null +++ b/src/main/java/com/gxwebsoft/cms/entity/Next7dayVO.java @@ -0,0 +1,37 @@ +package com.gxwebsoft.cms.entity; + +import cn.hutool.core.date.DateTime; +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; + +/** + * 未来7天 + * + * @author 科技小王子 + * @since 2024-05-02 12:22:25 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@ApiModel(value = "未来7天", description = "未来7天") +public class Next7dayVO implements Serializable { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "星期") + private Integer week; + + @ApiModelProperty(value = "日期(月日)") + private String date; + + @ApiModelProperty(value = "日期(年月日)") + private String dateTime; + +} diff --git a/src/main/java/com/gxwebsoft/cms/entity/ServerTimeVO.java b/src/main/java/com/gxwebsoft/cms/entity/ServerTimeVO.java new file mode 100644 index 0000000..a3c43e8 --- /dev/null +++ b/src/main/java/com/gxwebsoft/cms/entity/ServerTimeVO.java @@ -0,0 +1,42 @@ +package com.gxwebsoft.cms.entity; + +import cn.hutool.core.date.DateTime; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import io.swagger.models.auth.In; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; + +/** + * 服务器时间 + * + * @author 科技小王子 + * @since 2024-05-02 12:22:25 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@ApiModel(value = "服务器时间", description = "服务器当前时间及日期") +public class ServerTimeVO implements Serializable { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "今天日期") + private String today; + + @ApiModelProperty(value = "今天是周几") + private DateTime date; + + @ApiModelProperty(value = "当前时间(时)") + private Integer hour; + + @ApiModelProperty(value = "当前时间(分)") + private Integer minute; + + @ApiModelProperty(value = "当期时间(时分)") + private String hourMinute; + + @ApiModelProperty(value = "是否已过时间") + private Integer isAfter; + +} diff --git a/src/main/java/com/gxwebsoft/shop/controller/OrderController.java b/src/main/java/com/gxwebsoft/shop/controller/OrderController.java index 73af0c0..50f792b 100644 --- a/src/main/java/com/gxwebsoft/shop/controller/OrderController.java +++ b/src/main/java/com/gxwebsoft/shop/controller/OrderController.java @@ -1,6 +1,12 @@ package com.gxwebsoft.shop.controller; +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; +import com.alibaba.fastjson.JSONObject; import com.gxwebsoft.common.core.web.BaseController; +import com.gxwebsoft.shop.entity.OrderInfo; +import com.gxwebsoft.shop.service.OrderInfoService; import com.gxwebsoft.shop.service.OrderService; import com.gxwebsoft.shop.entity.Order; import com.gxwebsoft.shop.param.OrderParam; @@ -10,12 +16,21 @@ 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.wechat.pay.java.core.Config; +import com.wechat.pay.java.core.RSAConfig; +import com.wechat.pay.java.service.payments.jsapi.JsapiServiceExtension; +import com.wechat.pay.java.service.payments.jsapi.model.Amount; +import com.wechat.pay.java.service.payments.jsapi.model.Payer; +import com.wechat.pay.java.service.payments.jsapi.model.PrepayRequest; +import com.wechat.pay.java.service.payments.jsapi.model.PrepayWithRequestPaymentResponse; 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.math.BigDecimal; +import java.util.HashMap; import java.util.List; /** @@ -28,89 +43,110 @@ import java.util.List; @RestController @RequestMapping("/api/shop/order") public class OrderController extends BaseController { - @Resource - private OrderService orderService; + @Resource + private OrderService orderService; + @Resource + private OrderInfoService orderInfoService; - @ApiOperation("分页查询预约订单") - @GetMapping("/page") - public ApiResult> page(OrderParam param) { - // 使用关联查询 - return success(orderService.pageRel(param)); - } + @ApiOperation("分页查询预约订单") + @GetMapping("/page") + public ApiResult> page(OrderParam param) { + // 使用关联查询 + return success(orderService.pageRel(param)); + } - @PreAuthorize("hasAuthority('shop:order:list')") - @ApiOperation("查询全部预约订单") - @GetMapping() - public ApiResult> list(OrderParam param) { - // 使用关联查询 - return success(orderService.listRel(param)); - } + @PreAuthorize("hasAuthority('shop:order:list')") + @ApiOperation("查询全部预约订单") + @GetMapping() + public ApiResult> list(OrderParam param) { + // 使用关联查询 + return success(orderService.listRel(param)); + } - @PreAuthorize("hasAuthority('shop:order:list')") - @ApiOperation("根据id查询预约订单") - @GetMapping("/{id}") - public ApiResult get(@PathVariable("id") Integer id) { - // 使用关联查询 - return success(orderService.getByIdRel(id)); - } + @PreAuthorize("hasAuthority('shop:order:list')") + @ApiOperation("根据id查询预约订单") + @GetMapping("/{id}") + public ApiResult get(@PathVariable("id") Integer id) { + // 使用关联查询 + return success(orderService.getByIdRel(id)); + } - @ApiOperation("添加预约订单") - @PostMapping() - public ApiResult save(@RequestBody Order order) { - // 记录当前登录用户id - // User loginUser = getLoginUser(); - // if (loginUser != null) { - // order.setUserId(loginUser.getUserId()); - // } - if (orderService.save(order)) { - return success("添加成功"); - } - return fail("添加失败"); + @ApiOperation("添加预约订单") + @PostMapping() + public ApiResult save(@RequestBody Order order) { + // 记录当前登录用户id + User loginUser = getLoginUser(); + long timeMillis = System.currentTimeMillis(); + long orderNo = IdUtil.getSnowflakeNextId(); + if (loginUser != null) { + order.setUserId(loginUser.getUserId()); + order.setOpenid(loginUser.getOpenid()); } + order.setOrderNo(Long.toString(orderNo)); + order.setName(loginUser.getRealName()); + order.setStartTime(timeMillis / 1000); + order.setAddTime(timeMillis / 1000); + order.setPhone(loginUser.getPhone()); + order.setVersion(10); + if (orderService.save(order)) { + order.getOrderInfoList().forEach(d -> { + d.setOid(order.getOrderId()); + d.setTimeFlag(timeMillis); + d.setVersion(10); + d.setOrderTime(timeMillis / 1000); + }); + orderInfoService.saveBatch(order.getOrderInfoList()); + // 创建微信订单 + if (order.getPayType().equals(1)) { + return success("下单成功",orderService.createWxOrder(order)); + } + } + return fail("下单失败"); + } - @ApiOperation("修改预约订单") - @PutMapping() - public ApiResult update(@RequestBody Order order) { - if (orderService.updateById(order)) { - return success("修改成功"); - } - return fail("修改失败"); + @ApiOperation("修改预约订单") + @PutMapping() + public ApiResult update(@RequestBody Order order) { + if (orderService.updateById(order)) { + return success("修改成功"); } + return fail("修改失败"); + } - @ApiOperation("删除预约订单") - @DeleteMapping("/{id}") - public ApiResult remove(@PathVariable("id") Integer id) { - if (orderService.removeById(id)) { - return success("删除成功"); - } - return fail("删除失败"); + @ApiOperation("删除预约订单") + @DeleteMapping("/{id}") + public ApiResult remove(@PathVariable("id") Integer id) { + if (orderService.removeById(id)) { + return success("删除成功"); } + return fail("删除失败"); + } - @ApiOperation("批量添加预约订单") - @PostMapping("/batch") - public ApiResult saveBatch(@RequestBody List list) { - if (orderService.saveBatch(list)) { - return success("添加成功"); - } - return fail("添加失败"); + @ApiOperation("批量添加预约订单") + @PostMapping("/batch") + public ApiResult saveBatch(@RequestBody List list) { + if (orderService.saveBatch(list)) { + return success("添加成功"); } + return fail("添加失败"); + } - @ApiOperation("批量修改预约订单") - @PutMapping("/batch") - public ApiResult removeBatch(@RequestBody BatchParam batchParam) { - if (batchParam.update(orderService, "order_id")) { - return success("修改成功"); - } - return fail("修改失败"); + @ApiOperation("批量修改预约订单") + @PutMapping("/batch") + public ApiResult removeBatch(@RequestBody BatchParam batchParam) { + if (batchParam.update(orderService, "order_id")) { + return success("修改成功"); } + return fail("修改失败"); + } - @ApiOperation("批量删除预约订单") - @DeleteMapping("/batch") - public ApiResult removeBatch(@RequestBody List ids) { - if (orderService.removeByIds(ids)) { - return success("删除成功"); - } - return fail("删除失败"); + @ApiOperation("批量删除预约订单") + @DeleteMapping("/batch") + public ApiResult removeBatch(@RequestBody List ids) { + if (orderService.removeByIds(ids)) { + return success("删除成功"); } + 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 57a1bd2..a79b3ba 100644 --- a/src/main/java/com/gxwebsoft/shop/entity/Order.java +++ b/src/main/java/com/gxwebsoft/shop/entity/Order.java @@ -5,6 +5,7 @@ import java.math.BigDecimal; import com.baomidou.mybatisplus.annotation.*; import java.io.Serializable; +import java.util.Date; import java.util.List; import io.swagger.annotations.ApiModel; @@ -114,13 +115,13 @@ public class Order implements Serializable { private BigDecimal returnMoney; @ApiModelProperty(value = "预约详情开始时间数组") - private String startTime; + private Long startTime; @ApiModelProperty(value = "是否已开具发票:1已开发票,2未开发票,3不能开具发票") private Integer isInvoice; @ApiModelProperty(value = "下单时间") - private Integer createTime; + private Long addTime; private Integer updateTime; @@ -136,6 +137,9 @@ public class Order implements Serializable { @ApiModelProperty(value = "对账情况:1=已对账;2=未对账;3=已对账,金额对不上;4=未查询到该订单") private Integer checkBill; + @ApiModelProperty(value = "系统版本") + private Integer version; + @ApiModelProperty(value = "备注") private String comments; @@ -143,6 +147,9 @@ public class Order implements Serializable { @TableLogic private Integer deleted; + @ApiModelProperty(value = "创建时间") + private Date createTime; + @ApiModelProperty(value = "租户id") private Integer tenantId; @@ -154,6 +161,10 @@ public class Order implements Serializable { @TableField(exist = false) private String merchantAvatar; + @ApiModelProperty(value = "微信OPENID,用于微信支付") + @TableField(exist = false) + private String openid; + @ApiModelProperty(value = "订单详情") @TableField(exist = false) private List orderInfoList; diff --git a/src/main/java/com/gxwebsoft/shop/entity/OrderInfo.java b/src/main/java/com/gxwebsoft/shop/entity/OrderInfo.java index dbb08c0..e0975f4 100644 --- a/src/main/java/com/gxwebsoft/shop/entity/OrderInfo.java +++ b/src/main/java/com/gxwebsoft/shop/entity/OrderInfo.java @@ -11,7 +11,7 @@ import lombok.Data; import lombok.EqualsAndHashCode; /** - * + * * * @author 科技小王子 * @since 2024-05-03 11:14:47 @@ -72,14 +72,17 @@ public class OrderInfo implements Serializable { private String mergeData; @ApiModelProperty(value = "开场时间") - private Integer startTime; + private Long startTime; @ApiModelProperty(value = "下单时间") - private Integer orderTime; + private Long orderTime; @ApiModelProperty(value = "毫秒时间戳") private Long timeFlag; + @ApiModelProperty(value = "系统版本") + private Integer version; + @ApiModelProperty(value = "租户id") private Integer tenantId; diff --git a/src/main/java/com/gxwebsoft/shop/service/OrderService.java b/src/main/java/com/gxwebsoft/shop/service/OrderService.java index 06f14d3..56d1fb7 100644 --- a/src/main/java/com/gxwebsoft/shop/service/OrderService.java +++ b/src/main/java/com/gxwebsoft/shop/service/OrderService.java @@ -5,6 +5,7 @@ import com.gxwebsoft.common.core.web.PageResult; import com.gxwebsoft.shop.entity.Order; import com.gxwebsoft.shop.param.OrderParam; +import java.util.HashMap; import java.util.List; /** @@ -39,4 +40,5 @@ public interface OrderService extends IService { */ Order getByIdRel(Integer orderId); + HashMap createWxOrder(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 7093321..601b17f 100644 --- a/src/main/java/com/gxwebsoft/shop/service/impl/OrderServiceImpl.java +++ b/src/main/java/com/gxwebsoft/shop/service/impl/OrderServiceImpl.java @@ -1,7 +1,10 @@ package com.gxwebsoft.shop.service.impl; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.gxwebsoft.common.core.config.ConfigProperties; +import com.gxwebsoft.common.system.service.SettingService; import com.gxwebsoft.shop.entity.OrderInfo; import com.gxwebsoft.shop.mapper.OrderMapper; import com.gxwebsoft.shop.param.OrderInfoParam; @@ -11,10 +14,19 @@ import com.gxwebsoft.shop.entity.Order; import com.gxwebsoft.shop.param.OrderParam; import com.gxwebsoft.common.core.web.PageParam; import com.gxwebsoft.common.core.web.PageResult; +import com.wechat.pay.java.core.Config; +import com.wechat.pay.java.core.RSAConfig; +import com.wechat.pay.java.service.payments.jsapi.JsapiServiceExtension; +import com.wechat.pay.java.service.payments.jsapi.model.Amount; +import com.wechat.pay.java.service.payments.jsapi.model.Payer; +import com.wechat.pay.java.service.payments.jsapi.model.PrepayRequest; +import com.wechat.pay.java.service.payments.jsapi.model.PrepayWithRequestPaymentResponse; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import javax.annotation.Resource; +import java.math.BigDecimal; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; @@ -31,43 +43,119 @@ public class OrderServiceImpl extends ServiceImpl implements @Resource private OrderInfoService orderInfoService; + @Resource + private ConfigProperties config; + @Resource + private SettingService settingService; - @Override - public PageResult pageRel(OrderParam param) { - PageParam page = new PageParam<>(param); - page.setDefaultOrder("sort_number asc, create_time desc"); - List list = baseMapper.selectPageRel(page, param); - final Set orderIds = list.stream().map(Order::getOrderId).collect(Collectors.toSet()); - // 查询订单信息表 - if (!CollectionUtils.isEmpty(orderIds)) { - final List orderInfoList = orderInfoService.list(new LambdaQueryWrapper().in(OrderInfo::getOid, orderIds)); - final Map> orderInfo = orderInfoList.stream().collect(Collectors.groupingBy(OrderInfo::getOid)); - list.forEach(d -> { - if (!orderInfo.isEmpty()) { - final List orderInfos = orderInfo.get(d.getOrderId()); - if (!orderInfos.isEmpty()) { - d.setOrderInfoList(orderInfos); - } - } - }); + @Override + public PageResult pageRel(OrderParam param) { + PageParam page = new PageParam<>(param); + page.setDefaultOrder("sort_number asc, create_time desc"); + List list = baseMapper.selectPageRel(page, param); + final Set orderIds = list.stream().map(Order::getOrderId).collect(Collectors.toSet()); + // 查询订单信息表 + if (!CollectionUtils.isEmpty(orderIds)) { + final List orderInfoList = orderInfoService.list(new LambdaQueryWrapper().in(OrderInfo::getOid, orderIds)); + final Map> orderInfo = orderInfoList.stream().collect(Collectors.groupingBy(OrderInfo::getOid)); + list.forEach(d -> { + if (!orderInfo.isEmpty()) { + final List orderInfos = orderInfo.get(d.getOrderId()); + if (!CollectionUtils.isEmpty(orderInfos)) { + d.setOrderInfoList(orderInfos); + } } - return new PageResult<>(list, page.getTotal()); + }); } + 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); - return param.getOne(baseMapper.selectListRel(param)); - } + @Override + public Order getByIdRel(Integer orderId) { + OrderParam param = new OrderParam(); + param.setOrderId(orderId); + return param.getOne(baseMapper.selectListRel(param)); + } + + /** + * 创建微信支付 + * @param order + * @return + */ + @Override + public HashMap createWxOrder(Order order) { + final String uploadPath = config.getUploadPath(); // 服务器本地路径 + final HashMap orderInfo = new HashMap<>(); + // 微信小程序(微信支付) + final JSONObject mpWx = settingService.getBySettingKey("mp-weixin"); + final JSONObject payment = settingService.getBySettingKey("payment"); + + // 计算金额 + BigDecimal decimal = order.getTotalPrice(); + final BigDecimal multiply = decimal.multiply(new BigDecimal(100)); + // 将 BigDecimal 转换为 Integer + Integer money = multiply.intValue(); + + final String appId = mpWx.getString("appId"); + final String mchId = payment.getString("mchId"); + final String openid = order.getOpenid(); // openid + final String notifyUrl = config.getServerUrl() + "/love/user-plan-log/wx-pay/notify/" + order.getTenantId(); // 异步通知地址 + final String privateKey = uploadPath.concat("file").concat(payment.getString("apiclientKey")); // 秘钥证书 + final String apiclientCert = uploadPath.concat("file").concat(payment.getString("apiclientCert")); + final String merchantSerialNumber = payment.getString("merchantSerialNumber"); // 证书序列号 + final String apiV3key = payment.getString("wechatApiKey"); + + System.out.println("privateKey = " + privateKey); + System.out.println("apiclientCert = " + apiclientCert); + System.out.println("merchantSerialNumber = " + merchantSerialNumber); + System.out.println("apiV3key = " + apiV3key); + System.out.println("mchId = " + mchId); + System.out.println("appId = " + appId); + + Config config = + new RSAConfig.Builder() + .merchantId(mchId) + .privateKeyFromPath(privateKey) + .merchantSerialNumber(merchantSerialNumber) + .wechatPayCertificatesFromPath(apiclientCert) + .build(); + + // 构建service + JsapiServiceExtension service = new JsapiServiceExtension.Builder().config(config).build(); + // 跟之前下单示例一样,填充预下单参数 + PrepayRequest request = new PrepayRequest(); + Amount amount = new Amount(); + amount.setTotal(money); + amount.setCurrency("CNY"); + request.setAmount(amount); + request.setAppid(appId); + request.setMchid(mchId); + request.setDescription(order.getComments()); + request.setNotifyUrl(notifyUrl); + request.setOutTradeNo(order.getOrderNo()); + request.setAttach(order.getTenantId().toString()); + final Payer payer = new Payer(); + payer.setOpenid(openid); + request.setPayer(payer); + + PrepayWithRequestPaymentResponse response = service.prepayWithRequestPayment(request); + System.out.println("response = " + response); + orderInfo.put("provider", "wxpay"); + orderInfo.put("timeStamp", response.getTimeStamp()); + orderInfo.put("nonceStr", response.getNonceStr()); + orderInfo.put("package", response.getPackageVal()); + orderInfo.put("signType", "RSA"); + orderInfo.put("paySign", response.getPaySign()); + return orderInfo; + } }