diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/hard/HandCancelCodeDto.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/hard/HandCancelCodeDto.java index ca49cb193..2499bd510 100644 --- a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/hard/HandCancelCodeDto.java +++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/hard/HandCancelCodeDto.java @@ -15,7 +15,6 @@ public class HandCancelCodeDto { private Long hardwareId; @Schema(description = "安卓订单code") - @NotNull(message = "安卓订单code不能为空") private String androidOrderCode; @Schema(description = "用户id") diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/HardApptController.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/HardApptController.java index d3fb7b578..9a06d8a7e 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/HardApptController.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/HardApptController.java @@ -41,8 +41,9 @@ public class HardApptController { @Operation(summary = "app预约时间列表", description = "app预约时间列表") @GetMapping("/app/list") - public R> appList() { + public R> appList(@ParameterObject HardApptDto dto) { List list = hardApptService.list(new LambdaQueryWrapper() + .eq(ObjectUtil.isNotEmpty(dto.getMchId()), HardApptEntity::getMchId, dto.getMchId()) .eq(HardApptEntity::getStatus, YesNoEnum.YES.getCode()) .orderByDesc(HardApptEntity::getSort) ); diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardOrderServiceImpl.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardOrderServiceImpl.java index 57ed5d7f1..eaf97eb95 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardOrderServiceImpl.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardOrderServiceImpl.java @@ -545,7 +545,7 @@ public class HardOrderServiceImpl extends ServiceImpl 0; } diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/xfj/HardXfjServiceImpl.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/xfj/HardXfjServiceImpl.java index 5473aafe2..52a8839de 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/xfj/HardXfjServiceImpl.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/xfj/HardXfjServiceImpl.java @@ -12,6 +12,7 @@ import com.bsd.pjcloud.common.core.constant.CacheConstants; import com.bsd.pjcloud.common.core.constant.enums.YesNoEnum; import com.bsd.pjcloud.hard.api.constant.HardTypeEnum; import com.bsd.pjcloud.hard.api.constant.xfj.HardXfjTypeEnum; +import com.bsd.pjcloud.hard.api.dto.hard.HandCancelCodeDto; import com.bsd.pjcloud.hard.api.dto.order.HardOrderDto; import com.bsd.pjcloud.hard.api.dto.order.xfj.HardXfjFastCreateOrderDto; import com.bsd.pjcloud.hard.api.dto.xfj.*; @@ -37,6 +38,7 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; import java.math.BigDecimal; @@ -210,6 +212,7 @@ public class HardXfjServiceImpl implements HardXfjService { payDto.setOrderNo(dto.getOrder()); payDto.setWalletType(WalletTypeEnum.EAT); payDto.setXfjPayType(HardXfjTypeEnum.CARD_PAY); + payDto.setPlatformType(AppPlusPlatformTypeEnum.ZAX_APP_WALLET); Long orderId = hardOrderService.xfjFastCreateOrder(payDto); result.setName(username); @@ -542,6 +545,7 @@ public class HardXfjServiceImpl implements HardXfjService { * 付款码(二维码)支付接口 */ @Override + @Transactional public XfjQRCodeTransactionVo qrCodeTransaction(String body, Map headers) { HardXfjLogEntity logger = initLogger(body, headers, "付款码(二维码)支付接口"); XfjQRCodeTransactionVo result = new XfjQRCodeTransactionVo(); @@ -555,16 +559,8 @@ public class HardXfjServiceImpl implements HardXfjService { } // 扣费 if (ObjectUtil.equals(dto.getMode(), "0")) { - // `QR`有三种可能性1、微信、支付宝、短码 - AppPlusPlatformTypeEnum platformType = judgeQrCode(dto.getQR()); - if (ObjectUtil.isEmpty(platformType)) { - throw new RuntimeException("二维码解析错误"); - } - Long userId = null; - WalletTypeEnum walletType = null; - HardXfjTypeEnum xfjPayType = HardXfjTypeEnum.QRCODE_PAY; - if (ObjectUtil.equals(platformType, AppPlusPlatformTypeEnum.ZAX_APP_WALLET)) { - walletType = WalletTypeEnum.EAT; + // 取餐 + if (ObjectUtil.equals(dto.getPayType(), 3)) { // 传过来的是`短码`需要解析一下 WalletCodeUseEntity data = remoteCodeUseService.getInfoByShortCode(dto.getQR()).getData(); if (ObjectUtil.isEmpty(data)) { @@ -572,27 +568,70 @@ public class HardXfjServiceImpl implements HardXfjService { result.setMsg("二维码错误"); return result; } - userId = data.getUserId(); - } else if (ObjectUtil.equals(platformType, AppPlusPlatformTypeEnum.WECHAT)) { - xfjPayType = HardXfjTypeEnum.WECHAT_QRCODE_PAY; - } else if (ObjectUtil.equals(platformType, AppPlusPlatformTypeEnum.ALI_PAY)) { - xfjPayType = HardXfjTypeEnum.ALI_QRCODE_PAY; + if (ObjectUtil.isEmpty(data.getId())) { + result.setStatus(XfjBaseVo.STATUS_FAIL); + result.setMsg("不是定餐二维码"); + return result; + } + // 查询订单 + HardOrderEntity order = hardOrderService.getById(data.getBizId()); + if (ObjectUtil.isEmpty(order)) { + result.setStatus(XfjBaseVo.STATUS_FAIL); + result.setMsg("定餐订单不存在"); + return result; + } + HandCancelCodeDto cancelDto = new HandCancelCodeDto(); + cancelDto.setOrderId(order.getId()); + cancelDto.setHardwareId(entity.getId()); + cancelDto.setUserId(order.getUserId()); + Boolean isCancel = hardOrderService.handCancelCode(cancelDto); + if (!isCancel) { + result.setStatus(XfjBaseVo.STATUS_FAIL); + result.setMsg("核销订餐失败"); + return result; + } + result.setQrorder(String.valueOf(order.getId())); + return result; + } else { + // `QR`有三种可能性1、微信、支付宝、短码 + AppPlusPlatformTypeEnum platformType = judgeQrCode(dto.getQR()); + if (ObjectUtil.isEmpty(platformType)) { + throw new RuntimeException("二维码解析错误"); + } + Long userId = null; + WalletTypeEnum walletType = null; + HardXfjTypeEnum xfjPayType = HardXfjTypeEnum.QRCODE_PAY; + if (ObjectUtil.equals(platformType, AppPlusPlatformTypeEnum.ZAX_APP_WALLET)) { + walletType = WalletTypeEnum.EAT; + // 传过来的是`短码`需要解析一下 + WalletCodeUseEntity data = remoteCodeUseService.getInfoByShortCode(dto.getQR()).getData(); + if (ObjectUtil.isEmpty(data)) { + result.setStatus(XfjBaseVo.STATUS_FAIL); + result.setMsg("二维码错误"); + return result; + } + userId = data.getUserId(); + } else if (ObjectUtil.equals(platformType, AppPlusPlatformTypeEnum.WECHAT)) { + xfjPayType = HardXfjTypeEnum.WECHAT_QRCODE_PAY; + } else if (ObjectUtil.equals(platformType, AppPlusPlatformTypeEnum.ALI_PAY)) { + xfjPayType = HardXfjTypeEnum.ALI_QRCODE_PAY; + } + + // 解析金额 + int price = BigDecimal.valueOf(Double.valueOf(dto.getAmount())).multiply(BigDecimal.valueOf(100)).setScale(2, RoundingMode.HALF_UP).intValue(); + + HardXfjFastCreateOrderDto payDto = new HardXfjFastCreateOrderDto(); + payDto.setUserId(userId); + payDto.setHardId(entity.getId()); + payDto.setPrice(price); + payDto.setWalletType(walletType); + payDto.setXfjPayType(xfjPayType); + payDto.setPlatformType(platformType); + payDto.setDevicePayCode(dto.getQR()); + Long orderId = hardOrderService.xfjFastCreateOrder(payDto); + result.setQrorder(String.valueOf(orderId)); + return result; } - - // 解析金额 - int price = BigDecimal.valueOf(Double.valueOf(dto.getAmount())).multiply(BigDecimal.valueOf(100)).setScale(2, RoundingMode.HALF_UP).intValue(); - - HardXfjFastCreateOrderDto payDto = new HardXfjFastCreateOrderDto(); - payDto.setUserId(userId); - payDto.setHardId(entity.getId()); - payDto.setPrice(price); - payDto.setWalletType(walletType); - payDto.setXfjPayType(xfjPayType); - payDto.setPlatformType(platformType); - payDto.setDevicePayCode(dto.getQR()); - Long orderId = hardOrderService.xfjFastCreateOrder(payDto); - result.setQrorder(String.valueOf(orderId)); - return result; } // 充值 else if (ObjectUtil.equals(dto.getMode(), "1")) { @@ -785,8 +824,9 @@ public class HardXfjServiceImpl implements HardXfjService { redisTemplate.opsForValue().set(lockKey, "1", Duration.ofMinutes(30)); log.info("|获取卡号白名单接口|设备 {} 查询完成,设置30分钟锁", entity.getUniqueCode()); } - for (WalletActiveEntity item : walletActiveRecords) { - String whiteCarNumber = generateWhiteCarNumber(String.valueOf(item.getCardSort()), item.getCardNumber(), ObjectUtil.equals(item.getDelFlag(), YesNoEnum.YES.getCode()) ? "0" : "1"); + for (int i = 0; i < walletActiveRecords.size(); i++) { + WalletActiveEntity traget = walletActiveRecords.get(i); + String whiteCarNumber = generateWhiteCarNumber(String.valueOf(i + 1), traget.getCardNumber(), ObjectUtil.equals(traget.getDelFlag(), YesNoEnum.YES.getCode()) ? "0" : "1"); whiteCarList.add(whiteCarNumber); } result.setCommID(dto.getCommID()); diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/logs/pjcloud-thirdparty-biz/2026-02/debug.2026-02-10.1.log.gz b/pjcloud-thirdparty/pjcloud-thirdparty-biz/logs/pjcloud-thirdparty-biz/2026-02/debug.2026-02-10.1.log.gz new file mode 100644 index 000000000..ab3d86db1 Binary files /dev/null and b/pjcloud-thirdparty/pjcloud-thirdparty-biz/logs/pjcloud-thirdparty-biz/2026-02/debug.2026-02-10.1.log.gz differ diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/mch/MchManageController.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/mch/MchManageController.java index 06df108b5..05ed9ab86 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/mch/MchManageController.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/mch/MchManageController.java @@ -142,10 +142,9 @@ public class MchManageController { dto.setVisibleMobile(YesNoEnum.YES.getCode()); if (ObjectUtil.isNotEmpty(user) && ObjectUtil.isNotEmpty(user.getDeptId())) { UserInfo userInfo = remoteUserService.getInnerByUserId(user.getId()).getData(); - List pageList = remoteDeptService.getDescendantList(userInfo.getSysUser().getDeptId()).getData(); - if (ObjectUtil.isNotEmpty(pageList)) { - List deptList = pageList.stream().map(SysDept::getDeptId).distinct().toList(); - dto.setDeptIds(deptList); + MchManageVo targetMch = mchManageService.getViewsCanteenMchByDeptId(userInfo.getSysUser().getDeptId()); + if (ObjectUtil.isNotEmpty(targetMch)) { + dto.setIds(List.of(targetMch.getId())); } } else { R.ok(new Page<>()); diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/mapper/MchManageMapper.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/mapper/MchManageMapper.java index 3372d351c..f4188692e 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/mapper/MchManageMapper.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/mapper/MchManageMapper.java @@ -30,6 +30,7 @@ public interface MchManageMapper extends PjcloudBaseMapper { .eq(dto.getParentIsNull(), MchManageEntity::getParentId, -1L) .likeIfExists(MchManageEntity::getName, dto.getName()) .in(ObjectUtil.isNotEmpty(dto.getDeptIds()), MchManageEntity::getDeptId, dto.getDeptIds()) + .in(ObjectUtil.isNotEmpty(dto.getIds()), MchManageEntity::getId, dto.getIds()) .apply(ObjectUtil.isNotEmpty(dto.getType()), "FIND_IN_SET({0}, types)", dto.getType()) .orderByDesc(MchManageEntity::getSort) .orderByDesc(MchManageEntity::getCreateTime)