小程序主页接口

This commit is contained in:
张松 2025-03-01 09:45:33 +08:00
parent ffc620f6d8
commit 8388d0dfad
30 changed files with 1096 additions and 17 deletions

View File

@ -13,6 +13,7 @@ import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/user/home")
public class HomeController {
@GetMapping("/homePageUp")
public CzgResult<?> homePageUp() {
return CzgResult.success(JSONObject.parseObject("""

View File

@ -0,0 +1,41 @@
package com.czg.controller.user;
import com.alibaba.fastjson2.JSONObject;
import com.czg.product.service.HomePageService;
import com.czg.resp.CzgResult;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* 小程序主页相关接口
* @author Administrator
*/
@RestController
@RequestMapping("/user/home")
public class HomeController {
@Resource
private HomePageService homePageService;
@GetMapping("/homePageUp")
public CzgResult<?> homePageUp() {
return CzgResult.success(homePageService.getHomeInfo());
}
/**
* 获取首页商品
* @param lng 纬度
* @param lat 经度
* @param address 城市
* @param classify 分类 0双人餐 1饮品明细 2咖啡饮品
* @param orderType 排序规则 0离我最近 1销量优先 2价格优先
* @param distanceType 1一千米
* @return 商品列表
*/
@GetMapping("/product")
public CzgResult<?> home(String lng, String lat, String address, Integer classify, Integer orderType, Integer distanceType) {
return CzgResult.success(homePageService.getProd(lng, lat, address, classify, orderType, distanceType));
}
}

View File

@ -0,0 +1,120 @@
package com.czg.account.dto;
import java.io.Serializable;
import java.io.Serial;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 平台配置 实体类
*
* @author zs
* @since 2025-02-28
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class PlatformDictDTO implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
private Integer id;
/**
* 标签前小图标
*/
private String shareImg;
/**
* 描述 同类型下 name唯一
*/
private String name;
/**
*
*/
private String value;
/**
* 字体色
*/
private String fontColor;
/**
* 背景色
*/
private String backColor;
/**
* homeDistrict--金刚区首页
carousel--轮播图
proTag--商品标签
shopTag--店铺标签
icon--小图标
subShop--预约到店顶部图
group--团购卷分类对应顶部图 value为团购卷Id
ownMenu--个人中心菜单
*/
private String type;
/**
* 展示图
*/
private String coverImg;
/**
* 视频URL地址
*/
private String video;
/**
* 视频封面图
*/
private String videoCoverImg;
/**
* 类型: scan拉起相机relative内部页面absolute外链url
*/
private String jumpType;
/**
* 跳转地址
*/
private String absUrl;
/**
* 创建时间
*/
private Long createdAt;
/**
* 更新时间
*/
private Long updatedAt;
/**
* 收银端展示 0:不展示 1:展示
*/
private Integer isShowCash;
/**
* 小程序端展示 0:不展示 1:展示
*/
private Integer isShowMall;
/**
* APP端展示 0:不展示 1:展示
*/
private Integer isShowApp;
/**
* 排序
*/
private Integer sort;
}

View File

@ -0,0 +1,46 @@
package com.czg.account.dto;
import java.io.Serializable;
import java.io.Serial;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 平台配置类型 实体类
*
* @author zs
* @since 2025-02-28
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class PlatformDictTypeDTO implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* id
*/
private Integer id;
/**
* 类型标识
*/
private String key;
/**
* 类型名称
*/
private String name;
/**
* 排序
*/
private Integer sort;
}

View File

@ -0,0 +1,95 @@
package com.czg.account.dto;
import java.io.Serializable;
import java.time.LocalDateTime;
import com.alibaba.fastjson2.annotation.JSONField;
import java.io.Serial;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 数据字典 实体类
*
* @author zs
* @since 2025-02-28
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class SysDictDTO implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* ID
*/
private Long id;
/**
* 父id
*/
private Integer releId;
/**
* name
*/
private String dictName;
/**
* 字典名称
*/
private String name;
/**
*
*/
private String value;
/**
* 类型通用-common首页-home热销-hot
*/
private String type;
/**
* 是否展示 0否 1是
*/
private Integer status;
/**
* 是否有子类 0否1是
*/
private Integer isChild;
/**
* 创建者
*/
private String createBy;
/**
* 更新者
*/
private String updateBy;
/**
* 创建日期
*/
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createTime;
/**
* 更新时间
*/
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime updateTime;
/**
* 排序
*/
private Integer sort;
}

View File

@ -0,0 +1,126 @@
package com.czg.account.entity;
import com.mybatisflex.annotation.Id;
import com.mybatisflex.annotation.KeyType;
import com.mybatisflex.annotation.Table;
import java.io.Serializable;
import java.io.Serial;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 平台配置 实体类
*
* @author zs
* @since 2025-02-28
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Table("tb_platform_dict")
public class PlatformDict implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
@Id(keyType = KeyType.Auto)
private Integer id;
/**
* 标签前小图标
*/
private String shareImg;
/**
* 描述 同类型下 name唯一
*/
private String name;
/**
*
*/
private String value;
/**
* 字体色
*/
private String fontColor;
/**
* 背景色
*/
private String backColor;
/**
* homeDistrict--金刚区首页
carousel--轮播图
proTag--商品标签
shopTag--店铺标签
icon--小图标
subShop--预约到店顶部图
group--团购卷分类对应顶部图 value为团购卷Id
ownMenu--个人中心菜单
*/
private String type;
/**
* 展示图
*/
private String coverImg;
/**
* 视频URL地址
*/
private String video;
/**
* 视频封面图
*/
private String videoCoverImg;
/**
* 类型: scan拉起相机relative内部页面absolute外链url
*/
private String jumpType;
/**
* 跳转地址
*/
private String absUrl;
/**
* 创建时间
*/
private Long createdAt;
/**
* 更新时间
*/
private Long updatedAt;
/**
* 收银端展示 0:不展示 1:展示
*/
private Integer isShowCash;
/**
* 小程序端展示 0:不展示 1:展示
*/
private Integer isShowMall;
/**
* APP端展示 0:不展示 1:展示
*/
private Integer isShowApp;
/**
* 排序
*/
private Integer sort;
}

View File

@ -0,0 +1,52 @@
package com.czg.account.entity;
import com.mybatisflex.annotation.Id;
import com.mybatisflex.annotation.KeyType;
import com.mybatisflex.annotation.Table;
import java.io.Serializable;
import java.io.Serial;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 平台配置类型 实体类
*
* @author zs
* @since 2025-02-28
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Table("tb_platform_dict_type")
public class PlatformDictType implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* id
*/
@Id(keyType = KeyType.Auto)
private Integer id;
/**
* 类型标识
*/
private String key;
/**
* 类型名称
*/
private String name;
/**
* 排序
*/
private Integer sort;
}

View File

@ -0,0 +1,107 @@
package com.czg.account.entity;
import com.mybatisflex.annotation.Column;
import com.mybatisflex.annotation.Id;
import com.mybatisflex.annotation.KeyType;
import com.mybatisflex.annotation.Table;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.io.Serial;
import java.util.ArrayList;
import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 数据字典 实体类
*
* @author zs
* @since 2025-02-28
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Table("sys_dict")
public class SysDict implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* ID
*/
@Id(keyType = KeyType.Auto)
private Long id;
/**
* 父id
*/
private Integer releId;
/**
* name
*/
private String dictName;
/**
* 字典名称
*/
private String name;
/**
*
*/
private String value;
/**
* 类型通用-common首页-home热销-hot
*/
private String type;
/**
* 是否展示 0否 1是
*/
private Integer status;
/**
* 是否有子类 0否1是
*/
private Integer isChild;
/**
* 创建者
*/
private String createBy;
/**
* 更新者
*/
private String updateBy;
/**
* 创建日期
*/
@Column(onInsertValue = "now()")
private LocalDateTime createTime;
/**
* 更新时间
*/
@Column(onInsertValue = "now()", onUpdateValue = "now()")
private LocalDateTime updateTime;
/**
* 排序
*/
private Integer sort;
@Column(ignore = true)
private List<SysDict> detail;
}

View File

@ -0,0 +1,30 @@
package com.czg.account.vo.home;
import lombok.Data;
import lombok.experimental.Accessors;
import java.math.BigDecimal;
/**
* @author lyf
*/
@Data
@Accessors(chain = true)
public class BannerInfoVo {
/**
* 昵称
*/
private String name;
/**
* 昵称
*/
private String logo;
/**
* 免单了多少钱
*/
private String money;
}

View File

@ -0,0 +1,30 @@
package com.czg.account.vo.home;
import lombok.Data;
/**
* 轮播图VO
* @author Administrator
*/
@Data
public class HomeCarouselVo {
/**
* 描述 同类型下 name唯一
*/
private String name;
/**
* 轮播图url
*/
private String coverImg;
/**
* 跳转类型 拉起相机 跳转小程序 跳转第三方url
*/
private String jumpType;
/**
* 绝对跳转地址
*/
private String absUrl;
}

View File

@ -0,0 +1,43 @@
package com.czg.account.vo.home;
import com.czg.account.entity.PlatformDict;
import com.czg.account.entity.SysDict;
import com.czg.product.entity.Product;
import lombok.Data;
import java.util.List;
/**
* @author Administrator
*/
@Data
public class HomePageVO {
/**
* 轮播图列表
*/
private List<PlatformDict> bannerList;
/**
* 免单轮播列表
*/
private List<BannerInfoVo> freeBannerList;
/**
* 功能入口按钮组
*/
private List<PlatformDict> district;
/**
* 热销信息
*/
private HotRankingVO hotRanking;
/**
* 今日上新商品信息
*/
private List<Product> todayProInfo;
/**
* 菜单列表
*/
private List<SysDict> menuList;
}

View File

@ -0,0 +1,20 @@
package com.czg.account.vo.home;
import com.czg.product.entity.Product;
import lombok.Data;
import java.util.List;
/**
* @author lyf
*/
@Data
public class HotRankingVO {
/**
* 榜单名称
*/
private String name = "飙升热榜";
private String date = "8点更新";
List<Product> hotList;
}

View File

@ -0,0 +1,13 @@
package com.czg.product.service;
import com.czg.account.vo.home.HomePageVO;
/**
* @author Administrator
*/
public interface HomePageService {
HomePageVO getHomeInfo();
Object getProd(String lng, String lat, String address, Integer classify, Integer orderType, Integer distanceType);
}

View File

@ -0,0 +1,14 @@
package com.czg.product.service;
import com.mybatisflex.core.service.IService;
import com.czg.account.entity.PlatformDict;
/**
* 平台配置 服务层
*
* @author zs
* @since 2025-02-28
*/
public interface PlatformDictService extends IService<PlatformDict> {
}

View File

@ -0,0 +1,14 @@
package com.czg.product.service;
import com.mybatisflex.core.service.IService;
import com.czg.account.entity.PlatformDictType;
/**
* 平台配置类型 服务层
*
* @author zs
* @since 2025-02-28
*/
public interface PlatformDictTypeService extends IService<PlatformDictType> {
}

View File

@ -0,0 +1,14 @@
package com.czg.product.service;
import com.mybatisflex.core.service.IService;
import com.czg.account.entity.SysDict;
/**
* 数据字典 服务层
*
* @author zs
* @since 2025-02-28
*/
public interface SysDictService extends IService<SysDict> {
}

View File

@ -0,0 +1,85 @@
package com.czg.enums;
/**
* @author 12847
*/
public enum LogoEnum {
url1(1,"https://cashier-oss.oss-cn-beijing.aliyuncs.com/status/%E6%BE%B6%E6%9D%91%E5%84%9A/IMG_0299.PNG"),
url2(2,"https://cashier-oss.oss-cn-beijing.aliyuncs.com/status/%E6%BE%B6%E6%9D%91%E5%84%9A/ffaab08f6a62103593646bf36dbaa24c.jpeg"),
url3(3,"https://cashier-oss.oss-cn-beijing.aliyuncs.com/status/%E6%BE%B6%E6%9D%91%E5%84%9A/fe6c4572004f9aa7716bff89c4c56783.jpeg"),
url4(4,"https://cashier-oss.oss-cn-beijing.aliyuncs.com/status/%E6%BE%B6%E6%9D%91%E5%84%9A/fb56ef7c59d46835e6ff4b5c494aed5a.jpeg"),
url5(5,"https://cashier-oss.oss-cn-beijing.aliyuncs.com/status/%E6%BE%B6%E6%9D%91%E5%84%9A/f8469a7760c7f584ab55e47b60cd3829.jpeg"),
url6(6,"https://cashier-oss.oss-cn-beijing.aliyuncs.com/status/%E6%BE%B6%E6%9D%91%E5%84%9A/f73810e20530a70dd068e0e0a82677d4.jpeg"),
url7(7,"https://cashier-oss.oss-cn-beijing.aliyuncs.com/status/%E6%BE%B6%E6%9D%91%E5%84%9A/f66361c48515ba9b2a03d9d72829d675.jpeg"),
url8(8,"https://cashier-oss.oss-cn-beijing.aliyuncs.com/status/%E6%BE%B6%E6%9D%91%E5%84%9A/f2be456f85849922ba838e7eb4694272.jpeg"),
url9(9,"https://cashier-oss.oss-cn-beijing.aliyuncs.com/status/%E6%BE%B6%E6%9D%91%E5%84%9A/e9fca54f0320644291848338184b6c08.jpeg"),
url10(10,"https://cashier-oss.oss-cn-beijing.aliyuncs.com/status/%E6%BE%B6%E6%9D%91%E5%84%9A/e9e574fdedb43831801697a610603044.jpeg"),
url11(11,"https://cashier-oss.oss-cn-beijing.aliyuncs.com/status/%E6%BE%B6%E6%9D%91%E5%84%9A/e913ec3afe3520b9a638e16d298b401f.jpeg"),
url12(12,"https://cashier-oss.oss-cn-beijing.aliyuncs.com/status/%E6%BE%B6%E6%9D%91%E5%84%9A/e87d19da0cb5af9b53f485117b665cc9.jpeg"),
url13(13,"https://cashier-oss.oss-cn-beijing.aliyuncs.com/status/%E6%BE%B6%E6%9D%91%E5%84%9A/e847667f37d86dc4a48ffcf69bb1a964.jpeg"),
url14(14,"https://cashier-oss.oss-cn-beijing.aliyuncs.com/status/%E6%BE%B6%E6%9D%91%E5%84%9A/e731f8a883ab1ef2a71487f2eb5b0e38.jpeg"),
url15(15,"https://cashier-oss.oss-cn-beijing.aliyuncs.com/status/%E6%BE%B6%E6%9D%91%E5%84%9A/e681a9a281760f275f4b9d11c01a5869.jpeg"),
url16(16,"https://cashier-oss.oss-cn-beijing.aliyuncs.com/status/%E6%BE%B6%E6%9D%91%E5%84%9A/e41fa3916c86d43904a66d1174b81080.jpeg"),
url17(17,"https://cashier-oss.oss-cn-beijing.aliyuncs.com/status/%E6%BE%B6%E6%9D%91%E5%84%9A/e138425037e7ba3eded9ab828e3f39d2.jpeg"),
url18(18,"https://cashier-oss.oss-cn-beijing.aliyuncs.com/status/%E6%BE%B6%E6%9D%91%E5%84%9A/e0d4e933083418e6c4795fb6bf5db628.jpeg"),
url19(19,"https://cashier-oss.oss-cn-beijing.aliyuncs.com/status/%E6%BE%B6%E6%9D%91%E5%84%9A/e07b1933b0ad75f428339ffc79ee4fef.jpeg"),
url20(20,"https://cashier-oss.oss-cn-beijing.aliyuncs.com/status/%E6%BE%B6%E6%9D%91%E5%84%9A/d4ac63680f417b49210aa54cf6e03e77.jpeg"),
url21(21,"https://cashier-oss.oss-cn-beijing.aliyuncs.com/status/%E6%BE%B6%E6%9D%91%E5%84%9A/d44a8bccd46f4fa6c340e825bba5c338.jpeg"),
url22(22,"https://cashier-oss.oss-cn-beijing.aliyuncs.com/status/%E6%BE%B6%E6%9D%91%E5%84%9A/cd794c0c5dd3b212e7c46eaa7c3a85cc.jpeg"),
url23(23,"https://cashier-oss.oss-cn-beijing.aliyuncs.com/status/%E6%BE%B6%E6%9D%91%E5%84%9A/ccf1f255cd30c2aed0b421213df01863.jpeg"),
url24(24,"https://cashier-oss.oss-cn-beijing.aliyuncs.com/status/%E6%BE%B6%E6%9D%91%E5%84%9A/cbe7897bee2d057eaaeaa1604d5bd167.jpeg"),
url25(25,"https://cashier-oss.oss-cn-beijing.aliyuncs.com/status/%E6%BE%B6%E6%9D%91%E5%84%9A/cae19ed2c2c1c749e388730ef1cbb596.jpeg"),
url26(26,"https://cashier-oss.oss-cn-beijing.aliyuncs.com/status/%E6%BE%B6%E6%9D%91%E5%84%9A/c90a7e5d7a9a95a48dac8aecfab5c8e1.jpeg"),
url27(27,"https://cashier-oss.oss-cn-beijing.aliyuncs.com/status/%E6%BE%B6%E6%9D%91%E5%84%9A/c72ec32dbb7c0a42ca6a0a483a0d99ab.jpeg"),
url28(28,"https://cashier-oss.oss-cn-beijing.aliyuncs.com/status/%E6%BE%B6%E6%9D%91%E5%84%9A/c72ec32dbb7c0a42ca6a0a483a0d99ab.jpeg"),
url29(29,"https://cashier-oss.oss-cn-beijing.aliyuncs.com/status/%E6%BE%B6%E6%9D%91%E5%84%9A/c451f57dde1fcbbe4afe5766184084da.jpeg"),
url30(30,"https://cashier-oss.oss-cn-beijing.aliyuncs.com/status/%E6%BE%B6%E6%9D%91%E5%84%9A/a9a9e9eb047009f79bc22290470c2932.jpeg"),
url31(31,"https://cashier-oss.oss-cn-beijing.aliyuncs.com/status/%E6%BE%B6%E6%9D%91%E5%84%9A/aef489a444793e37e2f33aeb3fe1fe13.jpeg"),
url32(32,"https://cashier-oss.oss-cn-beijing.aliyuncs.com/status/%E6%BE%B6%E6%9D%91%E5%84%9A/b0f4a2d7ab851fb2ea01446b722c5631.jpeg"),
url33(33,"https://cashier-oss.oss-cn-beijing.aliyuncs.com/status/%E6%BE%B6%E6%9D%91%E5%84%9A/b2d643c11850042ff2932451c84940c3.jpeg"),
url34(34,"https://cashier-oss.oss-cn-beijing.aliyuncs.com/status/%E6%BE%B6%E6%9D%91%E5%84%9A/bdf1ebd620f759f703631b805216ca11.jpeg"),
url35(35,"https://cashier-oss.oss-cn-beijing.aliyuncs.com/status/%E6%BE%B6%E6%9D%91%E5%84%9A/be1e70097583d1a08a9951925d66ef33.jpeg"),
url36(36,"https://cashier-oss.oss-cn-beijing.aliyuncs.com/status/%E6%BE%B6%E6%9D%91%E5%84%9A/c3f38f6604713f13474a5e2f1145e481.jpeg"),
url37(37,"https://cashier-oss.oss-cn-beijing.aliyuncs.com/status/%E6%BE%B6%E6%9D%91%E5%84%9A/c27da8b2c154998ebf7300c49cef649a.jpeg"),
url38(38,"https://cashier-oss.oss-cn-beijing.aliyuncs.com/status/%E6%BE%B6%E6%9D%91%E5%84%9A/c26400a670209b60abcd28bfc6d22171.jpeg"),
url39(39,"https://cashier-oss.oss-cn-beijing.aliyuncs.com/status/%E6%BE%B6%E6%9D%91%E5%84%9A/a906414986b1bee60cec709dabf2103b.jpeg"),
url40(40,"https://cashier-oss.oss-cn-beijing.aliyuncs.com/status/%E6%BE%B6%E6%9D%91%E5%84%9A/a6d8629c155b59814e4d772fb5e6ec6a.jpeg"),
url41(41,"https://cashier-oss.oss-cn-beijing.aliyuncs.com/status/%E6%BE%B6%E6%9D%91%E5%84%9A/a6a78d2a64c49cf62e37475eb66e351c.jpeg"),
url42(42,"https://cashier-oss.oss-cn-beijing.aliyuncs.com/status/%E6%BE%B6%E6%9D%91%E5%84%9A/a571ccde02b075656f354b593533b00c.jpeg"),
url43(43,"https://cashier-oss.oss-cn-beijing.aliyuncs.com/status/%E6%BE%B6%E6%9D%91%E5%84%9A/a0be3632c238d1a8e24e51ff8942efc6.jpeg"),
url44(44,"https://cashier-oss.oss-cn-beijing.aliyuncs.com/status/%E6%BE%B6%E6%9D%91%E5%84%9A/9fca88b43ed09ddbeb4803ceab4f356f.jpeg"),
url45(45,"https://cashier-oss.oss-cn-beijing.aliyuncs.com/status/%E6%BE%B6%E6%9D%91%E5%84%9A/86ad712e29369b9f56ca93a94f7a5d67.jpeg"),
url46(46,"https://cashier-oss.oss-cn-beijing.aliyuncs.com/status/%E6%BE%B6%E6%9D%91%E5%84%9A/88d4ca4146196992b48a52f62a690bf0.jpeg"),
;
private Integer key;
private String url;
public Integer getKey() {
return key;
}
public String getUrl() {
return url;
}
LogoEnum(Integer key, String url) {
this.key = key;
this.url = url;
}
public static String getValueByKey(Integer key) {
if(key == null){
return "";
}
LogoEnum[] urlEnums = values();
for (LogoEnum logo : urlEnums) {
if (logo.key.equals(key)) {
return logo.getUrl();
}
}
return "";
}
}

View File

@ -1,14 +0,0 @@
package com.czg.service.account.mapper;
import com.czg.product.entity.Product;
import com.mybatisflex.core.BaseMapper;
/**
* 商品 映射层
*
* @author zs
* @since 2025-02-20
*/
public interface ProductMapper extends BaseMapper<Product> {
}

View File

@ -0,0 +1,14 @@
package com.czg.service.product.mapper;
import com.mybatisflex.core.BaseMapper;
import com.czg.account.entity.PlatformDict;
/**
* 平台配置 映射层
*
* @author zs
* @since 2025-02-28
*/
public interface PlatformDictMapper extends BaseMapper<PlatformDict> {
}

View File

@ -0,0 +1,14 @@
package com.czg.service.product.mapper;
import com.mybatisflex.core.BaseMapper;
import com.czg.account.entity.PlatformDictType;
/**
* 平台配置类型 映射层
*
* @author zs
* @since 2025-02-28
*/
public interface PlatformDictTypeMapper extends BaseMapper<PlatformDictType> {
}

View File

@ -32,4 +32,7 @@ public interface ProductMapper extends BaseMapper<Product> {
List<ShopProductVo> selectGroupProductList(@Param("shopId") Long shopId);
ShopProductInfoVo selectOneProductInfo(@Param("id") Long id, @Param("shopId") Long shopId);
}
List<Product> selectCouponProBySaleNum();
}

View File

@ -0,0 +1,14 @@
package com.czg.service.product.mapper;
import com.mybatisflex.core.BaseMapper;
import com.czg.account.entity.SysDict;
/**
* 数据字典 映射层
*
* @author zs
* @since 2025-02-28
*/
public interface SysDictMapper extends BaseMapper<SysDict> {
}

View File

@ -0,0 +1,120 @@
package com.czg.service.product.service.impl;
import cn.hutool.core.util.RandomUtil;
import cn.hutool.core.util.StrUtil;
import com.czg.account.entity.PlatformDict;
import com.czg.account.entity.ShopInfo;
import com.czg.account.entity.SysDict;
import com.czg.product.service.HomePageService;
import com.czg.product.service.PlatformDictService;
import com.czg.product.service.SysDictService;
import com.czg.account.vo.home.BannerInfoVo;
import com.czg.account.vo.home.HomePageVO;
import com.czg.account.vo.home.HotRankingVO;
import com.czg.enums.LogoEnum;
import com.czg.product.entity.Product;
import com.czg.product.service.ProdSkuService;
import com.czg.product.service.ProductService;
import com.czg.service.product.mapper.ProductMapper;
import com.czg.utils.JoinQueryWrapper;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.mybatisflex.core.query.QueryWrapper;
import jakarta.annotation.Resource;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
/**
* @author Administrator
*/
@Service
public class HomePageServiceImpl implements HomePageService {
private static final Character[] CHINESE_CHARS_ARRAY = {
'你', '我', '他', '她', '它', '们', '这', '里', '那', '里', '多', '少', '是', '否',
'好', '坏', '快', '慢', '上', '下', '左', '右', '前', '后', '高', '低', '大', '小',
'长', '短', '方', '圆', '胖', '瘦', '黑', '白', '红', '绿', '蓝', '黄', '紫', '粉',
'红', '桔', '红', '橙', '黄', '棕', '灰', '褐'
};
@Resource
private PlatformDictService platformDictService;
@Resource
private SysDictService sysDictService;
@Resource
private ProductService productService;
@Resource
private ProductMapper productMapper;
@Resource
private ProdSkuService prodSkuService;
/**
* 小条幅随机数据
* @return
*/
private List<BannerInfoVo> bannerVoRandom(){
List<BannerInfoVo> bannerInfoList = new ArrayList<>();
for (int i = 0; i < 10; i++) {
String nickName = RandomUtil.randomEle(CHINESE_CHARS_ARRAY) + "***";
BannerInfoVo bannerInfoVo = new BannerInfoVo();
bannerInfoVo.setName(nickName);
bannerInfoVo.setLogo(LogoEnum.getValueByKey(RandomUtil.randomInt()));
// 生成 0 1000 之间的随机金额保留两位小数
double amount = RandomUtil.randomDouble(0, 1000);
// 格式化为两位小数
bannerInfoVo.setMoney(String.format("%.2f", amount));
bannerInfoList.add(bannerInfoVo);
}
return bannerInfoList;
}
@Override
public HomePageVO getHomeInfo() {
HomePageVO homeUpVO = new HomePageVO();
//轮播图
List<PlatformDict> platformDictList = platformDictService.list(new QueryWrapper().in(PlatformDict::getType, "carousel", "homeDistrict"));;
Map<String, List<PlatformDict>> groupedByType = platformDictList.stream()
.collect(Collectors.groupingBy(PlatformDict::getType));
//轮播图
homeUpVO.setBannerList(groupedByType.get("carousel"));
//金刚区
homeUpVO.setDistrict(groupedByType.get("homeDistrict"));
//小条幅
homeUpVO.setFreeBannerList(bannerVoRandom());
// 销量榜
List<Product> productList = productMapper.selectCouponProBySaleNum();
HotRankingVO hotRankingVO = new HotRankingVO();
hotRankingVO.setHotList(productList);
homeUpVO.setHotRanking(hotRankingVO);
List<SysDict> sysDictList = sysDictService.list(new QueryWrapper().eq(SysDict::getType, "home").eq(SysDict::getStatus, 1));
for (SysDict sysDict : sysDictList) {
if (sysDict.getIsChild().equals(1)) {
sysDict.setDetail(sysDictService.list(new QueryWrapper().eq(SysDict::getReleId, sysDict.getId()).eq(SysDict::getStatus, 1)));
}
sysDict.setIsChild((sysDict.getIsChild() == null || sysDict.getIsChild().equals(0)) ? 0 : 1);
}
homeUpVO.setMenuList(sysDictList);
return homeUpVO;
}
@Override
public Object getProd(String lng, String lat, String address, Integer classify, Integer orderType, Integer distanceType) {
QueryWrapper queryWrapper = new QueryWrapper();
if (StrUtil.isNotBlank(address)) {
queryWrapper.and(JoinQueryWrapper.column(ShopInfo::getCities).like(address).or(JoinQueryWrapper.column(ShopInfo::getDistricts).like(address)));
}
if (classify != null) {
queryWrapper.eq(Product::getCategoryId, classify);
}
return null;
}
}

View File

@ -0,0 +1,18 @@
package com.czg.service.product.service.impl;
import com.czg.service.product.mapper.PlatformDictMapper;
import com.mybatisflex.spring.service.impl.ServiceImpl;
import com.czg.account.entity.PlatformDict;
import com.czg.product.service.PlatformDictService;
import org.springframework.stereotype.Service;
/**
* 平台配置 服务层实现
*
* @author zs
* @since 2025-02-28
*/
@Service
public class PlatformDictServiceImpl extends ServiceImpl<PlatformDictMapper, PlatformDict> implements PlatformDictService{
}

View File

@ -0,0 +1,18 @@
package com.czg.service.product.service.impl;
import com.czg.service.product.mapper.PlatformDictTypeMapper;
import com.mybatisflex.spring.service.impl.ServiceImpl;
import com.czg.account.entity.PlatformDictType;
import com.czg.product.service.PlatformDictTypeService;
import org.springframework.stereotype.Service;
/**
* 平台配置类型 服务层实现
*
* @author zs
* @since 2025-02-28
*/
@Service
public class PlatformDictTypeServiceImpl extends ServiceImpl<PlatformDictTypeMapper, PlatformDictType> implements PlatformDictTypeService{
}

View File

@ -0,0 +1,18 @@
package com.czg.service.product.service.impl;
import com.czg.service.product.mapper.SysDictMapper;
import com.mybatisflex.spring.service.impl.ServiceImpl;
import com.czg.account.entity.SysDict;
import com.czg.product.service.SysDictService;
import org.springframework.stereotype.Service;
/**
* 数据字典 服务层实现
*
* @author zs
* @since 2025-02-28
*/
@Service
public class SysDictServiceImpl extends ServiceImpl<SysDictMapper, SysDict> implements SysDictService{
}

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.czg.service.product.mapper.PlatformDictMapper">
</mapper>

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.czg.service.product.mapper.PlatformDictTypeMapper">
</mapper>

View File

@ -150,4 +150,13 @@
and t1.id = #{id}
</where>
</select>
</mapper>
<select id="selectCouponProBySaleNum" resultType="com.czg.product.entity.Product">
SELECT a.*
FROM tb_product AS a
LEFT JOIN tb_prod_sku AS b ON a.id = b.product_id
WHERE a.type = 'coupon'
ORDER BY b.real_sales_number
LIMIT 2
</select>
</mapper>

View File

@ -2,6 +2,6 @@
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.czg.service.account.mapper.ProductMapper">
<mapper namespace="com.czg.service.product.mapper.SysDictMapper">
</mapper>