diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/constant/HardTypeEnum.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/constant/HardTypeEnum.java index db2bd88f1..39fcf538e 100644 --- a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/constant/HardTypeEnum.java +++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/constant/HardTypeEnum.java @@ -6,7 +6,6 @@ import lombok.Getter; import java.util.Arrays; import java.util.List; -import java.util.Map; /** * 硬件设备类型 @@ -23,7 +22,7 @@ public enum HardTypeEnum { MERCHANT_QR_CODE("5", "商户二维码扣款牌"), OTHER("6", "其他支付方式(第三方接口对接)"), MERCHANT_ACT("7", "商户活动"), - FARMER("8", "共富商城(助农)"), + SELF_APP("8", "无设备或者用户自己的手机"), YUN_XFJ("9", "云版消费机"), YYX_4G("10", "4G-云音响"), YYX_WIFI("11", "wifi-云音响"), @@ -32,7 +31,7 @@ public enum HardTypeEnum { private final String description; // 是否能预定 - public static final List isReserveList = List.of(SUPERMARKET, CANTEEN, FARMER); + public static final List isReserveList = List.of(SUPERMARKET, CANTEEN, SELF_APP); // 不需要创建购物车 public static final List isNoneCar = List.of(MERCHANT_QR_CODE); diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/constant/order/HardOrderStatusEnum.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/constant/order/HardOrderStatusEnum.java index 867756f08..e53a46dc9 100644 --- a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/constant/order/HardOrderStatusEnum.java +++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/constant/order/HardOrderStatusEnum.java @@ -10,21 +10,26 @@ import java.util.List; /** * 订单状态 * 外卖状态 100(待接单(外卖))->110(配送中(外卖))-> 200(已核销(已完成)) + * 商城状态 1(创建订单未支付) -> 200(已经支付/待发货) -> 200(待收货) -> 210(待评价) ->220(已评价) */ @AllArgsConstructor @Getter public enum HardOrderStatusEnum { CREATE("1", "创建订单(未支付)"), OFFLINE_CREATE("2", "离线创建订单(未支付)"), - PAY("5", "已经支付"), + PAY("5", "已经支付/待发货"), OFFLINE_PAY("6", "没有网络本地支付"), REFUND("10", "退款"), CANCEL("20", "已核销(已完成)"), - UNFOLLOW("30", "已取消(智能柜)"), + UNFOLLOW("30", "已取消、未支付自动取消(智能柜、商城购买)"), TAKE_OUT_AWAIT("100", "待接单(外卖)"), TAKE_OUT_ING("110", "配送中(外卖)"), + SHOP_WAIT_PAY_SUCCESS("200","待发货/已支付(商城购买)"), + SHOP_WAIT_RECEIVE("210","待收货(商城购买)"), + SHOP_WAIT_EVALUATE("220","订单完成/待评价(商城购买)"), + // SHOP_EVALUATED("230","已评价(商城购买)"), ; private final String type; private final String description; @@ -54,4 +59,4 @@ public enum HardOrderStatusEnum { if (ObjectUtil.isEmpty(type)) return null; return Arrays.stream(values()).filter(v -> ObjectUtil.equals(type, v.getType())).findFirst().get(); } -} +} \ No newline at end of file diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/constant/order/HardOrderTypeEnum.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/constant/order/HardOrderTypeEnum.java index c9fff796b..08295e994 100644 --- a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/constant/order/HardOrderTypeEnum.java +++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/constant/order/HardOrderTypeEnum.java @@ -19,7 +19,7 @@ public enum HardOrderTypeEnum { STRIDE_DEPT("4", "跨单位"), ZY("5", "正元公务餐"), LB("6", "宁波银行(美好生活)"), - FARMER("7", "共富商城(助农)"), + FARMER("7", "共富商城(助农),现在用于商城"), TOC_VISITOR("8", "toc访客购买(不记名用户)"), XFJ("9", "消费机支付"), TAKE_OUT("10", "外卖"), diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/constant/order/HardPayTypeEnum.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/constant/order/HardPayTypeEnum.java index 4647ca5f5..47425a572 100644 --- a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/constant/order/HardPayTypeEnum.java +++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/constant/order/HardPayTypeEnum.java @@ -2,6 +2,7 @@ package com.bsd.pjcloud.hard.api.constant.order; import cn.hutool.core.util.ObjectUtil; +import com.bsd.pjcloud.thirdparty.constant.miniplatform.AppPlusPlatformTypeEnum; import lombok.AllArgsConstructor; import lombok.Getter; @@ -25,7 +26,9 @@ public enum HardPayTypeEnum { CASH("8", "现金支付"), HARD_DOOR_FREE_PAY("9", "智能柜免密支付"), WECHANT_SELF_QR_CODE_PAY("10", "微信付款码支付"), + WECHANT_APP_PAY("100", "微信App支付"), ALI_SELF_QR_CODE_PAY("11", "支付宝付款码支付"), + ALI_APP_PAY("110", "支付宝App支付"), ZYY("12", "中医院"), RMYY("13", "人民医院"), CSXFK("14", "超市消费卡"), @@ -53,7 +56,9 @@ public enum HardPayTypeEnum { STRIDE_DEPT_QR_CODE, FOREIGN_TICKET_QR_CODE, WECHANT_SELF_QR_CODE_PAY, - ALI_SELF_QR_CODE_PAY + ALI_SELF_QR_CODE_PAY, + WECHANT_APP_PAY, + ALI_APP_PAY ); // 可以核销的订单 @@ -77,8 +82,21 @@ public enum HardPayTypeEnum { WALLET_CARD ); + public static HardPayTypeEnum transformHardPayTypeEnum(AppPlusPlatformTypeEnum appPlusPlatformTypeEnum) { + switch (appPlusPlatformTypeEnum) { + case WECHAT: + return HardPayTypeEnum.WECHANT_APP_PAY; + case ALI_PAY: + return HardPayTypeEnum.ALI_APP_PAY; + case ZAX_APP_WALLET: + return HardPayTypeEnum.WALLET_DEFAULT; + default: + return null; + } + } + public static HardPayTypeEnum valueOfByType(String type) { if (ObjectUtil.isEmpty(type)) return null; - return Arrays.stream(values()).filter(v -> ObjectUtil.equals(type, v.getType())).findFirst().get(); + return Arrays.stream(values()).filter(v -> ObjectUtil.equals(type, v.getType())).findFirst().orElse(null); } } diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/order/HardShipmentDto.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/order/HardShipmentDto.java new file mode 100644 index 000000000..3f5f166b9 --- /dev/null +++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/order/HardShipmentDto.java @@ -0,0 +1,21 @@ +package com.bsd.pjcloud.hard.api.dto.order; + +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +@Data +public class HardShipmentDto { + + /** + * 发货地址id + */ + @NotNull(message = "发货地址id不能为空") + private Long addressId; + + /** + * 快递物流编号 + */ + @NotNull(message = "快递物流编号不能为空") + private String shipmentNo; + +} diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/order/app/HardAppCreateShopOrderDto.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/order/app/HardAppCreateShopOrderDto.java new file mode 100644 index 000000000..048a2acd0 --- /dev/null +++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/order/app/HardAppCreateShopOrderDto.java @@ -0,0 +1,49 @@ +package com.bsd.pjcloud.hard.api.dto.order.app; + +import com.bsd.pjcloud.hard.api.constant.HardTypeEnum; +import com.bsd.pjcloud.hard.api.constant.order.HardOrderTypeEnum; +import jakarta.validation.constraints.NotNull; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Builder +@AllArgsConstructor +@NoArgsConstructor +@Data +public class HardAppCreateShopOrderDto { + + /** + * 父购物车id + */ + @NotNull(message = "父购物车id不能为空") + private Long carParentId; + + /** + * 地图地址 + */ + @NotNull(message = "地图地址不能为空") + private Long mapAddressId; + + /** + * 支付方式 + */ + @NotNull(message = "地图地址不能为空") + private String payType; + + /** + * 钱包类型 + */ + private Long walletTypeId; + + /** + * 自动填充 + */ + private HardTypeEnum hardType; + + private HardOrderTypeEnum orderType; + + private Long userId; + +} diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/order/remote/HardUpdateShopStatusDto.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/order/remote/HardUpdateShopStatusDto.java new file mode 100644 index 000000000..4617e10d3 --- /dev/null +++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/order/remote/HardUpdateShopStatusDto.java @@ -0,0 +1,21 @@ +package com.bsd.pjcloud.hard.api.dto.order.remote; + +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +@Data +public class HardUpdateShopStatusDto { + @NotNull(message = "订单id不能为空") + private Long orderId; + + @NotNull(message = "订单状态不能为空") + private HardUpdateShopStatusDto.ChangeShopStatus status; + + public enum ChangeShopStatus { + // 支付成功 + PAY_SUCCESS, + // 退款成功 + REFUND_SUCCESS, + ; + } +} diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/order/remote/HardUpdateTakeOutStatusDto.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/order/remote/HardUpdateTakeOutStatusDto.java index 93c0b02dd..866d96c85 100644 --- a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/order/remote/HardUpdateTakeOutStatusDto.java +++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/order/remote/HardUpdateTakeOutStatusDto.java @@ -9,7 +9,7 @@ public class HardUpdateTakeOutStatusDto { @NotNull(message = "订单id不能为空") private Long orderId; - @NotNull(message = "订单id不能为空") + @NotNull(message = "订单状态不能为空") private HardUpdateTakeOutStatusDto.TakeOutStatus status; public enum TakeOutStatus { diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/entity/order/HardOrderAddressEntity.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/entity/order/HardOrderAddressEntity.java index 8e3eaaad2..ea54e0691 100755 --- a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/entity/order/HardOrderAddressEntity.java +++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/entity/order/HardOrderAddressEntity.java @@ -2,11 +2,13 @@ package com.bsd.pjcloud.hard.api.entity.order; import com.baomidou.mybatisplus.annotation.*; import com.baomidou.mybatisplus.extension.activerecord.Model; +import com.bsd.pjcloud.hard.api.entity.address.HardUserMapAddressEntity; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; import com.bsd.pjcloud.common.core.util.TenantTable; +import java.math.BigDecimal; import java.time.LocalDateTime; /** @@ -99,6 +101,66 @@ public class HardOrderAddressEntity extends Model { @Schema(description = "详细地址") private String fullAddress; + /** + * 省 + */ + @Schema(description = "省") + private String province; + + /** + * 市 + */ + @Schema(description = "市") + private String city; + + /** + * 区 + */ + @Schema(description = "区") + private String district; + + /** + * 街道 + */ + @Schema(description = "街道") + private String street; + + /** + * 经度 + */ + @Schema(description = "经度") + private BigDecimal longitude; + + /** + * 纬度 + */ + @Schema(description = "纬度") + private BigDecimal latitude; + + /** + * 联系人 + */ + @Schema(description = "联系人") + private String username; + + /** + * 手机号 + */ + @Schema(description = "手机号") + private String userMoblie; + + /** + * tag + */ + @Schema(description = "tag") + private String tag; + + /** + * 用户手动输入地址 + */ + @Schema(description = "用户手动输入地址") + private String inputAddress; + /** * 创建人 */ @@ -140,4 +202,23 @@ public class HardOrderAddressEntity extends Model { */ @Schema(description = "租户ID") private Long tenantId; + + public static HardOrderAddressEntity of(HardUserMapAddressEntity entity) { + HardOrderAddressEntity orderAddress = new HardOrderAddressEntity(); + orderAddress.setUserId(entity.getUserId()); + orderAddress.setAddressId(entity.getId()); + orderAddress.setAddressName(entity.getAdressDetail()); + orderAddress.setFullAddress(entity.getFullAddress()); + orderAddress.setProvince(entity.getProvince()); + orderAddress.setCity(entity.getCity()); + orderAddress.setDistrict(entity.getDistrict()); + orderAddress.setStreet(entity.getStreet()); + orderAddress.setLongitude(entity.getLongitude()); + orderAddress.setLatitude(entity.getLatitude()); + orderAddress.setUsername(entity.getUsername()); + orderAddress.setUserMoblie(entity.getUserMoblie()); + orderAddress.setTag(entity.getTag()); + orderAddress.setInputAddress(entity.getInputAddress()); + return orderAddress; + } } \ No newline at end of file diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/entity/order/HardOrderEntity.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/entity/order/HardOrderEntity.java index 1b4aaf07b..c79daaadd 100644 --- a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/entity/order/HardOrderEntity.java +++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/entity/order/HardOrderEntity.java @@ -36,7 +36,7 @@ public class HardOrderEntity extends Model { /** * 订单编号 */ - @Schema(description = "订单编号 目前正元、微信支付、云消费机、支付宝支付正在使用") + @Schema(description = "订单编号 目前正元、微信支付、云消费机、微信、支付宝支付正在使用") private String orderNo; /** @@ -231,12 +231,37 @@ public class HardOrderEntity extends Model { @Schema(description = "离线自动支付是否成功") private String offlinePaySuccess; + /** + * 地址id + */ + @Schema(description = "地址id") + private Long addressId; + /** * 收货地址 */ @Schema(description = "收货地址") private String addressName; + /** + * 快递单号 + */ + @Schema(description = "快递单号") + private String shipmentNo; + + /** + * 发货时间 + * 自动收货时间=发货时间+15天 + */ + @Schema(description = "发货时间") + private LocalDateTime shippedTime; + + /** + * 收货时间 + */ + @Schema(description = "收货时间") + private LocalDateTime deliveredTime; + /** * 创建人 */ diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/feign/RemoteHardOrderService.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/feign/RemoteHardOrderService.java index 6f1ff8282..86168cb53 100644 --- a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/feign/RemoteHardOrderService.java +++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/feign/RemoteHardOrderService.java @@ -5,6 +5,7 @@ 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.hard.api.dto.order.HardOrderPreferencesDto; +import com.bsd.pjcloud.hard.api.dto.order.remote.HardUpdateShopStatusDto; import com.bsd.pjcloud.hard.api.dto.order.remote.HardUpdateTakeOutStatusDto; import com.bsd.pjcloud.hard.api.entity.order.HardOrderEntity; import org.springframework.cloud.openfeign.FeignClient; @@ -32,4 +33,9 @@ public interface RemoteHardOrderService { @NoToken @PostMapping("/hard-order/update-take-out-status") R updateTakeOutStatus(@RequestBody HardUpdateTakeOutStatusDto dto); + + @NoToken + @PostMapping("/hard-order/update-shop-status") + R updateShopStatus(@RequestBody HardUpdateShopStatusDto dto); + } diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/order/app/HardAppCreateShopOrderVo.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/order/app/HardAppCreateShopOrderVo.java new file mode 100644 index 000000000..d6cf1b8b3 --- /dev/null +++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/order/app/HardAppCreateShopOrderVo.java @@ -0,0 +1,25 @@ +package com.bsd.pjcloud.hard.api.vo.order.app; + +import lombok.Data; + +import java.util.Map; + +@Data +public class HardAppCreateShopOrderVo { + + /** + * 订单id + */ + private Long orderId; + + /** + * 支付单号 + */ + private String payNo; + + /** + * 发起支付参数 + */ + private Map appPlusPayParams; + +} diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardAfterSaleController.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardAfterSaleController.java index 187e809a0..7766444be 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardAfterSaleController.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardAfterSaleController.java @@ -37,9 +37,6 @@ import java.util.List; /** * 售后订单 - * - * @author dzc - * @date 2025-01-07 17:23:08 */ @RestController @RequiredArgsConstructor @@ -188,7 +185,7 @@ public class HardAfterSaleController { public R pageJoin(@ParameterObject Page page, @ParameterObject HardAfterSaleDto dto) { // 查询商户 MchManageDto mchManageDto = new MchManageDto(); - mchManageDto.setTypesList(List.of(MerchantTypeEnum.CANTEEN.getType())); + mchManageDto.setTypesList(List.of(MerchantTypeEnum.CANTEEN.getType(), MerchantTypeEnum.FARMER.getType())); List mchList = remoteMchService.scopeList(mchManageDto).getData(); if (ObjectUtil.isNotEmpty(mchList) && ObjectUtil.isEmpty(dto.getMchIds())) { dto.setMchIds(mchList.stream().map(MchManageVo::getId).toList()); diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardOrderAddressController.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardOrderAddressController.java index 1576f1922..a5db3c17f 100755 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardOrderAddressController.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardOrderAddressController.java @@ -50,7 +50,7 @@ public class HardOrderAddressController { */ @Operation(summary = "通过id查询", description = "通过id查询") @GetMapping("/{id}") - @PreAuthorize("@pms.hasPermission('hard_hardOrderAddress_view')") + // @PreAuthorize("@pms.hasPermission('hard_hardOrderAddress_view')") public R getById(@PathVariable("id") Long id) { return R.ok(hardOrderAddressService.getById(id)); } 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 ca9b8ee51..e7cae0237 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 @@ -15,7 +15,6 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.bsd.pjcloud.admin.api.dto.UserInfo; import com.bsd.pjcloud.admin.api.feign.RemoteUserService; -import com.bsd.pjcloud.canteen.constant.OrderTypeEnum; import com.bsd.pjcloud.common.core.constant.enums.MerchantTypeEnum; import com.bsd.pjcloud.common.core.util.BeanUtils; import com.bsd.pjcloud.common.core.util.R; @@ -37,13 +36,17 @@ 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; import com.bsd.pjcloud.hard.api.dto.order.HardOrderPreferencesDto; +import com.bsd.pjcloud.hard.api.dto.order.HardShipmentDto; import com.bsd.pjcloud.hard.api.dto.order.act.HardCreateActOrderDto; import com.bsd.pjcloud.hard.api.dto.order.app.HardAppCreateFarmerOrderDto; import com.bsd.pjcloud.hard.api.dto.order.app.HardAppCreateOrderDto; +import com.bsd.pjcloud.hard.api.dto.order.app.HardAppCreateShopOrderDto; import com.bsd.pjcloud.hard.api.dto.order.app.HardAppCreateTakeOutOrderDto; +import com.bsd.pjcloud.hard.api.dto.order.remote.HardUpdateShopStatusDto; import com.bsd.pjcloud.hard.api.dto.order.remote.HardUpdateTakeOutStatusDto; import com.bsd.pjcloud.hard.api.entity.order.HardOrderEntity; import com.bsd.pjcloud.hard.api.vo.order.HardOrderVo; +import com.bsd.pjcloud.hard.api.vo.order.app.HardAppCreateShopOrderVo; import com.bsd.pjcloud.hard.api.vo.order.app.HardTakeOutDeliveryTimeOptionVO; import com.bsd.pjcloud.hard.api.vo.order.excel.HardOrderExcelVo; import com.bsd.pjcloud.hard.mapper.order.HardOrderMapper; @@ -54,6 +57,7 @@ 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; +import jakarta.websocket.server.PathParam; import org.springframework.security.access.prepost.PreAuthorize; import io.swagger.v3.oas.annotations.security.SecurityRequirement; import org.springdoc.core.annotations.ParameterObject; @@ -125,6 +129,13 @@ public class HardOrderController { public R updateTakeOutStatus(@RequestBody HardUpdateTakeOutStatusDto dto) { return R.ok(hardwareOrderService.updateTakeOutStatus(dto)); } + + @Inner + @Operation(summary = "更改商城订单状态(目前只能将未支付改到已支付订单状态)", description = "更改商城订单状态(目前只能将未支付改到已支付订单状态)") + @PostMapping("/update-shop-status") + public R updateShopStatus(@RequestBody HardUpdateShopStatusDto dto) { + return R.ok(hardwareOrderService.updateShopStatus(dto)); + } /* ************************************* end 远程调用 ************************************* */ /* ************************************* start app start ************************************* */ @@ -151,13 +162,20 @@ public class HardOrderController { } - @Operation(summary = "app查询订单列表", description = "app查询订单列表") + @Operation(summary = "app查询订单列表(查询食堂、商城)", description = "app查询订单列表(查询食堂、商城)") @ApiCryptoAes @GetMapping("/app/page-join") public R appPageJoin(@ParameterObject Page page, @ParameterObject HardOrderDto dto) { PjcloudUser user = SecurityUtils.getUser(); dto.setUserId(user.getId()); dto.setIsFindCarList(true); + dto.setIsFindApptList(true); + dto.setMchTypeCodes( + List.of( + MerchantTypeEnum.CANTEEN.getType(), + MerchantTypeEnum.FARMER.getType() + ) + ); return R.ok(hardwareOrderService.pagejoin(page, dto)); } @@ -336,16 +354,28 @@ public class HardOrderController { @Operation(summary = "创建共富商城预约订单", description = "app创建线上超市预定订单") @ApiCryptoAes @PostMapping("/app/create-farmer-order") - @Idempotent(expireTime = 3, key = "'/app/hard-order/app/create-farmer-order' + #body.getCarParentId() ", info = "正在创建订单中,请勿重复操作") + @Idempotent(expireTime = 1, key = "'/app/hard-order/app/create-farmer-order' + #body.getCarParentId() ", info = "正在创建订单中,请勿重复操作") public R appCreateFarmerReserveOrder(@RequestBody HardAppCreateFarmerOrderDto body) { PjcloudUser user = SecurityUtils.getUser(); - body.setHardType(HardTypeEnum.FARMER); + body.setHardType(HardTypeEnum.SELF_APP); body.setUserId(user.getId()); body.setOrderType(HardOrderTypeEnum.FARMER); body.setPayType(HardPayTypeEnum.WALLET_DEFAULT); return R.ok(hardwareOrderService.appCreateFarmerReserveOrder(body)); } + @Operation(summary = "app创建商城预约订单(支持所有微信、支付宝、钱包等支付方式)", description = "app创建商城预约订单(支持所有微信、支付宝、钱包等支付方式)") + @ApiCryptoAes + @PostMapping("/app/create-shop-order") + @Idempotent(expireTime = 1, key = "'/app/hard-order/app/create-shop-order' + #body.getCarParentId() ", info = "正在创建订单中,请勿重复操作") + public R appCreateShopReserveOrder(@RequestBody HardAppCreateShopOrderDto body) { + PjcloudUser user = SecurityUtils.getUser(); + body.setHardType(HardTypeEnum.SELF_APP); + body.setUserId(user.getId()); + body.setOrderType(HardOrderTypeEnum.FARMER); + return R.ok(hardwareOrderService.appCreateShopReserveOrder(body)); + } + @Operation(summary = "app创建订单扫一扫", description = "app创建订单扫一扫") @ApiCryptoAes @PostMapping("/app/create-order-scan-qrcode") @@ -386,6 +416,14 @@ public class HardOrderController { return R.ok(hardwareOrderService.handCancelCode(body)); } + @ApiCryptoAes + @Operation(summary = "确认收货", description = "确认收货") + @PutMapping("/app/confirm-receipt/{orderId}") + public R confirmReceipt(@PathVariable Long orderId) { + PjcloudUser user = SecurityUtils.getUser(); + return R.ok(hardwareOrderService.confirmReceipt(user.getId(), orderId)); + } + /* ************************************* end app end ************************************* */ @Operation(summary = "admin手动核销线上预订", description = "admin手动核销线上预订") @@ -493,6 +531,12 @@ public class HardOrderController { return R.ok(); } + @Operation(summary = "快递发货或者修改发货单号", description = "快递发货或者修改发货单号") + @PostMapping("/shipment") + public R shipment(@RequestBody HardShipmentDto dto) { + return R.ok(hardwareOrderService.shipment(dto)); + } + @GetMapping("/export") @PreAuthorize("@pms.hasPermission('hard_hardwareOrder_export')") public void export(HttpServletResponse response, HardOrderDto dto) throws IOException { 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 3c7617f3e..e68d985cd 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 @@ -71,6 +71,7 @@ public interface HardOrderMapper extends PjcloudBaseMapper { .in(ObjectUtil.isNotEmpty(dto.getUserIds()), HardOrderEntity::getUserId, dto.getUserIds()) .in(ObjectUtil.isNotEmpty(dto.getMchIds()), HardOrderEntity::getMerchantId, dto.getMchIds()) .in(ObjectUtil.isNotEmpty(dto.getMchTypeCodes()), HardOrderEntity::getMerchantType, dto.getMchTypeCodes()) + .in(ObjectUtil.isNotEmpty(dto.getOrderStatusCodes()), HardOrderEntity::getOrderStatus, dto.getOrderStatusCodes()) .in(ObjectUtil.isNotEmpty(dto.getRefundStatusCodes()), HardOrderEntity::getRefundStatus, dto.getRefundStatusCodes()) .between( ObjectUtil.isNotEmpty(dto.getCreateTimeList()), 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 4e41e57c2..06fa9bc95 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 @@ -16,15 +16,19 @@ import com.bsd.pjcloud.hard.api.dto.hard.HardCreateOrderDto; import com.bsd.pjcloud.hard.api.dto.hard.HardDoneHardQrCodeScanOrderDto; import com.bsd.pjcloud.hard.api.dto.order.HardCreateCarDto; import com.bsd.pjcloud.hard.api.dto.order.HardOrderDto; +import com.bsd.pjcloud.hard.api.dto.order.HardShipmentDto; import com.bsd.pjcloud.hard.api.dto.order.act.HardCreateActOrderDto; import com.bsd.pjcloud.hard.api.dto.order.app.HardAppCreateFarmerOrderDto; import com.bsd.pjcloud.hard.api.dto.order.app.HardAppCreateOrderDto; +import com.bsd.pjcloud.hard.api.dto.order.app.HardAppCreateShopOrderDto; +import com.bsd.pjcloud.hard.api.dto.order.remote.HardUpdateShopStatusDto; import com.bsd.pjcloud.hard.api.dto.order.remote.HardUpdateTakeOutStatusDto; import com.bsd.pjcloud.hard.api.dto.order.xfj.HardXfjFastCreateOrderDto; import com.bsd.pjcloud.hard.api.entity.order.HardCarEntity; import com.bsd.pjcloud.hard.api.entity.order.HardOrderEntity; import com.bsd.pjcloud.hard.api.vo.order.HardCreateHardQrCodeScanOrderVo; import com.bsd.pjcloud.hard.api.vo.order.HardOrderVo; +import com.bsd.pjcloud.hard.api.vo.order.app.HardAppCreateShopOrderVo; import com.bsd.pjcloud.thirdparty.dto.ks.KsRecognitionCallbackDto; import com.bsd.pjcloud.wallet.api.vo.MchManageVo; import jakarta.validation.Valid; @@ -81,6 +85,11 @@ public interface HardOrderService extends IService { */ Boolean updateTakeOutStatus(HardUpdateTakeOutStatusDto dto); + /** + * 更改商城订单状态(目前只能将未支付改到已支付订单状态) + */ + Boolean updateShopStatus(HardUpdateShopStatusDto dto); + /** * app创建线上超市预定订单 */ @@ -91,6 +100,11 @@ public interface HardOrderService extends IService { */ Long appCreateFarmerReserveOrder(HardAppCreateFarmerOrderDto dto); + /** + * app创建商城预约订单(支持所有微信、支付宝、钱包等支付方式) + */ + HardAppCreateShopOrderVo appCreateShopReserveOrder(HardAppCreateShopOrderDto body); + /** * 创建app订单 */ @@ -174,4 +188,14 @@ public interface HardOrderService extends IService { * 是否需要支付 */ boolean isPay(HardOrderTypeEnum type, HardPayTypeEnum payType); + + /** + * 快递发货或者修改发货单号 + */ + Boolean shipment(HardShipmentDto dto); + + /** + * 确认收货 + */ + Boolean confirmReceipt(Long userId, Long orderId); } \ No newline at end of file diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardAfterSaleServiceImpl.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardAfterSaleServiceImpl.java index 7ca049b0f..ec57f65ef 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardAfterSaleServiceImpl.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardAfterSaleServiceImpl.java @@ -39,6 +39,7 @@ import com.bsd.pjcloud.hard.mapper.order.HardAfterSaleMapper; import com.bsd.pjcloud.hard.mapper.order.HardOrderMapper; import com.bsd.pjcloud.hard.service.*; import com.bsd.pjcloud.thirdparty.api.feign.RemoterThirdAppPlusPayService; +import com.bsd.pjcloud.thirdparty.constant.pay.ThirdPayOrderBizTypeEnum; import com.bsd.pjcloud.thirdparty.dto.appplus.ThirdMicropayDto; import com.bsd.pjcloud.thirdparty.dto.appplus.ThirdRemoterRefundDto; import com.bsd.pjcloud.thirdparty.dto.appplus.pay.wechat.ThirdMiniWechatRefundDto; @@ -240,9 +241,15 @@ public class HardAfterSaleServiceImpl extends ServiceImpl walletRefundResult = walletRechargeService.refund(hardRefundDto); @@ -262,53 +269,53 @@ public class HardAfterSaleServiceImpl extends ServiceImpl refundRes = thirdAppPlusPayService.remoterRefund(refundDto); - if (!refundRes.isOk()) { - throw new RuntimeException("微信退款错误:" + refundRes.getMsg()); - } - if (ObjectUtil.isEmpty(refundRes.getData())) { - throw new RuntimeException("微信退款错误"); - } - // 售后成功 - HardOrderEntity updateObj = HardOrderEntity.builder() - .id(order.getId()) - .orderStatus(HardOrderStatusEnum.REFUND.getType()) - .refundStatus(HardRefundStatusEnum.SUCCESS.getStatus()) - .payRefundId(order.getId()) - .refundPrice(order.getPayPrice()) - .refundTime(LocalDateTime.now()) - .build(); - hardOrderService.updateById(updateObj); + ThirdRemoterRefundDto refundDto = new ThirdRemoterRefundDto(); + refundDto.setOrderId(order.getId()); + refundDto.setPrice(refundPrice); + refundDto.setBizType(payOrderBizType); + R refundRes = thirdAppPlusPayService.remoterRefund(refundDto); + if (!refundRes.isOk()) { + throw new RuntimeException("微信退款错误:" + refundRes.getMsg()); } + if (ObjectUtil.isEmpty(refundRes.getData())) { + throw new RuntimeException("微信退款错误"); + } + // 售后成功 + HardOrderEntity updateObj = HardOrderEntity.builder() + .id(order.getId()) + .orderStatus(HardOrderStatusEnum.REFUND.getType()) + .refundStatus(HardRefundStatusEnum.SUCCESS.getStatus()) + .payRefundId(order.getId()) + .refundPrice(order.getPayPrice()) + .refundTime(LocalDateTime.now()) + .build(); + hardOrderService.updateById(updateObj); } // 支付宝退款 else if (isAliPay) { - if (ObjectUtil.equals(order.getPayType(), HardPayTypeEnum.ALI_SELF_QR_CODE_PAY.getType())) { - ThirdRemoterRefundDto refundDto = new ThirdRemoterRefundDto(); - refundDto.setOrderId(order.getId()); - refundDto.setPrice(refundPrice); - R refundRes = thirdAppPlusPayService.remoterRefund(refundDto); - if (!refundRes.isOk()) { - throw new RuntimeException("微信退款错误:" + refundRes.getMsg()); - } - if (ObjectUtil.isEmpty(refundRes.getData())) { - throw new RuntimeException("微信退款错误"); - } - // 售后成功 - HardOrderEntity updateObj = HardOrderEntity.builder() - .id(order.getId()) - .orderStatus(HardOrderStatusEnum.REFUND.getType()) - .refundStatus(HardRefundStatusEnum.SUCCESS.getStatus()) - .payRefundId(order.getId()) - .refundPrice(order.getPayPrice()) - .refundTime(LocalDateTime.now()) - .build(); - hardOrderService.updateById(updateObj); + ThirdRemoterRefundDto refundDto = new ThirdRemoterRefundDto(); + refundDto.setOrderId(order.getId()); + refundDto.setPrice(refundPrice); + refundDto.setBizType(payOrderBizType); + R refundRes = thirdAppPlusPayService.remoterRefund(refundDto); + if (!refundRes.isOk()) { + throw new RuntimeException("微信退款错误:" + refundRes.getMsg()); } + if (ObjectUtil.isEmpty(refundRes.getData())) { + throw new RuntimeException("微信退款错误"); + } + // 售后成功 + HardOrderEntity updateObj = HardOrderEntity.builder() + .id(order.getId()) + .orderStatus(HardOrderStatusEnum.REFUND.getType()) + .refundStatus(HardRefundStatusEnum.SUCCESS.getStatus()) + .payRefundId(order.getId()) + .refundPrice(order.getPayPrice()) + .refundTime(LocalDateTime.now()) + .build(); + hardOrderService.updateById(updateObj); + } else { + throw new RuntimeException("不支持的退款类型"); } } 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 f3c8045db..a002bdb29 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 @@ -13,7 +13,6 @@ import com.bsd.pjcloud.common.core.constant.enums.MerchantTypeEnum; import com.bsd.pjcloud.common.core.constant.enums.YesNoEnum; import com.bsd.pjcloud.common.core.util.CollectionUtils; import com.bsd.pjcloud.common.data.datascope.DataScope; -import com.bsd.pjcloud.common.data.datascope.PjcloudDefaultDataScopeHandle; import com.bsd.pjcloud.common.security.service.PjcloudUser; import com.bsd.pjcloud.hard.api.constant.order.HardOrderStatusEnum; import com.bsd.pjcloud.hard.api.constant.total.DateRangeTypeEnum; @@ -23,7 +22,6 @@ import com.bsd.pjcloud.hard.api.dto.order.app.HardAppProductByClassifyDto; import com.bsd.pjcloud.hard.api.dto.order.app.HardAppProductLikeTopDto; import com.bsd.pjcloud.hard.api.vo.order.HardCanteenProductTotalVo; import com.bsd.pjcloud.hard.api.dto.order.HardOrderDto; -import com.bsd.pjcloud.hard.api.vo.order.HardCarTotalVo; import com.bsd.pjcloud.hard.api.vo.order.HardCarVo; import com.bsd.pjcloud.hard.api.vo.order.app.HardAppProductByCanteenVo; import com.bsd.pjcloud.hard.api.vo.order.app.HardAppProductByClassifyVo; diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardCarServiceImpl.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardCarServiceImpl.java index 169e2205a..b98f65eaf 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardCarServiceImpl.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardCarServiceImpl.java @@ -245,7 +245,7 @@ public class HardCarServiceImpl extends ServiceImpl { + case SELF_APP -> { AtomicInteger doorTotalPrice = new AtomicInteger(); List spuList = remoteMallProductService.getSkusWithSpuBySkuIds(productIds).getData(); for (HardCreateCarDto v : list) { @@ -458,7 +458,7 @@ public class HardCarServiceImpl extends ServiceImpl carObjectList = new ArrayList<>(); List spuList = remoteMallProductService.getSkusWithSpuBySkuIds(productIds).getData(); for (HardCreateCarDto v : productList) { @@ -549,7 +549,7 @@ public class HardCarServiceImpl extends ServiceImpl spuList = remoteMallProductService.getSkusWithSpuBySkuIds(productIds).getData(); for (HardCreateCarDto v : list) { spu: 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 9e75f6ca7..97be20113 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 @@ -5,8 +5,6 @@ import cn.hutool.core.util.StrUtil; import cn.hutool.extra.spring.SpringUtil; import cn.hutool.json.JSONUtil; import com.alibaba.fastjson.JSON; -import com.alipay.api.response.AlipayTradeOrderPayResponse; -import com.alipay.api.response.AlipayTradePayResponse; import com.baomidou.lock.annotation.Lock4j; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -44,8 +42,6 @@ import com.bsd.pjcloud.hard.api.constant.order.HardOrderStatusEnum; import com.bsd.pjcloud.hard.api.constant.order.HardOrderTypeEnum; import com.bsd.pjcloud.hard.api.constant.order.HardPayTypeEnum; import com.bsd.pjcloud.hard.api.constant.xfj.HardXfjTypeEnum; -import com.bsd.pjcloud.hard.api.dto.ali.AliMicropayDto; -import com.bsd.pjcloud.hard.api.dto.ali.AliReverseDto; import com.bsd.pjcloud.hard.api.dto.hard.HandCancelActCodeDto; import com.bsd.pjcloud.hard.api.dto.hard.HardDoneHardQrCodeScanOrderDto; import com.bsd.pjcloud.hard.api.dto.manager.HardManagerDto; @@ -53,15 +49,19 @@ import com.bsd.pjcloud.hard.api.dto.hard.HandCancelCodeDto; import com.bsd.pjcloud.hard.api.dto.hard.HardCreateOrderDto; import com.bsd.pjcloud.hard.api.dto.order.HardCreateCarDto; import com.bsd.pjcloud.hard.api.dto.order.HardOrderDto; +import com.bsd.pjcloud.hard.api.dto.order.HardShipmentDto; import com.bsd.pjcloud.hard.api.dto.order.act.HardCreateActOrderDto; import com.bsd.pjcloud.hard.api.dto.order.app.HardAppCreateFarmerOrderDto; import com.bsd.pjcloud.hard.api.dto.order.app.HardAppCreateOrderDto; +import com.bsd.pjcloud.hard.api.dto.order.app.HardAppCreateShopOrderDto; import com.bsd.pjcloud.hard.api.dto.order.app.HardAppTakeOutApptDto; +import com.bsd.pjcloud.hard.api.dto.order.remote.HardUpdateShopStatusDto; import com.bsd.pjcloud.hard.api.dto.order.remote.HardUpdateTakeOutStatusDto; import com.bsd.pjcloud.hard.api.dto.order.xfj.HardXfjFastCreateOrderDto; import com.bsd.pjcloud.hard.api.dto.spu.DeductionSpuStockDto; import com.bsd.pjcloud.hard.api.entity.HardApptEntity; import com.bsd.pjcloud.hard.api.entity.HardThirdMiOrderEntity; +import com.bsd.pjcloud.hard.api.entity.address.HardUserMapAddressEntity; import com.bsd.pjcloud.hard.api.entity.manager.HardManagerEntity; import com.bsd.pjcloud.hard.api.entity.order.*; import com.bsd.pjcloud.hard.api.entity.spu.HardSpuEntity; @@ -71,6 +71,7 @@ import com.bsd.pjcloud.hard.api.vo.manager.HardManagerVo; import com.bsd.pjcloud.hard.api.vo.order.HardCarVo; import com.bsd.pjcloud.hard.api.vo.order.HardCreateHardQrCodeScanOrderVo; import com.bsd.pjcloud.hard.api.vo.order.HardOrderVo; +import com.bsd.pjcloud.hard.api.vo.order.app.HardAppCreateShopOrderVo; import com.bsd.pjcloud.hard.util.MchJobTimeUtils; import com.bsd.pjcloud.hard.mapper.HardThirdMiOrderMapper; import com.bsd.pjcloud.hard.mapper.manager.HardManagerMapper; @@ -86,7 +87,9 @@ import com.bsd.pjcloud.thirdparty.api.feign.RemoterThirdAppPlusPayService; import com.bsd.pjcloud.thirdparty.constant.miniplatform.AppPlusPlatformTypeEnum; import com.bsd.pjcloud.thirdparty.constant.pay.ThirdPayOrderBizTypeEnum; import com.bsd.pjcloud.thirdparty.dto.appplus.ThirdMicropayDto; +import com.bsd.pjcloud.thirdparty.dto.appplus.ThirdMiniRemotePayDto; import com.bsd.pjcloud.thirdparty.dto.ks.KsRecognitionCallbackDto; +import com.bsd.pjcloud.thirdparty.vo.appplus.pay.ThirdMiniAppPayVo; import com.bsd.pjcloud.wallet.api.constant.WalletBizEnum; import com.bsd.pjcloud.wallet.api.constant.WalletCodeBizEnum; import com.bsd.pjcloud.wallet.api.constant.WalletTypeEnum; @@ -123,8 +126,6 @@ import java.math.BigDecimal; import java.math.RoundingMode; import java.time.LocalDate; import java.time.LocalDateTime; -import java.time.LocalTime; -import java.time.temporal.ChronoUnit; import java.util.*; import java.util.concurrent.CompletableFuture; import java.util.concurrent.TimeUnit; @@ -151,6 +152,7 @@ public class HardOrderServiceImpl extends ServiceImpl已支付 + if (ObjectUtil.equals(dto.getStatus(), HardUpdateShopStatusDto.ChangeShopStatus.PAY_SUCCESS)) { + if (ObjectUtil.notEqual(order.getOrderStatus(), HardOrderStatusEnum.CREATE.getType())) { + log.error("|更改商城订单状态|将订单状态从`CREATE(1)`修改到`PAY(5)`错误订单并不是`CREATE(1)`状态"); + return false; + } + getSelf().orderSuccess(order, true); + } + // 退款 + else if (ObjectUtil.equals(dto.getStatus(), HardUpdateShopStatusDto.ChangeShopStatus.REFUND_SUCCESS)) { + orderStatus = HardOrderStatusEnum.REFUND; + + updateOrderObj.setId(order.getId()); + updateOrderObj.setOrderStatus(orderStatus.getType()); + updateOrderObj.setPayTime(LocalDateTime.now()); + baseMapper.updateById(updateOrderObj); + } + return true; + } + /** * app创建线上超市预定订单 */ @@ -945,6 +988,124 @@ public class HardOrderServiceImpl extends ServiceImpl carList = hardCarService.getByParentCarId(dto.getCarParentId()); + if (ObjectUtil.isEmpty(carList)) throw new RuntimeException("购物车不存在"); + // 查询地址 + HardUserMapAddressEntity userMapAddress = hardUserMapAddressService.getById(dto.getMapAddressId()); + if (ObjectUtil.isEmpty(userMapAddress)) throw new RuntimeException("用户地址不存在"); + + int totalPrice = (int) carList.stream().mapToLong(HardCarEntity::getTotalPrice).sum(); + + // 钱包`ZAX_APP_WALLET(资安信-钱包)`支付 + WalletManageEntity wallet = null; + if (ObjectUtil.equals(appPlusPlatformType, AppPlusPlatformTypeEnum.ZAX_APP_WALLET)) { + wallet = remoteWalletService.getWalletByWalletTypeId(dto.getUserId(), dto.getWalletTypeId()).getData(); + if (ObjectUtil.isEmpty(wallet)) throw new RuntimeException("用户钱包不存在"); + Integer balance = wallet.getBalance(); + if (balance < totalPrice) { + throw new RuntimeException("钱包余额不足"); + } + } + + // 获取商品描述 + List carListDto = carList.stream().map(v -> { + HardCreateCarDto entity = new HardCreateCarDto(); + entity.setParentCarId(dto.getCarParentId()); + entity.setProductId(v.getProductId()); + entity.setProductWeight(v.getProductWeight()); + entity.setProductCount(v.getProductCount()); + return entity; + }).toList(); + String subject = hardCarService.computerCarSubject(dto.getHardType(), dto.getOrderType(), carListDto); + + // 添加硬件订单 + HardOrderEntity orderObj = HardOrderEntity.builder() + .userId(dto.getUserId()) + .userDeptId(userDetail.getSysUser().getDeptId()) + .parentCarId(dto.getCarParentId()) + .sysType(dto.getHardType().getType()) + .orderStatus(HardOrderStatusEnum.CREATE.getType()) + .merchantId(parentCar.getMerchantId()) + .merchantType(hardManager.getTypes()) + .merchantDeptId(hardManager.getDeptId()) + .orderType(dto.getOrderType().getType()) + .payType(hardPayTypeEnum.getType()) + .totalPrice(totalPrice) + .extraPrice(0) + .payPrice(totalPrice) + .isOfflineOrder(YesNoEnum.NO.getCode()) + .productDesc(subject) + .addressName(userMapAddress.getFullAddress()) + .build(); + if (ObjectUtil.equals(appPlusPlatformType, AppPlusPlatformTypeEnum.ZAX_APP_WALLET)) { + orderObj.setWalletId(wallet.getId()); + } + baseMapper.insert(orderObj); + // 记录地址信息 + HardOrderAddressEntity orderAddressEntity = HardOrderAddressEntity.of(userMapAddress); + orderAddressEntity.setOrderId(orderObj.getId()); + hardOrderAddressService.save(orderAddressEntity); + + // 如果是微信或者支付宝支付就需要创建订单 + // `微信`或者`支付宝` + HardOrderEntity updateOrderObj = new HardOrderEntity(); + updateOrderObj.setId(orderObj.getId()); + updateOrderObj.setAddressId(orderAddressEntity.getId()); + if (List.of(AppPlusPlatformTypeEnum.WECHAT, AppPlusPlatformTypeEnum.ALI_PAY).contains(appPlusPlatformType)) { + ThirdMiniRemotePayDto appPayDto = new ThirdMiniRemotePayDto(); + appPayDto.setUserId(orderObj.getUserId()); + appPayDto.setBizType(ThirdPayOrderBizTypeEnum.APP_SHOP_PAY); + appPayDto.setBizId(String.valueOf(orderObj.getId())); + appPayDto.setMiniPlatformType(appPlusPlatformType); + appPayDto.setAmount(totalPrice); + R appPayRes = thirdAppPlusPayService.remoterAppPay(appPayDto); + if (!appPayRes.isOk()) { + throw new RuntimeException("发起app支付失败"); + } + ThirdMiniAppPayVo appPayVo = appPayRes.getData(); + // 更新订单订单号 + updateOrderObj.setOrderNo(appPayVo.getPayNo()); + + result.setPayNo(appPayVo.getPayNo()); + result.setAppPlusPayParams(appPayVo.getAppPlusPayParams()); + // 扣减库存 + getSelf().fastenerInventory(orderObj, YesNoEnum.YES); + } + // 资安信-钱包 + else if (ObjectUtil.equals(appPlusPlatformType, AppPlusPlatformTypeEnum.ZAX_APP_WALLET)) { + // 钱包扣款 + getSelf().fastReduceBalance(orderObj); + // 发送mq消息 + getSelf().createOrderAfterSendMqMsg(orderObj.getId(), userDetail); + } + baseMapper.updateById(updateOrderObj); + result.setOrderId(orderObj.getId()); + return result; + } + @Override // @GlobalTransactional @Transactional(rollbackFor = Exception.class) @@ -1393,6 +1554,9 @@ public class HardOrderServiceImpl extends ServiceImpl() + .eq(HardOrderEntity::getUserId, userId) + .eq(HardOrderEntity::getId, orderId) + ); + if (ObjectUtil.isEmpty(order)) throw new RuntimeException("订单不存在"); + if (ObjectUtil.isEmpty(order.getShipmentNo())) throw new RuntimeException("快递单号不存在"); + // 订单状态判断 + if (!List.of(HardOrderTypeEnum.FARMER.getType()).contains(order.getOrderType())) { + throw new RuntimeException("该订单类型不支持确认收货"); + } + if (ObjectUtil.notEqual(HardOrderStatusEnum.SHOP_WAIT_RECEIVE.getType(), order.getOrderStatus())) { + throw new RuntimeException("该订单状态不支持确认收货"); + } + HardOrderEntity updateOrderObj = new HardOrderEntity(); + updateOrderObj.setId(order.getId()); + updateOrderObj.setOrderStatus(HardOrderStatusEnum.SHOP_WAIT_EVALUATE.getType()); + updateOrderObj.setDeliveredTime(LocalDateTime.now()); + baseMapper.updateById(updateOrderObj); + return true; + } + // 二维码类型的订单是否被核销 true被核销 false未核销 private boolean validateCodeIsCancel(HardOrderTypeEnum orderType, Long orderId) { Boolean flag = switch (orderType) { diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/api/feign/RemoterThirdAppPlusPayService.java b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/api/feign/RemoterThirdAppPlusPayService.java index 9ce78c802..89a777651 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/api/feign/RemoterThirdAppPlusPayService.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/api/feign/RemoterThirdAppPlusPayService.java @@ -4,7 +4,9 @@ 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.thirdparty.dto.appplus.ThirdMicropayDto; +import com.bsd.pjcloud.thirdparty.dto.appplus.ThirdMiniRemotePayDto; import com.bsd.pjcloud.thirdparty.dto.appplus.ThirdRemoterRefundDto; +import com.bsd.pjcloud.thirdparty.vo.appplus.pay.ThirdMiniAppPayVo; import com.bsd.pjcloud.wallet.api.vo.MchManageVo; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.PostMapping; @@ -28,6 +30,12 @@ public interface RemoterThirdAppPlusPayService { @PostMapping("/pay-remoter/micropay") R remoterMicropay(@RequestBody ThirdMicropayDto dto); + /** + * app支付 + */ + @PostMapping("/pay-remoter/app-pay") + R remoterAppPay(@RequestBody ThirdMiniRemotePayDto dto); + /** * 支付退款 */ diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/constant/miniplatform/AppPlusPlatformTypeEnum.java b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/constant/miniplatform/AppPlusPlatformTypeEnum.java index b30077a24..0b89335b0 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/constant/miniplatform/AppPlusPlatformTypeEnum.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/constant/miniplatform/AppPlusPlatformTypeEnum.java @@ -23,7 +23,7 @@ public enum AppPlusPlatformTypeEnum { public static AppPlusPlatformTypeEnum valueOfByType(String type) { if (ObjectUtil.isEmpty(type)) return null; - return Arrays.stream(values()).filter(v -> ObjectUtil.equals(type, v.getType())).findFirst().get(); + return Arrays.stream(values()).filter(v -> ObjectUtil.equals(type, v.getType())).findFirst().orElse(null); } } diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/constant/pay/ThirdPayOrderBizTypeEnum.java b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/constant/pay/ThirdPayOrderBizTypeEnum.java index 7631bda86..9d4b3e6aa 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/constant/pay/ThirdPayOrderBizTypeEnum.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/constant/pay/ThirdPayOrderBizTypeEnum.java @@ -15,6 +15,7 @@ public enum ThirdPayOrderBizTypeEnum { MINI_APP_WALLET_RECHARGE("10", "小程序用户钱包充值"), YXFJ_PAY("20", "云消费机付款码支付"), + APP_SHOP_PAY("30", "APP支付-购买商品(有订单)"), ; private final String type; diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/dto/appplus/ThirdMiniRemotePayDto.java b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/dto/appplus/ThirdMiniRemotePayDto.java new file mode 100644 index 000000000..9c3bafbf2 --- /dev/null +++ b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/dto/appplus/ThirdMiniRemotePayDto.java @@ -0,0 +1,15 @@ +package com.bsd.pjcloud.thirdparty.dto.appplus; + +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +@Data +public class ThirdMiniRemotePayDto extends ThirdMiniAppPayDto { + + /** + * 用户id不能为空 + */ + @NotNull(message = "用户id不能为空") + private Long userId; + +} diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/dto/appplus/ThirdRemoterRefundDto.java b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/dto/appplus/ThirdRemoterRefundDto.java index 23fd15e30..de7cd8a80 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/dto/appplus/ThirdRemoterRefundDto.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/dto/appplus/ThirdRemoterRefundDto.java @@ -1,5 +1,6 @@ package com.bsd.pjcloud.thirdparty.dto.appplus; +import com.bsd.pjcloud.thirdparty.constant.pay.ThirdPayOrderBizTypeEnum; import jakarta.validation.constraints.NotNull; import lombok.Data; @@ -12,6 +13,12 @@ public class ThirdRemoterRefundDto { @NotNull(message = "订单id不能为空") private Long orderId; + /** + * 第三方支付业务类型 + */ + @NotNull(message = "第三方支付业务类型不能为空") + private ThirdPayOrderBizTypeEnum bizType; + /** * 退款金额 */ diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/controller/appplus/ThirdAppPlusController.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/controller/appplus/ThirdAppPlusController.java index 069a9d608..b2781ea95 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/controller/appplus/ThirdAppPlusController.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/controller/appplus/ThirdAppPlusController.java @@ -6,6 +6,7 @@ import com.bsd.pjcloud.common.core.util.R; import com.bsd.pjcloud.common.security.annotation.Inner; import com.bsd.pjcloud.thirdparty.constant.miniplatform.AppPlusPlatformPayType; import com.bsd.pjcloud.thirdparty.dto.appplus.ThirdMicropayDto; +import com.bsd.pjcloud.thirdparty.dto.appplus.ThirdMiniRemotePayDto; import com.bsd.pjcloud.thirdparty.dto.appplus.ThirdRemoterRefundDto; import com.bsd.pjcloud.thirdparty.service.ThirdAppPlusService; import com.bsd.pjcloud.thirdparty.service.ThirdAppPlusWechatFzService; @@ -51,6 +52,12 @@ public class ThirdAppPlusController { return R.ok(thirdAppPlusService.micropay(dto)); } + @Operation(summary = "app支付") + @PostMapping("/app-pay") + public R remoterAppPay(@RequestBody ThirdMiniRemotePayDto dto) { + return R.ok(thirdAppPlusService.miniPay(dto.getUserId(), dto)); + } + /* ************************************* end 远程调用 end ************************************* */ @Operation(summary = "商户改动") diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/appplus/ThirdAppPlusServiceImpl.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/appplus/ThirdAppPlusServiceImpl.java index da748f102..64bf581a4 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/appplus/ThirdAppPlusServiceImpl.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/appplus/ThirdAppPlusServiceImpl.java @@ -15,7 +15,10 @@ import com.bsd.pjcloud.app.api.constant.AppUserTypeEnum; import com.bsd.pjcloud.app.api.dto.AppAdminSyncDto; import com.bsd.pjcloud.app.api.dto.AppUserInfo; import com.bsd.pjcloud.app.api.feign.RemoteAppUserService; +import com.bsd.pjcloud.common.core.constant.enums.MerchantTypeEnum; import com.bsd.pjcloud.common.core.constant.enums.YesNoEnum; +import com.bsd.pjcloud.hard.api.dto.order.remote.HardUpdateShopStatusDto; +import com.bsd.pjcloud.hard.api.feign.RemoteHardOrderService; import com.bsd.pjcloud.thirdparty.config.AppPlusPayConfig; import com.bsd.pjcloud.thirdparty.constant.miniplatform.AppPlusPlatformLoginErrorEnum; import com.bsd.pjcloud.thirdparty.constant.miniplatform.AppPlusPlatformPayType; @@ -77,6 +80,7 @@ public class ThirdAppPlusServiceImpl implements ThirdAppPlusService { private final RemoteAppUserService remoteAppUserService; private final RemoteWalletRechargePackageService remoteWalletRechargePackageService; private final RemoteMchService remoteMchService; + private final RemoteHardOrderService remoteHardOrderService; /** * 小程序登录 @@ -181,9 +185,9 @@ public class ThirdAppPlusServiceImpl implements ThirdAppPlusService { if (ObjectUtil.isEmpty(userInfo)) { throw new RuntimeException("用户不存在"); } - MchManageVo mchManage = remoteMchService.getViewsCanteenMchByDeptId(userInfo.getSysUser().getDeptId()).getData(); + MchManageVo mchManage = remoteMchService.getViewsMchByDeptId(userInfo.getSysUser().getDeptId(), List.of(MerchantTypeEnum.FARMER, MerchantTypeEnum.CANTEEN)).getData(); if (ObjectUtil.isEmpty(mchManage)) { - throw new RuntimeException("用户不属于任何食堂"); + throw new RuntimeException("用户不属于任何食堂或者商城"); } if (ObjectUtil.isEmpty(mchManage.getPaySettingList())) { throw new RuntimeException("商户未配置支付参数"); @@ -211,61 +215,63 @@ public class ThirdAppPlusServiceImpl implements ThirdAppPlusService { dto.setAmount(price); } // 不支持的类型 - else { + else if (ObjectUtil.equals(dto.getBizType(), ThirdPayOrderBizTypeEnum.APP_SHOP_PAY)) { + if (dto.getAmount() <= 0) { + throw new RuntimeException("支付金额不能小于等于0"); + } + dto.setAmount(dto.getAmount()); + } else { throw new RuntimeException("不支持的支付类型"); } - try { - ThirdAppPlusPayDto appPlusPayDto = new ThirdAppPlusPayDto(); - // 当前时间戳+10位随机字符串 - String outTradeNo = LocalDateTime.now().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli() + RandomUtil.randomString(10); - appPlusPayDto.setOutTradeNo(outTradeNo); - appPlusPayDto.setBizId(dto.getBizId()); - appPlusPayDto.setBizType(dto.getBizType()); - appPlusPayDto.setUserId(userId); - appPlusPayDto.setOpenid(dto.getOpenId()); - appPlusPayDto.setAmount(dto.getAmount()); - appPlusPayDto.setMchId(mchManage.getId()); - result.setPayNo(outTradeNo); + ThirdAppPlusPayDto appPlusPayDto = new ThirdAppPlusPayDto(); + // 当前时间戳+10位随机字符串 + String outTradeNo = LocalDateTime.now().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli() + RandomUtil.randomString(10); + appPlusPayDto.setOutTradeNo(outTradeNo); + appPlusPayDto.setBizId(dto.getBizId()); + appPlusPayDto.setBizType(dto.getBizType()); + appPlusPayDto.setUserId(userId); + appPlusPayDto.setOpenid(dto.getOpenId()); + appPlusPayDto.setAmount(dto.getAmount()); + appPlusPayDto.setMchId(mchManage.getId()); - // 微信小程序 - if (ObjectUtil.equals(dto.getMiniPlatformType().getType(), AppPlusPlatformTypeEnum.WECHAT.getType())) { - MchPaySettingVo paySetting = paySettingList.stream().filter(item -> ObjectUtil.equals(item.getPlatformType(), AppPlusPlatformPayType.WECHAT.getType())).findFirst().orElse(null); - if (ObjectUtil.isEmpty(paySetting) || ObjectUtil.isEmpty(paySetting.getSettingJson())) { - throw new RuntimeException("商户未配置微信支付参数"); - } - MchPaySettingEntity.WechatPaySetting wechatPaySetting = JSONUtil.toBean(paySetting.getSettingJson(), MchPaySettingEntity.WechatPaySetting.class); - appPlusPayDto.setSubMchid(wechatPaySetting.getSubMchid()); + result.setPayNo(outTradeNo); - Map appPlusPayParams = thirdMiniAppWechatService.appPay(appPlusPayDto, paySetting); - if (ObjectUtil.isEmpty(appPlusPayParams)) { - throw new RuntimeException("创建微信支付错误"); - } - result.setAppPlusPayParams(appPlusPayParams); + // 微信小程序 + if (ObjectUtil.equals(dto.getMiniPlatformType().getType(), AppPlusPlatformTypeEnum.WECHAT.getType())) { + MchPaySettingVo paySetting = paySettingList.stream().filter(item -> ObjectUtil.equals(item.getPlatformType(), AppPlusPlatformPayType.WECHAT.getType())).findFirst().orElse(null); + if (ObjectUtil.isEmpty(paySetting) || ObjectUtil.isEmpty(paySetting.getSettingJson())) { + throw new RuntimeException("商户未配置微信支付参数"); } - // 支付宝 - else if (ObjectUtil.equals(dto.getMiniPlatformType().getType(), AppPlusPlatformTypeEnum.ALI_PAY.getType())) { - MchPaySettingVo paySetting = paySettingList.stream().filter(item -> ObjectUtil.equals(item.getPlatformType(), AppPlusPlatformPayType.ALI_PAY.getType())).findFirst().orElse(null); - if (ObjectUtil.isEmpty(paySetting)) { - throw new RuntimeException("商户未配置微信支付参数"); - } - MchPaySettingEntity.AliPaySetting aliPaySetting = JSONUtil.toBean(paySetting.getSettingJson(), MchPaySettingEntity.AliPaySetting.class); - appPlusPayDto.setSubMchid(aliPaySetting.getSubMchid()); + MchPaySettingEntity.WechatPaySetting wechatPaySetting = JSONUtil.toBean(paySetting.getSettingJson(), MchPaySettingEntity.WechatPaySetting.class); + appPlusPayDto.setSubMchid(wechatPaySetting.getSubMchid()); - String orderStr = thirdMiniAppAliPayService.appPay(appPlusPayDto, paySetting); - if (ObjectUtil.isEmpty(orderStr)) { - throw new RuntimeException("创建支付宝支付错误"); - } - HashMap aliPayParams = new HashMap(); - aliPayParams.put("orderInfo", orderStr); - result.setAppPlusPayParams(aliPayParams); + Map appPlusPayParams = thirdMiniAppWechatService.appPay(appPlusPayDto, paySetting); + if (ObjectUtil.isEmpty(appPlusPayParams)) { + throw new RuntimeException("创建微信支付错误"); } - // 不支持的支付类型 - else { - throw new RuntimeException("不支持的支付类型"); + result.setAppPlusPayParams(appPlusPayParams); + } + // 支付宝 + else if (ObjectUtil.equals(dto.getMiniPlatformType().getType(), AppPlusPlatformTypeEnum.ALI_PAY.getType())) { + MchPaySettingVo paySetting = paySettingList.stream().filter(item -> ObjectUtil.equals(item.getPlatformType(), AppPlusPlatformPayType.ALI_PAY.getType())).findFirst().orElse(null); + if (ObjectUtil.isEmpty(paySetting)) { + throw new RuntimeException("商户未配置微信支付参数"); } - } catch (Exception e) { + MchPaySettingEntity.AliPaySetting aliPaySetting = JSONUtil.toBean(paySetting.getSettingJson(), MchPaySettingEntity.AliPaySetting.class); + appPlusPayDto.setSubMchid(aliPaySetting.getSubMchid()); + String orderStr = thirdMiniAppAliPayService.appPay(appPlusPayDto, paySetting); + if (ObjectUtil.isEmpty(orderStr)) { + throw new RuntimeException("创建支付宝支付错误"); + } + HashMap aliPayParams = new HashMap(); + aliPayParams.put("orderInfo", orderStr); + result.setAppPlusPayParams(aliPayParams); + } + // 不支持的支付类型 + else { + throw new RuntimeException("不支持的支付类型"); } return result; } @@ -384,7 +390,7 @@ public class ThirdAppPlusServiceImpl implements ThirdAppPlusService { @Override public String remoterRefund(ThirdRemoterRefundDto dto) { // 查询详情 - ThirdPayOrderEntity thirdPayOrder = thirdPayOrderService.getByBiz(ThirdPayOrderBizTypeEnum.YXFJ_PAY, String.valueOf(dto.getOrderId())); + ThirdPayOrderEntity thirdPayOrder = thirdPayOrderService.getByBiz(dto.getBizType(), String.valueOf(dto.getOrderId())); if (ObjectUtil.isEmpty(thirdPayOrder)) { log.error("|{}|远程退款,订单不存在dto:|{}|", TAG, JSONUtil.toJsonStr(dto)); throw new RuntimeException("订单不存在"); @@ -418,7 +424,7 @@ public class ThirdAppPlusServiceImpl implements ThirdAppPlusService { } /** - * 小程序支付回调 + * 支付回调 */ @Override public String miniPayCallback(Map params, String body, Map headers) { @@ -614,42 +620,64 @@ public class ThirdAppPlusServiceImpl implements ThirdAppPlusService { if (ObjectUtil.notEqual(thirdPayOrder.getStatus(), ThirdPayOrderStatusEnum.PAY_SUCCESS.getType())) { return true; } - if (ObjectUtil.notEqual(thirdPayOrder.getBizType(), ThirdPayOrderBizTypeEnum.MINI_APP_WALLET_RECHARGE.getType())) { + if (ObjectUtil.equals(thirdPayOrder.getBizType(), ThirdPayOrderBizTypeEnum.MINI_APP_WALLET_RECHARGE.getType())) { + // 已经支付 + try { + WalletRechargePaySuccess dto = new WalletRechargePaySuccess(); + dto.setPayNo(thirdPayOrder.getPayNo()); + dto.setUserId(thirdPayOrder.getUserId()); + dto.setBizId(thirdPayOrder.getBizId()); + dto.setBizType(thirdPayOrder.getBizType()); + return remoteWalletRechargePackageService.remotePaySuccess(dto).getData(); + } catch (Exception e) { + log.error("|小程序用户钱包充值|处理小程序支付成功回调异常", e); + return false; + } + } else if (ObjectUtil.equals(thirdPayOrder.getBizType(), ThirdPayOrderBizTypeEnum.APP_SHOP_PAY.getType())) { + try { + HardUpdateShopStatusDto dto = new HardUpdateShopStatusDto(); + dto.setOrderId(Long.valueOf(thirdPayOrder.getBizId())); + dto.setStatus(HardUpdateShopStatusDto.ChangeShopStatus.PAY_SUCCESS); + return remoteHardOrderService.updateShopStatus(dto).getData(); + } catch (Exception e) { + log.error("|APP支付-购买商品(有订单)|处理小程序支付成功回调异常", e); + return false; + } + } else { return true; } - // 已经支付 - try { - WalletRechargePaySuccess dto = new WalletRechargePaySuccess(); - dto.setPayNo(thirdPayOrder.getPayNo()); - dto.setUserId(thirdPayOrder.getUserId()); - dto.setBizId(thirdPayOrder.getBizId()); - dto.setBizType(thirdPayOrder.getBizType()); - return remoteWalletRechargePackageService.remotePaySuccess(dto).getData(); - } catch (Exception e) { - log.error("处理小程序支付成功回调异常", e); - return false; - } } private boolean disposeRefundSuccessAfter(ThirdPayOrderEntity thirdPayOrder) { if (ObjectUtil.notEqual(thirdPayOrder.getStatus(), ThirdPayOrderStatusEnum.REFUND_SUCCESS.getType())) { return true; } - if (ObjectUtil.notEqual(thirdPayOrder.getBizType(), ThirdPayOrderBizTypeEnum.MINI_APP_WALLET_RECHARGE.getType())) { + if (ObjectUtil.equals(thirdPayOrder.getBizType(), ThirdPayOrderBizTypeEnum.MINI_APP_WALLET_RECHARGE.getType())) { + // 已退款 + try { + WalletRechargeRefundSuccess dto = new WalletRechargeRefundSuccess(); + dto.setRefundNo(thirdPayOrder.getRefundNo()); + dto.setUserId(thirdPayOrder.getUserId()); + dto.setBizId(thirdPayOrder.getBizId()); + dto.setBizType(thirdPayOrder.getBizType()); + return remoteWalletRechargePackageService.remoteRefundSuccess(dto).getData(); + } catch (Exception e) { + log.error("|小程序用户钱包充值|处理小程序退款成功回调异常", e); + return false; + } + } else if (ObjectUtil.equals(thirdPayOrder.getBizType(), ThirdPayOrderBizTypeEnum.APP_SHOP_PAY.getType())) { + try { + HardUpdateShopStatusDto dto = new HardUpdateShopStatusDto(); + dto.setOrderId(Long.valueOf(thirdPayOrder.getBizId())); + dto.setStatus(HardUpdateShopStatusDto.ChangeShopStatus.REFUND_SUCCESS); + return remoteHardOrderService.updateShopStatus(dto).getData(); + } catch (Exception e) { + log.error("|APP支付-购买商品(有订单)|处理小程序退款成功回调异常", e); + return false; + } + } else { return true; } - // 已退款 - try { - WalletRechargeRefundSuccess dto = new WalletRechargeRefundSuccess(); - dto.setRefundNo(thirdPayOrder.getRefundNo()); - dto.setUserId(thirdPayOrder.getUserId()); - dto.setBizId(thirdPayOrder.getBizId()); - dto.setBizType(thirdPayOrder.getBizType()); - return remoteWalletRechargePackageService.remoteRefundSuccess(dto).getData(); - } catch (Exception e) { - log.error("处理小程序退款成功回调异常", e); - return false; - } } } 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 cdcfdf3d1..158ef653f 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 @@ -59,4 +59,8 @@ public interface RemoteMchService { @NoToken @GetMapping("/mch-manage/get-views-canteen-mch-by-dept-id") R getViewsCanteenMchByDeptId(@RequestParam Long deptId); + + @NoToken + @GetMapping("/mch-manage/get-views-mch-by-dept-id") + R getViewsMchByDeptId(@RequestParam Long deptId, @RequestParam List mchTypeList); } 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 b513a0e08..1b077d026 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 @@ -155,6 +155,14 @@ public class MchManageController { if (ObjectUtil.isEmpty(mchManage)) return R.failed("商户不存在"); return R.ok(mchManage); } + + @Inner + @GetMapping("/get-views-mch-by-dept-id") + public R getViewsMchByDeptId(@RequestParam Long deptId, @RequestParam List mchTypeList) { + MchManageVo mchManage = mchManageService.getViewsCanteenMch(deptId, mchTypeList); + if (ObjectUtil.isEmpty(mchManage)) return R.failed("商户不存在"); + return R.ok(mchManage); + } /* ************************************* end 远程调用 end ************************************* */ /* ************************************* start app start ************************************* */ diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/mch/MchPaySettingController.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/mch/MchPaySettingController.java index 25c94d4c7..7f4d700f5 100755 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/mch/MchPaySettingController.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/mch/MchPaySettingController.java @@ -45,7 +45,6 @@ public class MchPaySettingController { @ApiCryptoAes @GetMapping("/app/pay-type-list") public R> getUserPaySettingList() { - System.out.println("getUserPaySettingList"); PjcloudUser user = SecurityUtils.getUser(); return R.ok(mchPaySettingService.getUserPaySettingList(user)); } diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/mch/MchPaySettingServiceImpl.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/mch/MchPaySettingServiceImpl.java index 3bbf94103..8b65393b0 100755 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/mch/MchPaySettingServiceImpl.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/mch/MchPaySettingServiceImpl.java @@ -100,14 +100,12 @@ public class MchPaySettingServiceImpl extends ServiceImpl getUserPaySettingList(PjcloudUser user) { - log.error("getUserPaySettingList.user:{}", JSONUtil.toJsonStr(user)); - log.warn("getUserPaySettingList.user:{}", JSONUtil.toJsonStr(user)); // 查询当前的登录用户 UserInfo userInfo = remoteUserService.getByUserId(user.getId()).getData(); if (ObjectUtil.isEmpty(userInfo)) { throw new RuntimeException("用户不存在"); } - MchManageVo targetMch = mchManageService.getFirstMchByDeptId(userInfo.getSysUser().getDeptId(), List.of(MerchantTypeEnum.CANTEEN)); + MchManageVo targetMch = mchManageService.getViewsCanteenMch(userInfo.getSysUser().getDeptId(), List.of(MerchantTypeEnum.CANTEEN, MerchantTypeEnum.FARMER)); if (ObjectUtil.isEmpty(targetMch) || ObjectUtil.isEmpty(targetMch.getPaySettingList())) { return List.of(); }