diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/android/HardAdUserVo.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/android/HardAdUserVo.java index f52f16579..2af51ea2e 100644 --- a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/android/HardAdUserVo.java +++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/android/HardAdUserVo.java @@ -44,4 +44,9 @@ public class HardAdUserVo { * 是否冻结饭卡 */ private String walletIsFreeze; + + /** + * 查询用户食堂信息 + */ + private Long canteenId; } diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardOrderService.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardOrderService.java index 1b6ed8de2..ec193b7b2 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardOrderService.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardOrderService.java @@ -3,6 +3,7 @@ package com.bsd.pjcloud.hard.service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.bsd.pjcloud.admin.api.dto.UserInfo; +import com.bsd.pjcloud.admin.api.entity.SysUser; import com.bsd.pjcloud.common.core.constant.enums.YesNoEnum; import com.bsd.pjcloud.common.data.datascope.DataScope; import com.bsd.pjcloud.common.security.service.PjcloudUser; @@ -14,6 +15,7 @@ import com.bsd.pjcloud.hard.api.dto.order.app.HardAppCreateOrderDto; import com.bsd.pjcloud.hard.api.entity.order.HardOrderEntity; import com.bsd.pjcloud.hard.api.vo.order.HardOrderVo; import com.bsd.pjcloud.thirdparty.dto.ks.KsRecognitionCallbackDto; +import com.bsd.pjcloud.wallet.api.vo.MchManageVo; import jakarta.validation.Valid; import java.util.List; @@ -70,6 +72,8 @@ public interface HardOrderService extends IService { */ Integer computeExtraPrice(Integer price); + Integer computeExtraPrice(Integer price, MchManageVo mch, SysUser sysUser); + /** * 核销二维码 */ diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/HardApiServiceImpl.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/HardApiServiceImpl.java index 43ad89152..4dc18aa4a 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/HardApiServiceImpl.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/HardApiServiceImpl.java @@ -4,12 +4,15 @@ import cn.hutool.core.util.ObjectUtil; import com.bsd.pjcloud.admin.api.dto.UserInfo; import com.bsd.pjcloud.admin.api.entity.SysUser; import com.bsd.pjcloud.admin.api.feign.RemoteUserService; +import com.bsd.pjcloud.common.core.constant.enums.MerchantTypeEnum; import com.bsd.pjcloud.hard.api.constant.HardTypeEnum; import com.bsd.pjcloud.hard.api.vo.android.HardAdUserVo; import com.bsd.pjcloud.hard.service.HardApiService; import com.bsd.pjcloud.wallet.api.constant.WalletTypeEnum; import com.bsd.pjcloud.wallet.api.entity.WalletManageEntity; +import com.bsd.pjcloud.wallet.api.feign.RemoteMchService; import com.bsd.pjcloud.wallet.api.feign.RemoteWalletService; +import com.bsd.pjcloud.wallet.api.vo.MchManageVo; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -23,6 +26,7 @@ public class HardApiServiceImpl implements HardApiService { private final RemoteUserService userService; private final RemoteWalletService remoteWalletService; + private final RemoteMchService remoteMchService; @Override public HardAdUserVo getUserById(Long userId, HardTypeEnum type) { @@ -48,6 +52,11 @@ public class HardApiServiceImpl implements HardApiService { result.setWalletTypeId(wallet.getWalletTypeId()); result.setWalletBalance(wallet.getBalance()); result.setWalletIsFreeze(wallet.getIsFreeze()); + // 查询用户食堂信息 + MchManageVo mchDetail = remoteMchService.getFirstMchByDeptId(user.getSysUser().getDeptId(), MerchantTypeEnum.CANTEEN).getData(); + if (ObjectUtil.isNotEmpty(mchDetail)) { + result.setCanteenId(mchDetail.getId()); + } return result; } @@ -72,6 +81,11 @@ public class HardApiServiceImpl implements HardApiService { result.setWalletTypeId(wallet.getWalletTypeId()); result.setWalletBalance(wallet.getBalance()); result.setWalletIsFreeze(wallet.getIsFreeze()); + // 查询用户食堂信息 + MchManageVo mchDetail = remoteMchService.getFirstMchByDeptId(user.getSysUser().getDeptId(), MerchantTypeEnum.CANTEEN).getData(); + if (ObjectUtil.isNotEmpty(mchDetail)) { + result.setCanteenId(mchDetail.getId()); + } return result; } } 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 973da493c..a09fbde1b 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 @@ -54,6 +54,7 @@ import com.bsd.pjcloud.thirdparty.dto.ks.KsRecognitionCallbackDto; import com.bsd.pjcloud.wallet.api.constant.WalletBizEnum; import com.bsd.pjcloud.wallet.api.constant.WalletCodeBizEnum; import com.bsd.pjcloud.wallet.api.constant.WalletTypeEnum; +import com.bsd.pjcloud.wallet.api.constant.mch.WalletMchRulePriceTypeEnum; import com.bsd.pjcloud.wallet.api.dto.WalletBalanceTransactionDto; import com.bsd.pjcloud.wallet.api.entity.WalletCodeUseEntity; import com.bsd.pjcloud.wallet.api.entity.WalletManageEntity; @@ -62,6 +63,7 @@ import com.bsd.pjcloud.wallet.api.feign.*; import com.bsd.pjcloud.wallet.api.utils.WalletDataUtil; import com.bsd.pjcloud.wallet.api.vo.MchManageVo; import com.bsd.pjcloud.wallet.api.vo.WalletSettingVo; +import com.bsd.pjcloud.wallet.api.vo.mch.MchRuleJoinDtoVo; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -111,6 +113,7 @@ public class HardOrderServiceImpl extends ServiceImpl list = mchRuleJoinService.innerMchRoleList(mch.getId()).getData(); + if (ObjectUtil.isEmpty(list)) return extraPrice; + // 查询用户食堂 + MchManageVo userMch = remoteMchService.getFirstMchByDeptId(sysUser.getDeptId(), MerchantTypeEnum.CANTEEN).getData(); + for (MchRuleJoinDtoVo v : list) { + Long basePrice = v.getBasePrice(); + Long multiple = v.getMultiple(); + String rulePriceType = v.getRulePriceType(); + if (!ObjectUtil.isAllNotEmpty(price, mch, sysUser)) continue; + if (price < basePrice) continue; + Long surplus = price - basePrice; + BigDecimal extraPriceBD = BigDecimal.valueOf(surplus).multiply(BigDecimal.valueOf(multiple)).divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP); + // 10 跨单位额外支付 + if (ObjectUtil.equals(rulePriceType, WalletMchRulePriceTypeEnum.STRIDE_LIMIT.getCode())) { + if (ObjectUtil.isEmpty(userMch) || ObjectUtil.notEqual(userMch.getId(), v.getSourceMchId())) { + continue; + } + extraPrice += extraPriceBD.setScale(0, RoundingMode.HALF_UP).intValueExact(); + continue; + } + // 20 每餐额外支付 + if (ObjectUtil.equals(rulePriceType, WalletMchRulePriceTypeEnum.EVERY_LIMIT.getCode())) { + extraPrice += extraPriceBD.setScale(0, RoundingMode.HALF_UP).intValueExact(); + continue; + } + } + } catch (Exception e) { + log.error("|{}|计算额外金额错误", TAG, e); + } + return extraPrice; + } + @Override @Transactional(rollbackFor = Exception.class) public Boolean handCancelCode(HandCancelCodeDto dto) { diff --git a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/feign/RemoteMchRuleJoinService.java b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/feign/RemoteMchRuleJoinService.java new file mode 100644 index 000000000..6b261cde9 --- /dev/null +++ b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/feign/RemoteMchRuleJoinService.java @@ -0,0 +1,21 @@ +package com.bsd.pjcloud.wallet.api.feign; + +import com.bsd.pjcloud.common.core.constant.ServiceNameConstants; +import com.bsd.pjcloud.common.core.util.R; +import com.bsd.pjcloud.common.feign.annotation.NoToken; +import com.bsd.pjcloud.wallet.api.vo.mch.MchRuleJoinDtoVo; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestParam; + +import java.util.List; + + +@FeignClient(contextId = "remoteMchRuleJoinService", value = ServiceNameConstants.WALLET_SERVICE) +public interface RemoteMchRuleJoinService { + + @NoToken + @GetMapping("/mch-rule-join/inner/list") + R> innerMchRoleList(@RequestParam Long targetMchId); + +} diff --git a/pjcloud-wallet/pjcloud-wallet-api/src/main/resources/META-INF/spring/org.springframework.cloud.openfeign.FeignClient.imports b/pjcloud-wallet/pjcloud-wallet-api/src/main/resources/META-INF/spring/org.springframework.cloud.openfeign.FeignClient.imports index b23364a6d..c093ca935 100644 --- a/pjcloud-wallet/pjcloud-wallet-api/src/main/resources/META-INF/spring/org.springframework.cloud.openfeign.FeignClient.imports +++ b/pjcloud-wallet/pjcloud-wallet-api/src/main/resources/META-INF/spring/org.springframework.cloud.openfeign.FeignClient.imports @@ -1,4 +1,5 @@ com.bsd.pjcloud.wallet.api.feign.RemoteWalletService +com.bsd.pjcloud.wallet.api.feign.RemoteMchRuleJoinService com.bsd.pjcloud.wallet.api.feign.RemoteCodeUseService com.bsd.pjcloud.wallet.api.feign.RemoteWalletRechargeService com.bsd.pjcloud.wallet.api.feign.RemoteMchService diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/mch/MchRuleJoinController.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/mch/MchRuleJoinController.java index 465a85d30..4a1aba4e4 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/mch/MchRuleJoinController.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/mch/MchRuleJoinController.java @@ -5,11 +5,14 @@ import cn.hutool.core.collection.CollUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.bsd.pjcloud.common.core.constant.enums.YesNoEnum; import com.bsd.pjcloud.common.core.util.R; import com.bsd.pjcloud.common.data.datascope.DataScope; import com.bsd.pjcloud.common.log.annotation.SysLog; +import com.bsd.pjcloud.common.security.annotation.Inner; import com.bsd.pjcloud.wallet.api.dto.mch.MchRuleJoinDto; import com.bsd.pjcloud.wallet.api.entity.mch.MchRuleJoinDtoEntity; +import com.bsd.pjcloud.wallet.api.vo.mch.MchRuleJoinDtoVo; import com.bsd.pjcloud.wallet.service.MchRuleJoinService; import org.springframework.security.access.prepost.PreAuthorize; import com.bsd.pjcloud.common.excel.annotation.ResponseExcel; @@ -33,6 +36,34 @@ public class MchRuleJoinController { private final MchRuleJoinService mchRuleJoinService; + /* ************************************* start 远程调用 start ************************************* */ + + @Inner + @Operation(summary = "获取钱包规则(android离线计算展示使用)", description = "获取钱包规则(android离线计算展示使用)") + @GetMapping("/inner/list") + public R> innerMchRoleList(@RequestParam Long targetMchId) { + DataScope dataScope = null; + MchRuleJoinDtoEntity dto = new MchRuleJoinDtoEntity(); + dto.setTargetMchId(targetMchId); + dto.setStatus(YesNoEnum.YES.getCode()); + return R.ok(mchRuleJoinService.scopeList(dto, dataScope)); + } + + /* ************************************* end 远程调用 end ************************************* */ + + + /* ************************************* start andorid start ************************************* */ + + @Operation(summary = "获取钱包规则(android离线计算展示使用)", description = "获取钱包规则(android离线计算展示使用)") + @GetMapping("/ad/list") + public R> adMchRoleList(@ParameterObject MchRuleJoinDtoEntity dto) { + DataScope dataScope = null; + dto.setStatus(YesNoEnum.YES.getCode()); + return R.ok(mchRuleJoinService.scopeList(dto, dataScope)); + } + + /* ************************************* end andorid end ************************************* */ + @Operation(summary = "分页查询", description = "分页查询") @GetMapping("/page") @PreAuthorize("@pms.hasPermission('dzc_walletRuleMchConfig_view')") diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/mapper/mch/WalletRuleMchConfigMapper.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/mapper/mch/WalletRuleMchConfigMapper.java index 8e7b144ed..b05677408 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/mapper/mch/WalletRuleMchConfigMapper.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/mapper/mch/WalletRuleMchConfigMapper.java @@ -9,10 +9,14 @@ import com.bsd.pjcloud.wallet.api.vo.mch.MchRuleJoinDtoVo; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; +import java.util.List; + @Mapper public interface WalletRuleMchConfigMapper extends PjcloudBaseMapper { Page pageScopeList(Page page, @Param("dto") MchRuleJoinDto dto, DataScope dataScope); + List scopeList(@Param("dto") MchRuleJoinDtoEntity dto, DataScope dataScope); + MchRuleJoinDtoVo joinDetail(@Param("id") Long id); } \ No newline at end of file diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/MchRuleJoinService.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/MchRuleJoinService.java index 79f89700f..332c0f5cf 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/MchRuleJoinService.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/MchRuleJoinService.java @@ -8,6 +8,7 @@ import com.bsd.pjcloud.wallet.api.entity.mch.MchRuleJoinDtoEntity; import com.bsd.pjcloud.wallet.api.vo.mch.MchRuleJoinDtoVo; import java.util.ArrayList; +import java.util.List; public interface MchRuleJoinService extends IService { @@ -16,6 +17,8 @@ public interface MchRuleJoinService extends IService { */ Page pageScopeList(Page page, MchRuleJoinDto dto, DataScope dataScope); + List scopeList(MchRuleJoinDtoEntity dto, DataScope dataScope); + /** * 新增 */ diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/mch/MchRuleJoinControllerServiceImpl.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/mch/MchRuleJoinControllerServiceImpl.java index cc8e724c1..10458c5ac 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/mch/MchRuleJoinControllerServiceImpl.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/mch/MchRuleJoinControllerServiceImpl.java @@ -21,6 +21,7 @@ import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; import java.util.ArrayList; +import java.util.List; @Validated @@ -58,8 +59,12 @@ public class MchRuleJoinControllerServiceImpl extends ServiceImpl scopeList(MchRuleJoinDtoEntity dto, DataScope dataScope) { + return baseMapper.scopeList(dto, dataScope); + } + /** * 是否重复 */ diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/resources/mapper/mch/MchManageMapper.xml b/pjcloud-wallet/pjcloud-wallet-biz/src/main/resources/mapper/mch/MchManageMapper.xml index 4942cd30d..36d286413 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/resources/mapper/mch/MchManageMapper.xml +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/resources/mapper/mch/MchManageMapper.xml @@ -98,7 +98,7 @@ - and a.id in + and a.id not in #{v} diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/resources/mapper/mch/MchRuleJoinMapper.xml b/pjcloud-wallet/pjcloud-wallet-biz/src/main/resources/mapper/mch/MchRuleJoinMapper.xml index 015011d50..c0d5416ac 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/resources/mapper/mch/MchRuleJoinMapper.xml +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/resources/mapper/mch/MchRuleJoinMapper.xml @@ -42,9 +42,12 @@ and a.rule_price_config_id = #{dto.rulePriceConfigId} + + and a.status = #{dto.status} + - + + + +