Forráskód Böngészése

商品,新闻资讯,推送

xiaoshushu 4 éve
szülő
commit
537d7d2ada
25 módosított fájl, 1015 hozzáadás és 1 törlés
  1. 15 0
      ruoyi-admin/pom.xml
  2. 115 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TbNewsController.java
  3. 95 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/shop/TbGoodsController.java
  4. 94 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/shop/TbGoodsTypeController.java
  5. 87 0
      ruoyi-admin/src/main/java/com/ruoyi/web/util/PushUtil.java
  6. 1 1
      ruoyi-admin/src/main/resources/application.yml
  7. 56 0
      ruoyi-app/src/main/java/com/ruoyi/app/controller/TbNewsController.java
  8. 65 0
      ruoyi-app/src/main/java/com/ruoyi/app/controller/shop/TbGoodsController.java
  9. 1 0
      ruoyi-common/src/main/java/com/ruoyi/common/core/controller/BaseController.java
  10. 13 0
      ruoyi-common/src/main/java/com/ruoyi/common/core/page/TableDataInfo.java
  11. 83 0
      ruoyi-system/src/main/java/com/ruoyi/app/domain/TbNews.java
  12. 16 0
      ruoyi-system/src/main/java/com/ruoyi/app/mapper/TbNewsMapper.java
  13. 16 0
      ruoyi-system/src/main/java/com/ruoyi/app/service/ITbNewsService.java
  14. 27 0
      ruoyi-system/src/main/java/com/ruoyi/app/service/impl/TbNewsServiceImpl.java
  15. 76 0
      ruoyi-system/src/main/java/com/ruoyi/app/shop/goods/domain/TbGoods.java
  16. 16 0
      ruoyi-system/src/main/java/com/ruoyi/app/shop/goods/mapper/TbGoodsMapper.java
  17. 16 0
      ruoyi-system/src/main/java/com/ruoyi/app/shop/goods/service/ITbGoodsService.java
  18. 29 0
      ruoyi-system/src/main/java/com/ruoyi/app/shop/goods/service/impl/TbGoodsServiceImpl.java
  19. 50 0
      ruoyi-system/src/main/java/com/ruoyi/app/shop/type/domain/TbGoodsType.java
  20. 14 0
      ruoyi-system/src/main/java/com/ruoyi/app/shop/type/mapper/TbGoodsTypeMapper.java
  21. 20 0
      ruoyi-system/src/main/java/com/ruoyi/app/shop/type/service/ITbGoodsTypeService.java
  22. 24 0
      ruoyi-system/src/main/java/com/ruoyi/app/shop/type/service/impl/TbGoodsTypeServiceImpl.java
  23. 28 0
      ruoyi-system/src/main/resources/mapper/app/TbNewsMapper.xml
  24. 39 0
      ruoyi-system/src/main/resources/mapper/app/shop/TbGoodsMapper.xml
  25. 19 0
      ruoyi-system/src/main/resources/mapper/app/shop/TbGoodsTypeMapper.xml

+ 15 - 0
ruoyi-admin/pom.xml

@@ -15,6 +15,14 @@
         web服务入口
     </description>
 
+    <!--消息推送(个推)的私服仓库 没有私服仓库下载不了包-->
+    <repositories>
+        <repository>
+            <id>getui-nexus</id>
+            <url>http://mvn.gt.getui.com/nexus/content/repositories/releases/</url>
+        </repository>
+    </repositories>
+
     <dependencies>
 
         <!-- spring-boot-devtools -->
@@ -48,6 +56,13 @@
             <artifactId>ruoyi-generator</artifactId>
         </dependency>
 
+        <!--消息推送(个推)-->
+        <dependency>
+            <groupId>com.gexin.platform</groupId>
+            <artifactId>gexin-rp-sdk-http</artifactId>
+            <version>4.1.1.4</version>
+        </dependency>
+
     </dependencies>
 
     <build>

+ 115 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TbNewsController.java

@@ -0,0 +1,115 @@
+package com.ruoyi.web.controller.api;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Arrays;
+
+import com.ruoyi.app.domain.TbNews;
+import com.ruoyi.app.service.ITbNewsService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import com.ruoyi.common.utils.StringUtils;
+import lombok.RequiredArgsConstructor;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * 资讯
+ *
+ * @author lsw
+ * @date 2020-10-12
+ */
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/system/news")
+public class TbNewsController extends BaseController {
+
+    private final ITbNewsService iTbNewsService;
+
+    /**
+     * 查询资讯列表
+     */
+    @PreAuthorize("@ss.hasPermi('system:news:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(TbNews tbNews) {
+        startPage();
+        LambdaQueryWrapper<TbNews> lqw = new LambdaQueryWrapper<TbNews>();
+        if (StringUtils.isNotBlank(tbNews.getTitle())) {
+            lqw.like(TbNews::getTitle, tbNews.getTitle());
+        }
+        if (tbNews.getState() != null) {
+            lqw.eq(TbNews::getState, tbNews.getState());
+        }
+        List<TbNews> list = iTbNewsService.list(lqw);
+        return getDataTable(list);
+    }
+
+    /**
+     * 获取资讯详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('system:news:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id) {
+        return AjaxResult.success(iTbNewsService.getById(id));
+    }
+
+    /**
+     * 新增资讯
+     */
+    @PreAuthorize("@ss.hasPermi('system:news:add')")
+    @Log(title = "资讯", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody TbNews tbNews) {
+        tbNews.setCreateTime(new Date());
+        tbNews.setDescs(StripHT(tbNews.getContents()));
+        for (int i=0;i<20;i++){
+            iTbNewsService.save(tbNews);
+        }
+        return toAjax(1);
+    }
+
+    /**
+     * 修改资讯
+     */
+    @PreAuthorize("@ss.hasPermi('system:news:edit')")
+    @Log(title = "资讯", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody TbNews tbNews) {
+        tbNews.setDescs(StripHT(tbNews.getContents()));
+        tbNews.setUpdateTime(new Date());
+        return toAjax(iTbNewsService.updateById(tbNews) ? 1 : 0);
+    }
+
+    /**
+     * 删除资讯
+     */
+    @PreAuthorize("@ss.hasPermi('system:news:remove')")
+    @Log(title = "资讯", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids) {
+        return toAjax(iTbNewsService.removeByIds(Arrays.asList(ids)) ? 1 : 0);
+    }
+
+    //从html中提取纯文本
+    private String StripHT(String strHtml) {
+        String txtcontent = strHtml.replaceAll("</?[^>]+>", ""); //剔出<html>的标签
+        txtcontent = txtcontent.replaceAll("<a>\\s*|\t|\r|\n</a>", "");//去除字符串中的空格,回车,换行符,制表符
+        return txtcontent.substring(0, txtcontent.length() > 80 ? 80 : txtcontent.length());
+    }
+}

+ 95 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/shop/TbGoodsController.java

@@ -0,0 +1,95 @@
+package com.ruoyi.web.controller.api.shop;
+
+import com.ruoyi.app.shop.goods.domain.TbGoods;
+import com.ruoyi.app.shop.goods.service.ITbGoodsService;
+import com.ruoyi.app.shop.type.domain.TbGoodsType;
+import com.ruoyi.app.shop.type.service.ITbGoodsTypeService;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Arrays;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 商品
+ *
+ * @author lishuwen
+ * @date 2020-10-02
+ */
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/system/shop/goods")
+public class TbGoodsController extends BaseController {
+
+    private final ITbGoodsService iTbGoodsService;
+
+    private final ITbGoodsTypeService typeService;
+
+    /**
+     * 查询商品列表
+     */
+    @PreAuthorize("@ss.hasPermi('system:goods:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(TbGoods tbGoods) {
+        startPage();
+        List<TbGoods> list = iTbGoodsService.selectTbGoodsList(tbGoods);
+        return getDataTable(list);
+    }
+
+    /**
+     * 商品分类
+     */
+    @GetMapping("/typeList")
+    public AjaxResult typeList() {
+        List<TbGoodsType> list = typeService.typeList();
+        return AjaxResult.success(list);
+    }
+
+    /**
+     * 获取商品详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('system:goods:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id) {
+        return AjaxResult.success(iTbGoodsService.getById(id));
+    }
+
+    /**
+     * 新增商品
+     */
+    @PreAuthorize("@ss.hasPermi('system:goods:add')")
+    @Log(title = "商品", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody TbGoods tbGoods) {
+        tbGoods.setCreateTime(new Date());
+        return toAjax(iTbGoodsService.save(tbGoods) ? 1 : 0);
+    }
+
+    /**
+     * 修改商品
+     */
+    @PreAuthorize("@ss.hasPermi('system:goods:edit')")
+    @Log(title = "商品", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody TbGoods tbGoods) {
+        return toAjax(iTbGoodsService.updateById(tbGoods) ? 1 : 0);
+    }
+
+    /**
+     * 删除商品
+     */
+    @PreAuthorize("@ss.hasPermi('system:goods:remove')")
+    @Log(title = "商品", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids) {
+        return toAjax(iTbGoodsService.removeByIds(Arrays.asList(ids)) ? 1 : 0);
+    }
+}

+ 94 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/shop/TbGoodsTypeController.java

@@ -0,0 +1,94 @@
+package com.ruoyi.web.controller.api.shop;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.ruoyi.app.shop.type.domain.TbGoodsType;
+import com.ruoyi.app.shop.type.service.ITbGoodsTypeService;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Arrays;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 商品类型
+ *
+ * @author lishuwen
+ * @date 2020-10-02
+ */
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/system/shop/type")
+public class TbGoodsTypeController extends BaseController {
+
+    private final ITbGoodsTypeService iTbGoodsTypeService;
+
+    /**
+     * 查询商品类型列表
+     */
+    @PreAuthorize("@ss.hasPermi('system/shop:type:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(TbGoodsType tbGoodsType) {
+        startPage();
+        LambdaQueryWrapper<TbGoodsType> lqw = new LambdaQueryWrapper<TbGoodsType>();
+        if (StringUtils.isNotBlank(tbGoodsType.getName())) {
+            lqw.like(TbGoodsType::getName, tbGoodsType.getName());
+        }
+        if (StringUtils.isNotBlank(tbGoodsType.getEndTime())) {
+            lqw.between(TbGoodsType::getCreateTime, tbGoodsType.getBeginTime(), tbGoodsType.getEndTime());
+        }
+        List<TbGoodsType> list = iTbGoodsTypeService.list(lqw);
+        return getDataTable(list);
+    }
+
+    /**
+     * 获取商品类型详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('system/shop:type:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id) {
+        return AjaxResult.success(iTbGoodsTypeService.getById(id));
+    }
+
+    /**
+     * 新增商品类型
+     */
+    @PreAuthorize("@ss.hasPermi('system/shop:type:add')")
+    @Log(title = "商品类型", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody TbGoodsType tbGoodsType) {
+        tbGoodsType.setCreateTime(new Date());
+        return toAjax(iTbGoodsTypeService.save(tbGoodsType) ? 1 : 0);
+    }
+
+    /**
+     * 修改商品类型
+     */
+    @PreAuthorize("@ss.hasPermi('system/shop:type:edit')")
+    @Log(title = "商品类型", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody TbGoodsType tbGoodsType) {
+        return toAjax(iTbGoodsTypeService.updateById(tbGoodsType) ? 1 : 0);
+    }
+
+    /**
+     * 删除商品类型
+     */
+    @PreAuthorize("@ss.hasPermi('system/shop:type:remove')")
+    @Log(title = "商品类型", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids) {
+        return toAjax(iTbGoodsTypeService.removeByIds(Arrays.asList(ids)) ? 1 : 0);
+    }
+}

+ 87 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/util/PushUtil.java

@@ -0,0 +1,87 @@
+package com.ruoyi.web.util;
+
+import com.gexin.rp.sdk.base.IPushResult;
+import com.gexin.rp.sdk.base.impl.SingleMessage;
+import com.gexin.rp.sdk.base.impl.Target;
+import com.gexin.rp.sdk.exceptions.RequestException;
+import com.gexin.rp.sdk.http.IGtPush;
+import com.gexin.rp.sdk.template.NotificationTemplate;
+import com.gexin.rp.sdk.template.style.Style0;
+
+/**
+ * 消息推送
+ */
+public class PushUtil {
+    private final static String appId = "rlkT6LWklcAc9seQ0Mgmd4";
+    private final static String appKey = "R1DY7xeIYX5Q7SlUUroqk5";
+    private final static String masterSecret = "g734fGD00z8p4jntlq4h5";
+    private final static String host = "http://sdk.open.api.igexin.com/apiex.htm";
+
+
+    /**
+     * @param title     消息标题 例如家族消息
+     * @param text      消息内容 例如余震申请加入陕西凤翔余姓家族
+     * @param client_id 设备标识
+     * @return true|false
+     */
+    public static boolean sendMessage(String title, String text, String client_id) {
+        // 设置后,根据别名推送,会返回每个cid的推送结果
+        IGtPush push = new IGtPush(host, appKey, masterSecret);
+        NotificationTemplate template = getNotificationTemplate(title, text);
+        SingleMessage message = new SingleMessage();
+        message.setOffline(true);
+        // 离线有效时间,单位为毫秒
+        message.setOfflineExpireTime(24 * 3600 * 1000);
+        message.setData(template);
+        // 可选,1为wifi,0为不限制网络环境。根据手机处于的网络情况,决定是否下发
+        message.setPushNetWorkType(0);
+        // 厂商通道下发策略
+        message.setStrategyJson("{\"default\":4,\"ios\":4,\"st\":4}");
+        Target target = new Target();
+        target.setAppId(appId);
+        target.setClientId(client_id);
+        IPushResult ret;
+        try {
+            ret = push.pushMessageToSingle(message, target);
+        } catch (RequestException e) {
+            e.printStackTrace();
+            ret = push.pushMessageToSingle(message, target, e.getRequestId());
+        }
+        if (ret.getResponse().get("result").toString().equals("ok")) {
+            return true;
+        }
+        System.out.println("消息推送:" + ret.getResponse().toString());
+        return false;
+
+    }
+
+    public static void main(String[] args) {
+        boolean s = sendMessage("家族通知", "余震申请加入", "cd3cf4bdf4b535d968455b2441aef0ec");
+        System.out.println("ssss:" + s);
+    }
+
+    private static NotificationTemplate getNotificationTemplate(String title, String text) {
+        NotificationTemplate template = new NotificationTemplate();
+        //设置APPID与APPKEY
+        template.setAppId(appId);
+        template.setAppkey(appKey);
+
+        Style0 style = new Style0();
+        // 设置通知栏标题与内容
+        style.setTitle(title);
+        style.setText(text);
+        // 设置通知是否响铃,震动,或者可清除
+        style.setRing(true);
+        style.setVibrate(true);
+        style.setClearable(true);
+        style.setChannel("通知渠道id");
+        style.setChannelName("通知渠道名称");
+        style.setChannelLevel(3); //设置通知渠道重要性
+        template.setStyle(style);
+
+        template.setTransmissionType(1);  // 透传消息接受方式设置,1:立即启动APP,2:客户端收到消息后需要自行处理
+        template.setTransmissionContent("请输入您要透传的内容");
+
+        return template;
+    }
+}

+ 1 - 1
ruoyi-admin/src/main/resources/application.yml

@@ -122,6 +122,6 @@ xss:
   # 过滤开关
   enabled: true
   # 排除链接(多个用逗号分隔)
-  excludes: /system/notice/*,/system/templatePage/*,/system/personalPage/*
+  excludes: /system/notice/*,/system/templatePage/*,/system/personalPage/*,/system/news/*,/system/shop/goods/*
   # 匹配链接
   urlPatterns: /system/*,/monitor/*,/tool/*

+ 56 - 0
ruoyi-app/src/main/java/com/ruoyi/app/controller/TbNewsController.java

@@ -0,0 +1,56 @@
+package com.ruoyi.app.controller;
+
+import com.ruoyi.app.annotation.PassToken;
+import com.ruoyi.app.domain.TbNews;
+import com.ruoyi.app.service.ITbNewsService;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.TableDataInfo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * 资讯
+ *
+ * @author lsw
+ * @date 2020-10-12
+ */
+@Api(value = "新闻资讯", tags = "新闻资讯")
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/app/news")
+public class TbNewsController extends BaseController {
+
+    private final ITbNewsService iTbNewsService;
+
+    @PassToken
+    @ApiOperation(value = "资讯列表", notes = "资讯列表")
+    @GetMapping("/list")
+    public TableDataInfo list() {
+        startPage();
+        List<TbNews> list = iTbNewsService.selectTbNewsList();
+        return getDataTable(list);
+    }
+
+    @PassToken
+    @ApiOperation(value = "资讯详情", notes = "资讯详情")
+    @GetMapping(value = "/{id}")
+    public AjaxResult detail(@PathVariable("id") Long id) {
+        TbNews news = iTbNewsService.getById(id);
+        if (news != null && news.getState() == 0) {
+            //每次浏览都新增一个浏览记录,性能不是很好
+            news.setViews(news.getViews() + 1);
+            iTbNewsService.updateById(news);
+            return AjaxResult.success(news);
+        }
+        return AjaxResult.error("文章不存在或已删除");
+    }
+}

+ 65 - 0
ruoyi-app/src/main/java/com/ruoyi/app/controller/shop/TbGoodsController.java

@@ -0,0 +1,65 @@
+package com.ruoyi.app.controller.shop;
+
+import com.ruoyi.app.annotation.PassToken;
+import com.ruoyi.app.shop.goods.domain.TbGoods;
+import com.ruoyi.app.shop.goods.service.ITbGoodsService;
+import com.ruoyi.app.shop.type.domain.TbGoodsType;
+import com.ruoyi.app.shop.type.service.ITbGoodsTypeService;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.TableDataInfo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * 商品
+ *
+ * @author lishuwen
+ * @date 2020-10-02
+ */
+@Api(value = "商品", tags = "商品")
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/app/shop/goods")
+public class TbGoodsController extends BaseController {
+
+    private final ITbGoodsService iTbGoodsService;
+
+    private final ITbGoodsTypeService typeService;
+
+    @PassToken
+    @ApiOperation(value = "商品列表", notes = "商品列表")
+    @GetMapping("/list")
+    public TableDataInfo list(TbGoods tbGoods) {
+        startPage();
+        List<TbGoods> list = iTbGoodsService.selectTbGoodsList(tbGoods);
+        return getDataTable(list);
+    }
+
+    @PassToken
+    @ApiOperation(value = "商品分类", notes = "商品分类")
+    @GetMapping("/typeList")
+    public AjaxResult typeList() {
+        List<TbGoodsType> list = typeService.typeList();
+        return AjaxResult.success(list);
+    }
+
+    @PassToken
+    @ApiOperation(value = "商品详细信息", notes = "商品详细信息")
+    @GetMapping(value = "/{id}")
+    public AjaxResult detail(@PathVariable("id") Long id) {
+        TbGoods goods = iTbGoodsService.getById(id);
+        if (goods != null && goods.getState() == 0) {
+            return AjaxResult.success(goods);
+        }
+        return AjaxResult.error("商品不存在或已删除");
+    }
+}

+ 1 - 0
ruoyi-common/src/main/java/com/ruoyi/common/core/controller/BaseController.java

@@ -70,6 +70,7 @@ public class BaseController
         rspData.setMsg("查询成功");
         rspData.setRows(list);
         rspData.setTotal(new PageInfo(list).getTotal());
+        rspData.setPages(new PageInfo(list).getPages());
         return rspData;
     }
 

+ 13 - 0
ruoyi-common/src/main/java/com/ruoyi/common/core/page/TableDataInfo.java

@@ -15,6 +15,11 @@ public class TableDataInfo implements Serializable
     /** 总记录数 */
     private long total;
 
+    /**
+     * 分页数 app分页用
+     */
+    private long pages;
+
     /** 列表数据 */
     private List<?> rows;
 
@@ -82,4 +87,12 @@ public class TableDataInfo implements Serializable
     {
         this.msg = msg;
     }
+
+    public long getPages() {
+        return pages;
+    }
+
+    public void setPages(long pages) {
+        this.pages = pages;
+    }
 }

+ 83 - 0
ruoyi-system/src/main/java/com/ruoyi/app/domain/TbNews.java

@@ -0,0 +1,83 @@
+package com.ruoyi.app.domain;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import lombok.ToString;
+import lombok.experimental.Accessors;
+
+/**
+ * 资讯
+ *
+ * @author lsw
+ * @date 2020-10-12
+ */
+@Data
+@ApiModel(value = "资讯")
+@ToString
+@EqualsAndHashCode
+@NoArgsConstructor
+@Accessors(chain = true)
+@TableName("tb_news")
+
+
+public class TbNews extends BaseEntity {
+
+    private static final long serialVersionUID = 1L;
+
+
+    /**
+     * id
+     */
+    @ApiModelProperty(value = "id")
+    @TableId(value = "id")
+    private Long id;
+
+    /**
+     * 资讯标题
+     */
+    @ApiModelProperty(value = "资讯标题")
+    @Excel(name = "资讯标题")
+    private String title;
+
+    /**
+     * 封面图
+     */
+    @ApiModelProperty(value = "封面图")
+    @Excel(name = "封面图")
+    private String pic;
+
+    /**
+     * 资讯内容
+     */
+    @ApiModelProperty(value = "资讯内容")
+    @Excel(name = "资讯内容")
+    private String contents;
+
+    /**
+     * 内容摘要
+     */
+    @ApiModelProperty(value = "内容摘要(截取富文本前100个字)")
+    @Excel(name = "内容摘要(截取富文本前100个字)")
+    private String descs;
+
+    /**
+     * 阅读量
+     */
+    @ApiModelProperty(value = "阅读量")
+    @Excel(name = "阅读量")
+    private Long views;
+
+    /**
+     * 状态 ( 0启用,1停用)
+     */
+    @ApiModelProperty(value = "状态 ( 0启用,1停用)")
+    @Excel(name = "状态 ", readConverterExp = "0=启用,1停用")
+    private Integer state;
+}

+ 16 - 0
ruoyi-system/src/main/java/com/ruoyi/app/mapper/TbNewsMapper.java

@@ -0,0 +1,16 @@
+package com.ruoyi.app.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.app.domain.TbNews;
+
+import java.util.List;
+
+/**
+ * 资讯
+ *
+ * @author lsw
+ * @date 2020-10-12
+ */
+public interface TbNewsMapper extends BaseMapper<TbNews> {
+    List<TbNews> selectTbNewsList();
+}

+ 16 - 0
ruoyi-system/src/main/java/com/ruoyi/app/service/ITbNewsService.java

@@ -0,0 +1,16 @@
+package com.ruoyi.app.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.app.domain.TbNews;
+
+import java.util.List;
+
+/**
+ * 资讯
+ *
+ * @author lsw
+ * @date 2020-10-12
+ */
+public interface ITbNewsService extends IService<TbNews> {
+    List<TbNews> selectTbNewsList();
+}

+ 27 - 0
ruoyi-system/src/main/java/com/ruoyi/app/service/impl/TbNewsServiceImpl.java

@@ -0,0 +1,27 @@
+package com.ruoyi.app.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.app.domain.TbNews;
+import com.ruoyi.app.mapper.TbNewsMapper;
+import com.ruoyi.app.service.ITbNewsService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * 资讯
+ *
+ * @author lsw
+ * @date 2020-10-12
+ */
+@Service
+public class TbNewsServiceImpl extends ServiceImpl<TbNewsMapper, TbNews> implements ITbNewsService {
+    @Autowired
+    TbNewsMapper mapper;
+
+    @Override
+    public List<TbNews> selectTbNewsList() {
+        return mapper.selectTbNewsList();
+    }
+}

+ 76 - 0
ruoyi-system/src/main/java/com/ruoyi/app/shop/goods/domain/TbGoods.java

@@ -0,0 +1,76 @@
+package com.ruoyi.app.shop.goods.domain;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.ruoyi.app.shop.type.domain.TbGoodsType;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import lombok.ToString;
+import lombok.experimental.Accessors;
+import com.ruoyi.common.annotation.Excel;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.math.BigDecimal;
+
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 商品
+ *
+ * @author lishuwen
+ * @date 2020-10-02
+ */
+@Data
+@ApiModel(value = "商品")
+@ToString
+@EqualsAndHashCode
+@NoArgsConstructor
+@Accessors(chain = true)
+@TableName("tb_goods")
+public class TbGoods extends BaseEntity implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "ID", hidden = true)
+    @TableId(value = "id")
+    private Long id;
+
+    @ApiModelProperty(value = "商品类型ID")
+    private Long typeId;
+
+    @ApiModelProperty(value = "商品标题")
+    @Excel(name = "商品标题")
+    private String title;
+
+    @ApiModelProperty(value = "商品价格", hidden = true)
+    @Excel(name = "商品价格")
+    private BigDecimal price;
+
+   @ApiModelProperty(value = "图片", hidden = true)
+    @Excel(name = "图片")
+    private String pic;
+
+    @ApiModelProperty(value = "销量", hidden = true)
+    @Excel(name = "销量")
+    private Long sells;
+
+    @ApiModelProperty(value = "详情", hidden = true)
+    private String details;
+
+    @ApiModelProperty(value = "状态 ( 0 上架,1 下架)", hidden = true)
+    @Excel(name = "状态 ( 0 上架,1 下架)")
+    private Integer state;
+
+    @ApiModelProperty(hidden = true)
+    @TableField(exist = false)
+    private TbGoodsType tbGoodsType;
+
+}

+ 16 - 0
ruoyi-system/src/main/java/com/ruoyi/app/shop/goods/mapper/TbGoodsMapper.java

@@ -0,0 +1,16 @@
+package com.ruoyi.app.shop.goods.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.app.shop.goods.domain.TbGoods;
+
+import java.util.List;
+
+/**
+ * 商品
+ *
+ * @author lishuwen
+ * @date 2020-10-02
+ */
+public interface TbGoodsMapper extends BaseMapper<TbGoods> {
+    List<TbGoods> selectTbGoodsList(TbGoods tbGoods);
+}

+ 16 - 0
ruoyi-system/src/main/java/com/ruoyi/app/shop/goods/service/ITbGoodsService.java

@@ -0,0 +1,16 @@
+package com.ruoyi.app.shop.goods.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.app.shop.goods.domain.TbGoods;
+
+import java.util.List;
+
+/**
+ * 商品
+ *
+ * @author lishuwen
+ * @date 2020-10-02
+ */
+public interface ITbGoodsService extends IService<TbGoods> {
+    List<TbGoods> selectTbGoodsList(TbGoods tbGoods);
+}

+ 29 - 0
ruoyi-system/src/main/java/com/ruoyi/app/shop/goods/service/impl/TbGoodsServiceImpl.java

@@ -0,0 +1,29 @@
+package com.ruoyi.app.shop.goods.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.app.shop.goods.domain.TbGoods;
+import com.ruoyi.app.shop.goods.mapper.TbGoodsMapper;
+import com.ruoyi.app.shop.goods.service.ITbGoodsService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * 商品
+ *
+ * @author lishuwen
+ * @date 2020-10-02
+ */
+@Service
+public class TbGoodsServiceImpl extends ServiceImpl<TbGoodsMapper, TbGoods> implements ITbGoodsService {
+
+    @Autowired
+    TbGoodsMapper mapper;
+
+    @Override
+    public List<TbGoods> selectTbGoodsList(TbGoods tbGoods) {
+        return mapper.selectTbGoodsList(tbGoods);
+    }
+}

+ 50 - 0
ruoyi-system/src/main/java/com/ruoyi/app/shop/type/domain/TbGoodsType.java

@@ -0,0 +1,50 @@
+package com.ruoyi.app.shop.type.domain;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import lombok.ToString;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+
+/**
+ * 商品类型
+ *
+ * @author lishuwen
+ * @date 2020-10-02
+ */
+@Data
+@ApiModel(value = "商品类型")
+@ToString
+@EqualsAndHashCode
+@NoArgsConstructor
+@Accessors(chain = true)
+@TableName("tb_goods_type")
+public class TbGoodsType extends BaseEntity implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+
+    @ApiModelProperty(value = "id")
+    @TableId(value = "id")
+    private Long id;
+
+    /**
+     * 类型名称
+     */
+    @ApiModelProperty(value = "类型名称")
+    @Excel(name = "类型名称")
+    private String name;
+
+    @ApiModelProperty(value = "状态 ( 0启用,1停用)")
+    @Excel(name = "状态 ( 0启用,1停用)")
+    private Integer state;
+
+}

+ 14 - 0
ruoyi-system/src/main/java/com/ruoyi/app/shop/type/mapper/TbGoodsTypeMapper.java

@@ -0,0 +1,14 @@
+package com.ruoyi.app.shop.type.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.app.shop.type.domain.TbGoodsType;
+
+/**
+ * 商品类型
+ *
+ * @author lishuwen
+ * @date 2020-10-02
+ */
+public interface TbGoodsTypeMapper extends BaseMapper<TbGoodsType> {
+
+}

+ 20 - 0
ruoyi-system/src/main/java/com/ruoyi/app/shop/type/service/ITbGoodsTypeService.java

@@ -0,0 +1,20 @@
+package com.ruoyi.app.shop.type.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.app.shop.goods.domain.TbGoods;
+import com.ruoyi.app.shop.type.domain.TbGoodsType;
+
+import java.util.List;
+
+/**
+ * 商品类型
+ *
+ * @author lishuwen
+ * @date 2020-10-02
+ */
+public interface ITbGoodsTypeService extends IService<TbGoodsType> {
+
+    public List<TbGoodsType> typeList();
+
+}

+ 24 - 0
ruoyi-system/src/main/java/com/ruoyi/app/shop/type/service/impl/TbGoodsTypeServiceImpl.java

@@ -0,0 +1,24 @@
+package com.ruoyi.app.shop.type.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.app.shop.type.domain.TbGoodsType;
+import com.ruoyi.app.shop.type.mapper.TbGoodsTypeMapper;
+import com.ruoyi.app.shop.type.service.ITbGoodsTypeService;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * 商品类型
+ *
+ * @author lishuwen
+ * @date 2020-10-02
+ */
+@Service
+public class TbGoodsTypeServiceImpl extends ServiceImpl<TbGoodsTypeMapper, TbGoodsType> implements ITbGoodsTypeService {
+
+    public List<TbGoodsType> typeList() {
+        return list(new QueryWrapper<TbGoodsType>().eq("state", 0).orderByDesc("id"));
+    }
+}

+ 28 - 0
ruoyi-system/src/main/resources/mapper/app/TbNewsMapper.xml

@@ -0,0 +1,28 @@
+<?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.ruoyi.app.mapper.TbNewsMapper">
+
+    <resultMap type="TbNews" id="TbNewsResult">
+        <result property="id" column="id"/>
+        <result property="title" column="title"/>
+        <result property="pic" column="pic"/>
+        <result property="contents" column="contents"/>
+        <result property="descs" column="descs"/>
+        <result property="views" column="views"/>
+        <result property="state" column="state"/>
+        <result property="createTime" column="create_time"/>
+        <result property="updateTime" column="update_time"/>
+        <result property="createBy" column="create_by"/>
+        <result property="updateBy" column="update_by"/>
+        <result property="remark" column="remark"/>
+    </resultMap>
+
+    <select id="selectTbNewsList" parameterType="TbNews" resultMap="TbNewsResult">
+        SELECT id,title,pic,descs,create_time,views
+        FROM
+        tb_news
+        WHERE state=0
+    </select>
+</mapper>

+ 39 - 0
ruoyi-system/src/main/resources/mapper/app/shop/TbGoodsMapper.xml

@@ -0,0 +1,39 @@
+<?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.ruoyi.app.shop.goods.mapper.TbGoodsMapper">
+
+    <resultMap type="TbGoods" id="TbGoodsResult">
+        <result property="id" column="id"/>
+        <result property="typeId" column="type_id"/>
+        <result property="title" column="title"/>
+        <result property="price" column="price"/>
+        <result property="pic" column="pic"/>
+        <result property="sells" column="sells"/>
+        <result property="details" column="details"/>
+        <result property="state" column="state"/>
+        <result property="createTime" column="create_time"/>
+        <result property="updateTime" column="update_time"/>
+        <result property="createBy" column="create_by"/>
+        <result property="updateBy" column="update_by"/>
+        <result property="remark" column="remark"/>
+        <association property="tbGoodsType" column="type_id" javaType="TbGoodsType" resultMap="TbGoodsTypeResult"></association>
+    </resultMap>
+    <resultMap type="TbGoodsType" id="TbGoodsTypeResult">
+        <result property="id" column="type_id"/>
+        <result property="name" column="name"/>
+    </resultMap>
+    <select id="selectTbGoodsList" parameterType="TbGoods" resultMap="TbGoodsResult">
+        SELECT g.id,g.title,g.pic,g.create_time,g.price,g.state,g.type_id,
+        t.NAME
+        FROM
+        tb_goods g
+        LEFT JOIN tb_goods_type t ON g.type_id = t.id
+        <where>
+            <if test="title != null  and title != ''">and g.title like concat('%', #{title},'%')</if>
+            <if test="typeId != null ">and g.type_id = #{typeId}</if>
+            <if test="beginTime != null and beginTime != '' and endTime != null and endTime != ''"> and g.create_time between #{beginTime} and #{endTime}</if>
+        </where>
+    </select>
+</mapper>

+ 19 - 0
ruoyi-system/src/main/resources/mapper/app/shop/TbGoodsTypeMapper.xml

@@ -0,0 +1,19 @@
+<?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.ruoyi.app.shop.type.mapper.TbGoodsTypeMapper">
+
+    <resultMap type="TbGoodsType" id="TbGoodsTypeResult">
+        <result property="id" column="id"/>
+        <result property="name" column="name"/>
+        <result property="state" column="state"/>
+        <result property="createBy" column="create_by"/>
+        <result property="createTime" column="create_time"/>
+        <result property="updateBy" column="update_by"/>
+        <result property="updateTime" column="update_time"/>
+        <result property="remark" column="remark"/>
+    </resultMap>
+
+
+</mapper>