diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/order/HardOrderDto.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/order/HardOrderDto.java index 39d575d4c..30aaf4233 100644 --- a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/order/HardOrderDto.java +++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/order/HardOrderDto.java @@ -86,4 +86,9 @@ public class HardOrderDto extends HardOrderEntity implements BaseIsIncludeTreeIn * 统计是否查询子部门 */ Boolean totalIsFindChildren = false; + + /** + * `apptId`不为null + */ + Boolean apptIdNotNull = false; } diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardCanteenDeptTotalController.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardCanteenDeptTotalController.java index 04a45b183..559eb3c7a 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardCanteenDeptTotalController.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardCanteenDeptTotalController.java @@ -4,6 +4,8 @@ import com.bsd.pjcloud.common.core.util.R; import com.bsd.pjcloud.common.data.datascope.DataScope; import com.bsd.pjcloud.common.security.service.PjcloudUser; import com.bsd.pjcloud.common.security.util.SecurityUtils; +import com.bsd.pjcloud.hard.api.constant.order.HardOrderTypeEnum; +import com.bsd.pjcloud.hard.api.constant.order.HardPayTypeEnum; import com.bsd.pjcloud.hard.api.dto.order.HardOrderDto; import com.bsd.pjcloud.hard.api.vo.order.HardCanteenProductTotalVo; import com.bsd.pjcloud.hard.service.HardCanteenTotalService; diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardCanteenTotalController.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardCanteenTotalController.java index 74b67fd68..681bee1b7 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardCanteenTotalController.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardCanteenTotalController.java @@ -2,6 +2,7 @@ package com.bsd.pjcloud.hard.controller.order; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.bsd.pjcloud.common.core.constant.enums.MerchantTypeEnum; import com.bsd.pjcloud.common.core.util.R; import com.bsd.pjcloud.common.data.datascope.DataScope; import com.bsd.pjcloud.common.security.annotation.Inner; @@ -18,6 +19,9 @@ import com.bsd.pjcloud.hard.api.vo.order.app.HardAppProductByCanteenVo; import com.bsd.pjcloud.hard.api.vo.order.app.HardAppProductByClassifyVo; import com.bsd.pjcloud.hard.api.vo.order.app.HardAppProductLikeTopVo; import com.bsd.pjcloud.hard.service.HardCanteenTotalService; +import com.bsd.pjcloud.wallet.api.dto.MchManageDto; +import com.bsd.pjcloud.wallet.api.feign.RemoteMchService; +import com.bsd.pjcloud.wallet.api.vo.MchManageVo; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.security.SecurityRequirement; import io.swagger.v3.oas.annotations.tags.Tag; @@ -42,6 +46,8 @@ public class HardCanteenTotalController { private final HardCanteenTotalService canteenTotalService; + private final RemoteMchService remoteMchService; + /* ************************************* start app start ************************************* */ /** @@ -88,14 +94,28 @@ public class HardCanteenTotalController { @PostMapping("/proudct-total-by-dept") public R> productTotalByDept(@ParameterObject Page page, @RequestBody HardOrderDto dto) { DataScope dataScope = null; + // 查询商户 + MchManageDto mchManageDto = new MchManageDto(); + mchManageDto.setTypesList(List.of(MerchantTypeEnum.CANTEEN.getType())); + List mchList = remoteMchService.scopeList(mchManageDto).getData(); + if (ObjectUtil.isNotEmpty(mchList) && ObjectUtil.isEmpty(dto.getMchIds())) { + dto.setMchIds(mchList.stream().map(MchManageVo::getId).toList()); + } return R.ok(canteenTotalService.productTotalByDept(page, dto, dataScope)); } @Operation(summary = "食堂菜品购买统计", description = "食堂菜品购买统计") @PostMapping("/proudct-total") public R> productTotal(@ParameterObject Page page, @RequestBody HardOrderDto dto) { - DataScope dataScope = DataScope.of().only(true); - return R.ok(canteenTotalService.productTotal(page, dto, dataScope)); + // 查询商户 + MchManageDto mchManageDto = new MchManageDto(); + mchManageDto.setTypesList(List.of(MerchantTypeEnum.CANTEEN.getType())); + List mchList = remoteMchService.scopeList(mchManageDto).getData(); + if (ObjectUtil.isNotEmpty(mchList) && ObjectUtil.isEmpty(dto.getMchIds())) { + dto.setMchIds(mchList.stream().map(MchManageVo::getId).toList()); + } + + return R.ok(canteenTotalService.productTotal(page, dto, null)); } @Operation(summary = "菜品出售统计", description = "菜品出售统计") diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardOrderController.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardOrderController.java index 950db442d..5305ddc31 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardOrderController.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardOrderController.java @@ -30,6 +30,7 @@ import com.bsd.pjcloud.hard.api.constant.order.HardOrderTypeEnum; import com.bsd.pjcloud.hard.api.constant.order.HardPayTypeEnum; import com.bsd.pjcloud.hard.api.dto.app.HardAppCreateOrderScancode; import com.bsd.pjcloud.hard.api.dto.hard.CurrentUserHardTypeInfoDto; +import com.bsd.pjcloud.hard.api.dto.hard.HandCancelCodeDto; import com.bsd.pjcloud.hard.api.dto.hard.HardOfflinePayDto; import com.bsd.pjcloud.hard.api.dto.order.HardOnlineCanteenStatsQueryDto; import com.bsd.pjcloud.hard.api.dto.order.HardOrderDto; @@ -47,6 +48,7 @@ import com.bsd.pjcloud.hard.mapper.order.HardOrderMapper; import com.bsd.pjcloud.hard.api.vo.order.HardOnlineCanteenStatsVo; import com.bsd.pjcloud.hard.service.*; import com.bsd.pjcloud.wallet.api.constant.WalletTypeEnum; +import com.bsd.pjcloud.wallet.api.dto.MchManageDto; import com.bsd.pjcloud.wallet.api.feign.RemoteMchService; import com.bsd.pjcloud.wallet.api.vo.MchManageVo; import jakarta.servlet.http.HttpServletResponse; @@ -177,13 +179,13 @@ public class HardOrderController { @Operation(summary = "app查询食堂订餐的所有商户统计", description = "app查询食堂订餐的所有商户统计") @GetMapping("/app/caneen-rserve-mch-total") - public R appCaneenRserveMchTotal() { + public R appCaneenRserveMchTotal(@ParameterObject HardOrderDto dto) { DataScope dataScope = null; PjcloudUser user = SecurityUtils.getUser(); - - HardOrderDto dto = new HardOrderDto(); + dto.setOrderType(HardOrderTypeEnum.RESERVE.getType()); dto.setTotalIsFindChildren(false); + dto.setApptIdNotNull(true); return R.ok(canteenTotalService.listByDept(dto, user, dataScope)); } @@ -194,9 +196,17 @@ public class HardOrderController { dto.setIsFindApptList(true); dto.setOrderType(HardOrderTypeEnum.RESERVE.getType()); dto.setOrderStatusCodes(List.of(HardOrderStatusEnum.PAY.getType(), HardOrderStatusEnum.CANCEL.getType())); + dto.setApptIdNotNull(true); - DataScope dataScope = DataScope.of().only(true); - dataScope.setScopeDeptName("user_dept_id"); + DataScope dataScope = null; + + // 查询商户 + MchManageDto mchManageDto = new MchManageDto(); + mchManageDto.setTypesList(List.of(MerchantTypeEnum.CANTEEN.getType())); + List mchList = mchService.scopeList(mchManageDto).getData(); + if (ObjectUtil.isNotEmpty(mchList) && ObjectUtil.isEmpty(dto.getMchIds())) { + dto.setMchIds(mchList.stream().map(MchManageVo::getId).toList()); + } return R.ok(hardwareOrderService.scopePageList(page, dto, dataScope)); } @@ -346,6 +356,18 @@ public class HardOrderController { return R.ok(hardwareOrderService.appCreateActOrder(body)); } + @Operation(summary = "app核销线上预订", description = "app核销线上预订") + @PutMapping("/app/rserve-cancel-order/{orderId}") + @Idempotent(expireTime = 1, key = "'/hard-order/app/rserve-cancel-order' + #orderId ", info = "正在核销中,请勿重复操作") + public R appRserveCancelOrder(@PathVariable Long orderId) { + PjcloudUser user = SecurityUtils.getUser(); + HandCancelCodeDto body = new HandCancelCodeDto(); + body.setUserId(user.getId()); + body.setOrderId(orderId); + body.setHardwareId(-1L); + return R.ok(hardwareOrderService.handCancelCode(body)); + } + /* ************************************* end app end ************************************* */ @Operation(summary = "分页查询", description = "分页查询") diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardCanteenTotalServiceImpl.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardCanteenTotalServiceImpl.java index 637f721f2..10f8631b2 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardCanteenTotalServiceImpl.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardCanteenTotalServiceImpl.java @@ -176,10 +176,6 @@ public class HardCanteenTotalServiceImpl implements HardCanteenTotalService { @Override public Page productTotal(Page page, HardOrderDto dto, DataScope dataScope) { dto.setOrderStatusCodes(HardOrderStatusEnum.getPaySuccessCodes()); - new PjcloudDefaultDataScopeHandle(dataScopeService).calcScope(dataScope); - if (ObjectUtil.isNotEmpty(dataScope.getDeptList())) { - dto.setScopeDeptIds(dataScope.getDeptList()); - } Page pageList = hardCarMapper.productTotal(page, dto, null); if (ObjectUtil.isNotEmpty(pageList)) { for (HardCanteenProductTotalVo v : pageList.getRecords()) { @@ -208,8 +204,8 @@ public class HardCanteenTotalServiceImpl implements HardCanteenTotalService { // 查询所有的自营食堂 MchManageDto mchListDto = new MchManageDto(); mchListDto.setTypesList(List.of(MerchantTypeEnum.CANTEEN.getType())); - mchListDto.setScopeUserDeptId(user.getDeptId()); - List mchList = remoteMchService.list(mchListDto).getData(); + // mchListDto.setScopeUserDeptId(user.getDeptId()); + List mchList = remoteMchService.scopeList(mchListDto).getData(); if (ObjectUtil.isEmpty(mchList)) return null; dto.setMchIds(mchList.stream().map(MchManageVo::getId).toList()); List list = hardCarMapper.listByDept(dto, dataScope); 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 a54f39974..f93dfd56b 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 @@ -222,21 +222,29 @@ public class HardOrderServiceImpl extends ServiceImpl userVoList = userService.getUserDeptByIds(List.of(detail.getUserId())).getData(); - if (ObjectUtil.isNotEmpty(userVoList) && ObjectUtil.isNotEmpty(userVoList.get(0))) { - DataUtil.convertUserDept(detail, userVoList.get(0)); + CompletableFuture findUserFuture = CompletableFuture.runAsync(() -> { + if (ObjectUtil.isNotEmpty(detail.getUserId())) { + List userVoList = userService.getUserDeptByIds(List.of(detail.getUserId())).getData(); + if (ObjectUtil.isNotEmpty(userVoList) && ObjectUtil.isNotEmpty(userVoList.get(0))) { + DataUtil.convertUserDept(detail, userVoList.get(0)); + } } - } + }); // 商户 - if (ObjectUtil.isNotEmpty(detail.getMerchantId())) { - R mch = remoteMchService.getById(detail.getMerchantId()); - if (ObjectUtil.isNotEmpty(mch.getData())) { - WalletDataUtil.convertMch(detail, mch.getData()); + CompletableFuture findMchFuture = CompletableFuture.runAsync(() -> { + RequestContextHolder.setRequestAttributes(requestAttributes); + if (ObjectUtil.isNotEmpty(detail.getMerchantId())) { + R mch = remoteMchService.getById(detail.getMerchantId()); + if (ObjectUtil.isNotEmpty(mch.getData())) { + WalletDataUtil.convertMch(detail, mch.getData()); + } } - } + }); // 二维码 if (isHaveCode(detail)) { WalletCodeUseEntity codeDetail = remoteCodeUseService.getByBizId(detail.getId()).getData(); @@ -244,6 +252,24 @@ public class HardOrderServiceImpl extends ServiceImpl findCarFuture = CompletableFuture.runAsync(() -> { + RequestContextHolder.setRequestAttributes(requestAttributes); + List carList = hardCarService.getByParentCarId(detail.getParentCarId()); + List carVoList = BeanUtils.toBean(carList, HardCarVo.class); + detail.setCarList(carVoList); + }); + // 预约订单 + CompletableFuture findApptFuture = CompletableFuture.runAsync(() -> { + RequestContextHolder.setRequestAttributes(requestAttributes); + HardApptEntity apptDetail = hardApptService.getById(detail.getApptId()); + if (ObjectUtil.isEmpty(apptDetail)) return; + detail.setApptTitle(apptDetail.getTitle()); + detail.setApptHourType(apptDetail.getHourType()); + detail.setApptStartTime(apptDetail.getStartTime()); + detail.setApptEndTime(apptDetail.getEndTime()); + }); + CompletableFuture.allOf(findUserFuture, findMchFuture, findCarFuture, findApptFuture).join(); } return detail; } diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/order/HardCarMapper.xml b/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/order/HardCarMapper.xml index 1ee98c4d0..51400f14d 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/order/HardCarMapper.xml +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/order/HardCarMapper.xml @@ -241,6 +241,12 @@ o.hour_type not in ('-1') + + and o.order_status = #{dto.orderStatus} + + + and o.appt_id is not null + and o.order_status in diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/order/HardOrderMapper.xml b/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/order/HardOrderMapper.xml index fa4b7b049..81be7458b 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/order/HardOrderMapper.xml +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/order/HardOrderMapper.xml @@ -85,6 +85,9 @@ a.del_flag = '0' + + and a.appt_id is not null + and a.hard_id = #{dto.hardId} diff --git a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/entity/mch/MchManageEntity.java b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/entity/mch/MchManageEntity.java index e50d718aa..f56b1336a 100644 --- a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/entity/mch/MchManageEntity.java +++ b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/entity/mch/MchManageEntity.java @@ -220,6 +220,11 @@ public class MchManageEntity extends Model { @Data public static class FunctionScope { + /** + * 是否开启商城 + */ + private Boolean mallEnable; + /** * 是否启用报餐 */ diff --git a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/feign/RemoteMchService.java b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/feign/RemoteMchService.java index 8a5463123..cdcfdf3d1 100644 --- a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/feign/RemoteMchService.java +++ b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/feign/RemoteMchService.java @@ -21,6 +21,9 @@ public interface RemoteMchService { @PostMapping("/mch-manage/list") R> list(@RequestBody MchManageDto body); + @PostMapping("/mch-manage/scope-list") + R> scopeList(@RequestBody MchManageDto body); + @NoToken @GetMapping("/mch-manage/get-by-types") R> getByTypes(@RequestParam List types); diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/WalletCodeUseController.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/WalletCodeUseController.java index f48d34a1a..f8e89aac2 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/WalletCodeUseController.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/WalletCodeUseController.java @@ -104,6 +104,12 @@ public class WalletCodeUseController { dto.setUserId(user.getId()); return R.ok(walletCodeUseService.pageJoin(page, dto)); } + + @Operation(summary = "根据短码查询加密信息", description = "根据短码查询加密信息") + @GetMapping("/app/get-by-short-code") + public R appGetByShortCode(@RequestParam String shortCode) { + return R.ok(walletCodeUseService.getByShortCode(shortCode)); + } /* ************************************* end app end ************************************* */ /* ************************************* start android start ************************************* */ 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 8318d3b86..533198194 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 @@ -51,6 +51,13 @@ public class MchManageController { private final RemoteUserService remoteUserService; /* ************************************* start 远程调用 start ************************************* */ + + @PostMapping("/scope-list") + public R> scopeList(@RequestBody MchManageDto body) { + List list = mchManageService.scopeList(body, DataScope.of().only(true)); + return R.ok(list); + } + @Inner @PostMapping("/list") public R> remoteList(@RequestBody MchManageDto body) { diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/MchManageService.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/MchManageService.java index 180d9c94e..d0f5db899 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/MchManageService.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/MchManageService.java @@ -37,6 +37,8 @@ public interface MchManageService extends IService { List list(MchManageDto dto); + List scopeList(MchManageDto dto, DataScope dataScope); + MchManageVo getByDeptId(Long deptId, MerchantTypeEnum type); MchManageVo getFirstMch(List deptIds, List mchTypeList); diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/mch/MchManageServiceImpl.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/mch/MchManageServiceImpl.java index 1f5f1d6e2..8559b2fa4 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/mch/MchManageServiceImpl.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/mch/MchManageServiceImpl.java @@ -318,6 +318,21 @@ public class MchManageServiceImpl extends ServiceImpl scopeList(MchManageDto dto, DataScope dataScope) { + List list = baseMapper.scopeList(dto, dataScope); + if (ObjectUtil.isEmpty(list)) return null; + // 部门 + List deptIds = list.stream().map(MchManageVo::getDeptId).distinct().toList(); + if (ObjectUtil.isNotEmpty(deptIds)) { + R> deptList = remoteDeptService.getDeptByDeptIds(deptIds); + if (ObjectUtil.isNotEmpty(deptList.getData())) { + DataUtil.convertDeptList(list, deptList.getData()); + } + } + return list; + } + @Override public MchManageVo getByDeptId(Long deptId, MerchantTypeEnum type) { MchManageEntity mchManage = baseMapper.selectOne(new LambdaQueryWrapper()