diff --git a/pjcloud-app-server/pjcloud-app-server-biz/pom.xml b/pjcloud-app-server/pjcloud-app-server-biz/pom.xml index 6788632a8..cfd96feff 100644 --- a/pjcloud-app-server/pjcloud-app-server-biz/pom.xml +++ b/pjcloud-app-server/pjcloud-app-server-biz/pom.xml @@ -13,6 +13,10 @@ pjcloud-app-server-biz + + com.bsd + pjcloud-upms-api + org.springframework.boot diff --git a/pjcloud-canteen/pjcloud-canteen-api/src/main/java/com/bsd/pjcloud/canteen/dto/CanteenSpuUpdateStockReqDTO.java b/pjcloud-canteen/pjcloud-canteen-api/src/main/java/com/bsd/pjcloud/canteen/dto/CanteenSpuUpdateStockReqDTO.java new file mode 100644 index 000000000..328dafaf9 --- /dev/null +++ b/pjcloud-canteen/pjcloud-canteen-api/src/main/java/com/bsd/pjcloud/canteen/dto/CanteenSpuUpdateStockReqDTO.java @@ -0,0 +1,47 @@ +package com.bsd.pjcloud.canteen.dto; + +import jakarta.validation.constraints.NotNull; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * 商品 SKU 更新库存 Request DTO + * + * @author LeeYan9 + * @since 2022-08-26 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class CanteenSpuUpdateStockReqDTO { + + /** + * 商品 SKU + */ + @NotNull(message = "商品 SPU 不能为空") + private List items; + + @Data + public static class Item { + + /** + * 商品 SKU 编号 + */ + @NotNull(message = "商品 SPU 编号不能为空") + private Long id; + + /** + * 库存变化数量 + * + * 正数:增加库存 + * 负数:扣减库存 + */ + @NotNull(message = "库存变化数量不能为空") + private Integer incrCount; + + } + +} diff --git a/pjcloud-canteen/pjcloud-canteen-api/src/main/java/com/bsd/pjcloud/canteen/vo/ADCanteenDailyMenuListVO.java b/pjcloud-canteen/pjcloud-canteen-api/src/main/java/com/bsd/pjcloud/canteen/vo/ADCanteenDailyMenuListVO.java new file mode 100644 index 000000000..c428ad969 --- /dev/null +++ b/pjcloud-canteen/pjcloud-canteen-api/src/main/java/com/bsd/pjcloud/canteen/vo/ADCanteenDailyMenuListVO.java @@ -0,0 +1,42 @@ +package com.bsd.pjcloud.canteen.vo; + +import lombok.Data; + +@Data +public class ADCanteenDailyMenuListVO { + /** + * 每日菜品id + */ + private Long id; + + /** + * spuid + */ + private Long spuId; + + /** + * 菜品名称 + */ + private String name; + /** + * 商品价格,单位使用:分 + */ + private Integer price; + /** + * 菜品分类编号 + */ + private Long categoryId; + /** + * 菜品封面图 + */ + private String picUrl; + /** + * 库存 + */ + private Integer stock; + + /** + * 时间类型 + */ + private Integer hourType; +} diff --git a/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/controller/CanteenDailyMenuController.java b/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/controller/CanteenDailyMenuController.java index 78f3ad657..0ed91fb9d 100644 --- a/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/controller/CanteenDailyMenuController.java +++ b/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/controller/CanteenDailyMenuController.java @@ -171,4 +171,14 @@ public class CanteenDailyMenuController { } +// ---------APP------------ + @GetMapping("/ad/getCanteenList") + @SysLog("查询每日菜品列表") + public R getCanteenList(@RequestParam("day") String day, + @RequestParam(value = "hourType", required = false) Integer hourType, + @RequestParam(value = "categoryId", required = false) Long categoryId) { + + return R.ok(canteenDailyMenuService.getCanteenMenuList(day,hourType,categoryId)); + } + } \ No newline at end of file diff --git a/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/controller/CanteenSpuController.java b/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/controller/CanteenSpuController.java index bc5d3e64b..4919cb4ac 100644 --- a/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/controller/CanteenSpuController.java +++ b/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/controller/CanteenSpuController.java @@ -7,6 +7,7 @@ import com.alibaba.excel.util.StringUtils; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.bsd.pjcloud.canteen.dto.CanteenSpuUpdateStockReqDTO; import com.bsd.pjcloud.canteen.entity.CanteenDailyMenuEntity; import com.bsd.pjcloud.common.core.util.R; import com.bsd.pjcloud.common.log.annotation.SysLog; @@ -126,4 +127,13 @@ public class CanteenSpuController { + +// --------------APP----------------- + + + @PostMapping("/ad/updateSkuStock") + @SysLog("更新菜品库存") + public R updateSkuStock(@RequestBody CanteenSpuUpdateStockReqDTO updateStockReqDTO){ + return canteenSpuService.updateSkuStock(updateStockReqDTO); + } } \ No newline at end of file diff --git a/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/mapper/CanteenDailyMenuMapper.java b/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/mapper/CanteenDailyMenuMapper.java index 52be9acaa..db089491e 100644 --- a/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/mapper/CanteenDailyMenuMapper.java +++ b/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/mapper/CanteenDailyMenuMapper.java @@ -15,4 +15,15 @@ public interface CanteenDailyMenuMapper extends PjcloudBaseMapper selectTimeFood(@Param("time") String time,@Param("merchantId") Long merchantId, @Param("categoryId") Long categoryId, DataScope dataScope); + + + /** + * ad查询菜品列表 + * @param day + * @param hourType + * @param categoryId + * @return + */ + Object getCanteenMenuList(@Param("day") String day,@Param("hourType") Integer hourType, + @Param("categoryId") Long categoryId,DataScope dataScope); } \ No newline at end of file diff --git a/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/mapper/CanteenSpuMapper.java b/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/mapper/CanteenSpuMapper.java index d46219ba0..2449b7b3c 100644 --- a/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/mapper/CanteenSpuMapper.java +++ b/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/mapper/CanteenSpuMapper.java @@ -1,5 +1,6 @@ package com.bsd.pjcloud.canteen.mapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.bsd.pjcloud.canteen.dto.DailyMenuAll; import com.bsd.pjcloud.common.data.datascope.DataScope; import com.bsd.pjcloud.common.data.datascope.PjcloudBaseMapper; @@ -12,7 +13,27 @@ import java.util.List; public interface CanteenSpuMapper extends PjcloudBaseMapper { - - - + /** + * 更新商品 SPU 库存 + * + * @param id 商品 SPU 编号 + * @param incrCount 增加的库存数量 + */ + default int updateStock(Long id, Integer incrCount) { + // 拼接 SQL + if (incrCount == 0) { + return 0; + } + String sql; + if (incrCount > 0) { + sql = " stock = stock + " + incrCount + ", sales_count = sales_count - " + incrCount; + } else { + sql = " stock = stock - " + Math.abs(incrCount) + ", sales_count = sales_count + " + Math.abs(incrCount); + } + // 执行更新 + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper() + .setSql(sql) + .eq(CanteenSpuEntity::getId, id); + return update(null, updateWrapper); + } } \ No newline at end of file diff --git a/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/service/CanteenDailyMenuService.java b/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/service/CanteenDailyMenuService.java index 7c498753e..d3596762a 100644 --- a/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/service/CanteenDailyMenuService.java +++ b/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/service/CanteenDailyMenuService.java @@ -28,4 +28,14 @@ public interface CanteenDailyMenuService extends IService { Object selectFoodList(LambdaQueryWrapper wrapper); + /** + * 更新库存 + * @param updateStockReqDTO + * @return + */ + R updateSkuStock(CanteenSpuUpdateStockReqDTO updateStockReqDTO); + } \ No newline at end of file diff --git a/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/service/impl/CanteenDailyMenuServiceImpl.java b/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/service/impl/CanteenDailyMenuServiceImpl.java index 05d9a40a8..d758ee9bb 100644 --- a/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/service/impl/CanteenDailyMenuServiceImpl.java +++ b/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/service/impl/CanteenDailyMenuServiceImpl.java @@ -88,4 +88,11 @@ public class CanteenDailyMenuServiceImpl extends ServiceImpl implements CanteenSpuService { + + private final CanteenDailyMenuService coupleDailyMenuService; @Override public Object selectFoodList(LambdaQueryWrapper wrapper) { return baseMapper.selectListByScope(wrapper, DataScope.of()); } + @Override + @Transactional + public R updateSkuStock(CanteenSpuUpdateStockReqDTO updateStockReqDTO) { + // 更新 SKU 库存 + updateStockReqDTO.getItems().forEach(item -> { + int i = baseMapper.updateStock(item.getId(), item.getIncrCount()); + if (item.getIncrCount() < 0) { + if (i == 0) { + R.failed("商品库存不足"); + } + } + }); + + return R.ok(); + } + + } \ No newline at end of file diff --git a/pjcloud-canteen/pjcloud-canteen-biz/src/main/resources/mapper/CanteenDailyMenuMapper.xml b/pjcloud-canteen/pjcloud-canteen-biz/src/main/resources/mapper/CanteenDailyMenuMapper.xml index 2040387d7..cba747499 100644 --- a/pjcloud-canteen/pjcloud-canteen-biz/src/main/resources/mapper/CanteenDailyMenuMapper.xml +++ b/pjcloud-canteen/pjcloud-canteen-biz/src/main/resources/mapper/CanteenDailyMenuMapper.xml @@ -17,6 +17,18 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/pjcloud-common/pjcloud-common-security/src/main/java/com/bsd/pjcloud/common/security/service/PjcloudTocDefaultUserDetailsServiceImpl.java b/pjcloud-common/pjcloud-common-security/src/main/java/com/bsd/pjcloud/common/security/service/PjcloudTocDefaultUserDetailsServiceImpl.java index 30770e223..b93b7fbac 100644 --- a/pjcloud-common/pjcloud-common-security/src/main/java/com/bsd/pjcloud/common/security/service/PjcloudTocDefaultUserDetailsServiceImpl.java +++ b/pjcloud-common/pjcloud-common-security/src/main/java/com/bsd/pjcloud/common/security/service/PjcloudTocDefaultUserDetailsServiceImpl.java @@ -17,6 +17,8 @@ package com.bsd.pjcloud.common.security.service; import cn.hutool.core.util.ArrayUtil; +import com.bsd.pjcloud.admin.api.dto.UserInfo; +import com.bsd.pjcloud.admin.api.feign.RemoteUserService; import com.bsd.pjcloud.app.api.dto.AppUserInfo; import com.bsd.pjcloud.app.api.entity.AppUser; import com.bsd.pjcloud.app.api.feign.RemoteAppUserService; @@ -57,6 +59,8 @@ public class PjcloudTocDefaultUserDetailsServiceImpl implements PjcloudUserDetai private final Optional remoteAppUserServiceOptional; + private final RemoteUserService remoteUserService; + /** * 用户密码登录 * @@ -66,16 +70,26 @@ public class PjcloudTocDefaultUserDetailsServiceImpl implements PjcloudUserDetai @Override @SneakyThrows public UserDetails loadUserByUsername(String username) { - Cache cache = cacheManager.getCache(CacheConstants.USER_DETAILS_MINI); +// Cache cache = cacheManager.getCache(CacheConstants.USER_DETAILS_MINI); +// if (Objects.nonNull(cache) && Objects.nonNull(cache.get(username))) { +// AppUserInfo appUserInfo = cache.get(username, AppUserInfo.class); +// return getUserDetailsAppUser(R.ok(appUserInfo)); +// } +// +// R result = remoteAppUserServiceOptional.get().info(username); +// Optional userInfoOptional = RetOps.of(result).getData(); +// userInfoOptional.ifPresent(userInfo -> Objects.requireNonNull(cache).put(username, userInfo)); +// return getUserDetailsAppUser(result); + + Cache cache = cacheManager.getCache(CacheConstants.USER_DETAILS); if (Objects.nonNull(cache) && Objects.nonNull(cache.get(username))) { - AppUserInfo appUserInfo = cache.get(username, AppUserInfo.class); - return getUserDetailsAppUser(R.ok(appUserInfo)); + return getUserDetails(Optional.ofNullable(cache.get(username, UserInfo.class))); } - R result = remoteAppUserServiceOptional.get().info(username); - Optional userInfoOptional = RetOps.of(result).getData(); + R result = remoteUserService.info(username); + Optional userInfoOptional = RetOps.of(result).getData(); userInfoOptional.ifPresent(userInfo -> Objects.requireNonNull(cache).put(username, userInfo)); - return getUserDetailsAppUser(result); + return getUserDetails(userInfoOptional); } @Override diff --git a/pjcloud-gateway/pjcloud.lnk b/pjcloud-gateway/pjcloud.lnk new file mode 100644 index 000000000..a64a24afe Binary files /dev/null and b/pjcloud-gateway/pjcloud.lnk differ diff --git a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/entity/SupermarketSpuEntity.java b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/entity/SupermarketSpuEntity.java index d4f17e98b..558ee43f2 100644 --- a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/entity/SupermarketSpuEntity.java +++ b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/entity/SupermarketSpuEntity.java @@ -310,9 +310,11 @@ public class SupermarketSpuEntity extends Model { private Long tenantId; @Schema(description = "辅助条码集合对象") + @TableField(exist = false) private List supermarketAuxiliaryCodeEntityList; @Schema(description = "包装对象集合对象") + @TableField(exist = false) private List supermarketUnitEntityList; } \ No newline at end of file