From b2f27cbd0005b4bb16773dbfb8d8d043546b6b95 Mon Sep 17 00:00:00 2001 From: dzc <2388224167@qq.com> Date: Tue, 7 Jan 2025 16:09:35 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E8=AE=A2=E5=8D=95app=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/dto/app/HardCarSaveOrUpdateDto.java | 37 ++++++++ pjcloud-hardware/pjcloud-hardware-biz/pom.xml | 12 +++ .../controller/order/HardCarController.java | 31 ++++++- .../pjcloud/hard/service/HardCarService.java | 9 ++ .../impl/order/HardCarServiceImpl.java | 90 +++++++++++++++++-- .../admin/api/feign/RemoteDeptService.java | 2 + .../admin/controller/SysDeptController.java | 4 +- .../controller/MchManageController.java | 1 + 8 files changed, 175 insertions(+), 11 deletions(-) create mode 100644 pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/app/HardCarSaveOrUpdateDto.java diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/app/HardCarSaveOrUpdateDto.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/app/HardCarSaveOrUpdateDto.java new file mode 100644 index 000000000..8c58a4620 --- /dev/null +++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/app/HardCarSaveOrUpdateDto.java @@ -0,0 +1,37 @@ +package com.bsd.pjcloud.hard.api.dto.app; + +import com.bsd.pjcloud.hard.api.dto.order.HardCarDto; +import com.bsd.pjcloud.hard.api.dto.order.HardCreateCarDto; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + + +@Builder +@AllArgsConstructor +@NoArgsConstructor +@Data +public class HardCarSaveOrUpdateDto { + @Schema(description = "商户id") + @NotNull(message = "商户id不能为空") + private Long merchantId; + + @Schema(description = "购物车") + @NotEmpty(message = "购物车不能为空") + private List list; + + @Schema(description = "用户id") + private Long userId; + + @Schema(description = "订单类型") + private String orderType; + + @Schema(description = "订单类型渠道id") + private Long orderSourceTypeId; +} diff --git a/pjcloud-hardware/pjcloud-hardware-biz/pom.xml b/pjcloud-hardware/pjcloud-hardware-biz/pom.xml index 58d55b11c..b90fd84a9 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/pom.xml +++ b/pjcloud-hardware/pjcloud-hardware-biz/pom.xml @@ -110,6 +110,18 @@ 5.7.0 compile + + com.bsd + pjcloud-supermarket-api + 5.7.0 + compile + + + com.bsd + pjcloud-supermarket-biz + 5.7.0 + compile + diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardCarController.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardCarController.java index 25a0960fb..39c346fed 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardCarController.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardCarController.java @@ -7,8 +7,13 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.bsd.pjcloud.common.core.util.R; import com.bsd.pjcloud.common.log.annotation.SysLog; +import com.bsd.pjcloud.common.security.service.PjcloudUser; +import com.bsd.pjcloud.common.security.util.SecurityUtils; +import com.bsd.pjcloud.hard.api.constant.order.HardOrderTypeEnum; +import com.bsd.pjcloud.hard.api.dto.app.HardCarSaveOrUpdateDto; import com.bsd.pjcloud.hard.api.dto.order.HardCarDto; import com.bsd.pjcloud.hard.api.entity.order.HardCarEntity; +import com.bsd.pjcloud.hard.api.vo.order.HardCarVo; import com.bsd.pjcloud.hard.service.HardCarService; import org.springframework.security.access.prepost.PreAuthorize; import com.bsd.pjcloud.common.excel.annotation.ResponseExcel; @@ -21,7 +26,6 @@ import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; import java.util.List; -import java.util.Objects; /** * 购物车表 @@ -38,6 +42,31 @@ public class HardCarController { private final HardCarService hardCarService; + /* ************************************* start app start ************************************* */ + @GetMapping("/app/mch-detail") + @Operation(summary = "根据商户id查询当前用户购物车") + public R> appMchDetail(@RequestParam Long merchantId) { + PjcloudUser user = SecurityUtils.getUser(); + return R.ok(hardCarService.mchDetail(merchantId, user.getId())); + } + + @GetMapping("/app/order-id") + @Operation(summary = "根据订单id查询当前用户购物车") + public R> appOrderId(@RequestParam Long orderId) { + return R.ok(hardCarService.getByOrderId(orderId)); + } + + @PostMapping("/app/save-or-upload") + @Operation(summary = "新增或者更新购物车") + public R saveOrUpload(@RequestBody HardCarSaveOrUpdateDto dto) { + PjcloudUser user = SecurityUtils.getUser(); + dto.setUserId(user.getId()); + dto.setOrderType(HardOrderTypeEnum.RESERVE.getType()); + hardCarService.saveOrUpload(dto); + return R.ok(true); + } + /* ************************************* end app end ************************************* */ + @Operation(summary = "分页查询", description = "分页查询") @GetMapping("/page") @PreAuthorize("@pms.hasPermission('hard_hardCar_view')") diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardCarService.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardCarService.java index 25269ad74..087890fc6 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardCarService.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardCarService.java @@ -3,6 +3,7 @@ package com.bsd.pjcloud.hard.service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.bsd.pjcloud.hard.api.constant.HardTypeEnum; +import com.bsd.pjcloud.hard.api.dto.app.HardCarSaveOrUpdateDto; import com.bsd.pjcloud.hard.api.dto.order.HardCarDto; import com.bsd.pjcloud.hard.api.dto.order.HardCreateCarDto; import com.bsd.pjcloud.hard.api.entity.order.HardCarEntity; @@ -18,8 +19,16 @@ public interface HardCarService extends IService { List getByOrderId(Long orderId); + List mchDetail(Long merchantId, Long userId); + Integer computerCarTotalPrice(@NotNull HardTypeEnum sysType, @NotEmpty List list); + /** + * 新增或者更新购物车 + * @param dto + */ + void saveOrUpload(HardCarSaveOrUpdateDto dto); + /** * @param userId 用户id * @param merchantId 商户id 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 01b6532a9..eed0f6842 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 @@ -1,13 +1,17 @@ package com.bsd.pjcloud.hard.service.impl.order; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.extra.spring.SpringUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.bsd.pjcloud.canteen.api.feign.RemoteCanteenSpuService; import com.bsd.pjcloud.canteen.entity.CanteenSpuEntity; import com.bsd.pjcloud.common.core.util.BeanUtils; +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.app.HardCarSaveOrUpdateDto; import com.bsd.pjcloud.hard.api.dto.order.HardCarDto; import com.bsd.pjcloud.hard.api.dto.order.HardCreateCarDto; import com.bsd.pjcloud.hard.api.entity.order.HardCarEntity; @@ -18,6 +22,8 @@ import com.bsd.pjcloud.hard.mapper.order.HardCarMapper; import com.bsd.pjcloud.hard.mapper.order.HardOrderMapper; import com.bsd.pjcloud.hard.mapper.order.HardParentCarMapper; import com.bsd.pjcloud.hard.service.HardCarService; +import com.bsd.pjcloud.supermarket.api.feign.RemoteSupermarketUnitSkuService; +import com.bsd.pjcloud.supermarket.entity.SupermarketUnitEntity; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -45,12 +51,20 @@ public class HardCarServiceImpl extends ServiceImpl pageJoin(Page page, HardCarDto dto) { return baseMapper.pageJoin(page, dto); } + @Override + public List mchDetail(Long merchantId, Long userId) { + HardParentCarEntity parentCarDO = getParentCar(merchantId, userId); + if (ObjectUtil.isEmpty(parentCarDO)) return null; + return list(new LambdaQueryWrapper().eq(HardCarEntity::getParentCarId, parentCarDO.getId())); + } + @Override public List getByOrderId(Long orderId) { HardOrderEntity order = hardCarMapper.selectById(orderId); @@ -61,6 +75,23 @@ public class HardCarServiceImpl extends ServiceImpl().eq(HardCarEntity::getParentCarId, parentCar.getId())); + // 添加购物车 + getSelf().appCreateCard(parentCar.getId(), HardTypeEnum.CANTEEN, dto.getList()); + return; + } + // 添加父订单 + HardParentCarEntity parentCarObj = HardParentCarEntity.builder().userId(dto.getUserId()).merchantId(dto.getMerchantId()).orderStatus(HardOrderStatusEnum.CREATE.getType()).build(); + hardParentCarMapper.insert(parentCarObj); + // 添加购物车 + getSelf().appCreateCard(parentCar.getId(), HardTypeEnum.CANTEEN, dto.getList()); + } + @Override public Integer computerCarTotalPrice(HardTypeEnum sysType, List list) { List productIds = list.stream().map(HardCreateCarDto::getProductId).toList(); @@ -91,16 +122,22 @@ public class HardCarServiceImpl extends ServiceImpl list) { - List productIds = list.stream().map(HardCreateCarDto::getProductId).toList(); // 创建父订单 - HardParentCarEntity parentCarObj = HardParentCarEntity.builder().userId(userId).merchantId(merchantId).orderStatus(sysType.getType()).build(); + HardParentCarEntity parentCarObj = HardParentCarEntity.builder().userId(userId).merchantId(merchantId).orderStatus(HardOrderStatusEnum.PAY.getType()).build(); hardParentCarMapper.insert(parentCarObj); - List carObjectList = new ArrayList<>(); + getSelf().appCreateCard(parentCarObj.getId(), sysType, list); + return parentCarObj.getId(); + } + + @Transactional(rollbackFor = Exception.class) + public void appCreateCard(Long parentCarId, HardTypeEnum sysType, List productList) { + List productIds = productList.stream().map(HardCreateCarDto::getProductId).toList(); // 食堂 if (ObjectUtil.equals(sysType, HardTypeEnum.CANTEEN)) { + List carObjectList = new ArrayList<>(); List supList = (List) canteenSpuService.getSpuListByIds(productIds).getData(); - for (HardCreateCarDto v : list) { - HardCarEntity item = HardCarEntity.builder().parentCarId(parentCarObj.getId()).build(); + for (HardCreateCarDto v : productList) { + HardCarEntity item = HardCarEntity.builder().parentCarId(parentCarId).build(); supList.stream().filter(i -> ObjectUtil.equals(i.getId(), v.getProductId())).findFirst().ifPresent(spu -> { int totalPrice = v.getProductCount() * spu.getPrice(); item.setProductId(spu.getId()); @@ -110,15 +147,32 @@ public class HardCarServiceImpl extends ServiceImpl carObjectList = new ArrayList<>(); + List supList = (List) supermarketUnitSkuService.getSupermarketUnits(productIds).getData(); + for (HardCreateCarDto v : productList) { + HardCarEntity item = HardCarEntity.builder().parentCarId(parentCarId).build(); + supList.stream().filter(i -> ObjectUtil.equals(i.getId(), v.getProductId())).findFirst().ifPresent(spu -> { + int totalPrice = v.getProductCount() * spu.getRetailPrice(); + item.setProductId(spu.getId()); + item.setProductName(""); + item.setProductPrice(spu.getRetailPrice()); + item.setProductPic(""); + item.setTotalPrice((long) totalPrice); + item.setProductCount(v.getProductCount()); + item.setProductWeight(new BigDecimal(0)); + carObjectList.add(item); + }); + } + return; } - baseMapper.insert(carObjectList); - return parentCarObj.getId(); } @Override @@ -134,8 +188,26 @@ public class HardCarServiceImpl extends ServiceImpl supList = (List) supermarketUnitSkuService.getSupermarketUnits(productIds).getData(); + for (HardCreateCarDto v : list) { + supList.stream().filter(i -> ObjectUtil.equals(i.getId(), v.getProductId())).findFirst().ifPresent(spu -> { + str.append("").append("x").append(v.getProductCount()).append(";"); + }); + } } return str.toString(); } + + private HardParentCarEntity getParentCar(Long merchantId, Long userId) { + if (!ObjectUtil.isAllNotEmpty(merchantId, userId)) return null; + return hardParentCarMapper.selectOne(new LambdaQueryWrapper() + .eq(HardParentCarEntity::getUserId, userId) + .eq(HardParentCarEntity::getMerchantId, merchantId) + .eq(HardParentCarEntity::getOrderStatus, HardOrderStatusEnum.CREATE.getType()) + ); + } + + private HardCarServiceImpl getSelf() { + return SpringUtil.getBean(getClass()); + } } \ No newline at end of file diff --git a/pjcloud-upms/pjcloud-upms-api/src/main/java/com/bsd/pjcloud/admin/api/feign/RemoteDeptService.java b/pjcloud-upms/pjcloud-upms-api/src/main/java/com/bsd/pjcloud/admin/api/feign/RemoteDeptService.java index c6435c363..bfcce26f4 100644 --- a/pjcloud-upms/pjcloud-upms-api/src/main/java/com/bsd/pjcloud/admin/api/feign/RemoteDeptService.java +++ b/pjcloud-upms/pjcloud-upms-api/src/main/java/com/bsd/pjcloud/admin/api/feign/RemoteDeptService.java @@ -22,6 +22,7 @@ package com.bsd.pjcloud.admin.api.feign; import com.bsd.pjcloud.admin.api.entity.SysDept; 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 org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; @@ -61,6 +62,7 @@ public interface RemoteDeptService { * @param deptIds * @return */ + @NoToken @GetMapping("/dept/getDeptListByDeptIds") R> getDeptByDeptIds(@RequestParam("deptIds") List deptIds); diff --git a/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/controller/SysDeptController.java b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/controller/SysDeptController.java index 935daddd8..8d39f6c27 100644 --- a/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/controller/SysDeptController.java +++ b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/controller/SysDeptController.java @@ -27,6 +27,7 @@ import com.bsd.pjcloud.common.excel.annotation.RequestExcel; import com.bsd.pjcloud.common.excel.annotation.ResponseExcel; import com.bsd.pjcloud.common.log.annotation.SysLog; import com.bsd.pjcloud.common.security.annotation.HasPermission; +import com.bsd.pjcloud.common.security.annotation.Inner; import io.swagger.v3.oas.annotations.security.SecurityRequirement; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.validation.Valid; @@ -186,12 +187,13 @@ public class SysDeptController { return R.ok(sysDeptService.getOrgTreeUser(username)); } - + @Inner @GetMapping("/getDeptListByDeptIds") public R> getDeptListByDeptIds(@RequestParam("deptIds") List deptIds) { return R.ok(sysDeptService.getDeptListByDeptIds(deptIds)); } + @Inner(value = false) @GetMapping("/getDeptListByDeptId") public R getDeptByDeptId(@RequestParam("deptId") Long deptId) { return R.ok(sysDeptService.getById(deptId)); diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/MchManageController.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/MchManageController.java index c057cad89..b6ee48929 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/MchManageController.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/MchManageController.java @@ -86,6 +86,7 @@ public class MchManageController { /* ************************************* start app start ************************************* */ @Operation(summary = "app查询商铺", description = "app查询商铺") @GetMapping("/app/page-join") + @Inner(value = false) public R> appPageJoin(@ParameterObject Page page, @ParameterObject MchManageDto dto) { return R.ok(mchManageService.pageJoin(page, dto)); }