diff --git a/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/controller/CanteenOnlineSpuController.java b/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/controller/CanteenOnlineSpuController.java index c8170ec19..684e79835 100644 --- a/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/controller/CanteenOnlineSpuController.java +++ b/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/controller/CanteenOnlineSpuController.java @@ -191,7 +191,7 @@ public class CanteenOnlineSpuController { */ @Operation(summary = "通过ids查询", description = "通过ids查询") @PostMapping("/app/getSpuListByIds") - @PreAuthorize("@pms.hasPermission('canteen_canteenSpu_view')") + // @PreAuthorize("@pms.hasPermission('canteen_canteenSpu_view')") public R> getByIds(@RequestBody List ids) { List list = canteenOnlineSpuService.list(new LambdaQueryWrapper().in(CanteenOnlineSpuEntity::getId, ids)); List canteenOnlineSpuAppVOS = BeanUtils.toBean(list, CanteenOnlineSpuAppVO.class); diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/async/OfflineOrder.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/async/OfflineOrder.java index 91b75025e..d21281bb6 100644 --- a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/async/OfflineOrder.java +++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/async/OfflineOrder.java @@ -7,6 +7,7 @@ import com.bsd.pjcloud.hard.api.constant.order.HardPayTypeEnum; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; +import java.time.LocalDateTime; import java.util.Date; import java.util.List; @@ -70,10 +71,10 @@ public class OfflineOrder { private Double weight; @Schema(description = "支付时间") - private String payTime; + private LocalDateTime payTime; @Schema(description = "创建时间") - private Date createTime; + private LocalDateTime createTime; @Schema(description = "购物车列表") private List carList; diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/hard/HardOfflinePayDto.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/hard/HardOfflinePayDto.java new file mode 100644 index 000000000..41b2fba5e --- /dev/null +++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/hard/HardOfflinePayDto.java @@ -0,0 +1,12 @@ +package com.bsd.pjcloud.hard.api.dto.hard; + +import lombok.Data; + +import java.util.List; + +@Data +public class HardOfflinePayDto { + + private List orderIds; + +} 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 ad5ef2478..e2c5a251a 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 @@ -48,4 +48,9 @@ public class HardOrderDto extends HardOrderEntity implements BaseIsIncludeTreeIn */ private Boolean isFindCarList = false; + /** + * 退款相关 + */ + private String afterSaleNo; + } diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/feign/RemoteHardThirdPayService.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/feign/RemoteHardThirdPayService.java index a23916164..dd703ccc7 100644 --- a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/feign/RemoteHardThirdPayService.java +++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/feign/RemoteHardThirdPayService.java @@ -3,6 +3,7 @@ package com.bsd.pjcloud.hard.api.feign; import com.bsd.pjcloud.common.core.constant.ServiceNameConstants; import com.bsd.pjcloud.common.feign.annotation.NoToken; import com.bsd.pjcloud.thirdparty.constant.pay.ThirdPaySoureBizTypeEnum; +import com.bsd.pjcloud.thirdparty.dto.pay.PayDetailDto; import com.bsd.pjcloud.thirdparty.dto.pay.PayDto; import com.bsd.pjcloud.thirdparty.dto.pay.RefundDto; import com.bsd.pjcloud.thirdparty.dto.pay.WaterDto; @@ -41,4 +42,11 @@ public interface RemoteHardThirdPayService { @NoToken @PostMapping("/hard-third-pay/water") PayBaseVo> waterList(@RequestBody WaterDto dto, @RequestParam ThirdPaySoureBizTypeEnum soureType); + + /** + * 订单详情 + */ + @NoToken + @PostMapping("/hard-third-pay/detail") + PayBaseVo orderDetail(@RequestBody PayDetailDto dto, @RequestParam ThirdPaySoureBizTypeEnum soureType); } diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/order/HardOrderVo.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/order/HardOrderVo.java index 2f01ab08b..129ba706e 100644 --- a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/order/HardOrderVo.java +++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/order/HardOrderVo.java @@ -51,4 +51,11 @@ public class HardOrderVo extends HardOrderEntity implements BaseUserInterface, B * 预约二维码信息 */ private String reserveCode; + + /** + * 退款相关 + */ + private Long afterSaleId; + + private String afterSaleNo; } diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/hard/HardApiController.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/hard/HardApiController.java index cbb3446c2..fc55a87d3 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/hard/HardApiController.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/hard/HardApiController.java @@ -96,7 +96,7 @@ public class HardApiController { @PostMapping("/sync-offline-order") @Operation(summary = "同步离线订单") - @Idempotent(expireTime = 10, info = "正在处理中,请勿重复操作") + @Idempotent(expireTime = 1, info = "正在处理中,请勿重复操作") public R> syncOfflineOrder(@Valid @RequestBody SyncOfflineReqVo dto) { return R.ok(hardOrderSyncService.syncOfflineOrder(dto)); } 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 f81378aa7..f7d1f2e97 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 @@ -28,6 +28,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.HardOfflinePayDto; import com.bsd.pjcloud.hard.api.dto.order.HardOrderDto; import com.bsd.pjcloud.hard.api.dto.order.HardOrderPreferencesDto; import com.bsd.pjcloud.hard.api.dto.order.app.HardAppCreateOrderDto; @@ -37,6 +38,7 @@ import com.bsd.pjcloud.hard.api.vo.order.excel.HardOrderExcelVo; import com.bsd.pjcloud.hard.mapper.order.HardOrderMapper; import com.bsd.pjcloud.hard.service.HardManagerService; import com.bsd.pjcloud.hard.service.HardOrderService; +import com.bsd.pjcloud.hard.service.HardOrderSyncService; import com.bsd.pjcloud.wallet.api.constant.WalletTypeEnum; import com.bsd.pjcloud.wallet.api.feign.RemoteMchService; import com.bsd.pjcloud.wallet.api.vo.MchManageVo; @@ -73,6 +75,7 @@ public class HardOrderController { private final HardOrderService hardwareOrderService; private final HardManagerService hardManagerService; + private final HardOrderSyncService hardOrderSyncService; private final HardOrderMapper hardOrderMapper; @@ -227,6 +230,14 @@ public class HardOrderController { return R.ok(hardwareOrderService.join(id)); } + @Operation(summary = "离线订单手动支付", description = "离线订单手动支付") + @PostMapping("/offline-pay") + @PreAuthorize("@pms.hasPermission('hard_hardwareOrder_offlinePay')") + public R offlinePay(@RequestBody HardOfflinePayDto dto) { + hardOrderSyncService.offlinePay(dto.getOrderIds()); + return R.ok(); + } + @GetMapping("/export") @PreAuthorize("@pms.hasPermission('hard_hardwareOrder_export')") public void export(HttpServletResponse response, HardOrderDto dto) throws IOException { @@ -246,7 +257,7 @@ public class HardOrderController { dto.setMchIds(mchDtoIds); } } - List list = hardwareOrderService.scopeList(dto); + List list = hardwareOrderService.scopeList(dto, DataScope.of()); List excelList = BeanUtils.toBean(list, HardOrderExcelVo.class); try (ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).withTemplate(ResourceUtil.getStream("file/订单交易汇总.xlsx")).build()) { WriteSheet writeSheet = EasyExcel.writerSheet().build(); diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/third/HardThirdPayController.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/third/HardThirdPayController.java index b6900d15d..39b389e82 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/third/HardThirdPayController.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/third/HardThirdPayController.java @@ -4,6 +4,7 @@ import com.bsd.pjcloud.common.log.annotation.SysLog; import com.bsd.pjcloud.common.security.annotation.Inner; import com.bsd.pjcloud.hard.service.HardThirdPayService; import com.bsd.pjcloud.thirdparty.constant.pay.ThirdPaySoureBizTypeEnum; +import com.bsd.pjcloud.thirdparty.dto.pay.PayDetailDto; import com.bsd.pjcloud.thirdparty.dto.pay.PayDto; import com.bsd.pjcloud.thirdparty.dto.pay.RefundDto; import com.bsd.pjcloud.thirdparty.dto.pay.WaterDto; @@ -54,4 +55,12 @@ public class HardThirdPayController { return hardThirdPayService.waterList(dto, soureType); } + @Inner + @PostMapping("/detail") + @SysLog("订单详情") + @Operation(summary = "订单详情") + public PayBaseVo orderDetail(@RequestBody PayDetailDto dto, @RequestParam ThirdPaySoureBizTypeEnum soureType) { + return hardThirdPayService.orderDetail(dto, soureType); + } + } diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/mapper/order/HardAfterSaleLogMapper.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/mapper/order/HardAfterSaleLogMapper.java index cddab1e9b..701fe9c35 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/mapper/order/HardAfterSaleLogMapper.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/mapper/order/HardAfterSaleLogMapper.java @@ -7,6 +7,7 @@ import com.bsd.pjcloud.common.data.datascope.PjcloudBaseMapper; import com.bsd.pjcloud.hard.api.dto.order.HardAfterSaleLogDto; import com.bsd.pjcloud.hard.api.entity.order.HardAfterSaleLogEntity; import com.bsd.pjcloud.hard.api.vo.order.HardAfterSaleLogVo; +import com.bsd.pjcloud.hard.api.vo.order.HardAfterSaleVo; import com.github.yulichang.wrapper.MPJLambdaWrapper; import org.apache.ibatis.annotations.Mapper; diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/mapper/order/HardOrderMapper.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/mapper/order/HardOrderMapper.java index 20535d003..d356202aa 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/mapper/order/HardOrderMapper.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/mapper/order/HardOrderMapper.java @@ -4,8 +4,10 @@ import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.bsd.pjcloud.common.core.constant.enums.YesNoEnum; import com.bsd.pjcloud.common.data.datascope.DataScope; import com.bsd.pjcloud.common.data.datascope.PjcloudBaseMapper; +import com.bsd.pjcloud.hard.api.constant.order.HardOrderStatusEnum; import com.bsd.pjcloud.hard.api.dto.order.HardChartLatitudeVo; import com.bsd.pjcloud.hard.api.dto.order.HardOrderDto; import com.bsd.pjcloud.hard.api.dto.order.HardOrderSumAndCountDto; @@ -89,12 +91,27 @@ public interface HardOrderMapper extends PjcloudBaseMapper { return selectJoinOne(HardOrderVo.class, wrapper); } + /** + * 查询离线订单 + */ + default List getOfflineOrderList(List orderIds) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper() + .in(HardOrderEntity::getId, orderIds) + .eq(HardOrderEntity::getOrderStatus, HardOrderStatusEnum.OFFLINE_CREATE.getType()) + .eq(HardOrderEntity::getIsOfflineOrder, YesNoEnum.YES.getCode()) + .orderByDesc(HardOrderEntity::getCreateTime) + .orderByDesc(HardOrderEntity::getId); + return selectList(wrapper); + } + default List list(HardOrderDto dto) { return selectListByScope(commonWrapper(dto), DataScope.of()); } Page scopePageList(Page page, @Param("dto") HardOrderDto dto, DataScope dataScope); + List scopeList(@Param("dto") HardOrderDto dto, DataScope dataScope); + List listSb(@Param("dto") HardOrderDto dto, DataScope dataScope); List listCs(@Param("dto") HardOrderDto dto, DataScope dataScope); 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 6a4a89bb6..1b6ed8de2 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 @@ -29,7 +29,7 @@ public interface HardOrderService extends IService { Page scopePageList(Page page, HardOrderDto dto, DataScope dataScope); - List scopeList(HardOrderDto dto); + List scopeList(HardOrderDto dto, DataScope dataScope); HardOrderVo join(Long id); diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardOrderSyncService.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardOrderSyncService.java index 843c40226..745cc5d3f 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardOrderSyncService.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardOrderSyncService.java @@ -14,4 +14,8 @@ public interface HardOrderSyncService { */ List syncOfflineOrder(@Valid SyncOfflineReqVo dto); + /** + * 离线订单手动支付 + */ + void offlinePay(List orderIds); } diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardThirdPayService.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardThirdPayService.java index 5974e89b5..58f73840f 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardThirdPayService.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardThirdPayService.java @@ -2,6 +2,7 @@ package com.bsd.pjcloud.hard.service; import com.bsd.pjcloud.thirdparty.constant.pay.ThirdPaySoureBizTypeEnum; +import com.bsd.pjcloud.thirdparty.dto.pay.PayDetailDto; import com.bsd.pjcloud.thirdparty.dto.pay.PayDto; import com.bsd.pjcloud.thirdparty.dto.pay.RefundDto; import com.bsd.pjcloud.thirdparty.dto.pay.WaterDto; @@ -28,4 +29,9 @@ public interface HardThirdPayService { * 获取流水 */ PayBaseVo> waterList(WaterDto dto, ThirdPaySoureBizTypeEnum soureType); + + /** + * 订单详情 + */ + PayBaseVo orderDetail(PayDetailDto dto, ThirdPaySoureBizTypeEnum soureType); } diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/HardDoorFlowServiceImpl.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/HardDoorFlowServiceImpl.java index 46ca4898e..8cab898ea 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/HardDoorFlowServiceImpl.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/HardDoorFlowServiceImpl.java @@ -349,7 +349,7 @@ public class HardDoorFlowServiceImpl extends ServiceImpl scopeList(HardOrderDto dto) { - List list = baseMapper.list(dto); - List resultList = BeanUtils.toBean(list, HardOrderVo.class); - disposeList(resultList, dto); - return resultList; + public List scopeList(HardOrderDto dto, DataScope dataScope) { + List list = baseMapper.scopeList(dto, dataScope); + disposeList(list, dto); + return list; } /** @@ -142,40 +141,7 @@ public class HardOrderServiceImpl extends ServiceImpl scopePageList(Page page, HardOrderDto dto, DataScope dataScope) { Page list = baseMapper.scopePageList(page, dto, dataScope); - if (ObjectUtil.isNotEmpty(list.getRecords())) { - // 用户 - List userIds = list.getRecords().stream().map(HardOrderVo::getUserId).filter(ObjectUtil::isNotEmpty).distinct().toList(); - if (ObjectUtil.isNotEmpty(userIds)) { - R> userList = userService.getInnerUserById(new ArrayList<>(userIds)); - if (ObjectUtil.isNotEmpty(userList.getData())) { - DataUtil.convertUserList(list.getRecords(), CollectionUtils.convertMap(userList.getData(), SysUser::getUserId)); - } - } - // 部门 - List deptIds = list.getRecords().stream().map(HardOrderVo::getDeptId).filter(ObjectUtil::isNotEmpty).distinct().toList(); - if (ObjectUtil.isNotEmpty(deptIds)) { - R> deptList = deptService.getDeptByDeptIds(deptIds); - if (ObjectUtil.isNotEmpty(deptList.getData())) { - DataUtil.convertDeptList(list.getRecords(), deptList.getData()); - } - } - // 商户 - List mchIds = list.getRecords().stream().map(HardOrderVo::getMerchantId).filter(ObjectUtil::isNotEmpty).distinct().toList(); - if (ObjectUtil.isNotEmpty(mchIds)) { - R> mchList = remoteMchService.getByIds(mchIds); - if (ObjectUtil.isNotEmpty(mchList.getData())) { - WalletDataUtil.convertMchList(list.getRecords(), CollectionUtils.convertMap(mchList.getData(), MchManageVo::getId)); - } - } - // 购物车 - if (dto.getIsFindCarList()) { - for (HardOrderVo v : list.getRecords()) { - List carList = hardCarService.getByParentCarId(v.getParentCarId()); - List carVoList = BeanUtils.toBean(carList, HardCarVo.class); - v.setCarList(carVoList); - } - } - } + disposeList(list.getRecords(), dto); return list; } @@ -548,6 +514,7 @@ public class HardOrderServiceImpl extends ServiceImpl reduceRes = walletTransactionService.reduceWalletBalance(reduceBuild); if (reduceRes.getCode() != 0 || ObjectUtil.isEmpty(reduceRes.getData())) { throw new RuntimeException("钱包扣款错误"); @@ -858,7 +825,7 @@ public class HardOrderServiceImpl extends ServiceImpl userIds = list.stream().map(HardOrderVo::getUserId).filter(ObjectUtil::isNotEmpty).distinct().toList(); if (ObjectUtil.isNotEmpty(userIds)) { - R> userList = userService.getUserById(new ArrayList<>(userIds)); + R> userList = userService.getInnerUserById(new ArrayList<>(userIds)); if (ObjectUtil.isNotEmpty(userList.getData())) { DataUtil.convertUserList(list, CollectionUtils.convertMap(userList.getData(), SysUser::getUserId)); } diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardOrderSyncServiceImpl.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardOrderSyncServiceImpl.java index ec838985a..45c7748b4 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardOrderSyncServiceImpl.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardOrderSyncServiceImpl.java @@ -5,6 +5,8 @@ import cn.hutool.extra.spring.SpringUtil; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.bsd.pjcloud.common.core.constant.enums.YesNoEnum; +import com.bsd.pjcloud.common.core.util.R; +import com.bsd.pjcloud.hard.api.constant.HardTypeEnum; import com.bsd.pjcloud.hard.api.constant.order.HardOrderStatusEnum; import com.bsd.pjcloud.hard.api.dto.async.OfflineCar; import com.bsd.pjcloud.hard.api.dto.async.OfflineOrder; @@ -12,11 +14,15 @@ import com.bsd.pjcloud.hard.api.dto.async.SyncOfflineReqVo; import com.bsd.pjcloud.hard.api.entity.order.HardCarEntity; import com.bsd.pjcloud.hard.api.entity.order.HardOrderEntity; import com.bsd.pjcloud.hard.api.entity.order.HardParentCarEntity; +import com.bsd.pjcloud.hard.mapper.order.HardOrderMapper; import com.bsd.pjcloud.hard.service.HardCarService; import com.bsd.pjcloud.hard.service.HardOrderSyncService; import com.bsd.pjcloud.hard.service.HardOrderService; import com.bsd.pjcloud.hard.service.HardParentCarService; +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.feign.RemoteWalletSettingService; import com.bsd.pjcloud.wallet.api.vo.MchManageVo; import com.bsd.pjcloud.wallet.api.vo.WalletSettingVo; @@ -27,7 +33,9 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; import java.math.BigDecimal; +import java.util.ArrayList; import java.util.List; +import java.util.Optional; /** * 订单同步 @@ -40,12 +48,16 @@ public class HardOrderSyncServiceImpl implements HardOrderSyncService { static private final String TAG = "订单同步"; - private final RemoteMchService remoteMchService; - private final RemoteWalletSettingService walletSettingService; private final HardCarService hardCarService; private final HardParentCarService hardParentCarService; private final HardOrderService orderService; + private final HardOrderMapper hardOrderMapper; + + private final RemoteMchService remoteMchService; + private final RemoteWalletSettingService walletSettingService; + private final RemoteWalletService walletService; + @Override @Transactional(rollbackFor = Exception.class) public List syncOfflineOrder(SyncOfflineReqVo body) { @@ -58,7 +70,7 @@ public class HardOrderSyncServiceImpl implements HardOrderSyncService { if (ObjectUtil.isNotEmpty(setting) && ObjectUtil.isNotEmpty(setting.getOffLineOrderApplyEnable())) { offLineOrderApplyEnable = ObjectUtil.equals(setting.getOffLineOrderApplyEnable(), YesNoEnum.YES.getCode()); } - List createIdList = List.of(); + List createIdList = new ArrayList<>(); List list = body.getList(); for (OfflineOrder i : list) { if (ObjectUtil.isEmpty(i.getCarList())) { @@ -75,6 +87,19 @@ public class HardOrderSyncServiceImpl implements HardOrderSyncService { HardOrderEntity order = parseOrder(i, body.getHardwareId(), body.getMerchantId(), merchant.getDeptId()); HardParentCarEntity parentCar = parseParentCar(i, body.getMerchantId()); List carList = i.getCarList().stream().map(this::parseCar).toList(); + + // 查询钱包 + WalletManageEntity wallet = null; + if (ObjectUtil.isNotEmpty(merchant.getDefaultWalletTypeId())) { + wallet = walletService.getWallet(order.getUserId(), WalletTypeEnum.EAT).getData(); + } else { + wallet = walletService.getWalletByWalletTypeId(order.getUserId(), merchant.getDefaultWalletTypeId()).getData(); + } + if (ObjectUtil.isEmpty(wallet)) { + log.error("|{}|同步安卓机离线订单,钱包不存在order:{}", TAG, JSON.toJSONString(i)); + continue; + } + order.setWalletId(wallet.getId()); if (!ObjectUtil.isAllNotEmpty(order, parentCar, carList)) { log.error("|{}|同步安卓机离线订单,order、parentCar、carList任意一个为空order:{}", TAG, JSON.toJSONString(i)); continue; @@ -85,6 +110,31 @@ public class HardOrderSyncServiceImpl implements HardOrderSyncService { return createIdList; } + /** + * 离线订单手动支付 + */ + @Override + public void offlinePay(List orderIds) { + // 查询离线订单 + List list = hardOrderMapper.getOfflineOrderList(orderIds); + if (ObjectUtil.isEmpty(list)) return; + for (HardOrderEntity v : list) { + getSelf().offlinePay(v); + } + } + + /** + * 离线订单手动支付 + */ + @Transactional(rollbackFor = Exception.class) + public void offlinePay(HardOrderEntity order) { + // 支付 + orderService.fastReduceBalance(order); + // 标记离线支付成功 + HardOrderEntity updateObj = HardOrderEntity.builder().id(order.getId()).offlinePaySuccess(YesNoEnum.YES.getCode()).build(); + orderService.updateById(updateObj); + } + // 同步安卓机单个离线订单 TODO 允许把金额扣为负数 @Transactional(rollbackFor = Exception.class) public Boolean createOfflineOrder(HardOrderEntity order, HardParentCarEntity parentCar, List list, OfflineOrder offlineOrder, boolean offLineOrderApplyEnable) { @@ -144,6 +194,7 @@ public class HardOrderSyncServiceImpl implements HardOrderSyncService { HardParentCarEntity res = new HardParentCarEntity(); res.setUserId(order.getUserCode()); res.setMerchantId(merchantId); + res.setHardType(order.getSysType().getType()); res.setOrderStatus(HardOrderStatusEnum.OFFLINE_CREATE.getType()); return res; } diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/third/HardThirdPayServiceImpl.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/third/HardThirdPayServiceImpl.java index 6e1a915fd..7541f61f5 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/third/HardThirdPayServiceImpl.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/third/HardThirdPayServiceImpl.java @@ -21,7 +21,7 @@ import com.bsd.pjcloud.hard.api.dto.order.HardOrderDto; import com.bsd.pjcloud.hard.api.entity.order.HardAfterSaleEntity; import com.bsd.pjcloud.hard.api.entity.order.HardAfterSaleLogEntity; import com.bsd.pjcloud.hard.api.entity.order.HardOrderEntity; -import com.bsd.pjcloud.hard.api.vo.order.HardOrderPayTypeVo; +import com.bsd.pjcloud.hard.api.vo.order.HardAfterSaleVo; import com.bsd.pjcloud.hard.api.vo.order.HardOrderVo; import com.bsd.pjcloud.hard.config.LbCallbackConfig; import com.bsd.pjcloud.hard.mapper.order.HardAfterSaleLogMapper; @@ -31,6 +31,7 @@ import com.bsd.pjcloud.hard.service.HardOrderService; import com.bsd.pjcloud.hard.service.HardThirdPayService; import com.bsd.pjcloud.thirdparty.constant.pay.ThirdPaySoureBizTypeEnum; import com.bsd.pjcloud.thirdparty.constant.pay.ThirdPayVoStatusEnum; +import com.bsd.pjcloud.thirdparty.dto.pay.PayDetailDto; import com.bsd.pjcloud.thirdparty.dto.pay.PayDto; import com.bsd.pjcloud.thirdparty.dto.pay.RefundDto; import com.bsd.pjcloud.thirdparty.dto.pay.WaterDto; @@ -66,6 +67,7 @@ public class HardThirdPayServiceImpl implements HardThirdPayService { private final HardOrderService hardOrderService; private final HardCarService hardCarService; private final HardAfterSaleService hardAfterSaleService; + private final HardAfterSaleLogMapper hardAfterSaleLogMapper; private final RemoteMchService mchService; @@ -275,11 +277,15 @@ public class HardThirdPayServiceImpl implements HardThirdPayService { PayWaterVo item = new PayWaterVo(); item.setUserId(v.getUserId()); item.setName(v.getUsername()); - item.setSignPhone(""); + item.setSignPhone(v.getUserMobile()); item.setPlatformOrderId(String.valueOf(v.getId())); - item.setPlatformRefundId(String.valueOf(v.getPayRefundId())); + if (ObjectUtil.isNotEmpty(v.getAfterSaleId())) { + item.setPlatformRefundId(String.valueOf(v.getAfterSaleId())); + } item.setThirdOrderId(v.getOrderNo()); - item.setThirdRefundId(""); + if (ObjectUtil.isNotEmpty(v.getAfterSaleNo())) { + item.setThirdRefundId(String.valueOf(v.getAfterSaleNo())); + } item.setOrderStatus(v.getOrderStatus()); item.setOrderPrice(v.getPayPrice()); item.setRefundPrice(v.getRefundPrice()); @@ -298,6 +304,55 @@ public class HardThirdPayServiceImpl implements HardThirdPayService { return baseVo; } + /** + * 订单详情 + */ + @Override + public PayBaseVo orderDetail(PayDetailDto dto, ThirdPaySoureBizTypeEnum soureType) { + // 返回值 + PayBaseVo baseVo = new PayBaseVo(); + String orderType = getOrderType(soureType); + HardOrderDto query = new HardOrderDto(); + query.setOrderType(orderType); + query.setOrderNo(dto.getThirdOrderId()); + query.setAfterSaleNo(dto.getThirdRefundId()); + List hardOrderVos = hardOrderService.scopeList(query, null); + if (ObjectUtil.isEmpty(hardOrderVos)) { + baseVo.set(ThirdPayVoStatusEnum.ORDER_EXIST); + return baseVo; + } + if (hardOrderVos.size() > 1) { + baseVo.set(ThirdPayVoStatusEnum.DETAIL_ITEM_NOT_ONE); + return baseVo; + } + HardOrderVo order = hardOrderVos.get(0); + // 组合返回参数 + PayWaterVo item = new PayWaterVo(); + item.setUserId(order.getUserId()); + item.setName(order.getUsername()); + item.setSignPhone(order.getUserMobile()); + item.setPlatformOrderId(String.valueOf(order.getId())); + if (ObjectUtil.isNotEmpty(order.getAfterSaleId())) { + item.setPlatformRefundId(String.valueOf(order.getAfterSaleId())); + } + item.setThirdOrderId(order.getOrderNo()); + if (ObjectUtil.isNotEmpty(order.getAfterSaleNo())) { + item.setThirdRefundId(String.valueOf(order.getAfterSaleNo())); + } + item.setOrderStatus(order.getOrderStatus()); + item.setOrderPrice(order.getPayPrice()); + item.setRefundPrice(order.getRefundPrice()); + if (ObjectUtil.isNotEmpty(order.getPayTime())) { + item.setPayTime(LocalDateTimeUtil.format(order.getPayTime(), DatePattern.NORM_DATETIME_PATTERN)); + } + if (ObjectUtil.isNotEmpty(order.getRefundTime())) { + item.setRefundTime(LocalDateTimeUtil.format(order.getRefundTime(), DatePattern.NORM_DATETIME_PATTERN)); + } + baseVo.set(ThirdPayVoStatusEnum.SUCCESS); + baseVo.setData(item); + return baseVo; + } + /** * 查询美好生活默认商户信息 */ 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 16788db46..925b1ad82 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 @@ -82,6 +82,9 @@ a.del_flag = '0' + + and a.order_no = #{dto.orderNo} + and a.order_status = #{dto.orderStatus} @@ -100,6 +103,9 @@ and a.merchant_id = #{dto.merchantId} + + and a.is_offline_order = #{dto.isOfflineOrder} + @@ -176,13 +182,16 @@ - + + + +