太空舱开门动作cmd 生成
This commit is contained in:
		| @ -118,11 +118,13 @@ public interface ErrorCodeConstants { | |||||||
|     ErrorCode STORE_ORDER_DETAIL_NOT_EXISTS = new ErrorCode(1_007_904_006,"商品订单详情不存在"); |     ErrorCode STORE_ORDER_DETAIL_NOT_EXISTS = new ErrorCode(1_007_904_006,"商品订单详情不存在"); | ||||||
|     //========== 用户余额明细 1-004-014-000 ============= |     //========== 用户余额明细 1-004-014-000 ============= | ||||||
|     ErrorCode SPACE_CAPSULE_NOT_EXISTS = new ErrorCode(1_004_014_001, "太空舱不存在"); |     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 ============= |     //========== 用户余额明细 1-004-015-000 ============= | ||||||
|     ErrorCode COMBO_NOT_EXISTS = new ErrorCode(1_004_015_001, "套餐不存在"); |     ErrorCode COMBO_NOT_EXISTS = new ErrorCode(1_004_015_001, "套餐不存在"); | ||||||
|     //========== 用户余额明细 1-004-016-000 ============= |     //========== 用户余额明细 1-004-016-000 ============= | ||||||
|     ErrorCode ORDER_SPACE_CAPSULE_NOT_EXISTS = new ErrorCode(1_004_016_001, "太空舱订单不存在"); |     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_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, "超市营业统计不存在"); |     ErrorCode STORE_BUSINESS_NOT_EXISTS = new ErrorCode(1_004_017_001, "超市营业统计不存在"); | ||||||
|  |  | ||||||
|  | |||||||
| @ -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; | ||||||
|  | } | ||||||
| @ -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; | ||||||
|  | } | ||||||
| @ -72,4 +72,15 @@ public class OrderSpaceCapsulePageReqVO extends PageParam { | |||||||
|      */ |      */ | ||||||
|     @Schema(description = "退款金额") |     @Schema(description = "退款金额") | ||||||
|     private BigDecimal refundMoney; |     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; | ||||||
| } | } | ||||||
| @ -31,6 +31,9 @@ public class OrderSpaceCapsuleRespVO { | |||||||
|     @Schema(description = "门店id", requiredMode = Schema.RequiredMode.REQUIRED, example = "5246") |     @Schema(description = "门店id", requiredMode = Schema.RequiredMode.REQUIRED, example = "5246") | ||||||
|     @ExcelProperty("门店id") |     @ExcelProperty("门店id") | ||||||
|     private Long carteenId; |     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") |     @Schema(description = "0未使用1使用中2已完成3已退款", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") | ||||||
|     @ExcelProperty("0未使用1使用中2已完成3已退款") |     @ExcelProperty("0未使用1使用中2已完成3已退款") | ||||||
| @ -87,4 +90,13 @@ public class OrderSpaceCapsuleRespVO { | |||||||
|     @Schema(description = "退款金额", requiredMode = Schema.RequiredMode.REQUIRED) |     @Schema(description = "退款金额", requiredMode = Schema.RequiredMode.REQUIRED) | ||||||
|     @ExcelProperty("退款金额") |     @ExcelProperty("退款金额") | ||||||
|     private BigDecimal refundMoney; |     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; | ||||||
| } | } | ||||||
| @ -1,6 +1,7 @@ | |||||||
| package cn.iocoder.yudao.module.member.controller.admin.orderspacecapsule.vo; | package cn.iocoder.yudao.module.member.controller.admin.orderspacecapsule.vo; | ||||||
|  |  | ||||||
| import cn.hutool.core.date.DatePattern; | import cn.hutool.core.date.DatePattern; | ||||||
|  | import com.alibaba.excel.annotation.ExcelProperty; | ||||||
| import io.swagger.v3.oas.annotations.media.Schema; | import io.swagger.v3.oas.annotations.media.Schema; | ||||||
| import lombok.*; | import lombok.*; | ||||||
| import java.util.*; | import java.util.*; | ||||||
| @ -74,4 +75,15 @@ public class OrderSpaceCapsuleSaveReqVO { | |||||||
|      */ |      */ | ||||||
|     @Schema(description = "退款金额") |     @Schema(description = "退款金额") | ||||||
|     private BigDecimal refundMoney; |     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; | ||||||
| } | } | ||||||
| @ -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,则为中断通电 | ||||||
|  | } | ||||||
| @ -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.CommonResult; | ||||||
| import cn.iocoder.yudao.framework.common.pojo.PageResult; | import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||||||
| import cn.iocoder.yudao.framework.common.util.object.BeanUtils; | 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.*; | ||||||
| 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.dal.dataobject.orderspacecapsule.OrderSpaceCapsuleDO; | import cn.iocoder.yudao.module.member.dal.dataobject.orderspacecapsule.OrderSpaceCapsuleDO; | ||||||
| import cn.iocoder.yudao.module.member.service.orderspacecapsule.OrderSpaceCapsuleService; | import cn.iocoder.yudao.module.member.service.orderspacecapsule.OrderSpaceCapsuleService; | ||||||
| import io.swagger.v3.oas.annotations.Operation; | import io.swagger.v3.oas.annotations.Operation; | ||||||
| @ -64,7 +62,16 @@ public class AppOrderSpaceCapsuleController { | |||||||
|         PageResult<OrderSpaceCapsuleDO> pageResult = orderSpaceCapsuleService.getOrderSpaceCapsulePage(pageReqVO); |         PageResult<OrderSpaceCapsuleDO> pageResult = orderSpaceCapsuleService.getOrderSpaceCapsulePage(pageReqVO); | ||||||
|         return success(BeanUtils.toBean(pageResult, OrderSpaceCapsuleRespVO.class)); |         return success(BeanUtils.toBean(pageResult, OrderSpaceCapsuleRespVO.class)); | ||||||
|     } |     } | ||||||
|  |     @PostMapping("/open/cmd") | ||||||
|  |     @Operation(summary = "生成太空舱cmd") | ||||||
|  |     public CommonResult<OrderSpaceCapsuleRespVO> 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<OrderSpaceCapsuleRespVO> getCmdAdmin(@Valid @RequestBody OrderSpaceCapsuleAdminVo adminVo) { | ||||||
|  |         OrderSpaceCapsuleDO orderSpaceCapsuleDO = orderSpaceCapsuleService.openCmdAdmin(adminVo); | ||||||
|  |         return success(BeanUtils.toBean(orderSpaceCapsuleDO, OrderSpaceCapsuleRespVO.class)); | ||||||
|  |     } | ||||||
| } | } | ||||||
| @ -1,5 +1,6 @@ | |||||||
| package cn.iocoder.yudao.module.member.dal.dataobject.orderspacecapsule; | package cn.iocoder.yudao.module.member.dal.dataobject.orderspacecapsule; | ||||||
|  |  | ||||||
|  | import io.swagger.v3.oas.annotations.media.Schema; | ||||||
| import lombok.*; | import lombok.*; | ||||||
| import java.util.*; | import java.util.*; | ||||||
| import java.math.BigDecimal; | import java.math.BigDecimal; | ||||||
| @ -93,5 +94,12 @@ public class OrderSpaceCapsuleDO extends BaseDO { | |||||||
|      * 退款金额 |      * 退款金额 | ||||||
|      */ |      */ | ||||||
|     private BigDecimal refundMoney; |     private BigDecimal refundMoney; | ||||||
|  |     /** | ||||||
|  |      * 门店名称 | ||||||
|  |      */ | ||||||
|  |     private String carteenName; | ||||||
|  |     private String cmd; | ||||||
|  |     private String qrCode; | ||||||
|  |     private Integer payNum; | ||||||
|  |     private String machineNum; | ||||||
| } | } | ||||||
| @ -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; | ||||||
|  | } | ||||||
| @ -1,9 +1,12 @@ | |||||||
| package cn.iocoder.yudao.module.member.service.orderspacecapsule; | package cn.iocoder.yudao.module.member.service.orderspacecapsule; | ||||||
|  |  | ||||||
| import cn.iocoder.yudao.framework.common.pojo.PageResult; | 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.OrderSpaceCapsulePageReqVO; | ||||||
| import cn.iocoder.yudao.module.member.controller.admin.orderspacecapsule.vo.OrderSpaceCapsuleSaveReqVO; | import cn.iocoder.yudao.module.member.controller.admin.orderspacecapsule.vo.OrderSpaceCapsuleSaveReqVO; | ||||||
| import cn.iocoder.yudao.module.member.dal.dataobject.orderspacecapsule.OrderSpaceCapsuleDO; | import cn.iocoder.yudao.module.member.dal.dataobject.orderspacecapsule.OrderSpaceCapsuleDO; | ||||||
|  | import org.springframework.web.bind.annotation.RequestBody; | ||||||
|  |  | ||||||
| import javax.validation.*; | import javax.validation.*; | ||||||
|  |  | ||||||
| @ -52,4 +55,16 @@ public interface OrderSpaceCapsuleService { | |||||||
|      */ |      */ | ||||||
|     PageResult<OrderSpaceCapsuleDO> getOrderSpaceCapsulePage(OrderSpaceCapsulePageReqVO pageReqVO); |     PageResult<OrderSpaceCapsuleDO> getOrderSpaceCapsulePage(OrderSpaceCapsulePageReqVO pageReqVO); | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 太空舱开门动作 | ||||||
|  |      * @param operateVo | ||||||
|  |      */ | ||||||
|  |     OrderSpaceCapsuleDO openDoor(@Valid OrderSpaceCapsuleOperateVo operateVo); | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 超级管理员 不限时间 | ||||||
|  |      * @param adminVo | ||||||
|  |      * @return | ||||||
|  |      */ | ||||||
|  |     OrderSpaceCapsuleDO openCmdAdmin(@Valid @RequestBody OrderSpaceCapsuleAdminVo adminVo); | ||||||
| } | } | ||||||
| @ -1,32 +1,47 @@ | |||||||
| package cn.iocoder.yudao.module.member.service.orderspacecapsule; | 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.framework.common.pojo.PageResult; | ||||||
| import cn.iocoder.yudao.module.member.controller.admin.orderspacecapsule.vo.OrderSpaceCapsulePageReqVO; | import cn.iocoder.yudao.framework.common.util.json.JsonUtils; | ||||||
| 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.dal.dataobject.orderspacecapsule.OrderSpaceCapsuleDO; | ||||||
| import cn.iocoder.yudao.module.member.dal.dataobject.spacecapsule.SpaceCapsuleDO; | 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.dataobject.user.MemberUserDO; | ||||||
| import cn.iocoder.yudao.module.member.dal.mysql.orderspacecapsule.OrderSpaceCapsuleMapper; | 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.*; | ||||||
| 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.service.amount.DeductionService; | 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.spacecapsule.SpaceCapsuleService; | ||||||
| import cn.iocoder.yudao.module.member.service.user.MemberUserService; | import cn.iocoder.yudao.module.member.service.user.MemberUserService; | ||||||
|  | import cn.iocoder.yudao.module.system.api.carteen.CarteenApi; | ||||||
| import org.springframework.stereotype.Service; | import org.springframework.stereotype.Service; | ||||||
| import javax.annotation.Resource; | import javax.annotation.Resource; | ||||||
|  | import javax.imageio.ImageIO; | ||||||
|  | import javax.validation.Valid; | ||||||
|  |  | ||||||
| import org.springframework.transaction.annotation.Transactional; | import org.springframework.transaction.annotation.Transactional; | ||||||
|  | import org.springframework.util.Assert; | ||||||
| import org.springframework.validation.annotation.Validated; | import org.springframework.validation.annotation.Validated; | ||||||
| import cn.iocoder.yudao.framework.common.util.object.BeanUtils; | 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.BigDecimal; | ||||||
| import java.math.RoundingMode; | import java.math.RoundingMode; | ||||||
| import java.time.Duration; | import java.time.Duration; | ||||||
| import java.time.LocalDateTime; | import java.time.LocalDateTime; | ||||||
|  | import java.util.Base64; | ||||||
| import java.util.Objects; | import java.util.Objects; | ||||||
| import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; | 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.*; | ||||||
| import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.ORDER_SPACE_CAPSULE_NOT_EXISTS; |  | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  * 太空舱订单 Service 实现类 |  * 太空舱订单 Service 实现类 | ||||||
| @ -45,7 +60,9 @@ public class OrderSpaceCapsuleServiceImpl implements OrderSpaceCapsuleService { | |||||||
|     private SpaceCapsuleService spaceCapsuleService; |     private SpaceCapsuleService spaceCapsuleService; | ||||||
|     @Resource |     @Resource | ||||||
|     private MemberUserService userService; |     private MemberUserService userService; | ||||||
|  |     @Resource | ||||||
|  |     private CarteenApi carteenApi; | ||||||
|  |     private static final String URL="https://gateway.biandianxia.com/encrypt/sharedevice"; | ||||||
|     @Override |     @Override | ||||||
|     @Transactional(rollbackFor = Exception.class) |     @Transactional(rollbackFor = Exception.class) | ||||||
|     public Long createOrderSpaceCapsule(OrderSpaceCapsuleSaveReqVO createReqVO) { |     public Long createOrderSpaceCapsule(OrderSpaceCapsuleSaveReqVO createReqVO) { | ||||||
| @ -70,6 +87,9 @@ public class OrderSpaceCapsuleServiceImpl implements OrderSpaceCapsuleService { | |||||||
|         orderSpaceCapsule.setEndMoney(initialMoney.subtract(orderSpaceCapsule.getMoney())); |         orderSpaceCapsule.setEndMoney(initialMoney.subtract(orderSpaceCapsule.getMoney())); | ||||||
|         // 设置支付方式 |         // 设置支付方式 | ||||||
|         orderSpaceCapsule.setPayMethods(PayMethodsEnum.WX_LITE.getName()); |         orderSpaceCapsule.setPayMethods(PayMethodsEnum.WX_LITE.getName()); | ||||||
|  |         //设置门店名称 | ||||||
|  |         String storesName = carteenApi.getCarteenById(orderSpaceCapsule.getCarteenId()).getStoresName(); | ||||||
|  |         orderSpaceCapsule.setCarteenName(storesName); | ||||||
|         // 插入订单数据 |         // 插入订单数据 | ||||||
|         orderSpaceCapsuleMapper.insert(orderSpaceCapsule); |         orderSpaceCapsuleMapper.insert(orderSpaceCapsule); | ||||||
|         // 返回订单 ID |         // 返回订单 ID | ||||||
| @ -174,5 +194,95 @@ public class OrderSpaceCapsuleServiceImpl implements OrderSpaceCapsuleService { | |||||||
|     public PageResult<OrderSpaceCapsuleDO> getOrderSpaceCapsulePage(OrderSpaceCapsulePageReqVO pageReqVO) { |     public PageResult<OrderSpaceCapsuleDO> getOrderSpaceCapsulePage(OrderSpaceCapsulePageReqVO pageReqVO) { | ||||||
|         return orderSpaceCapsuleMapper.selectPage(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; | ||||||
|  |    } | ||||||
| } | } | ||||||
| @ -53,4 +53,10 @@ public interface SpaceCapsuleService { | |||||||
|      */ |      */ | ||||||
|     PageResult<SpaceCapsuleDO> getSpaceCapsulePage(SpaceCapsulePageReqVO pageReqVO); |     PageResult<SpaceCapsuleDO> getSpaceCapsulePage(SpaceCapsulePageReqVO pageReqVO); | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 支付编码查询 | ||||||
|  |      * @param payNum | ||||||
|  |      * @return | ||||||
|  |      */ | ||||||
|  |     SpaceCapsuleDO getPayNum(String payNum); | ||||||
| } | } | ||||||
| @ -1,6 +1,7 @@ | |||||||
| package cn.iocoder.yudao.module.member.service.spacecapsule; | package cn.iocoder.yudao.module.member.service.spacecapsule; | ||||||
|  |  | ||||||
| import cn.iocoder.yudao.framework.common.pojo.PageResult; | 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.SpaceCapsulePageReqVO; | ||||||
| import cn.iocoder.yudao.module.member.controller.admin.spacecapsule.vo.SpaceCapsuleSaveReqVO; | import cn.iocoder.yudao.module.member.controller.admin.spacecapsule.vo.SpaceCapsuleSaveReqVO; | ||||||
| import cn.iocoder.yudao.module.member.dal.dataobject.spacecapsule.SpaceCapsuleDO; | import cn.iocoder.yudao.module.member.dal.dataobject.spacecapsule.SpaceCapsuleDO; | ||||||
| @ -73,4 +74,10 @@ public class SpaceCapsuleServiceImpl implements SpaceCapsuleService { | |||||||
|         return spaceCapsuleMapper.selectPage(pageReqVO); |         return spaceCapsuleMapper.selectPage(pageReqVO); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public SpaceCapsuleDO getPayNum(String payNum) { | ||||||
|  |         return spaceCapsuleMapper.selectOne(new LambdaQueryWrapperX<SpaceCapsuleDO>() | ||||||
|  |                 .eq(SpaceCapsuleDO::getPayNum,payNum).last(" limit 1")); | ||||||
|  |     } | ||||||
|  |  | ||||||
| } | } | ||||||
		Reference in New Issue
	
	Block a user
	 qjq
					qjq