diff --git a/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/enums/ErrorCodeConstants.java b/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/enums/ErrorCodeConstants.java index d438b960..10f6d4ff 100644 --- a/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/enums/ErrorCodeConstants.java +++ b/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/enums/ErrorCodeConstants.java @@ -118,11 +118,13 @@ public interface ErrorCodeConstants { ErrorCode STORE_ORDER_DETAIL_NOT_EXISTS = new ErrorCode(1_007_904_006,"商品订单详情不存在"); //========== 用户余额明细 1-004-014-000 ============= ErrorCode SPACE_CAPSULE_NOT_EXISTS = new ErrorCode(1_004_014_001, "太空舱不存在"); + ErrorCode SPACE_CAPSULE_NOT_FAULT = new ErrorCode(1_004_014_002, "太空舱故障,暂时不能使用"); //========== 用户余额明细 1-004-015-000 ============= ErrorCode COMBO_NOT_EXISTS = new ErrorCode(1_004_015_001, "套餐不存在"); //========== 用户余额明细 1-004-016-000 ============= ErrorCode ORDER_SPACE_CAPSULE_NOT_EXISTS = new ErrorCode(1_004_016_001, "太空舱订单不存在"); ErrorCode ORDER_SPACE_CAPSULE_ERREO = new ErrorCode(1_004_016_002, "太空舱订单状态非法"); + ErrorCode ORDER_SPACE_CAPSULE_CLOSE = new ErrorCode(1_004_016_003, "太空舱订单已结束,不可再开门"); ErrorCode STORE_BUSINESS_NOT_EXISTS = new ErrorCode(1_004_017_001, "超市营业统计不存在"); diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/orderspacecapsule/vo/OrderSpaceCapsuleAdminVo.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/orderspacecapsule/vo/OrderSpaceCapsuleAdminVo.java new file mode 100644 index 00000000..92b45193 --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/orderspacecapsule/vo/OrderSpaceCapsuleAdminVo.java @@ -0,0 +1,18 @@ +package cn.iocoder.yudao.module.member.controller.admin.orderspacecapsule.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +@Schema(description = "小程序 - 太空舱管理员 vo") +@Data +public class OrderSpaceCapsuleAdminVo { + @Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "23511") + @NotNull(message = "用户编号不能为空") + private Long userId; + @Schema(description = "太空舱支付编码", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotBlank(message = "太空舱支付编码不能为空") + private String zfCode; +} diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/orderspacecapsule/vo/OrderSpaceCapsuleOperateVo.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/orderspacecapsule/vo/OrderSpaceCapsuleOperateVo.java new file mode 100644 index 00000000..08bec26b --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/orderspacecapsule/vo/OrderSpaceCapsuleOperateVo.java @@ -0,0 +1,18 @@ +package cn.iocoder.yudao.module.member.controller.admin.orderspacecapsule.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +@Schema(description = "小程序 - 太空舱订单操作") +@Data +public class OrderSpaceCapsuleOperateVo { + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "23511") + @NotNull(message = "太空舱订单编号不能为空") + private Long id; + @Schema(description = "太空舱支付编码", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotBlank(message = "太空舱支付编码不能为空") + private String zfCode; +} diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/orderspacecapsule/vo/OrderSpaceCapsulePageReqVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/orderspacecapsule/vo/OrderSpaceCapsulePageReqVO.java index be53b6e2..d713957d 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/orderspacecapsule/vo/OrderSpaceCapsulePageReqVO.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/orderspacecapsule/vo/OrderSpaceCapsulePageReqVO.java @@ -72,4 +72,15 @@ public class OrderSpaceCapsulePageReqVO extends PageParam { */ @Schema(description = "退款金额") private BigDecimal refundMoney; + @Schema(description = "门店名称") + private String carteenName; + @Schema(description = "cmd 执行命令") + private String cmd; + @Schema(description = "二维码,base64") + private String qrCode; + @Schema(description = "支付编号") + private Integer payNum; + + @Schema(description = "机器编号") + private String machineNum; } \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/orderspacecapsule/vo/OrderSpaceCapsuleRespVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/orderspacecapsule/vo/OrderSpaceCapsuleRespVO.java index cd93f9ed..a653b374 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/orderspacecapsule/vo/OrderSpaceCapsuleRespVO.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/orderspacecapsule/vo/OrderSpaceCapsuleRespVO.java @@ -31,6 +31,9 @@ public class OrderSpaceCapsuleRespVO { @Schema(description = "门店id", requiredMode = Schema.RequiredMode.REQUIRED, example = "5246") @ExcelProperty("门店id") private Long carteenId; + @Schema(description = "门店名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "5246") + @ExcelProperty("门店名称") + private String carteenName; @Schema(description = "0未使用1使用中2已完成3已退款", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") @ExcelProperty("0未使用1使用中2已完成3已退款") @@ -87,4 +90,13 @@ public class OrderSpaceCapsuleRespVO { @Schema(description = "退款金额", requiredMode = Schema.RequiredMode.REQUIRED) @ExcelProperty("退款金额") private BigDecimal refundMoney; + @Schema(description = "cmd 执行命令") + private String cmd; + @Schema(description = "二维码,base64") + private String qrCode; + @Schema(description = "支付编号") + private Integer payNum; + + @Schema(description = "机器编号") + private String machineNum; } \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/orderspacecapsule/vo/OrderSpaceCapsuleSaveReqVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/orderspacecapsule/vo/OrderSpaceCapsuleSaveReqVO.java index 8489ee6e..4221d49e 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/orderspacecapsule/vo/OrderSpaceCapsuleSaveReqVO.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/orderspacecapsule/vo/OrderSpaceCapsuleSaveReqVO.java @@ -1,6 +1,7 @@ package cn.iocoder.yudao.module.member.controller.admin.orderspacecapsule.vo; import cn.hutool.core.date.DatePattern; +import com.alibaba.excel.annotation.ExcelProperty; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; import java.util.*; @@ -74,4 +75,15 @@ public class OrderSpaceCapsuleSaveReqVO { */ @Schema(description = "退款金额") private BigDecimal refundMoney; + @Schema(description = "门店名称") + private String carteenName; + @Schema(description = "cmd 执行命令") + private String cmd; + @Schema(description = "二维码,base64") + private String qrCode; + @Schema(description = "支付编号") + private Integer payNum; + + @Schema(description = "机器编号") + private String machineNum; } \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/orderspacecapsule/vo/SpaceCapsuleThreePointsReqVo.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/orderspacecapsule/vo/SpaceCapsuleThreePointsReqVo.java new file mode 100644 index 00000000..ab5c15e7 --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/orderspacecapsule/vo/SpaceCapsuleThreePointsReqVo.java @@ -0,0 +1,13 @@ +package cn.iocoder.yudao.module.member.controller.admin.orderspacecapsule.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Schema(description = "小程序 - 调用第三方 req vo") +@Data +public class SpaceCapsuleThreePointsReqVo { + private String UUID; + private Integer device_id; + private Long charge_id; + private Integer minute;//如果需要按秒的,可换参数second;如果minute和second都传0,则为中断通电 +} diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/orderspacecapsule/AppOrderSpaceCapsuleController.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/orderspacecapsule/AppOrderSpaceCapsuleController.java index 22707acb..9615b6bc 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/orderspacecapsule/AppOrderSpaceCapsuleController.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/orderspacecapsule/AppOrderSpaceCapsuleController.java @@ -3,9 +3,7 @@ package cn.iocoder.yudao.module.member.controller.app.orderspacecapsule; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; -import cn.iocoder.yudao.module.member.controller.admin.orderspacecapsule.vo.OrderSpaceCapsulePageReqVO; -import cn.iocoder.yudao.module.member.controller.admin.orderspacecapsule.vo.OrderSpaceCapsuleRespVO; -import cn.iocoder.yudao.module.member.controller.admin.orderspacecapsule.vo.OrderSpaceCapsuleSaveReqVO; +import cn.iocoder.yudao.module.member.controller.admin.orderspacecapsule.vo.*; import cn.iocoder.yudao.module.member.dal.dataobject.orderspacecapsule.OrderSpaceCapsuleDO; import cn.iocoder.yudao.module.member.service.orderspacecapsule.OrderSpaceCapsuleService; import io.swagger.v3.oas.annotations.Operation; @@ -64,7 +62,16 @@ public class AppOrderSpaceCapsuleController { PageResult pageResult = orderSpaceCapsuleService.getOrderSpaceCapsulePage(pageReqVO); return success(BeanUtils.toBean(pageResult, OrderSpaceCapsuleRespVO.class)); } - - - + @PostMapping("/open/cmd") + @Operation(summary = "生成太空舱cmd") + public CommonResult getOpenCmd(@Valid @RequestBody OrderSpaceCapsuleOperateVo operateVo) { + OrderSpaceCapsuleDO orderSpaceCapsuleDO = orderSpaceCapsuleService.openDoor(operateVo); + return success(BeanUtils.toBean(orderSpaceCapsuleDO, OrderSpaceCapsuleRespVO.class)); + } + @PostMapping("/open/cmd/admin") + @Operation(summary = "超级管理员跳过订单验证.打开太空舱") + public CommonResult getCmdAdmin(@Valid @RequestBody OrderSpaceCapsuleAdminVo adminVo) { + OrderSpaceCapsuleDO orderSpaceCapsuleDO = orderSpaceCapsuleService.openCmdAdmin(adminVo); + return success(BeanUtils.toBean(orderSpaceCapsuleDO, OrderSpaceCapsuleRespVO.class)); + } } \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/orderspacecapsule/OrderSpaceCapsuleDO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/orderspacecapsule/OrderSpaceCapsuleDO.java index ce28ac6f..d650ede1 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/orderspacecapsule/OrderSpaceCapsuleDO.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/orderspacecapsule/OrderSpaceCapsuleDO.java @@ -1,5 +1,6 @@ package cn.iocoder.yudao.module.member.dal.dataobject.orderspacecapsule; +import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; import java.util.*; import java.math.BigDecimal; @@ -93,5 +94,12 @@ public class OrderSpaceCapsuleDO extends BaseDO { * 退款金额 */ private BigDecimal refundMoney; - + /** + * 门店名称 + */ + private String carteenName; + private String cmd; + private String qrCode; + private Integer payNum; + private String machineNum; } \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/enums/SpaceCapsuleOperateEnum.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/enums/SpaceCapsuleOperateEnum.java new file mode 100644 index 00000000..991ca75d --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/enums/SpaceCapsuleOperateEnum.java @@ -0,0 +1,20 @@ +package cn.iocoder.yudao.module.member.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@AllArgsConstructor +@Getter +public enum SpaceCapsuleOperateEnum { + SPACE_CAPSULE_OPERATE_SWEEP_IT(0,"扫一扫"), + SPACE_CAPSULE_OPERATE_BLUETOOTH(1,"蓝牙"), + SPACE_CAPSULE_OPERATE_QR_CODE(2,"二维码"); + /** + * 编码 + */ + private final Integer code; + /** + * 类型 + */ + private final String name; +} diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/orderspacecapsule/OrderSpaceCapsuleService.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/orderspacecapsule/OrderSpaceCapsuleService.java index 083ca719..9cee2fd0 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/orderspacecapsule/OrderSpaceCapsuleService.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/orderspacecapsule/OrderSpaceCapsuleService.java @@ -1,9 +1,12 @@ package cn.iocoder.yudao.module.member.service.orderspacecapsule; import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.member.controller.admin.orderspacecapsule.vo.OrderSpaceCapsuleAdminVo; +import cn.iocoder.yudao.module.member.controller.admin.orderspacecapsule.vo.OrderSpaceCapsuleOperateVo; import cn.iocoder.yudao.module.member.controller.admin.orderspacecapsule.vo.OrderSpaceCapsulePageReqVO; import cn.iocoder.yudao.module.member.controller.admin.orderspacecapsule.vo.OrderSpaceCapsuleSaveReqVO; import cn.iocoder.yudao.module.member.dal.dataobject.orderspacecapsule.OrderSpaceCapsuleDO; +import org.springframework.web.bind.annotation.RequestBody; import javax.validation.*; @@ -52,4 +55,16 @@ public interface OrderSpaceCapsuleService { */ PageResult getOrderSpaceCapsulePage(OrderSpaceCapsulePageReqVO pageReqVO); + /** + * 太空舱开门动作 + * @param operateVo + */ + OrderSpaceCapsuleDO openDoor(@Valid OrderSpaceCapsuleOperateVo operateVo); + + /** + * 超级管理员 不限时间 + * @param adminVo + * @return + */ + OrderSpaceCapsuleDO openCmdAdmin(@Valid @RequestBody OrderSpaceCapsuleAdminVo adminVo); } \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/orderspacecapsule/OrderSpaceCapsuleServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/orderspacecapsule/OrderSpaceCapsuleServiceImpl.java index b509f85a..bc5c6537 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/orderspacecapsule/OrderSpaceCapsuleServiceImpl.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/orderspacecapsule/OrderSpaceCapsuleServiceImpl.java @@ -1,32 +1,47 @@ package cn.iocoder.yudao.module.member.service.orderspacecapsule; +import cn.hutool.core.lang.UUID; +import cn.hutool.extra.qrcode.QrCodeUtil; +import cn.hutool.http.HttpRequest; +import cn.hutool.json.JSONConfig; +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; +import cn.iocoder.yudao.framework.common.exception.ErrorCode; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.module.member.controller.admin.orderspacecapsule.vo.OrderSpaceCapsulePageReqVO; -import cn.iocoder.yudao.module.member.controller.admin.orderspacecapsule.vo.OrderSpaceCapsuleSaveReqVO; +import cn.iocoder.yudao.framework.common.util.json.JsonUtils; +import cn.iocoder.yudao.module.member.controller.admin.orderspacecapsule.vo.*; import cn.iocoder.yudao.module.member.dal.dataobject.orderspacecapsule.OrderSpaceCapsuleDO; import cn.iocoder.yudao.module.member.dal.dataobject.spacecapsule.SpaceCapsuleDO; import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; import cn.iocoder.yudao.module.member.dal.mysql.orderspacecapsule.OrderSpaceCapsuleMapper; -import cn.iocoder.yudao.module.member.enums.CostTypeEnum; -import cn.iocoder.yudao.module.member.enums.PayMethodsEnum; -import cn.iocoder.yudao.module.member.enums.SpaceCapsuleEnum; -import cn.iocoder.yudao.module.member.enums.SpaceCapsuleOrderEnum; +import cn.iocoder.yudao.module.member.enums.*; import cn.iocoder.yudao.module.member.service.amount.DeductionService; +import cn.iocoder.yudao.module.member.service.carteenmoney.CarteenMoneyService; import cn.iocoder.yudao.module.member.service.spacecapsule.SpaceCapsuleService; import cn.iocoder.yudao.module.member.service.user.MemberUserService; +import cn.iocoder.yudao.module.system.api.carteen.CarteenApi; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import javax.imageio.ImageIO; +import javax.validation.Valid; + import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.Assert; import org.springframework.validation.annotation.Validated; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import org.springframework.web.bind.annotation.RequestBody; + +import java.awt.image.BufferedImage; +import java.io.ByteArrayOutputStream; +import java.io.IOException; import java.math.BigDecimal; import java.math.RoundingMode; import java.time.Duration; import java.time.LocalDateTime; +import java.util.Base64; import java.util.Objects; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; -import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.ORDER_SPACE_CAPSULE_ERREO; -import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.ORDER_SPACE_CAPSULE_NOT_EXISTS; +import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.*; /** * 太空舱订单 Service 实现类 @@ -45,7 +60,9 @@ public class OrderSpaceCapsuleServiceImpl implements OrderSpaceCapsuleService { private SpaceCapsuleService spaceCapsuleService; @Resource private MemberUserService userService; - + @Resource + private CarteenApi carteenApi; + private static final String URL="https://gateway.biandianxia.com/encrypt/sharedevice"; @Override @Transactional(rollbackFor = Exception.class) public Long createOrderSpaceCapsule(OrderSpaceCapsuleSaveReqVO createReqVO) { @@ -70,6 +87,9 @@ public class OrderSpaceCapsuleServiceImpl implements OrderSpaceCapsuleService { orderSpaceCapsule.setEndMoney(initialMoney.subtract(orderSpaceCapsule.getMoney())); // 设置支付方式 orderSpaceCapsule.setPayMethods(PayMethodsEnum.WX_LITE.getName()); + //设置门店名称 + String storesName = carteenApi.getCarteenById(orderSpaceCapsule.getCarteenId()).getStoresName(); + orderSpaceCapsule.setCarteenName(storesName); // 插入订单数据 orderSpaceCapsuleMapper.insert(orderSpaceCapsule); // 返回订单 ID @@ -139,7 +159,7 @@ public class OrderSpaceCapsuleServiceImpl implements OrderSpaceCapsuleService { long minutesUsed = Duration.between(orderStartTime, now).toMinutes(); int remainingMinutes = Math.toIntExact(comboMinutes - minutesUsed); // 计算每分钟的价格 - BigDecimal pricePerMinute = comboPrice.divide(BigDecimal.valueOf(comboMinutes), 2, RoundingMode.HALF_UP); + BigDecimal pricePerMinute = comboPrice.divide(BigDecimal.valueOf(comboMinutes), 2, RoundingMode.HALF_UP); // 计算剩余价格并向下取整 return pricePerMinute.multiply(BigDecimal.valueOf(remainingMinutes)).setScale(0, RoundingMode.FLOOR); } @@ -174,5 +194,95 @@ public class OrderSpaceCapsuleServiceImpl implements OrderSpaceCapsuleService { public PageResult getOrderSpaceCapsulePage(OrderSpaceCapsulePageReqVO pageReqVO) { return orderSpaceCapsuleMapper.selectPage(pageReqVO); } + @Override + public OrderSpaceCapsuleDO openDoor(OrderSpaceCapsuleOperateVo operateVo) { + Long id = operateVo.getId(); + String zfCode = operateVo.getZfCode(); + SpaceCapsuleDO payNum = spaceCapsuleService.getPayNum(zfCode); + validateSpaceCapsuleStatus(payNum); + + OrderSpaceCapsuleDO orderSpaceCapsuleDO = orderSpaceCapsuleMapper.selectById(id); + validateOrderStatus(orderSpaceCapsuleDO); + + if (isFirstOpening(orderSpaceCapsuleDO, payNum)) { + handleFirstOpening(orderSpaceCapsuleDO, payNum); + } + orderSpaceCapsuleDO.setPayNum(payNum.getPayNum()); + orderSpaceCapsuleDO.setMachineNum(payNum.getMachineNum()); + orderSpaceCapsuleMapper.updateById(orderSpaceCapsuleDO); + return orderSpaceCapsuleDO; + } + + @Override + public OrderSpaceCapsuleDO openCmdAdmin(OrderSpaceCapsuleAdminVo adminVo) { + MemberUserDO user = userService.getUser(adminVo.getUserId()); + SpaceCapsuleDO payNum = spaceCapsuleService.getPayNum(adminVo.getZfCode()); + OrderSpaceCapsuleDO capsuleDO=new OrderSpaceCapsuleDO(); + capsuleDO.setComboNum(9999); + capsuleDO.setComboMinutes(9999); + handleFirstOpening(capsuleDO,payNum); + return capsuleDO; + } + + private void validateSpaceCapsuleStatus(SpaceCapsuleDO payNum) { + if (payNum.getStatus().equals(SpaceCapsuleEnum.SPACE_CAPSULE_ENUM_FAULT.getCode())) { + throw exception(SPACE_CAPSULE_NOT_FAULT); + } + } + + private void validateOrderStatus(OrderSpaceCapsuleDO orderSpaceCapsuleDO) { + Integer status = orderSpaceCapsuleDO.getStatus(); + if (status.equals(SpaceCapsuleOrderEnum.SPACE_CAPSULE_ORDER_ENUM_REFUNDED.getCode()) || + status.equals(SpaceCapsuleOrderEnum.SPACE_CAPSULE_ORDER_ENUM_DONE.getCode())) { + throw exception(ORDER_SPACE_CAPSULE_CLOSE); + } + } + + private boolean isFirstOpening(OrderSpaceCapsuleDO orderSpaceCapsuleDO, SpaceCapsuleDO payNum) { + return orderSpaceCapsuleDO.getStatus().equals(SpaceCapsuleOrderEnum.SPACE_CAPSULE_ORDER_ENUM_UNUSED.getCode()) && + payNum.getStatus().equals(SpaceCapsuleEnum.SPACE_CAPSULE_ENUM_FREE_TIME.getCode()); + } + + private void handleFirstOpening(OrderSpaceCapsuleDO orderSpaceCapsuleDO, SpaceCapsuleDO payNum) { + SpaceCapsuleThreePointsReqVo reqVo = new SpaceCapsuleThreePointsReqVo(); + reqVo.setUUID(payNum.getMachineNum()); + reqVo.setCharge_id(System.currentTimeMillis() / 1000); + reqVo.setDevice_id(payNum.getPayNum()); + + int minute = orderSpaceCapsuleDO.getComboMinutes() * orderSpaceCapsuleDO.getComboNum(); + reqVo.setMinute(minute); + + String body = HttpRequest.post(URL) + .body(JSONUtil.toJsonStr(reqVo)) + .execute().body(); + + JSONObject jsonObject = JSONUtil.parseObj(body); + if (jsonObject.getInt("status") != 1) { + throw exception(new ErrorCode(1_004_016_004, jsonObject.getStr("error"))); + } + + String cmd = jsonObject.getStr("cmd"); + orderSpaceCapsuleDO.setCmd(cmd); + + String qrCode = createQrCode("~" + cmd + "~"); + if (qrCode != null) { + orderSpaceCapsuleDO.setQrCode(qrCode); + } + } + + public static String createQrCode(String content){ + // 生成二维码,指定大小 + BufferedImage qrImage = QrCodeUtil.generate(content, 300, 300); + // 转换为 Base64 + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + try { + ImageIO.write(qrImage, "png", baos); + byte[] imageBytes = baos.toByteArray(); + return Base64.getEncoder().encodeToString(imageBytes); + } catch (IOException e) { + e.printStackTrace(); + } + return null; + } } \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/spacecapsule/SpaceCapsuleService.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/spacecapsule/SpaceCapsuleService.java index f1a4e650..78b9d471 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/spacecapsule/SpaceCapsuleService.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/spacecapsule/SpaceCapsuleService.java @@ -53,4 +53,10 @@ public interface SpaceCapsuleService { */ PageResult getSpaceCapsulePage(SpaceCapsulePageReqVO pageReqVO); + /** + * 支付编码查询 + * @param payNum + * @return + */ + SpaceCapsuleDO getPayNum(String payNum); } \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/spacecapsule/SpaceCapsuleServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/spacecapsule/SpaceCapsuleServiceImpl.java index ccb54b21..26f0d817 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/spacecapsule/SpaceCapsuleServiceImpl.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/spacecapsule/SpaceCapsuleServiceImpl.java @@ -1,6 +1,7 @@ package cn.iocoder.yudao.module.member.service.spacecapsule; import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.module.member.controller.admin.spacecapsule.vo.SpaceCapsulePageReqVO; import cn.iocoder.yudao.module.member.controller.admin.spacecapsule.vo.SpaceCapsuleSaveReqVO; import cn.iocoder.yudao.module.member.dal.dataobject.spacecapsule.SpaceCapsuleDO; @@ -73,4 +74,10 @@ public class SpaceCapsuleServiceImpl implements SpaceCapsuleService { return spaceCapsuleMapper.selectPage(pageReqVO); } + @Override + public SpaceCapsuleDO getPayNum(String payNum) { + return spaceCapsuleMapper.selectOne(new LambdaQueryWrapperX() + .eq(SpaceCapsuleDO::getPayNum,payNum).last(" limit 1")); + } + } \ No newline at end of file